问题标签 [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.
java - 在 java 中实现完整的 Diffie-Hellman 密钥交换加密
我有一个使用套接字发送和接收数据的聊天程序。现在,我想使用 Diffie-Hellman 密钥交换系统通过套接字加密数据传输。最简单的方法是什么?
java - ECDH VS。JAVA中的DH基准测试
这个问题以前发布在crypto.exchange上,但是由于我的问题仍然存在,我认为这可能更多是我可能忽略的编程细节,而不是理论上的东西。
所以基本上我的问题是我在测量在 java 中生成 ECDH 密钥所需的时间与生成 DH 密钥所需的时间时得到的奇怪结果。
我比较生成所需的时间:
- 192 位 ECDH 密钥到 512 位 DH 密钥
- 224 位 ECDH 密钥到 1024 DH 密钥
现在,由于密钥大小的不同,我预计 ECDH 密钥对的生成会击败常规的 DH 密钥,但是当我这样做时,情况并非如此。也许我测量错了,或者有其他解释。
java - 如何强制使用 Diffie Hellman Key Exchange
我想创建一个 TLS 套接字连接。我知道 TLS 有几种方法可以交换密钥,例如。RSA、Diffie-Hellman 等。如何强制使用 Diffie-Hellman 密钥交换而不是其他形式的密钥交换?
我知道如果使用 Diffie-Hellman 密钥交换,它很容易受到中间人攻击。使用 RSA 时,我们有防止 MITM 的服务器身份验证。但我担心的一个问题是使用 RSA 会禁止前向保密。
我该怎么办?
ssl - 用于密钥分配的公钥密码学与 Diffie-Hellman
假设我们有一个带有私钥和公钥的服务器,后者可供所有客户端使用,并且我们有一个没有自己的不对称密钥的客户端。我们希望在服务器和客户端之间建立安全的通信,客户端必须确保服务器的真实性。这是很常见的情况。
现在,据我了解,通常在这种情况下使用私钥/公钥对只是为了确保真实性(我们的客户端可以使用服务器的公钥来验证服务器的真实性)。为了确保服务器和客户端之间的双向通信,使用了 Diffie-Hellman 密钥交换,然后基于共享密钥进行通信。
我不禁想知道为什么在这种情况下使用 Diffie-Hellman。据我了解,公钥加密可用于确保真实性并在客户端和服务器之间共享密钥。服务器可以向客户端发送使用其私钥编码的消息,客户端可以使用服务器的公钥对其进行解码以确认其身份。此外,客户端可以使用服务器的公钥向服务器发送一个新的随机密钥。只有服务器知道这个密钥,因为只有服务器知道他的私钥。我知道有些人建议不要使用公钥进行编码和解码,但没有人说为什么。
显然,如果客户端和服务器都有自己的公钥/私钥,他们甚至不需要共享任何密钥,但这不是典型的情况。
所以……总结一下。为什么使用 Diffie-Hellman 代替具有公钥加密的密钥分发?有什么优势吗?
java - Diffie-Hellman 私钥
我有下面的代码行来生成一个私钥:
G
并且P
是静态数字。而Xa
随机生成。每次我运行程序时,它都会给我相同的结果Ya
。这对 Diffie-Hellman 是否正确?我认为每次运行算法时都必须更改私钥。
cryptography - 禁用 diffie-hellman 或设置会话密钥
您知道是否可以禁用 Diffie-Hellman 或为 openssh 设置固定会话密钥?实际上我想用 WireShark 分析流量,我需要解密它。
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 上做到这一点?代码示例会非常非常棒。
java - Java.Security.Key.getEncoded() OpenSSL DH 等效项
如何使用 OpenSSL 在 C 中实现与 getEncoded() 方法产生的结果相同的结果?这是 Diffie-Hellman 密钥协议所必需的,我必须将我的公钥发送到 java 服务器(但我认为 getEncoded() 方法不仅对公钥进行编码,而且对我的情况也应该需要的参数进行编码)
我目前的状态是我有一个 OpenSSL DH 对象,其中包含 PublicKey 和 p&g 作为 BigNums。
如果有人知道如何做到这一点,那就太好了。
php - 无法使用 javascript 桥接椭圆曲线 Diffie-Hellman
我知道这是一个非常具体的问题,但我尝试使用基于 2 个看起来不错的库的椭圆曲线 Diffie-Hellman 算法(ECDH)在 php 和客户端之间交换密钥:
https://github.com/mdanter/phpecc用于 php 部分和
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版本相比是有问题的:
有什么建议吗?
谢谢。
encryption - 在 openssl lib 的日志中公开 Diffie Hellman 共享密钥
在 openssl 库中有一个名为 DH_Compute_key 的函数,它将创建共享密钥。我们可以使用它并在日志中公开它以进行调试吗?