一种利用零漂数据获取随机数的方法与流程

文档序号:24061476发布日期:2021-02-26 16:08阅读:197来源:国知局

[0001]
本申请涉及信息安全技术领域,尤其涉及设备静止状态下利用硬件电路,特别是使用陀螺仪的零漂数据获取随机数的方法。


背景技术:

[0002]
在网络社会中,信息安全处于十分重要的地位,由此产生了各种各样的数据加密算法。
[0003]
随机数是信息安全和密码应用中的重要资源,可以参与到信息加密的各个阶段。随机数质量的优劣对信息安全具有决定性的影响。满足应用要求的随机数必须满足随机性、不可预测性及不可重现:1、伪随机数:看起来是随机的,能通过现有的随机性检验。
[0004]
2、密码学安全的伪随机数:不可预测,也就是说,即使给出产生序列的算法或者硬件设计和以前产生序列的所有知识,也不可能通过计算来预测下一个序列是什么。
[0005]
3、真随机数:这个序列不能重复产生,即使在完全相同的操作条件下用完全相同的输入对序列发生器操作两次,也将得到两个完全不同的、毫不相关的序列。
[0006]
目前有三种类型的随机数发生器:真随机数发生器trng(true random number generator)、伪随机数发生器prng(pseudo random number generator) 和混合随机数发生器hrng(hybrid random number generator)。
[0007]
trng的好处在于可以生成真随机数,但是一般都需要额外的硬件,需要对数据进行额外的处理(如抽取键盘敲击活动、磁盘的电活动、鼠标移动作为输入源),生成的速度非常慢。prng的好处在于,一旦种子确定,就可以快速生成基本上是无限的随机数据流,缺点如果种子泄漏,则所有生成的数据都变得可预测。因此,外部观察者无法预测的种子输入是很重要的。
[0008]
而hrng结合了trng和prng的优点,既可以快速地无限地生成随机数,又可以防止种子被预测。hrng通常从难以预测的事件中采集熵来生成种子,再应用确定性算法来产生随机数。
[0009]
一个真随机数发生器从一个非确定性来源(如硬件源)产生一个高熵种子,然后使用prng结构来生成大量的随机数据。
[0010]
目前的实现,一般是从硬件中得到种子,然后进行杂凑得到随机数。如android平台的伪随机数发生器收集鼠标键盘事件、磁盘操作时间、中断事件等;ansi x9 .17发生器的种子是时间。
[0011]
上述实现存在以下问题:1、依靠硬件时间生成种子,需要捕获硬件动作,当动作很少发生时,生成速度明显下降。对小米6手机进行随机数输出测试,在手机静止并且无用户输入的情况下,1分钟内仅输出了16字节随机数;在用户针对手机频繁动作的情况下,1分钟内输出了128字节随机数,在特殊应用中满足不了要求。2、以时间作为种子,由于时间的连续性,其范围是可以在有限时间内穷尽。
[0012]
在单片机领域,目前还有基于其他硬件的方案:常见的片上随机数产生器的产生方式有三种:基于电路噪声的随机数产生器、基于混沌机制的随机数产生器和基于振荡器采样的随机数产生器。以上方式需要单独设置硬件体系。
[0013]
中国专利申请(111290734 a),通过获取终端磁场数据、光线传感器数据和陀螺仪数据,进而生成随机数。该申请用于密码机,一般的认知下,密码机处于静止状态,此时获取的各类数据变化不大,尤其是陀螺仪数据基本保持不变。
[0014]
中国授权专利(cn 102629397 b),通过智能手机自带的三轴陀螺仪来检测手机的运动状态,记录下手机从静止到运动再回到静止的时长;将时长的毫秒数作为随机数种子。该申请是根据手机的运动来获得随机数种子。
[0015]
在设备静止情况下,如果设备中安装陀螺仪,其输出的数据基本保持不变。如何在静止、无外界介入的应用场景下,从陀螺仪获取随机数,一直未见应用。


技术实现要素:

