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