问题标签 [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 回答
1623 浏览

cryptography - OpenSSL gost 引擎问题

我正在尝试使用 OpenSSL 1.0.0d 实现 ECDH 密钥交换 GOST 34.10-2001。我正在像这样加载 gost 引擎:

此时 GOST 引擎已加载并且工作正常(我认为是这样)。我已经用散列和加密算法做了一些测试。

但是当我尝试实现 ECDH(通过导入另一方公钥生成共享密钥)时,我得到了不正确的结果(共享密钥与另一方不同)。

我检查了 a、b、p、q、x、y 参数,检查了代码流,但不知道出了什么问题。

有一件事:VKO 34.10-2001 算法在 openssl\engines\ccgost\gost2001_keyx.c (函数 VKO_compute_key)中实现,但是当我调用通用函数 ECDH_compute_key 时,它不会导致 VKO_compute_key(通过将 int3 设置为VKO_compute_key 的开头)。

我是不是误会了什么?或者有人可以展示一个使用来自openssl的gost引擎生成共享密钥的例子吗?

0 投票
1 回答
1987 浏览

.net - Bouncy Castle Diffie-Hellman DHParams 问题

我正在尝试使用 bouncy castle .net 库来执行 Diffie-Hellman 密钥交换,并且在生成 DHParams 对象时遇到了问题。

我的解决方案将包括一个中央机构,它将为每个连接的客户端生成一个单独的 DH 密钥/对。这个想法是我将为每个连接的客户端保留一个单独的 DH 密钥协议。然后我会将 p,g 值发送给客户端,客户端将计算它的 dh 密钥协议。我想为每个客户生成不同的 p,g 值。我为此使用 BigInteger,但遇到了一些问题。

当我尝试创建一个新的 DHParameters 对象时,只要我使用 768 以外的位长度,它就会引发以下异常:

我不确定这是否重要,但我已经在 BigInteger 构造函数中尝试了各种不同的值来确定性。

这是我的代码:

问题是生成 768 位素数需要很长时间——在没有其他进程运行的双核 2.1Ghz 处理器上超过 5 秒。对于每个启动连接的客户端来说,这实在是太大了。我想为 BigInteger 使用较小的位长度。

我可能完全错了 - 关于如何使用充气城堡进行 DH 的文档很少,而且测试/示例与我的用例不匹配。我不想有预先生成的 p,g 值。

编辑 似乎即使是 768 位长度也会偶尔出现错误。重新启动我的机器后,除了 1024 之外,我无法获得任何位长度,即使如此,也只有大约 80% 的时间。我想我做错了什么。

0 投票
1 回答
504 浏览

zend-framework - Zend_Crypt_DiffieHellman - 使用示例

有使用 Zend_Crypt_DiffieHellman 类的例子吗?我正在尝试编写一个桌面应用程序,它将以安全的方式与 Zend Framework 上的 PHP 服务器通信。我一直在理解如何在两方之间建立共享密钥。我需要获得一组我自己的素数吗?

任何有关如何使用它来获取共享密钥的示例将不胜感激!

我认为我真正的问题是如何获得质数和生成器!

0 投票
1 回答
363 浏览

diffie-hellman - Prime 在 RFC3526 中关于 Diffie Hellman 密钥交换的符号

在 RFC3526 中,素数以 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 } 形式表示

我想知道“[2^1406 pi]”部分是什么意思

THKS

0 投票
1 回答
401 浏览

node.js - node.js diffie-hellman-group1-sha1 错误

我正在尝试为我的 SSH 协议的 node.js 实现实现 diffie-hellman-group1-sha1 密钥交换。

我想为此使用内置的加密模块。我的代码:

但是 node.js 无法执行。它引发以下错误:“错误:未初始化”

有谁知道出了什么问题?

0 投票
1 回答
4466 浏览

c# - C# 中的 1024 位 Diffie-Hellman

因此,我正在开发一个项目,以将 C# 客户端与现有服务器技术连接起来。其中一项要求是使用 Diffie-Hellman 进行密钥交换。

我们已经知道公共 P 和 G,我需要生成一个 1024 位的公共密钥以发送到服务器。

以下内容在 C++ 中的服务器端与 OpenSSL 一起使用。目前,我在通过 P/Invoke 调用的本机 DLL 中使用相同的代码,它也可以正常工作。如果可能,我宁愿消除本机 DLL 依赖项。

这会生成一个 1024 位的公钥。

