历史上的今天
今天是:2025年02月02日(星期日)
2020年02月02日 | 基于AVR单片机的低成本真随机数发生器设计
2020-02-02 来源:elecfans
引 言
随机数已广泛地应用于仿真、抽样、数值分析、计算机程序设计、决策、美学和娱乐之中。常见的随机数发生器有两种:使用数学算法的伪随机数发生器和以物理随机量作为发生源的真随机数发生器。要获取真正随机的真随机数,常使用硬件随机数发生器的方法来获取。这些真随机数都是使基于特定的真随机数发生源(如热噪声、电流噪声等),每次获取的真随机数都是不可测的,具有很好的随机性。
真随机数因其随机性强,在数据加密、信息辅助、智能决策和初始化向量方面有着广泛应用,构建一种基于硬件真随机数发生源,具有广泛的应用价值。但目前硬件真随机数发生源均较复杂,而且很少有基于单片机的真随机数发生器。本文利用RC充放电的低稳定度,根据AVR单片机的特点设计了一种性价比极高的真随机数发生器。该随机数发生器使用元件很少,稳定性高,对一些价格敏感的特殊场合,如金融、通信、娱乐设备等有较大的应用意义。
1 基本原理和方法
1.1 基本原理
串联的RC充放电电路由于受到漏电流、电阻热噪声、电阻过剩噪声、电容极化噪声等诸多不确定性因素的影响,其充放电稳定度一般只能达到10-3。利用这种RC充放电的低稳定度特性实现廉价的真随机数发生源。
Atmel公司AVR单片机ATmega 128以其速度快、功能强、性价比高等优点广泛应用于各种嵌入式计算场合。利用AVR单片机引脚配置灵活多样的特点,使用Amnega128两个I/O口作为真随机数的电气接口。
其原理如图1所示。主要原理是利用串联RC电路的不确定性产生真随机数源,收集数据,通过AVR单片机ATmega128和主时钟电路量化RC电路的充放电时问,获得不确定的2位二进制数据,再利用程序将每4次采集的数据综合,最后产生1个8位的真随机数。

1.2 方 法
1.2.1 RC电路充放电过程
I/O口配置策略为:PG3 口(第18脚)作为充电输出口,PG4 口(第19脚)作为检测输入口。当PG3输出为高时,输出电流通过电阻对电容进行充电;当PG3输出为低时,电容通过电阻放电。PG4用于检测电容上的电平状态。充放电过程如图2所示。

1.2.2 AVR单片机获得不确定的2位二进制数据
AVR单片机主时钟采用普通晶体振荡器。用该主时钟来测量RC电路的充放时间,用AVR单片机的定时器(1个16位定时器)来量化充放电时间。由于主时钟的周期远远小于RC充放电时间,观察实验数据,最低2位二进制有效数字具有不确定性。以下为AVR单片机定时器对外部RC电路进行3次充电和2次放电所花时间的量化值:

1.2.3 程序设计
由以上数据统计特征可见,每次测量结果仅有两位不确定二进制数据。为了产生1个8位数据,设计了C语言程序控制专用函数测量4次,每次得到了2个二进制随机数,这样调用该函数1次即可得到1字节的随机数。
主要程序如下:


2 实验结果和分析
经实验,得到两位不确定二进制数的概率分布。
5 min后数据分布:P(00)=16%,P(01)=19%,P(10)=37%,P(11)=28%。
10 min后的数据分布:P(00)=16%,P(01)=21%,P(10)=38%,P(11)=25%。
22 min后的数据分布:P(00)=14%,P(01)=23%,P(10)=38%,P(11)=25%。
37 min后的数据分布:P(00)=16%,P(01)=26%,P(10)=36%,P(11)=22%。
以上数据由单片机统计后经串口直接输出到超级终端的显示参数。
25℃下产生的3 500个8位数据的分布如图3所示。

从图中可以看出,有4个区间分布概率较大,分别是[0,32]、[40,90]、[160,225]、[230,255]。产生这样的分布和具体使用的元器件特性以及测试现场的环境有关。在采集得到大量的序列后,通过计算机分析没有发现有周期重复性。
3 提高性能的措施
在实际应用中,若采用该方法产生的随机数进行数据加密时,为防止解密者拆除、短接RC电路或更改RC电路参数,可利用测得的充放电时间来确定外部RC电路的存在和参数的稳健。如若充放电时间不在程序预先设定的区间内,单片机立即销毁相关数据并停止程序运行,从而达到加密的效果。
提高随机数产生速率。采用本文的方法产生的随机数的速率和RC充放电时间有关系,由于RC充放电速率影响,在产生高速率随机数的时候不合适。针对该问题,可将得到的真随机数作为种子来产生一定数量的伪随机数,这样可大大提高产生随机数的速率。
结 语
设计和实现了一种基于AVR单片机的真随机数发生器,利用RC充放电电路的不稳定性完成了真随机数的产生。该随机数发生器利用AVR单片机少量硬件资源完成,具有设计简单,成本低廉的优点。最后提出了软硬件结合的方式,提高了该随机数发生器的性能,拓展了该真随机数发生器的应用范围。
上一篇:怎样制作AVR单片机ISP下载线
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 使用 DSL 传输 Internet 协议电视 (IPTV) 是一种新兴的、令人振奋的技术,可以为服务提供商提供全新的商业机遇。ADSL2+ 和 VDSL2 数据速率可以轻松实现在一根电话线上集成语音、视频和数据服务 ...… 查看全部问答> |
|
问题描述: 在“private void btnDiagnosticClicked(object sender, EventArgs e)”方法中 执行“RecData = MainMenu.socketHH.GetRecData();”“RecData”一直接收为空。 而在“private void ReceiveCallback(IAsyncResult ar)”方法中 “recB ...… 查看全部问答> |
|
做UC/os移植,做时钟节拍,在中断中,只有执行OSIntExit功能,系统就无论如何也进不了TIME1的时间中断了,但软中断可以执行。弄到头痛了都不知什么原因,郁闷中…… void T1TIMI_IRQHandler(void) { TIM_FlagClear ( TIM1 , ...… 查看全部问答> |
|
我们在利用F449进行设计一个电流表,在对固定电阻取电压时考虑以下几个问题: 1.F449的供电电压是9v(我是说那个变压器),那么对于单片机进行AD转换时的驱动电压是多少?也就是我所能得到的电压的范围是多少?? 2.F449在进行AD转换过程中,所 ...… 查看全部问答> |
|
关于quartus仿真中的simulation report不能获取问题!! 我用的是modelsim-altera仿真的,具体是写好testbench后自动调用web版的modelsim进行仿真,但是仿真结束后再processing中的simulation report总是无法获取,请大家帮我想想怎么才能得到它呢,这个报告里有宏模块ram仿真的数据的。。。… 查看全部问答> |
|
发现网上关于TI的LM4F120 Launchpad 资料太少了,其中大部分都是TI员工或者其合作伙伴提供的,例程太少,导致新手上手很慢 我只是要实现几路PWM波输出而已,昨天努力了一天,发现并不容易,至少没有可参考的例程,好在我不断地找资料,最后终于写 ...… 查看全部问答> |




