引 言
隨機(jī)數(shù)已廣泛地應(yīng)用于仿真,、抽樣、數(shù)值分析,、計(jì)算機(jī)程序設(shè)計(jì),、決策、美學(xué)和娛樂(lè)之中,。常見(jiàn)的隨機(jī)數(shù)發(fā)生器有兩種:使用數(shù)學(xué)算法的偽隨機(jī)數(shù)發(fā)生器和以物理隨機(jī)量作為發(fā)生源的真隨機(jī)數(shù)發(fā)生器,。要獲取真正隨機(jī)的真隨機(jī)數(shù),,常使用硬件隨機(jī)數(shù)發(fā)生器的方法來(lái)獲取,。這些真隨機(jī)數(shù)都是使基于特定的真隨機(jī)數(shù)發(fā)生源(如熱噪聲、電流噪聲等),,每次獲取的真隨機(jī)數(shù)都是不可測(cè)的,,具有很好的隨機(jī)性。
真隨機(jī)數(shù)因其隨機(jī)性強(qiáng),,在數(shù)據(jù)加密,、信息輔助、智能決策和初始化向量方面有著廣泛應(yīng)用,,構(gòu)建一種基于硬件真隨機(jī)數(shù)發(fā)生源,,具有廣泛的應(yīng)用價(jià)值。但目前硬件真隨機(jī)數(shù)發(fā)生源均較復(fù)雜,,而且很少有基于單片機(jī)的真隨機(jī)數(shù)發(fā)生器,。本文利用RC充放電的低穩(wěn)定度,根據(jù)AVR單片機(jī)的特點(diǎn)設(shè)計(jì)了一種性?xún)r(jià)比極高的真隨機(jī)數(shù)發(fā)生器,。該隨機(jī)數(shù)發(fā)生器使用元件很少,,穩(wěn)定性高,對(duì)一些價(jià)格敏感的特殊場(chǎng)合,,如金融,、通信、娛樂(lè)設(shè)備等有較大的應(yīng)用意義,。
1 基本原理和方法
1.1 基本原理
串聯(lián)的RC充放電電路由于受到漏電流,、電阻熱噪聲、電阻過(guò)剩噪聲,、電容極化噪聲等諸多不確定性因素的影響,,其充放電穩(wěn)定度一般只能達(dá)到10-3。利用這種RC充放電的低穩(wěn)定度特性實(shí)現(xiàn)廉價(jià)的真隨機(jī)數(shù)發(fā)生源,。
Atmel公司AVR單片機(jī)ATmega 128以其速度快,、功能強(qiáng),、性?xún)r(jià)比高等優(yōu)點(diǎn)廣泛應(yīng)用于各種嵌入式計(jì)算場(chǎng)合。利用AVR單片機(jī)引腳配置靈活多樣的特點(diǎn),,使用Amnega128兩個(gè)I/O口作為真隨機(jī)數(shù)的電氣接口,。
其原理如圖1所示。主要原理是利用串聯(lián)RC電路的不確定性產(chǎn)生真隨機(jī)數(shù)源,,收集數(shù)據(jù),,通過(guò)AVR單片機(jī)ATmega128和主時(shí)鐘電路量化RC電路的充放電時(shí)問(wèn),獲得不確定的2位二進(jìn)制數(shù)據(jù),,再利用程序?qū)⒚?次采集的數(shù)據(jù)綜合,,最后產(chǎn)生1個(gè)8位的真隨機(jī)數(shù)。
1.2 方 法
1.2.1 RC電路充放電過(guò)程
I/O口配置策略為:PG3 口(第18腳)作為充電輸出口,,PG4 口(第19腳)作為檢測(cè)輸入口,。當(dāng)PG3輸出為高時(shí),輸出電流通過(guò)電阻對(duì)電容進(jìn)行充電,;當(dāng)PG3輸出為低時(shí),,電容通過(guò)電阻放電。PG4用于檢測(cè)電容上的電平狀態(tài),。充放電過(guò)程如圖2所示,。
1.2.2 AVR單片機(jī)獲得不確定的2位二進(jìn)制數(shù)據(jù)
AVR單片機(jī)主時(shí)鐘采用普通晶體振蕩器。用該主時(shí)鐘來(lái)測(cè)量RC電路的充放時(shí)間,,用AVR單片機(jī)的定時(shí)器(1個(gè)16位定時(shí)器)來(lái)量化充放電時(shí)間,。由于主時(shí)鐘的周期遠(yuǎn)遠(yuǎn)小于RC充放電時(shí)間,觀察實(shí)驗(yàn)數(shù)據(jù),,最低2位二進(jìn)制有效數(shù)字具有不確定性,。以下為AVR單片機(jī)定時(shí)器對(duì)外部RC電路進(jìn)行3次充電和2次放電所花時(shí)間的量化值:
1.2.3 程序設(shè)計(jì)
由以上數(shù)據(jù)統(tǒng)計(jì)特征可見(jiàn),每次測(cè)量結(jié)果僅有兩位不確定二進(jìn)制數(shù)據(jù),。為了產(chǎn)生1個(gè)8位數(shù)據(jù),,設(shè)計(jì)了C語(yǔ)言程序控制專(zhuān)用函數(shù)測(cè)量4次,每次得到了2個(gè)二進(jìn)制隨機(jī)數(shù),,這樣調(diào)用該函數(shù)1次即可得到1字節(jié)的隨機(jī)數(shù),。
主要程序如下:
2 實(shí)驗(yàn)結(jié)果和分析
經(jīng)實(shí)驗(yàn),得到兩位不確定二進(jìn)制數(shù)的概率分布,。
5 min后數(shù)據(jù)分布:P(00)=16%,,P(01)=19%,P(10)=37%,,P(11)=28%,。
10 min后的數(shù)據(jù)分布:P(00)=16%,P(01)=21%,,P(10)=38%,,P(11)=25%,。
22 min后的數(shù)據(jù)分布:P(00)=14%,P(01)=23%,,P(10)=38%,,P(11)=25%。
37 min后的數(shù)據(jù)分布:P(00)=16%,,P(01)=26%,,P(10)=36%,P(11)=22%,。
以上數(shù)據(jù)由單片機(jī)統(tǒng)計(jì)后經(jīng)串口直接輸出到超級(jí)終端的顯示參數(shù),。
25℃下產(chǎn)生的3 500個(gè)8位數(shù)據(jù)的分布如圖3所示。
從圖中可以看出,,有4個(gè)區(qū)間分布概率較大,,分別是[0,32],、[40,,90],、[160,,225]、[230,,255],。產(chǎn)生這樣的分布和具體使用的元器件特性以及測(cè)試現(xiàn)場(chǎng)的環(huán)境有關(guān)。在采集得到大量的序列后,,通過(guò)計(jì)算機(jī)分析沒(méi)有發(fā)現(xiàn)有周期重復(fù)性,。
3 提高性能的措施
在實(shí)際應(yīng)用中,若采用該方法產(chǎn)生的隨機(jī)數(shù)進(jìn)行數(shù)據(jù)加密時(shí),,為防止解密者拆除,、短接RC電路或更改RC電路參數(shù),可利用測(cè)得的充放電時(shí)間來(lái)確定外部RC電路的存在和參數(shù)的穩(wěn)健,。如若充放電時(shí)間不在程序預(yù)先設(shè)定的區(qū)間內(nèi),,單片機(jī)立即銷(xiāo)毀相關(guān)數(shù)據(jù)并停止程序運(yùn)行,從而達(dá)到加密的效果,。
提高隨機(jī)數(shù)產(chǎn)生速率,。采用本文的方法產(chǎn)生的隨機(jī)數(shù)的速率和RC充放電時(shí)間有關(guān)系,由于RC充放電速率影響,,在產(chǎn)生高速率隨機(jī)數(shù)的時(shí)候不合適,。針對(duì)該問(wèn)題,可將得到的真隨機(jī)數(shù)作為種子來(lái)產(chǎn)生一定數(shù)量的偽隨機(jī)數(shù),,這樣可大大提高產(chǎn)生隨機(jī)數(shù)的速率,。
結(jié) 語(yǔ)
設(shè)計(jì)和實(shí)現(xiàn)了一種基于AVR單片機(jī)的真隨機(jī)數(shù)發(fā)生器,,利用RC充放電電路的不穩(wěn)定性完成了真隨機(jī)數(shù)的產(chǎn)生。該隨機(jī)數(shù)發(fā)生器利用AVR單片機(jī)少量硬件資源完成,,具有設(shè)計(jì)簡(jiǎn)單,,成本低廉的優(yōu)點(diǎn)。最后提出了軟硬件結(jié)合的方式,,提高了該隨機(jī)數(shù)發(fā)生器的性能,,拓展了該真隨機(jī)數(shù)發(fā)生器的應(yīng)用范圍。