← 返回卷宗
數據預測

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

 

本文由 三符道長 撰於 2016年6月2日。轉載請註明出處。