Intel RDSEED指令

• 本文约 352 字,阅读大致需要 1 分钟 | Security | #Intel | #RDSEED | #RDRAND | #RNG | #Security | #Hardware

今天看到John Baldwin commit的这个 r266391 增加了相关支持。

RDSEED和RDRAND的区别是RDRAND采用的是128-bit AES密钥的CTR-DRBG,而RDSEED则是直接从真随机数发生器中获得输出(两者并不是直接使用真随机发生器的输出,这些输出是做过AES-CBC-MAC处理的,防止外界通过观测输出了解内部运行的细节),较慢,后者具备multiplicative prediction resistance特性。

具体细节可以参考 Intel® Digital Random Number Generator (DRNG) Software Implementation GuideThe Difference Between RDRAND and RDSEED

Intel的后一份文档中建议实现PRNG时使用RDSEED,不太清楚这样做是否会同时复位RDRAND的状态?假如不复位的话,这样做似乎也意义不太大?(PRNG的实现者应该从更多的地方收集entropy而不是假定真随机发生器的输出可信)。

此外,DRNG用的AES-CBC-MAC这个事情,我认为是一把双刃剑(虽然用比不用要好),因为这样一来便很难验证来自硬件的随机数是否具有某些特性了(此外我找到的文档也没有具体描述如何AES-CBC-MAC是如何使用的)。