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