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

android - Android 上的 Diffie Hellman 和 AES

我正在尝试使用 Diffie Hellman 进行密钥交换并使用密钥AES加密数据。谁能给我一个合适的安卓工作样本?

0 投票
0 回答
846 浏览

security - EDH/DHE和DH的区别

可能重复:
SSL 密钥交换加密技术

SSL/TLS 的一些密码套件被称为 DH,一些被称为 EDH。Ephemeral Diffie Hellman(EDH 或 DHE)和 Diffie Hellman 有什么区别?

0 投票
2 回答
1221 浏览

cryptography - Diffie-Hellman 椭圆曲线私钥的长度

我正在使用 FIPS 186-3 推荐的 Diffie-Hellman 椭圆曲线曲线。我正在尝试确定私钥的最大长度,根据 RFC 5915 它应该是:

上限 (log2(n)/8) ,其中 n 是曲线的阶数

对于 P-256 曲线,我得到最大长度 32,这对应于我在代码中看到的内容(假设是无符号表示)。然而对于 P-521 曲线,我得到最大长度 65,但是我在我的代码中得到长度为 66 的私钥。这是来自 P-521 曲线的一个示例 66 字节私钥:

5367794175793176027889969828113014603157344894208126643379049713388781962338446363455749219733919077469072043715066195336337088038146192289964998476049182286

十六进制:

01 90 59 2F 64 1C 73 AB F8 57 C4 F0 F2 A3 17 DD 5E 5F 64 B1 3C 61 15 8F E2 AC 34 DD 3F FC 6F 9B F1 38 9B 66 0F 27 34 60 75 E3 32 B0 B2 80 DF FE 9F A 2 AC FF 82 BE 36 00 77 7A 92 B1 CB F7 7F 98 6E 4E

公钥是(没有前导 0x04 字节):

01 F0 64 36 14 25 89 F8 7E 0D 5F 0E F9 26 36 D7 5C 4A 45 D7 9C 86 BD F8 C5 B9 A7 AA C4 C2 EB 56 52 DD BD BE E1 A0 5B DD A1 1F D8 79 D8 BA 2A 18 68 56 C0 D7 0A 4D D6 2B AB BD 8E D9 33 7F B1 FF E5 18 00 B2 06 21 D9 DA C1 BA A2 E7 43 69 06 FF 03 2F 05 FC 0E 44 74 A1 A3 3B 2E 7E B1 68 01 B2 7F B9 94 EB 8C C7 47 D7 02 A5 46 4E 88 32 59 DD 27 DE 72 C2 6D 8D B4 3B D0 45 67 31 AF 8E 1C 30 87 42 38 9F

有人知道为什么可以获得 66 字节长度的私钥吗?根据 FIPS 186-3 文件,P-521 曲线的顺序是:

n = 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449

这给出了上限 (log2(n)/8) = 65。

问候,-马丁·兰斯勒

0 投票
3 回答
1873 浏览

security - 保护 ECDH 免受 MITM 攻击

我正在做一个需要 ECDH 密钥交换的项目。我正在尝试了解如何防止 MITM 攻击。我可以签署公钥并在公钥传输时发送签名,以确保密钥没有被篡改,但这并不能阻止 MITM 攻击做同样的事情。我知道密钥交换必须由第三方以某种方式验证,但我很难理解假设有人可以进行 MITM 攻击,第三方如何成为解决方案。为什么他们不能也对第三方验证进行 MITM?真的有一种万无一失的方法可以完全消除所有可能的 MITM 攻击,而无需双方事先知道吗?

0 投票
4 回答
452 浏览

android - 保护 android 应用程序

我已经“保护”了我的 android 应用程序和提供金融交易服务的 tls 服务器之间的通信,目前正在开发中。

安全凭证存储在 Android apk 中包含的 BKS 密钥库中。密钥库的密码在应用程序源中以纯文本形式显示:

keyStore.load(is, "passwd".toCharArray());

我担心如果有人对应用程序进行逆向工程,他们将能够冒充另一个用户并危及服务的安全性。

我想知道我的实现是否存在错误,是否有其他人有这种担忧,以及防止这种可能性的最佳方法是什么。

0 投票
2 回答
949 浏览

java - 使用 diffie-hellman 共享密钥继续加密

我目前正在研究一种协议,该协议使用 Diffie-Hellman 进行密钥交换。我收到一个数据包,其中包含一个 aes-128 加密部分和一个 128 位 DH 公钥。

