偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

人類對隨機數(shù)的探索:如何才能生成一個均勻的隨機數(shù)列

企業(yè)動態(tài)
今天,關(guān)于隨機數(shù)生產(chǎn)方法選擇的爭論仍存在于在操作系統(tǒng)內(nèi)核,編程語言,和安全包(如 OpenSSL 或者 OpenSSH)等方面。那么,我們?nèi)绾尾拍苌梢粋€均勻的隨機數(shù)序列?

[[192532]]
作者 | Carl Tashian   編譯 | 陳遠鵬  Melody

[[192533]]

羅馬12毫米骰子,PAS(一個英國政府管理下的保護文物志愿者組織)/大英博物館董事(CC BY-SA 2.0)

統(tǒng)計學家弗朗西斯 · 加爾頓于1890 年《自然》雜志上寫道:“作為一個選擇隨機的工具,我發(fā)現(xiàn)沒有什么優(yōu)于骰子。把它們?nèi)舆M裝骰子的盒子中搖動,它們彼此相互沖撞,并與盒壁碰彈,不停的滾動,即使在一次搖骰子中,骰子的最初朝向也無法為其最終的朝向提供任何有用的線索。”

我們?nèi)绾尾拍苌梢粋€均勻的隨機數(shù)序列?大自然中產(chǎn)生的如此美麗和豐富的隨機性并不總可以被輕松的提取和量化。最古老的骰子是在公元前24世紀中東的一個墳?zāi)怪斜话l(fā)現(xiàn)的。大約在公元前1100年,在中國,龜卜中火熱龜殼直到其隨機破裂,然后占卜者對龜殼裂縫進行解釋。幾個世紀之后,易經(jīng)卜卦中將49條蓍草莖放在桌子上,按一定規(guī)則切分幾次,其結(jié)果類似于執(zhí)行硬幣投擲。

隨機數(shù)

摘自《A Million Random Digits with 100,000 Normal Deviates》

但是到了二十世紀40年代中期,現(xiàn)代世界需要更多的隨機數(shù),遠超過骰子和蓍草莖可提供的范圍。蘭德公司研發(fā)了一種機器可以使用隨機脈沖發(fā)生器產(chǎn)生隨機數(shù)。他們運行了一段時間,并收集到一本書中《A Million Random Digits with 100,000 Normal Deviates》?,F(xiàn)在看來,這似乎是一個好笑的藝術(shù)項目,但在當時卻是一大突破,這是第一次為公眾提供了一個高質(zhì)量的長隨機數(shù)序列。蘭德公司在2001重印了該書,現(xiàn)在在亞馬遜上可以購買。

另外還有一個類似的機器:搖獎機,是有當時著名的Bletchley Park WWII 破譯小組于上世紀40年代設(shè)計的,用來為英國的保險債券彩票產(chǎn)生隨機數(shù)。為了減輕對ERNIE公正性和準確性的擔憂,公司做了一個偉大的紀錄片,稱為“E.R.N.I.E.的重要性”,非常值得一看:The Importance of Being E.R.N.I.E. 。

1951年,隨機數(shù)生成終于被正式地內(nèi)嵌到一臺真正的計算機中:Ferranti Mark 1 ,它帶有一個內(nèi)置的隨機數(shù)指令,可以使用電氣噪聲一次生產(chǎn)20個隨機比特。這個功能由阿蘭·圖靈設(shè)計,Christopher Strachey 通過利用它編寫一個隨機的情書發(fā)生器。下面是一個情書的例子,來自David Link該項目的2009 復(fù)合計劃。

親愛的,

我對你的可愛迷戀至極。

你勾起了我所有對情愛的幻想。

我為你而狂熱。

你的魅力使我對你充滿了渴望。

我的心隨你在而讓我無法呼吸。

你的追求者

M.U.C

但是圖靈的隨機數(shù)字指令讓當時的程序員感到非常困惑,因為它在一個已經(jīng)如此不可預(yù)測的環(huán)境中造成了太多的不確定性。人們期望軟件的一致性,但使用該指令的程序永遠無法以一種一致性的可重復(fù)方式運行,這使得測試幾乎不可能。

如果一個隨機數(shù)發(fā)生器可以表示為確定性函數(shù)呢?如果可以重復(fù)調(diào)用一個隨機數(shù)序列,但在相同的初始化條件下,它總是會產(chǎn)生相同的序列呢?這就是偽隨機數(shù)發(fā)生器(PRNG)。

