对于确定性场景,我想要多次派生出一个键,其中我可以从单个场景中获得n个键。
逻辑看起来是这样的:
masterKey = random 128-bit
For i from 0 to n:
let key[i] = CMAC(masterKey, i)这是一种生成多个键的正确方法,还是有缺陷?
发布于 2016-05-09 16:14:04
CMAC(masterKey, i)通常应该就足够了,是的。请注意,您需要为i指定一个编码(例如,八进制字符串由i的大端编码组成,左填充为零值八进制,最多可达4个八进制)。
不过,最好是实现NIST SP 800-108:“使用伪随机函数进行密钥推导的建议”中定义的方案之一。请注意,CMAC是一个伪随机函数(PRF),并在本标准中明确提到。
我推荐NIST SP 800-108计数器模式(5.1节),这是比较常见的,易于实现。注意,标准中的计数器i与您对i的定义不同。标准中的i用于为单个密钥导出比PRF能够生成的更多的密钥材料(例如,在AES-CMAC情况下,超过128位)。如果您遵循标准,那么您的i应该在Context变量中进行编码。
https://crypto.stackexchange.com/questions/35176
复制相似问题