我们有安全网 HSM。我们的系统要求我们生成 AES-256 密钥。我应该采取哪种方法?
指示 HSM 生成 AES 密钥。
使用 HSM 创建输入密钥材料并使用 HKDF 派生密钥。
HSM 应该能够生成高质量的密钥。是否需要第二种方法?
我想简要介绍一下目的,但在此之前:是的,HSM 已经可以生成高质量的 AES 密钥。在内部,HSM 使用自己的随机数生成器来实现熵。但是,您可以使用自己的随机数为 HSM 播种(通常,您可以使用真正的随机数生成器,例如来自 Idquantique 的QRNG)。使用像 QRNG 这样的硬件会增加密钥的随机性。
接下来,派生(如 HKDF)也可以生成强密钥,但一般来说,派生技术用于生成会话对称密钥,即用于为特定上下文/实体执行一些加密操作(如加密/解密)。
例如:您有一个主密钥(如 AES 密钥,由密钥交换机制生成的实习生),然后您可以派生此主密钥以生成会话密钥来加密/解密不同的实体。这是您使用不同的会话密钥来根据上下文执行加密图形操作。
所以对于第二点:要么你使用自己的密钥材料(希望你的密钥算法足够强大),要么使用上面概述的主密钥方法。
无论如何,您需要根据您要达到的目标来选择机制。
在信息部分查看 HKDF的RFC 5869 :
HKDF 遵循“extract-then-expand”范式,其中 KDF 在逻辑上由两个模块组成。第一阶段获取输入密钥材料并从中“提取”一个固定长度的伪随机密钥 K。第二阶段将密钥 K“扩展”为几个额外的伪随机密钥(KDF 的输出)。
这意味着如果您要使用 HSM 的 HRNG(硬件随机数生成器)然后使用 HKDF,那么您实际上将注入Pseudo-Randomness
您的 AES 密钥,这完全违背了目的。
选项#1 显然是正确的选择,否则使用 HSM 的 RNG 的全部意义就被打败了。