gpt4 book ai didi

java - 从 Diffie-Hellman 输出中选择加密 key

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:58 25 4
gpt4 key购买 nike

我实现了 Diffie–Hellman key exchange在 Java 中与来自 RFC 3526 的一些大型团体.我的输出是一个相当大的字节数组。 使用河豚 key 输出的前 448 位(56 字节)安全吗?我应该以任何方式转换字节,还是为 key 选择任何特定字节?

最佳答案

从理论上讲,不,不安全。并不是说我可以确定实际的攻击;但 Diffie-Hellman key 交换的输出是由 q 个元素组成的组中的一个元素,最多提供 sqrt(q) 安全性。截断该元素的部分编码看起来不是一个好主意...

“正确”的方法是使用单向 key 派生函数。简而言之,使用良好的散列函数处理 Diffie-Hellman 输出,例如 SHA-256并使用哈希结果作为键。对于 Diffie-Hellman 步骤,散列时间可以忽略不计。 Java 已经包含 SHA-256 和 SHA-512 的良好实现,如果您希望与非常旧的 Java 实现兼容(例如 Internet Explorer 5.5 附带的 Microsoft JVM),那么您可以使用 SHA-2 的独立 Java 实现例如 sphlib 中的那个.或者可能从规范中重新实现它(这并不难):FIPS 180-3 (a PDF file) .

如果您的 key 需要超过 128 位,那么这意味着您是 2050 年左右的时间旅行者;假设您使用适当的对称加密方案,128 位暂时足以保护您。

说到这里:不再推荐 Blowfish。它有 64 位的 block ,这意味着当加密数据长度达到几千兆字节时就会出现问题,这个大小在今天并不是那么大。您最好使用 128 位分组密码,例如 AES .此外,在任何严格的对称加密系统中,您都需要进行 key 完整性检查。这可以通过 MAC(消息验证码)来完成,例如 HMAC ,它本身是建立在哈希函数之上的(话又说回来,易于实现,并且在 sphlib 中有一个 Java 实现)。或者,更好的是,在组合加密/MAC 模式下使用 AES,这将为您处理棘手的细节(因为正确使用分组密码并不容易);查找CWCGCM (两者均无专利;后者已获得 NIST 批准)。

关于java - 从 Diffie-Hellman 输出中选择加密 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com