RdRand

RdRand

RDRAND(之前被稱為Bull Mountain)是一個計算機指令,用於從晶片上的硬體隨機數生成器中獲取隨機數。所用到的隨機數生成器由晶片上的池初始化。RDRAND指令在Ivy Bridge架構處理器上可用,該指令也是X86-64IA-32指令集的一部分。AMD在2015年6月添加了對RdRand指令的支持。

該隨機數生成器要遵守安全標準和加密標準,比如NIST SP 800-90A,FIPS 140-2和 ANSI X9.82。Intel也在1999年和2012年請密碼學研究 Cryptography Research 公司來審查這個隨機數發生器,並產生了兩篇論文:1999年的 The Intel Random Number Generator和2012年的 Analysis of Intels Ivy Bridge Digital Random Number Generator。

RDSEED和RDRAND類似,也提供了訪問硬體熵池的高級方法。 Intel Broadwell 系列的CPU和 AMD Zen 系列的CPU都支持RDSEED生成器和rdseed指令。

基本介紹

概覽,性能,編譯器支持,相關背景,

概覽

AMDIntel的CPU上,CPUID指令都可以檢測中央處理器(CPU)是否支持RDRAND指令。如果支持,調用CPUID的標準函式01H之後,EXC暫存器的第30位會被設定成1。AMD處理器也可以使用同樣的方式檢測是否支持。在Intel CPU上,也可以使用類似的方法檢測RDSEED是否支持。如果支持RDSEED,在調用完CPUID的標準函式07H後,EBX暫存器的第18位會被設定為1。
RDRAND的操作碼是0x0F 0xC7,後面跟一個ModRM位元組,來指示目標暫存器。在64位模式下,還可以於REX前綴結合(這是可選的)。
Intel安全密鑰是Intel為RDRAND指令和底層的隨機數生成器(RNG)的硬體實現的統稱,它在開發期間的代號是"Bull Mountain"。Intel稱自己的RNG"數字隨機數生成器"或DRNG。生成器採用有硬體產生的256位原始熵樣本對,並將其套用到一個高級加密標準(AES)(在CBC-MAC模式下)調節器,將其減少到256位條件熵樣本。
NIST SP 800-90A中定義了一個名叫CTR_DRBG的確定性隨機數生成器。它由調節器的輸出來初始化,為使用RDRAND指令的應用程式提供了密碼學安全的隨機數。在重新初始化之前,硬體將發出最多511個128位的樣本。使用RDSEED可以訪問來自AES-CBC-MAC的、條件化後的256位樣本。
為了初始化另一個為隨機數生成器,RDSEED指令被添加到了Intel安全密鑰,在Broadwell微架構的CPU上開始支持。RDSEED指令的熵來源自時序線路,並且使用矽片上的熱噪聲來以3GHz的速度輸出隨機比特流。這比從RDRAND獲得的6.4Gbit/s速率要慢(這兩個速率都是所有核心、所有執行緒共享)。RDSEED用來初始化任意寬度的軟體 PRNG,而RDRAND指令適用於需要高質量隨機數的應用程式。如果不要求密碼學安全,軟體隨機數生成器比如Xorshift一般會比較快。

熱門詞條

聯絡我們