馮·諾依曼在1946年左右開發(fā)了一個PRNG,他的想法是從一個初始的隨機種子值開始對其平方,然后截取平方結(jié)果的中間若干位,得到一個新的數(shù)字,接下來重復(fù)對得到的數(shù)取平方并截取中間若干位的過程,就會得到一個具有統(tǒng)計意義屬性的隨機數(shù)序列了,這也就是廣為人知的平方取中法。

馮·諾依曼的方法沒有經(jīng)受住時間的考驗,因為無論使用什么樣的種子值,序列最終會陷入一系列短重復(fù)周期的數(shù)字,如8100,6100,4100,8100,6100,4100……

當使用確定性函數(shù)生成隨機數(shù)序列時,如果后續(xù)值基于先前值,避免循環(huán)是不可能的。但是如果周期足夠長,使之對隨機序列實際上影響不大呢?

依照這一想法,數(shù)學家D.H.Lehmer在1949年提出了線性同余生成器(LCG)。這里介紹一個簡單的PRNG,叫做中央隨機數(shù)生成器,便是基于Lehmer的方法,于1995年采用JavaScript編寫實現(xiàn)如下:

中央隨機數(shù)生成器

注意這里的所有幻數(shù),選擇這些數(shù)字(通常是素數(shù))用來最大化周期:在rand()生成序列之前迭代次數(shù)將自我重復(fù)。該PRNG使用當前時間作為種子值,其周期值約為2的31次方。

中央隨機生成器指針變得流行是因為JavaScript 1.0沒有內(nèi)置的Math.random()函數(shù),每個人都希望他們的Web 1.0橫幅廣告隨機旋轉(zhuǎn)。開發(fā)者Paul Houle寫道:“我不會用它來保密,但它對許多用途都是有好處的。”

然而互聯(lián)網(wǎng)確實需要保密。 SSL誕生于1995年左右,其加密方案要求高質(zhì)量的PRNG,這種發(fā)展可能導(dǎo)致了一段RNGs 迅猛創(chuàng)新的時期。如果查看所有的隨機數(shù)生成器的專利,可能會感覺就像現(xiàn)代版的第一次制造飛機的浪潮一樣。

20世紀90年代中期最常見的CPU沒有生產(chǎn)隨機數(shù)的指令,所以好的隨機種子很難在當時得到。當Phillip Hallam-Baker發(fā)現(xiàn)Netscape的SSL網(wǎng)絡(luò)服務(wù)器(當時市場上最大的一個)使用當前時間和幾個進程ID的組合作為其隨機數(shù)生成器的種子時,才意識這將成為一個真正的安全問題。哈拉姆·貝克(Hallam-Baker)表示,攻擊者可以很容易地猜到種子值,并采用各種手段解密服務(wù)器的流量。 猜測種子值是一種常見的攻擊,盡管它已經(jīng)變得越來越復(fù)雜了。這是 2009年在 Hacker News 上的一段非常經(jīng)典的攻擊演練。

到1997年,計算機科學家們對生成隨機數(shù)的有限選項感到厭倦,所以SGI的一個團隊創(chuàng)建了LavaRand,這是一個網(wǎng)絡(luò)攝像頭,指向桌面上的幾個熔巖燈。相機的圖像數(shù)據(jù)是一個很好的熵源:就像圖靈的真正隨機數(shù)生成器(TRNG),并且它可以以165Kb / s的速率生成隨機數(shù)據(jù)。在當時的硅谷時代,熔巖燈平臺迅速獲得專利。

Autodesk的創(chuàng)始人約翰·沃克(John Walker)意圖在世界各地推廣他的 HotBits,一個隨機數(shù)字生成服務(wù)應(yīng)用程序,由一個保證真正量子隨機性的蓋革計數(shù)器支持。 Random.org創(chuàng)建于1998,為互聯(lián)網(wǎng)提供免費的隨機數(shù),他們現(xiàn)在提供的手機應(yīng)用程序可以實現(xiàn)真正的隨機拋硬幣,扔骰子,撲克洗牌等。

大多數(shù)的這些發(fā)明都半途而廢,但是一個叫做梅森旋轉(zhuǎn)隨機數(shù)生成器(The Mersenne Twister)的PRNG 軟件被推廣,在1997 由松本眞和西村拓士發(fā)明。它完美地平衡了性能和隨機數(shù)的質(zhì)量,并且經(jīng)受住了時間的考驗。它基于線性反饋移位寄存器(LFSR)的思想,產(chǎn)生一個循環(huán)周期非常長的確定性序列。近期的應(yīng)用中,其循環(huán)周期可達到 2¹⁹⁹³⁷− 1。在如今的編程語言中,這種算法依舊是默認的 PRNG。

