Archive 2016 年 6 月 2 日

Inter cpu 获取真随机数

Intel在IVB架构的第三代CPU酷睿处理器内置了一个利用电阻热噪声取得硬件真随机数的功能,这里的代码原理就是直接用汇编指令读取16位随机数到aex寄存器。2013年的时候,英国的Kyle Condon在Change.org发起请愿,请求维护者Linus Torvalds为改进内核安全从/dev/random中移除RdRand。因为RdRand是用于生成随机数的一个指令,包含在Intel 64和IA-32指令集架构中,它依赖的一个加密标准是NSA制定的NIST SP800-90,被怀疑存在后门。Linus Torvalds对请愿迅速做出了回应,痛骂了请愿者一顿,称对方太无知。因为在Linux系统中的随机器发生器上/dev/random,会在RdRand的随机数基础上再次进行随机处理,不但能避免出现有后门的情况,同时也可以改进随机数生成的质量。   int rdrand16_step(uint16_t *rand) { unsigned char ok; /* rdrand dx */ __asm { volatile(".byte 0x0f,0xc7,0xf0; setc %1" : "=a" (*rand), "=qm" (ok) :…

Read More