从更长的密钥中导出密钥

Derive secret key from a longer secret key

我使用用户提供的 32 字节密钥使用 HMAC-256 对一些数据进行签名。我还希望我的应用程序使用 AES-192 加密数据。我应该向用户询问另一个密钥(这次是 16 字节大小)还是有安全的方法从另一个 32 字节密钥派生出 16 字节强密钥?第二种方法会使应用程序配置更容易一些。有什么指导方针或提示吗?或者这种方法完全是胡说八道?

用于此的工具是 HKDF。这是从相同的初始键控 material 派生多个密钥的非常好的方法。我建议您使用 HKDF 从最初的 32 字节秘密派生两个密钥,而不是直接从 HMAC 密钥派生 AES 密钥。通常,您会将 32 字节的 IKM 扩展到 48 字节,然后将其拆分为两个密钥。

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