我正在实施 ECDH 并想问应该如何最好地使用从一个人的私钥和另一个人的公钥派生的共享秘密。
我知道使用这个的双方最终都得到了相同的秘密,这很好。一旦攻击者掌握了参与通信的任何两方(Alice 或 Bob)的私钥,该秘密就会被泄露。
在使用某种算法(在我的情况下为 AES)计算密钥协议时,(共享的)秘密似乎总是相同的。
然后你使用秘密并使用 AES/GCM 来加密任何人想要的。
我认为这是有缺陷的,因为您总是使用相同的密钥进行同一合作伙伴之间的通信,从而可以记录秘密通信,并且可能有机会通过破解 AES 或使用的任何东西来获取秘密。
所以我想做的是从中派生密钥,而不是按原样使用整个安全密钥。因此,我不想使用双方都能够独立生成的密钥,而是使用密钥来派生一些密钥,这些密钥通过一种偏移量,双方都使用这种偏移量来创建无限的一次性密钥。
我的问题是通常使用什么密钥派生函数(因为它是基于密钥的)?
我目前实现了一个 SipHash128,因为它保证了我所需要的 - 保持实际的秘密秘密,但允许通过将随机数作为消息(一部分来自设备,一部分来自服务器)来获得无限对称秘密,以通过使用从中派生 sip 哈希共享密钥避免设备始终发送相同的“随机”消息。
PS:我想要一个与 Flutter 和 JavaScript 应用程序对话的 Java 后端。PSS:是的,我有一个计算机科学硕士(一位同事已经在这方面向我提出挑战),但这样做感觉有点愚蠢,但这是/是我能想到的最简单的解决方案。