【发布时间】:2014-02-18 18:21:19
【问题描述】:
我最近在 I2P 源代码 (Java) 中发现了以下片段:
private final SessionKey calculateSessionKey(BigInteger myPrivateValue, BigInteger publicPeerValue) {
SessionKey key = new SessionKey();
BigInteger exchangedKey = publicPeerValue.modPow(myPrivateValue, CryptoConstants.elgp);
byte buf[] = exchangedKey.toByteArray();
byte val[] = new byte[32];
if (buf.length < val.length) {
System.arraycopy(buf, 0, val, 0, buf.length);
... //irrelevant details
} else { // (buf.length >= val.length)
System.arraycopy(buf, 0, val, 0, val.length);
... //irrelevant details
}
key.setData(val);
return key;
}
据我了解,buf[] 的前 256 位被直接复制到会话密钥中,并且从未在其上运行任何 SHA256 摘要。我不是密码学专家(也不是java),谁能解释一下,这里不是安全漏洞吗?我的意思是,在标准的 Diffie-Hellman wiki 页面中,SHA 哈希值也在密钥上运行。
如果真的是这样,您能否也举一个如何利用它的例子?
【问题讨论】:
标签: security cryptography sha256