電腦隨機數(shù)是如何生成的?
不論是維持著你余額寶安全的加密過程還是你在玩《戰(zhàn)地4》,電腦都會產(chǎn)生隨機數(shù)。目前有兩類隨機數(shù)——“真”隨機數(shù)和偽隨機數(shù)——兩者的區(qū)別關(guān)乎加密系統(tǒng)的安全度。
對于隨機數(shù)的討論日漸升溫,許多人懷疑英特爾內(nèi)置于各種硬件內(nèi)的隨機數(shù)生成芯片是不是靠得住。要理解為什么這種隨機數(shù)不太可靠,你必須理解隨機數(shù)的生成原理。
隨機數(shù)的作用
隨機數(shù)的使用歷史已經(jīng)有數(shù)千年。無論是拋硬幣還是搖色子,目的是讓隨機概率決定結(jié)果。電腦中的隨機數(shù)生成器的目的也是如此——生成隨機不可預(yù)測的結(jié)果。
加密法要求數(shù)字不能被攻擊者猜到,不能多次使用同樣的數(shù)字。所以需要一種機制產(chǎn)生攻擊者無法預(yù)測的數(shù)字,這些隨機數(shù)對加密法至關(guān)重要,無論你是加密文件還是訪問https協(xié)議網(wǎng)站,都需要用到隨機數(shù)。
真隨機數(shù)
如果電腦是靠代碼生成隨機數(shù),是不是意味著隨機數(shù)可以被預(yù)測?
根據(jù)隨機數(shù)的生成原理,我們把電腦隨機數(shù)分為兩類:“真”隨機數(shù)和偽隨機數(shù)。
要生成一個“真”隨機數(shù),電腦會檢測電腦外部發(fā)生的某種物理現(xiàn)象。比如說,電腦可以測量某個原子的放射性衰變。根據(jù)量子理論,原子衰變是隨機而不可測的,所以這就是宇宙中的'“純粹”隨機性。攻擊者永遠(yuǎn)無法預(yù)測原子衰變的發(fā)生時間,也就不可能猜出隨機值。
舉個更實際的例子,電腦會根據(jù)環(huán)境中的噪音或者采取你敲擊鍵盤的精確時間作為隨機數(shù)據(jù)或熵的生成依據(jù)。舉個例子,你的電腦監(jiān)測到你某天下午2點以后敲擊鍵盤的精確時間是0.23423523秒,有足夠的這些特定長數(shù)字你就能得到一個熵源,也就可以生成“真”隨機數(shù)。由于人不是機器,所以攻擊者無法掌握你的敲擊時間。Linux中的/dev/隨機設(shè)備生成隨機數(shù),“阻攔”訪問直到熵積累量足夠才返回一個真隨機數(shù)。
偽隨機數(shù)
偽隨機數(shù)這個概念是相對于“真”隨機數(shù)而言。電腦通過發(fā)送種子數(shù)值,運用算法產(chǎn)生某個看起來像隨機數(shù)的數(shù)字,但是實際上這個數(shù)字是可以預(yù)測的。因為電腦沒有從環(huán)境中收集到任何隨機信息。
雖然是偽隨機數(shù),但是并不是所有領(lǐng)域都不需要偽隨機數(shù)。比如,如果你在玩電子游戲,那么游戲過程中是靠偽隨機數(shù)還是真隨機數(shù)并不重要。另一方面,如果你的應(yīng)用正在加密,情況就不同了,因為你不希望攻擊者能夠猜到你的隨機數(shù)。
舉個例子,如果攻擊者掌握了某隨機數(shù)生成器使用的種子數(shù)值和加密算法,如果隨機數(shù)生成器完全依靠種子數(shù)值和加密算法生成密文,這個過程中不添加任何額外隨機性,如果攻擊者掌握的情報足夠多,他們可以逆推來確定加密算法一定會用到的偽隨機數(shù),也就能破譯密文。
NSA和Intel的硬件隨機數(shù)生成器
為了幫助程序開發(fā)者更簡單的生成隨機數(shù),也為了幫助生成安全的隨機數(shù),Intel的芯片組中包括一個硬件隨機數(shù)生成器,名叫RdRand,這塊芯片利用處理器的熵源向軟件提供隨機數(shù)。
問題是這個隨機數(shù)生成器是個黑盒,我們不清楚里面的工作原理。如果RdRand藏有NSA的后門,那么政府就可以破譯依靠隨機數(shù)生成器提供的唯一數(shù)據(jù)產(chǎn)生的密鑰。
這個問題非常嚴(yán)重。在2013年12月,F(xiàn)reeBSD的開發(fā)者們?nèi)∠藢χ苯硬捎肦dRand作為隨機數(shù)源的支持,理由是無法信任Intel。RdRand設(shè)備的輸出結(jié)果會用另一套加密算法增加額外熵,確保隨機數(shù)服務(wù)器中即便有后門程序也不會產(chǎn)生影響。Linux已經(jīng)這么做了,在RdRand的隨機數(shù)基礎(chǔ)上再次進(jìn)行隨機處理,以確保后門程序不可能從中作祟。Intel總裁Brian Krzanich在Reddit上沒有直接回答關(guān)于是否裝有后門的問題。
當(dāng)然這不是Intel一家的問題,F(xiàn)reeBSD的開發(fā)者們也點了Via芯片的名。從這場爭論中我們可以看出為什么不可預(yù)測的真隨機數(shù)如此重要。
而隨機數(shù)生成器生成“真”隨機數(shù)只需要搜集熵或者從真實世界搜集看似隨機的數(shù)據(jù)。對于某些不需要真正隨機的應(yīng)用,隨機生成器可能會通過算法和種子數(shù)值算出隨機數(shù)。
【電腦隨機數(shù)是如何生成的?】相關(guān)文章:
如何重裝電腦系統(tǒng)04-14
電腦顯卡是怎么看11-30
電腦入門:什么是DDR內(nèi)存04-08
電腦上網(wǎng)慢是怎么解決圖解11-29
如何離婚的具體手續(xù)是怎樣的05-02