在协议的最后一步,aes 密钥被发送到网络中的另一个对等点。此 aes 密钥应使用 128 位强密钥使用密码进行加密。

我打算使用 Blowfish(也可以是另一种密码,对问题来说并不重要)

现在要加密 aes 密钥,让我们说河豚,我必须使用一个名为 SecretKeySpec 的类(我正在使用 javax.crypto 的东西)构建一个用于加密的密钥,它在构造函数中使用一个 byteArray 来构建密钥。

来自 DH 的共享密钥是一个 128 位的 BigInteger。好吧,现在我可以将我的共享密钥解释为一个 byteArray(这仍然给我 16Bytes 中的 128 位 [其中数字被解释为 8 位数据的帧])

所以我的问题是,我的钥匙到底有多强?

是否有任何影响,因为我只使用数字作为 byteArray 的输入(所以这会以任何方式限制键空间吗?)

我认为情况并非如此,但我不是 100% 确定。也许有人可以做数学并证明我是对还是错。

如果我错了,共享密钥的密钥大小让我放心最终使用 128Bit SecretKey 进行加密?

0 投票
1 回答
1183 浏览

windows - Windows CNG ECDH 秘密协议结构

我花了几天时间搜索ECDH秘密协议的结构,但没有成功。我在 MSDN 中发现NCryptSecretAgreement函数设置了一个指向 NCRYPT_SECRET_HANDLE 变量的指针,该变量接收代表秘密协议值的句柄。我根本不熟悉 WinAPI,所以除了阅读文档之外我什么也做不了。

我需要在基于 Windows 的桌面应用程序和 Web 应用程序之间交换密钥。我需要知道的是 CNG 的 KDF 究竟如何使用(在我的情况下是散列)秘密协议值。我使用 SHA-256 算法作为 KDF 并尝试对秘密协议的 X 和 Y 进行散列,但结果与 CNG 计算的一个不匹配。有任何想法吗?

谢谢你。

0 投票
0 回答
1751 浏览

java - 使用 Bouncycastle 在 Java 和 .NET 之间执行 Diffie-Hellman 密钥交换

我想使用 bouncycastle 在两个软件组件(Alice 和 Bob)之间执行 Diffie-Hellman 密钥交换。Alice 和 Bob 有自己的密钥对,由同一个 CA 颁发。但是,Alice 将是 Java,Bob 将是 C#。

我已经搜索并找到了如何以每种语言进行交换的示例。但是我发现的示例有两个问题:

  1. 通过在同一个示例代码块中实现 Alice 和 Bob 之间的交换,这些示例过度简化了。当 Alice 和 Bob 实际上必须通过 SSL 流交换中间值(g^a mod p 和 g^b mod p)时,我无法理解 Alice 和 Bob 的样子。
  2. 这些示例始终适用于以相同语言编写的软件组件。我在别处读到 Diffie-Hellman 密钥交换库经常使用一些内部常量来生成它们的中间值。根据我对 DH 工作原理的了解,我看不出在哪里需要任何类型的常量,但我不是专家。

基于这两个问题,我有两个问题:

  1. 有谁知道分别显示双方代码的代码示例,以及
  2. 如果我对 java 和 .net 组件都使用 bouncycastle API,是否有人知道组件无法就相同的秘密对称密钥达成一致的任何原因?
0 投票
10 回答
120929 浏览

python - 将 python long/int 转换为固定大小的字节数组

我正在尝试在 python 中实现 RC4 和 DH 密钥交换。问题是我不知道如何将 python long/int 从密钥交换转换为 RC4 实现所需的字节数组。有没有一种简单的方法可以将 long 转换为所需长度的字节数组?

更新:忘了提到我正在处理的数字是 768 位无符号整数。

0 投票
5 回答
5578 浏览

ios - iOS 的 Diffie-Hellman 实现?

这是我在这里的第一个问题,就像我从其他问题中找到所有解决方法一样。

这个问题很简短:有谁知道是否有适用于 iOS 的 Diffie-Hellman 实现?我的意思是......这个想法是在 2 个设备(一个是 iOS,另一个是 java web 服务)之间共享一个密钥,我认为最好的想法应该是这种方法。

如果没有,有人可以建议我另一种选择吗?

我不是高级开发人员,这就是为什么我要为此检查框架的原因。

提前谢谢大家!