我使用用户提供的32字节密钥来使用HMAC-256对某些数据进行签名。我还希望我的应用程序使用AES-192加密数据。我应该向用户询问另一个密钥(这个时间大小为16个字节)还是有一种安全的方法从另一个32字节密钥中导出一个16字节的强密钥?第二种方法会使应用程序配置更容易一些。任何指南或提示?或者这种做法完全是胡说八道?
答案 0 :(得分:4)
此工具是HKDF。这是从相同的初始密钥材料派生多个密钥的非常好的方法。我建议你使用HKDF从最初的32字节密钥中导出两个密钥,而不是直接从HMAC密钥导出AES密钥。通常,您可以将32字节IKM拉伸到48个字节,然后将其拆分为两个键。
这假设最初的32字节密钥材料是随机的。如果不是,您应该使用PBKDF2(或其他密码担架,如scrypt或bcrypt)将您的密钥材料拉伸到48个字节,然后将其拆分为两个密钥。 HKDF的算法速度太慢,无法与人工创建的密码一起使用。