从较长的密钥导出密钥

LuM*_*uMa 1 encryption cryptography aes digital-signature hmac

我使用用户提供的 32 字节密钥来使用 HMAC-256 签署一些数据。我还希望我的应用程序使用 AES-192 加密数据。我应该要求用户提供另一个密钥(这次大小为 16 字节),还是有一种安全的方法可以从另一个 32 字节密钥派生出 16 字节强密钥?第二种方法将使应用程序配置更容易一些。有什么指导方针或提示吗?或者这种做法完全是无稽之谈?

Rob*_*ier 6

用于此目的的工具是HKDF。这是从相同的初始密钥材料派生多个密钥的非常好的方法。我建议您使用 HKDF 从初始 32 字节密钥中派生出两个密钥,而不是直接从 HMAC 密钥中派生出 AES 密钥。通常,您会将 32 字节 IKM 拉伸到 48 字节,然后将其拆分为两个密钥。

这是假设初始 32 字节密钥材料是随机的。如果不是,您应该使用 PBKDF2(或其他密码扩展器,如 scrypt 或 bcrypt)将密钥材料扩展至 48 字节,然后将其拆分为两个密钥。HKDF 的算法速度太快,无法与人工创建的密码一起使用。