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)
			:
			: "dx"
			);
	}

	return ok;
}

 

网络上也有包装好的JAVA库,https://github.com/cambecc/drnglib

 

《Inter cpu 获取真随机数》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注