[0016]
针对上述问题,本发明提出了一种获取真随机数的方法。
[0017]
本发明采用的技术方案是:一种利用零漂数据获取随机数的方法,由上位机连接硬件电路,所述硬件电路包括敏感元件和放大器;硬件电路为陀螺仪,上位机获取陀螺仪的零漂数据生成随机数。
[0018]
上位机获取陀螺仪三个维度的角度值yaw,pitch,roll,使用各维度的最后4位,组成12位的基础算子;多组基础算子进行随机排布,最后生成随机数。
[0019]
所述上位机使用树莓派。
[0020]
陀螺仪是一种重要的惯性敏感器件,是导航、制导、稳定、瞄准等系统的核心部件,广泛应用于各领域。
[0021]
由于制造工艺和精度水平的限制,相比传统工艺制造的惯性传感器,其输出的数据噪声较大,也伴随着零点漂移误差。
[0022]
通过实验我们发现,陀螺仪在静止时,经零漂处理的输出基本保持不变(可以精确到小数点后6位),但其原始数据(未经零漂补偿处理的数据,读取小数点后8位)变化非常剧烈。
[0023]
有益效果:陀螺仪有标准的数据输出接口,可以很方便地读出,不用专门设计硬件电路。零漂是陀螺仪的固有特性,随时都有输出,可以根据要求产生海量随机数,不受时间限制。零漂数据涉及的因素非常复杂,不可预测和再现,保证了“真”随机数的获得。另外,每个陀螺仪都不同,更保证了数据源的无法破解。陀螺仪和树莓派都是成熟的低成本器件,实现比较容易。
附图说明
[0024]
图1是树莓派和陀螺仪的连接示意图。
具体实施方式
[0025]
在配电网络的数据传输中,需要采取加密手段。密钥的生成需要随机数的参与,为了保证密钥的安全性,最好选取真随机数参与计算过程。
[0026]
零漂是直接耦合放大电路中存在的一个特殊问题。仪表或敏感元件在无输入时的输出示值称为“零位输出”简称“零位”,这个“零位”会随时间或温度而发生变化,这种变化就称为“零漂”,零漂包括时间漂移和温度漂移。
[0027]
零点漂移的形成原因:运算放大器均是采用直接耦合的方式,直接耦合式放大电路的各级的q点是相互影响的,由于各级的放大作用,第一级的微弱变化,会使输出级产生很大的变化。当输入短路时(由于一些原因使输入级的q点发生微弱变化 如 :温度),输出将随时间缓慢变化,这样就形成了零点漂移。
[0028]
产生零点漂移的原因很多,如电源电压不稳、元器件参数变值、环境温度变化等。其中最主要的因素是温度的变化,因为晶体管是温度的敏感器件,当温度变化时,其参数ube、β、icbq都将发生变化,最终导致放大电路静态工作点产生偏移。此外,在诸因素中,最难控制的也是温度的变化。
[0029]
敏感元件是传感器的重要组成部分,能敏锐地感受某种物理、化学、生物的信息并将其转变为电信息的特种电子元件。
[0030]
各类传感器都需要放大器,放大敏感元件获取的微弱信号,因此都存在零漂问题。由于零漂的随机性,可以作为产生随机数的种子。
[0031]
陀螺仪应用广泛,技术成熟,接口友好。在正常应用中,陀螺仪的零漂数据需要一定的算法手段进行补偿处理。处理后的陀螺仪数据,输出稳定,在静止时输出值保持不变。
[0032]
由于环境因素产生的零漂,即使陀螺仪处于静止状态,其原始数据在任何时刻都有变化,下表给出了陀螺仪处于静止状态时,三个轴的原始数据。
[0033]
由表中的数据可以看出,从小数点后第二位起,数值变化很大,且没有规律,不可预见。
[0034]
原始数据
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
末4位数据40.0053749131.59332657-84.7026901274912657901240.0240554831.60865974-84.7239761455485974761440.0037460331.67206001-84.6793823246036001823240.0783424431.58668709-84.7883148242448709148240.0726585431.66724777-84.7723541358544777541340.0967521731.66972733-84.7996826252172733826240.1198654231.63022995-84.8193664665422995664640.131877931.65666199-84.8298416177906199416140.150512731.65496254-84.8499145512706254145540.1769485531.62103653-84.8779525848553653525840.19705231.62585068-84.899139452005068394040.2449150131.60574913-84.9661483815014913483840.2658729631.56734085-84.9823913672964085913640.2796821631.57106018-84.9940795982166018795940.2728996331.6637001-84.9763107399630010107340.2808303831.66027832-84.9787597730387832597740.2895240831.65535927-84.98247528240859277528
40.3406066931.61145973-85.0530853306695973853340.3567428631.58423042-85.0628967342863042967340.3823242231.54354668-85.0886001624224668001640.3945770331.597332-85.1014938477033200938440.4165725731.61588669-85.1297073472578669073440.4153289831.66693878-85.1203308128983878308140.4205932631.62568092-85.1169433693268092433640.4117431631.62799263-85.0885696443169263696440.4739685131.61594009-85.1835098368514009098340.5008964531.58358765-85.2144775496458765775440.4994392431.56679916-85.1961898839249916898840.5091247631.68151855-85.2079544124761855544140.5499153131.59464264-85.2558822615314264822640.6107788131.52388-85.3411941578818000941540.5689392131.59656715-85.2632751539216715751540.5875854531.62162209-85.2850036685452209036640.5929679931.62641525-85.2823562667991525562640.6241455131.65031242-85.3277587945511242587940.6488990831.61548996-85.3542861999088996861940.6527061531.60454559-85.34613806154559380040.6805648831.61952972-85.3830642764882972642740.6864204431.6039772-85.3782119820447720119840.6757736231.65618515-85.3505630573628515630540.6805801431.60545349-85.3420944280145349944240.7174110431.62850571-85.3960571311040571571340.7377624531.63035011-85.420837462455011374040.7444076531.66003799-85.4226684607653799684640.7483215331.63845253-85.4147415221535253415240.7741699231.65496635-85.4487457369926635457340.7532234231.65632248-85.3963394223422248394240.7699508731.65816689-85.414192250876689922040.8135070831.57819939-85.4710998507089939998540.858699831.57064056-85.5360336399804056336340.8223037731.64237213-85.4663696303777213696340.828098331.62327003-85.4644012598307003012540.9031486531.5347271-85.5751190248652710190240.8591537531.65518188-85.5014419653758188419640.8285369931.71674919-85.44433594369949193594每个原始数据选取末4位,从55*3个原始数据选取的数据中,共有55*3*4=660个数字。
下面的表给出了每个数字出现的次数及频率。
[0035]
每个数字出现的次数及频率数字出现次数出现频率0649.7%1588.8%26810.3%3629.4%46810.3%57511.4%67010.6%7578.6%8639.5%97511.4%合计660100%上述统计是在小样本的基础上进行的,可以预见,随着样本数据的增加,10个数字的出现概率趋于相同。
[0036]
从上述试验结果中可以看到,静止状态下的陀螺仪产生的零漂数据,随机出现,且各个数字出现概率基本相同,符合真随机数的特征。
[0037]
配电网络中,设备基本处于固定静止状态,陀螺仪的正常输出是稳定的,不可能使用随机运动情况下陀螺仪的数据作为随机数。
[0038]
本实施例中,在计算密钥的设备中,设置树莓派+陀螺仪作为随机数发生器,获取静止状态下的陀螺仪数据产生随机数。
[0039]
树莓派为卡片式电脑,成本低,体积小,内置操作系统和环境,易于程序开发。
[0040]
参看图1,树莓派的3.3v功能接脚与陀螺仪的vcc接脚连接,树莓派的sda功能接脚与陀螺仪的sda接脚连接,树莓派的scl功能接脚与陀螺仪的scl接脚连接,树莓派的gnd功能接脚与陀螺仪的gnd接脚连接。
[0041]
树莓派获取陀螺仪三个维度的角度值的方法为:首先从陀螺仪获取四元数数据q0、q1、q2、q3。
[0042]
然后进行单位化处理,计算:norm=sqrt(q0*q0+q1*q1+q2*q2+q3*q3);q0=q0/norm;q1=q1/norm;q2=q2/norm;q3=q3/norm;norm为中间计算变量。
[0043]
最后计算三个角度值yaw=atan2(2*(q1*q2+q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)*57.3;pitch=-asin(-2*q1*q3+2*q0*q2)*57.3;roll=atan2(2*q2*q3+2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3;
其中,yaw,pitch,roll分别表示绕y、x、z轴旋转的值。
[0044]
asin和atan2都是c语言提供的函数。
[0045]
asin是求反正弦的函数,asin(double a)返回a的弧度值。
[0046]
atan2是求反正切的函数,atan2(double y,double x)函数返回原点至点(x,y)连线的方位角的弧度值,即原点(0,0) 和点(x,y)之间直线与x轴的夹角。
[0047]
为了保证数据的随机性,计算陀螺仪三个维度角度值yaw,pitch,roll的精度为小数点后8位。
[0048]
使用各维度的最后4位,组成12位的基础算子;多组基础算子进行随机排布,最后生成随机数。
[0049]
选几组基础算子根据实际需要来确定,如对于不接入互联网的系统,相对较安全,可取4-8组,如果接入互联网,同时考虑到效率,应当取8-16组,而对于更严苛的环境,则可取16组以上。
[0050]
多组算子的随机排列,可以使用树莓派支持的编程环境提供的随机函数完成。为了增加随机性,也可以使用获取的基础算子本身来确定排列顺序,如根据基础算子中某一位数据的大小进行排序来确定、根据基础算子三个数据按照某种方式计算的结果确定顺序。
[0051]
生成随机数后,以该数为随机种子进行使用。虽然生成的随机数具有真随机数的特性,但一成不变的使用一个随机数也有潜在风险。本发明提供的随机数生成机制不受时间限制,可以在任何需要的时刻产生,因此可以视需求动态调整随机数的使用周期。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1