所以,要启动 DH,双方需要就素数和生成器达成一致,对吗?他们如何在没有人听的情况下做到这一点?
循环在哪里结束/开始?
另外,如果中间的人找出素数和生成器的组合,这有关系吗?
所以,要启动 DH,双方需要就素数和生成器达成一致,对吗?他们如何在没有人听的情况下做到这一点?
循环在哪里结束/开始?
另外,如果中间的人找出素数和生成器的组合,这有关系吗?
素数和生成器不是敏感的或秘密的。这意味着,双方可以通过不安全的媒介共享它们而没有风险。
本文介绍了交换的工作原理,并提供了一个数字计算示例,其中两方获得了相同的共享密钥,如果您拥有通过不安全介质共享的所有数字,这是无法实现的。
这是那篇文章中的插图:
只有当您拥有私钥(5 或 4)中的任何一个时,才能获得共享秘密“3”。在 Internet 上共享的值 (13, 6, 2, 9) 不能以提取共享秘密 (3) 的方式可靠地组合。
Cryptography Stack Exchange 上的这个问答提供了更多关于它是如何工作的解释:
https://security.stackexchange.com/questions/45963/diffie-hellman-key-exchange-in-plain-english
编辑:正如 Ricky Beam 在评论中指出的那样,上面插图中使用的数字故意小而简单,以便向您展示 DH 交换的数学。
这在上述文章中已解决,但为简单起见,我将在下面引用相关部分。
请记住,任何密钥都容易受到暴力破解。在很大程度上,密码学的目标是使用如此大的数字和计算,以致于尝试暴力破解特定密钥将花费不合理的时间(1,000 年和 10,000 年)。
DH 号码
在我们的示例中,我们使用了一个素数 13。由于这个素数也被用作每次计算的模数,因此生成的共享密钥的整个密钥空间只能是 0-12。这个数字越大,攻击者越难以暴力破解您的共享秘密。
显然,我们在上面使用了非常小的数字来帮助保持数学相对简单。真正的 DH 交易所正在对更大的数字进行数学运算。Diffie-Hellman 中的数字有三种典型大小:
- DH 组 1 768 位
- DH 组 2 1024 位
- DH 组 5 1536 位
位大小是对素数的引用。这直接等同于生成的共享密钥的整个密钥空间。为了让您了解这个关键空间有多大:
- 为了完全写出 768 位数字,您需要 232 个十进制数字。
- 为了完全写出 1024 位数字,您需要 309 个十进制数字。
- 为了完全写出 1536 位数字,您需要 463 个十进制数字。
(注意,这篇文章是2015年写的,目前(2020年),上面的key size都被认为太小了)
我建议您访问 Stack Exchange 的Cryptography部分。你的问题在那里。
您可以通过阅读Diffie-Hellman Key Exchange上的 Wikipedia 页面来回答部分问题。通常,Internet 协议依赖于在预先约定的常量中进行选择。您可以在感兴趣的特定协议的规范中找到相关信息,例如 IPSEC RFC。