《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > ATmega128單片機(jī)的真隨機(jī)數(shù)發(fā)生器
ATmega128單片機(jī)的真隨機(jī)數(shù)發(fā)生器
摘要: 本文利用RC充放電的低穩(wěn)定度,根據(jù)AVR單片機(jī)的特點設(shè)計了一種性價比極高的真隨機(jī)數(shù)發(fā)生器。該隨機(jī)數(shù)發(fā)生器使用元件很少,穩(wěn)定性高,對一些價格敏感的特殊場合,如金融、通信、娛樂設(shè)備等有較大的應(yīng)用意義。
Abstract:
Key words :

  引 言

  隨機(jī)數(shù)已廣泛地應(yīng)用于仿真、抽樣、數(shù)值分析、計算機(jī)程序設(shè)計、決策、美學(xué)和娛樂之中。常見的隨機(jī)數(shù)發(fā)生器有兩種:使用數(shù)學(xué)算法的偽隨機(jī)數(shù)發(fā)生器和以物理隨機(jī)量作為發(fā)生源的真隨機(jī)數(shù)發(fā)生器。要獲取真正隨機(jī)的真隨機(jī)數(shù),常使用硬件隨機(jī)數(shù)發(fā)生器的方法來獲取。這些真隨機(jī)數(shù)都是使基于特定的真隨機(jī)數(shù)發(fā)生源(如熱噪聲、電流噪聲等),每次獲取的真隨機(jī)數(shù)都是不可測的,具有很好的隨機(jī)性。

  真隨機(jī)數(shù)因其隨機(jī)性強(qiáng),在數(shù)據(jù)加密、信息輔助、智能決策和初始化向量方面有著廣泛應(yīng)用,構(gòu)建一種基于硬件真隨機(jī)數(shù)發(fā)生源,具有廣泛的應(yīng)用價值。但目前硬件真隨機(jī)數(shù)發(fā)生源均較復(fù)雜,而且很少有基于單片機(jī)的真隨機(jī)數(shù)發(fā)生器。本文利用RC充放電的低穩(wěn)定度,根據(jù)AVR單片機(jī)的特點設(shè)計了一種性價比極高的真隨機(jī)數(shù)發(fā)生器。該隨機(jī)數(shù)發(fā)生器使用元件很少,穩(wěn)定性高,對一些價格敏感的特殊場合,如金融、通信、娛樂設(shè)備等有較大的應(yīng)用意義。

  1 基本原理和方法

  1.1 基本原理

  串聯(lián)的RC充放電電路由于受到漏電流、電阻熱噪聲、電阻過剩噪聲、電容極化噪聲等諸多不確定性因素的影響,其充放電穩(wěn)定度一般只能達(dá)到10-3。利用這種RC充放電的低穩(wěn)定度特性實現(xiàn)廉價的真隨機(jī)數(shù)發(fā)生源。

  Atmel公司AVR單片機(jī)ATmega 128以其速度快、功能強(qiáng)、性價比高等優(yōu)點廣泛應(yīng)用于各種嵌入式計算場合。利用AVR單片機(jī)引腳配置靈活多樣的特點,使用Amnega128兩個I/O口作為真隨機(jī)數(shù)的電氣接口。

  其原理如圖1所示。主要原理是利用串聯(lián)RC電路的不確定性產(chǎn)生真隨機(jī)數(shù)源,收集數(shù)據(jù),通過AVR單片機(jī)ATmega128和主時鐘電路量化RC電路的充放電時問,獲得不確定的2位二進(jìn)制數(shù)據(jù),再利用程序?qū)⒚?次采集的數(shù)據(jù)綜合,最后產(chǎn)生1個8位的真隨機(jī)數(shù)。

電路原理圖

  1.2 方 法

  1.2.1 RC電路充放電過程

  I/O口配置策略為:PG3 口(第18腳)作為充電輸出口,PG4 口(第19腳)作為檢測輸入口。當(dāng)PG3輸出為高時,輸出電流通過電阻對電容進(jìn)行充電;當(dāng)PG3輸出為低時,電容通過電阻放電。PG4用于檢測電容上的電平狀態(tài)。充放電過程如圖2所示。

