关于如何进行 Diffie-Hellman 密钥协商来计算共享秘密的例子很多。但是,我找不到任何关于如何使用充气城堡(或者说实话提供的任何安全性)在 java 中进行 3DH 的示例。我发现的所有内容,阅读都是抽象理论,而不是实际的实际实现/示例。
更具体地说,如何将三个单独计算的 DH 协议结合起来?Signal 的 x3dh 协议协议是一个很好的参考来源:
伪代码
DH1 = DH(IKA, SPKB)
DH2 = DH(EKA, IKB)
DH3 = DH(EKA, SPKB)
SK = KDF(DH1 || DH2 || DH3)
或者:
KeyAgreement ka1 = KeyAgreement.getInstance("X448",BouncyCastleProvider.PROVIDER_NAME); ka1.init(iPrivKey); //initator Private Key
ka1.doPhase(rPubKey, true); //recipient Public Key
byte[] secret1 = ka1.generateSecret();
...
byte[] secret2 = ka2.generateSecret();
...
byte[] secret3 = ka3.generateSecret();
准确地说,我正在寻找SK = KDF(DH1 || DH2 || DH3)
已经在充气城堡中计算出 DH1 DH2 和 DH3 的方法?IE 如何将 secret1、secret2 和 secret3 组合为 HKDFParameters 的输入密钥材料或种子?