问题标签 [diffie-hellman]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1601 浏览

java - 在 java 中实现完整的 Diffie-Hellman 密钥交换加密

我有一个使用套接字发送和接收数据的聊天程序。现在,我想使用 Diffie-Hellman 密钥交换系统通过套接字加密数据传输。最简单的方法是什么?

0 投票
0 回答
979 浏览

java - ECDH VS。JAVA中的DH基准测试

这个问题以前发布在crypto.exchange上,但是由于我的问题仍然存在,我认为这可能更多是我可能忽略的编程细节,而不是理论上的东西。

所以基本上我的问题是我在测量在 java 中生成 ECDH 密钥所需的时间与生成 DH 密钥所需的时间时得到的奇怪结果。

我比较生成所需的时间:

  • 192 位 ECDH 密钥到 512 位 DH 密钥
  • 224 位 ECDH 密钥到 1024 DH 密钥

现在,由于密钥大小的不同,我预计 ECDH 密钥对的生成会击败常规的 DH 密钥,但是当我这样做时,情况并非如此。也许我测量错了,或者有其他解释。

0 投票
1 回答
2195 浏览

java - 如何强制使用 Diffie Hellman Key Exchange

我想创建一个 TLS 套接字连接。我知道 TLS 有几种方法可以交换密钥,例如。RSA、Diffie-Hellman 等。如何强制使用 Diffie-Hellman 密钥交换而不是其他形式的密钥交换?

我知道如果使用 Diffie-Hellman 密钥交换,它很容易受到中间人攻击。使用 RSA 时,我们有防止 MITM 的服务器身份验证。但我担心的一个问题是使用 RSA 会禁止前向保密。

我该怎么办?

0 投票
2 回答
1617 浏览

ssl - 用于密钥分配的公钥密码学与 Diffie-Hellman

假设我们有一个带有私钥和公钥的服务器,后者可供所有客户端使用,并且我们有一个没有自己的不对称密钥的客户端。我们希望在服务器和客户端之间建立安全的通信,客户端必须确保服务器的真实性。这是很常见的情况。

现在,据我了解,通常在这种情况下使用私钥/公钥对只是为了确保真实性(我们的客户端可以使用服务器的公钥来验证服务器的真实性)。为了确保服务器和客户端之间的双向通信,使用了 Diffie-Hellman 密钥交换,然后基于共享密钥进行通信。

我不禁想知道为什么在这种情况下使用 Diffie-Hellman。据我了解,公钥加密可用于确保真实性并在客户端和服务器之间共享密钥。服务器可以向客户端发送使用其私钥编码的消息,客户端可以使用服务器的公钥对其进行解码以确认其身份。此外,客户端可以使用服务器的公钥向服务器发送一个新的随机密钥。只有服务器知道这个密钥,因为只有服务器知道他的私钥。我知道有些人建议不要使用公钥进行编码和解码,但没有人说为什么。

显然,如果客户端和服务器都有自己的公钥/私钥,他们甚至不需要共享任何密钥,但这不是典型的情况。

所以……总结一下。为什么使用 Diffie-Hellman 代替具有公钥加密的密钥分发?有什么优势吗?

0 投票
4 回答
1573 浏览

java - Diffie-Hellman 私钥

我有下面的代码行来生成一个私钥:

G并且P是静态数字。而Xa随机生成。每次我运行程序时,它都会给我相同的结果Ya。这对 Diffie-Hellman 是否正确?我认为每次运行算法时都必须更改私钥。

0 投票
1 回答
681 浏览

cryptography - 禁用 diffie-hellman 或设置会话密钥

您知道是否可以禁用 Diffie-Hellman 或为 openssh 设置固定会话密钥?实际上我想用 WireShark 分析流量,我需要解密它。

0 投票
1 回答
791 浏览

objective-c - C 中的 OpenSSL Diffie Hellman DER 编码

我有一个问题,过去两天一直在寻找答案。

我在 C 中使用 OpenSSL 生成了一个 DH 对象(更具体的 Objective-C,但我认为没有类似的东西),现在可以访问 Bignums 的 p、q 和 publickey 值。我需要将这些值作为 ASN.1 DER 编码作为一个 base64 字符串发送到服务器。

在 Android 客户端上,重要的步骤是.getPublic().getEncoded() 后跟 base64 编码。(是有密钥协议的东西)

我如何在 c 或 Objective-c 上做到这一点?代码示例会非常非常棒。

0 投票
1 回答
407 浏览

java - Java.Security.Key.getEncoded() OpenSSL DH 等效项

如何使用 OpenSSL 在 C 中实现与 getEncoded() 方法产生的结果相同的结果?这是 Diffie-Hellman 密钥协议所必需的,我必须将我的公钥发送到 java 服务器(但我认为 getEncoded() 方法不仅对公钥进行编码,而且对我的情况也应该需要的参数进行编码)

我目前的状态是我有一个 OpenSSL DH 对象,其中包含 PublicKey 和 p&g 作为 BigNums。

如果有人知道如何做到这一点,那就太好了。

0 投票
1 回答
1122 浏览

php - 无法使用 javascript 桥接椭圆曲线 Diffie-Hellman

我知道这是一个非常具体的问题,但我尝试使用基于 2 个看起来不错的库的椭圆曲线 Diffie-Hellman 算法(ECDH)在 php 和客户端之间交换密钥:

  1. https://github.com/mdanter/phpecc用于 php 部分和

  2. http://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html用于 js 部分。

似乎参数(如第二个演示所示)不适合(1)中的 Mattias Danter 库!

我尝试了什么:

一个。在 php 中生成 Alice 公钥

湾。从 (a) 中获取 x 和 y 值并放入斯坦福的 js 演示页面代替 Alice 字段

C。从 (b) 页生成 Bob 的公钥和私钥

d。在 (a) 中重新运行 php,但现在将 Alice 的属性重置为之前的运行(我必须在 Mattias Danter 类中添加一些设置器),然后使用 Bob 的公共值和密钥将 Bob 重置为 javascript 的值

e. 导入密钥并进行比较

但是 php 捕获一个错误:

搜索我的代码,我发现了导致错误的原因:这是在 Alice 计算公共密钥期间:

Bob 的公钥(来自 javascript)被存储EcDH::receivedPubPoint并产生错误!!

这是具有某些身份的对象 Alice(EcDH 类):

我的观点是,由于“椭圆曲线参数”下的字段在http://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html中实现的方式,javascript 公共值不正确。

通过搜索,我发现斯坦福的这段js代码块与php版本相比是有问题的:

有什么建议吗?

谢谢。

0 投票
1 回答
77 浏览

encryption - 在 openssl lib 的日志中公开 Diffie Hellman 共享密钥

在 openssl 库中有一个名为 DH_Compute_key 的函数,它将创建共享密钥。我们可以使用它并在日志中公开它以进行调试吗?