充放電過程

  1.2.2 AVR單片機(jī)獲得不確定的2位二進(jìn)制數(shù)據(jù)

  AVR單片機(jī)主時鐘采用普通晶體振蕩器。用該主時鐘來測量RC電路的充放時間,用AVR單片機(jī)的定時器(1個16位定時器)來量化充放電時間。由于主時鐘的周期遠(yuǎn)遠(yuǎn)小于RC充放電時間,觀察實驗數(shù)據(jù),最低2位二進(jìn)制有效數(shù)字具有不確定性。以下為AVR單片機(jī)定時器對外部RC電路進(jìn)行3次充電和2次放電所花時間的量化值:

量化值

  1.2.3 程序設(shè)計

  由以上數(shù)據(jù)統(tǒng)計特征可見,每次測量結(jié)果僅有兩位不確定二進(jìn)制數(shù)據(jù)。為了產(chǎn)生1個8位數(shù)據(jù),設(shè)計了C語言程序控制專用函數(shù)測量4次,每次得到了2個二進(jìn)制隨機(jī)數(shù),這樣調(diào)用該函數(shù)1次即可得到1字節(jié)的隨機(jī)數(shù)。

  主要程序如下:

程序

程序

  2 實驗結(jié)果和分析

  經(jīng)實驗,得到兩位不確定二進(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īng)串口直接輸出到超級終端的顯示參數(shù)。

  25℃下產(chǎn)生的3 500個8位數(shù)據(jù)的分布如圖3所示。

25℃下產(chǎn)生的3 500個8位數(shù)據(jù)的分布

  從圖中可以看出,有4個區(qū)間分布概率較大,分別是[0,32]、[40,90]、[160,225]、[230,255]。產(chǎn)生這樣的分布和具體使用的元器件特性以及測試現(xiàn)場的環(huán)境有關(guān)。在采集得到大量的序列后,通過計算機(jī)分析沒有發(fā)現(xiàn)有周期重復(fù)性。

  3 提高性能的措施

  在實際應(yīng)用中,若采用該方法產(chǎn)生的隨機(jī)數(shù)進(jìn)行數(shù)據(jù)加密時,為防止解密者拆除、短接RC電路或更改RC電路參數(shù),可利用測得的充放電時間來確定外部RC電路的存在和參數(shù)的穩(wěn)健。如若充放電時間不在程序預(yù)先設(shè)定的區(qū)間內(nèi),單片機(jī)立即銷毀相關(guān)數(shù)據(jù)并停止程序運(yùn)行,從而達(dá)到加密的效果。

  提高隨機(jī)數(shù)產(chǎn)生速率。采用本文的方法產(chǎn)生的隨機(jī)數(shù)的速率和RC充放電時間有關(guān)系,由于RC充放電速率影響,在產(chǎn)生高速率隨機(jī)數(shù)的時候不合適。針對該問題,可將得到的真隨機(jī)數(shù)作為種子來產(chǎn)生一定數(shù)量的偽隨機(jī)數(shù),這樣可大大提高產(chǎn)生隨機(jī)數(shù)的速率。

  結(jié) 語

  設(shè)計和實現(xiàn)了一種基于AVR單片機(jī)的真隨機(jī)數(shù)發(fā)生器,利用RC充放電電路的不穩(wěn)定性完成了真隨機(jī)數(shù)的產(chǎn)生。該隨機(jī)數(shù)發(fā)生器利用AVR單片機(jī)少量硬件資源完成,具有設(shè)計簡單,成本低廉的優(yōu)點。最后提出了軟硬件結(jié)合的方式,提高了該隨機(jī)數(shù)發(fā)生器的性能,拓展了該真隨機(jī)數(shù)發(fā)生器的應(yīng)用范圍。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。