終于在1999發(fā)生了一個很大的轉(zhuǎn)變。英特爾在其i810芯片組中增加了一個內(nèi)置的隨機數(shù)發(fā)生器。這使得新的服務(wù)器具備了來自熱噪聲的本地源隨機數(shù)生成能力——真正的隨機數(shù)生成器(TRNG)。這非常具有進步意義,但速度仍不如軟件PRNGs快,所以加密軟件仍然不得不依靠一個偽隨機數(shù)發(fā)生器。

這節(jié)我們介紹安全加密的PRNG(CSPRNG),(這些縮寫!難怪有些人認為計算機科學是枯燥的。)在SSL的時代CSPRNG非常重要。什么是CSPRNG?這里有一份 131 頁的論文來介紹 CSPRNG,希望你能愉快閱讀。

不言而喻,CSPRNG 具有很強的要求。梅森旋轉(zhuǎn)隨機數(shù)生成器并不是一種 CSPRNG,因為如果可以給定大量的先前序列樣本,后面的數(shù)字可以預(yù)計出來。最近,2012年英特爾在真隨機數(shù)發(fā)生器上增加了 RDRAND 和RDSEED指令,采用片上熱噪聲發(fā)生器可提供500MB/s的吞吐量。但RDRAND 的完整性一直被質(zhì)疑。是不是存在細小的缺陷?或者是為國家安全局內(nèi)置了什么東西?沒有人知道這個問題的答案。我猜某些地方的某些人一定知道,可是他們也一定不會公開。

采用硬件隨機數(shù)生成器 PEDOUBLER 生成的隨機數(shù)。

開源硬件TRNGs于最近些年出現(xiàn),其優(yōu)點源自于設(shè)計的透明化:你可以檢查電路本身,也可以在家里使用現(xiàn)成的組件建立它們。完全透明的設(shè)計不會讓人懷疑這些電路優(yōu)秀的隨機性。REDOUBLER和無限噪聲 TRNG是兩個開源硬件隨機數(shù)生成器,鏈接中給出他們的 Github 源碼地址。

今天,關(guān)于隨機數(shù)生產(chǎn)方法選擇的爭論仍存在于在操作系統(tǒng)內(nèi)核,編程語言,和安全包(如 OpenSSL 或者 OpenSSH)等方面。這些算法存在多種變形用以滿足不同的速度、空間和安全要求,安全專家總是在尋找新的方法來攻破已有算法的實現(xiàn)。但是對于日常使用,在大多數(shù)的操作系統(tǒng)中我們可以放心地使用 /dev/random,或者編程語言中的 rand() 函數(shù),它們都可以快速得到一段足夠長的隨機數(shù)列,并且你這么做,阿蘭·圖靈也會很開心。

來源:https://medium.freecodecamp.com/a-brief-history-of-random-numbers-9498737f5b6c

【本文是51CTO專欄機構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

 

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2011-03-28 14:57:58

不重復(fù)隨機數(shù)列生成

2024-11-01 15:51:06

2019-09-11 10:09:00

Java虛擬機算法

2017-05-18 10:00:40

Linuxpandom隨機數(shù)生成器

2010-03-22 19:41:31

2009-12-02 17:01:01

PHP隨機數(shù)rand()

2019-12-26 14:07:19

隨機數(shù)偽隨機多線程

2022-06-17 11:04:46

生成器計算

2010-03-11 12:48:25

Python生成隨機數(shù)

2021-12-27 09:31:20

HashtableJava隨機數(shù)

2012-03-22 09:31:14

Java

2015-10-13 10:00:58

Swift隨機數(shù)使用總結(jié)

2009-12-08 12:58:33

PHP隨機數(shù)類

2010-07-15 13:34:32

Perl隨機數(shù)

2024-05-15 09:09:49

2021-06-01 22:31:57

區(qū)塊鏈隨機數(shù)技術(shù)

2011-07-08 15:11:03

JAVA

2010-10-09 15:35:25

MySQL rand函

2024-01-25 11:32:21

2016-05-31 10:29:09

點贊
收藏

51CTO技術(shù)棧公眾號