我曾尝试在 BouncyCastle 中使用 DH 类,但无论出于何种原因,我无法让它给我一个 1024 位密钥,它想给我一个 960 位密钥。可能是因为我真的不知道自己在做什么。我找不到太多关于如何使用这些类的实际解释。

是否可以使用 BouncyCastle DH 类与上面发布的 OpenSSL DH 代码一样工作?如果没有,是否还有另一个 C# 实现会更好?

0 投票
3 回答
14702 浏览

javascript - 使用 Diffie-Hellman 密钥交换和 AES 通过 HTTP 进行客户端加密

在观看Diffie-Hellman Key Exchange上的 YouTube 视频后,我想尝试用 JavaScript(阿特伍德定律)实现。

我用以下规则在 Node.js 上勾勒出一个密码:

  • 第 1 步:客户端和服务器就共享密钥达成一致:

    • 客户端和服务器以 512 位素数公钥 pK 开始

    • 客户端生成一个 512 位的素数私钥 kC 并发送 powMod(3, kC, pK)

    • 服务器生成一个 512 位素数私钥 kS 并发送 powMod(3, kS, pK)

    • Client & Server 使用 powMod(response, privatekey, pK) 作为共享密钥

  • 第 2 步:沟通

    • 在客户端发送数据之前,它使用斯坦福 Javascript 加密库(256 位 AES、HMAC 身份验证、PBKDF2 密码强化和 CCM 身份验证加密)使用共享密钥进行加密。

    • 一旦服务器使用共享密钥解密数据,它就会生成一个新的 512 位素数私钥并将其作为 SJCL 加密响应发送。

    • 客户端和服务器使用 powMod(3, prevSharedKey, newPrivKey) 切换到新的共享密钥

现在我有几个问题..

与 HTTPS 或其他算法相比,这样的系统有多安全?这种系统的弱点是什么?

在安全性/实用性方面,使用 1024 位密钥会更好吗?HMAC/PBKDF2/CCM 选项是否矫枉过正?是否值得调制共享密钥?谢谢阅读!

0 投票
2 回答
11338 浏览

diffie-hellman - 如何利用 Diffie-hellman 进行中间人攻击

我正在做一个项目,其中 Alice 和 Bob 使用 Diffie-Hellman 密钥交换相互发送消息。让我陷入困境的是如何将他们正在使用的证书合并到其中,这样我就可以获得他们的秘密消息。

根据我对 MIM attakcs 的了解,MIM 充当冒名顶替者,如下图所示:

在此处输入图像描述

以下是我的项目的详细信息。我知道他们在沟通之前都同意了 g 和 p,但是我如何能够在他们都有证书来验证他们的签名的情况下实现这一点?

Alice 准备 ⟨signA(NA, Bob), pkA, certA⟩ 其中 signA 是 Alice 使用的数字签名算法,“Bob”是 Bob 的名字,pkA 是 Alice 的公钥,等于 gx mod p 根据 X 编码。 509 用于 Diffie-Hellman 密钥交换中指定的固定 g,p,并且 certA 是 Alice 的证书,其中包含验证签名的 Alice 的公钥;最后,NA 是一个 8 字节长的随机数(随机字符串)。

Bob 检查 Alice 的签名,并用 ⟨signB{NA,NB,Alice},pkB,certB⟩ 回复。Alice 收到消息,她检查她的 nonce NA 并根据 Diffie-Hellman 密钥交换基于 pkA、pkB 计算联合密钥。然后 Alice 将消息 ⟨signA{NA,NB,Bob},EK(MA),certA⟩ 提交给 Bob 和 Bobrespondswith⟨SignB{NA,NB,Alice},EK(MB),certB⟩。

其中 MA 和 MB 是它们对应的秘密消息。

0 投票
2 回答
89354 浏览

public-key-encryption - 在 Diffie-Hellman 中,中间进攻的人是如何工作的?

在 Diffie-Hellman 密钥交换期间,我对中间人攻击的机制有疑问。我听说它可能发生在密钥协议通信期间。但是在 CA(证书颁发机构)存在的情况下,接收者可以在接收到发送者的公钥时对发送者进行身份验证。因此,中间人如何攻击?

0 投票
1 回答
411 浏览

asp.net - 我们可以使用带有 asp.net 登录控制的 Diffie-Hellman 公钥加密算法吗?

我试图找出asp.net 中登录控制的内部结构。它是否使用一些公钥加密算法来交换密钥,然后将其用作对称密钥进行进一步的通信。

我们在选择加密算法方面也有发言权,比如我想专门使用带有登录控制的 Diffie Hellman。有可能吗?我怎样才能做到这一点?