最近、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;
}
私が理解しているように、最初の 256 ビットはbuf[]
セッション キーに直接コピーされ、SHA256 ダイジェストは実行されません。私は暗号化の専門家ではありません (Java でもありません)。誰か説明してもらえますか? つまり、標準の Diffie-Hellman wiki ページでは、SHA ハッシュもキーに対して実行されます。もしそうなら、どのように悪用されるか例を挙げていただけますか?