gpt4 book ai didi

java - Diffie Hellman 转 AES

转载 作者:行者123 更新时间:2023-11-30 08:23:21 28 4
gpt4 key购买 nike

我正在尝试创建一个可以使用加密数据将数据从客户端发送到服务器的应用程序。我已经用 Java 设置了一个基本的 Diffie Hellman key 交换,我只是想知道如何将其转换为 AES-128 key 。以下是我的 key 交换产生的数字:
p: 45739334052801211486383982115714395642859523615469431203095063293408205085850655737540408983027523682219373484935815737826696483347058644040214365601698451568563654746844010747338983871136644386557631185640042912749789107007323073169713214532843785763128771045651074137977867781277726926260077346003
克:405
produced key: 36248441610316046373940723150439573936645456312032028064365240345591632292456385336418395841257359594423512887912569551847749513145040862559588574541468845827085159018247962009639778000068069176753753861222140233559881791396088762185913485540314156993368037042615619321223426679365899278177180176354
p 和生成的 key 都是 299 个字符长。我试图自己解决这个问题,并阅读了有关使用 SHA-256 对生成的 key 进行哈希处理的内容,结果如下:
SHA-256: 4631d862806f2c22ae28959a8ffb441789ab306468d6bf04d87435dd81890519
但是,我看不出如何将其中任何一个变成 16 字节(128 位) key 。例如 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}。我要取结果的前 16 个数字吗?

任何帮助或信息都会很棒,我将非常感激。如果需要更多信息,请问我。

最佳答案

您需要的是 key derivation function ,它会将任何包含足够随机性的位串(例如 Diffie–Hellman 共享 secret )作为输入,并将其“打乱”以产生一个或多个固定长度的均匀随机位串,例如适合用作 AES键。

您可以使用许多标准化的 KDF,但如果您想要具体的推荐,我更喜欢 HKDF (RFC 5869)。它是一个“提取和扩展”类型的KDF,这意味着它首先将输入字符串处理成一个内部主 key 字符串(在规范中称为“PRK”),然后可以使用它来导出任意数量关键 Material 。

HKDF 是一个通用的高级构造,可以使用任何安全的 cryptographic hash function 实例化。例如SHA-2 ,因此,即使您的加密库不提供内置的 HKDF 实现,您自己编写一个也不难。 RFC 中的规范写得很好,可读性强,我强烈建议您花几分钟时间阅读它。

与大多数 KDF 一样,HKDF 的扩展步骤采用可选的“信息”字符串,用于调整 key 派生过程,以便可以重复使用相同的输入字符串(或 PRK)来派生多个(有效地)独立的键,只要为每个键使用不同的“信息”字符串即可。 (用于从输入字符串中导出 PRK 的提取阶段也采用具有类似效果的“salt”参数。)

有人认为 HKDF 不会做的是 key stretching ,如果输入是用户选择的密码,这很有用(有些人会说必不可少)。如果你需要,你可以使用例如PBKDF2scrypt反而。 (也可以只用 PBKDF2 替换 HKDF 的提取阶段,并按原样使用扩展阶段;事实上,这是我推荐使用 PBKDF2 生成多个哈希 block 值(value)的 key Material 的方法。)幸运的是,使用 Diffie–Hellman,共享 secret 具有足够的熵,因此不需要 key 拉伸(stretch)。

关于java - Diffie Hellman 转 AES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23743932/

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