【发布时间】:2011-07-13 15:37:39
【问题描述】:
我遇到了一个挑战,它与测试朋友的加密过程有关。
这是一个 Diffie-Hellman 交换过程,这里是已知的变量/常量:
-
P,G - 我生成的私钥(变量)
- 我生成的公钥(变量)
- 收件人公钥(常量)。
查看我的私钥时 - P 和 G 都在其中。例如,第一个“x”字节似乎与任何东西都没有关系,那么接下来的“y”字节是P,接下来的两个字节是静态的,接下来的“z”字节是G,其余的是可变的。
这个过程是加密一个文件,然后把它发送到一个设备,然后设备会解密它——我的攻击思路是这样的:
尝试复制秘密共享密钥。这里的问题是,只要我知道我生成的私钥就可以了,在这种情况下 - 我不喜欢他给我的文件。
尝试查找收件人的私钥。在这里,我可以强行闯入——但除非我有某种超级计算机,否则我会花很长时间。
在尝试攻击时还有其他选择吗?
【问题讨论】:
-
在处理安全协议时,重要的是要非常精确地确定哪些数据存储在哪里。例如,在您的问题中,您将短语“私钥”用于两件事:数据布局(文件或网络数据包)和实际的私钥(X)。我建议仔细地写下协议的详细说明。然后更新您的问题,使协议描述更清晰。
-
P.S.从您的想法 1. 和 2. 来看,我认为您正在查看 Diffie-Hellman 协议的基本属性。你不会在那里找到错误:核心密码算法不会被破坏。该错误始终是一个错误的实现(例如,遗留机密数据,或执行不正确的计算),一个损坏的协议(这些确实发生,协议很棘手),或一个侧通道。
标签: java diffie-hellman