我一直在研究如何为HMAC_SHA256算法生成一个强大的256位/32字节对称密钥。我偶然发现了/proc/sys/内核/随机/uuid文件。
根据人随机(4):“只读文件uuid和boot_id包含随机字符串,如6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9。前者是为每次读取重新生成的,后者是生成一次的。”
来自cat /proc/sys/kernel/random/uuid
的字符串看起来非常适合这个目的。我可以删除“-”字符,并以32字节的随机性结束。
这是一种有效的方法来生成加密强的密钥材料源吗?
发布于 2013-01-07 11:40:27
这是个老问题,但万一有人发现了这个问题,我不会建议你这样做。
/proc/sys/kernel/random/uuid
是一个具有特定语义的4(随机) UUID --它不仅仅是一串随机十六进制字符。例如,您将看到第三组中的第一个数字总是4。
对于256个随机位,只需从/dev/random
(使用外部熵,can块)或/dev/urandom
(从不块)读取32个字节。
发布于 2016-11-19 00:59:05
o172.net是最好的答案,可以直接评论,但不能。
/proc/sys/kernel/random/uuid
是以urandom
为基础的,但最好是直接从核武器中获取。
下面是如何从shell中获取它,下面是32个ascii十六进制字节:
echo $(tr -dc a-f0-9 < /dev/urandom | dd bs=32 count=1 2> /dev/null)
您可以通过tr
参数更改char集,字节由
dd bs=
or not use tr
得到随机二进制数。
发布于 2011-05-03 17:22:28
你会依赖定义明确的确定性伪随机算法来生成密钥吗?基本上这就是问题所在。
我会说,以UUID作为密钥的基础,但是使用您的秘密密钥对其进行一次加密。
https://stackoverflow.com/questions/5873099
复制相似问题