熵生成器及生成增强熵的方法
文献发布时间:2023-06-19 09:46:20
技术领域
本发明关于随机数生成,特别是一种熵生成器及使用真正随机静态熵生成增强熵的方法。
背景技术
随机数被广泛应用于资安及统计抽样等领域。随机数生成系用以生成符合预定分布之独立且不可预测的数字序列。伪随机数生成器(pseudo-random number generator)使用称为种子(seed)的熵(entropy)输入来生成数字序列。种子的随机性不足会导致生成的序列不够随机。因此,选择足够随机的种子对于生成随机序列而言至关重要,其可确保资安应用程序中的数据安全,并可确保统计采样应用程序中之采样结果的正确性。
发明内容
本发明实施例提出一种熵生成器,包括静态熵源、动态熵源及熵增强引擎。静态熵源用以提供真正随机静态熵。动态熵源用以生成动态熵。熵增强引擎耦接于静态熵源及动态熵源,及用以依据真正随机静态熵及动态熵生成增强熵。
本发明实施例另提出一种增强熵生成方法,包括藉由静态熵源提供真正随机静态熵,藉由动态熵源生成动态熵,及藉由熵增强引擎依据真正随机静态熵及动态熵生成增强熵。
附图说明
图1系为本发明实施例中一种熵生成器之方块图。
图2系为图1中之熵生成器的动态熵源之方块图。
图3系为图2中之动态熵源的环形振荡器之方块图。
图4系为图1中之熵生成器的另一种动态熵源之方块图。
图5系为图1中之熵生成器的另一种动态熵源之方块图。
图6系为图1中之熵生成器的另一种动态熵源之方块图。
图7系为图6中之动态熵源的时序图。
图8系为本发明实施例中之一种增强熵生成方法之流程图。
其中,附图标记说明如下:
1:熵生成器
10:静态熵源
12(1)至12(N),12(n):动态熵源
14:熵增强引擎
20:第一振荡器
22:第二振荡器
24,44:结合电路
240:正反器
3:环形振荡器
30:与非门
32(1)至32(M):反相器
440,520,620:互斥或门
50,60:初始熵源
52,62:累积电路
622:多路复用器
624:计数器
626:选择电路
628:更新电路
800:增强熵生成方法
S802至S806:步骤
a至e:资料
CLK:时钟信号
cnt:计数信号
Eac:累积熵
Eac’:新累积熵
Eini:初始熵
Eini(1)至Eini(P):熵位
EN:致能信号
Es:真正随机静态熵
Ed(1)至Ed(N),Ed(n):动态熵
Eout:增强熵
OSC:振荡信号
OSC1:第一振荡信号
OSC2:第二振荡信号
Sel:选择信号
Sr:随机信号
t0至t5:时间
具体实施方式
在本说明书中使用的术语“真正随机”指的是位流(bit stream)之汉明权重(hamming weight)及设备间汉明距离(inter-device hamming distance)实质上为50%,且最小熵(min-entropy)实质上为1。汉明权重用于测量位流中非零符元的期望值,以百分比形式表示。设备间汉明距离测量响应于相同诘问(challenge)而由两个静态熵源生成的两个静态熵位流之间的汉明距离。最小熵是位流之熵值下限,测量位流的不可预测性。
图1系为本发明实施例中一种熵生成器1之方块图。熵生成器1可响应于外部电路的请求而提供增强熵Eout。例如,熵生成器1可在确定性随机位生成器(deterministicrandom bit generator)的请求下提供增强熵Eout,用以作为确定性随机位生成器的”种子(seed)”。增强熵Eout可以是真正随机的,并且可由混合真正随机静态熵Es及多个动态熵Ed(1)至Ed(N)来生成。真正随机静态熵Es可以是真正随机位流,动态熵Ed(1)至Ed(N)可以是也可以不是真正随机位流。由于将真正随机数与任一随机数混合会生成真正随机数,所以无论动态熵Ed(1)到Ed(N)是否为真正随机数,增强熵Eout都可为真正随机数。
熵生成器1可包括静态熵源10、动态熵源12(1)至12(N)及熵增强引擎14。静态熵源10及动态熵源12(1)至12(N)可耦接于熵增强引擎14,N是正整数。例如,对于熵生成器1中的两个动态熵源12(1)和12(2)来说,N为2。虽然本实施例中使用了一个静态熵源10及多个动态熵源12(1)至12(N),但本发明的范围也包括在熵生成器1中采用二或多个静态熵源10及/或一个动态熵源12(1)。
静态熵源10可提供真正随机静态熵Es。动态熵源12(1)至12(N)可分别生成动态熵Ed(1)至Ed(N)。熵增强引擎14依据真正随机静态熵Es及动态熵Ed(1)至Ed(N)生成增强熵Eout。具体而言,熵增强引擎14可按位(bitwise)方式将真正随机静态熵Es及动态熵Ed(1)至Ed(N)混合以生成增强熵Eout。举例而言,真正随机静态熵Es及动态熵Ed(1)至Ed(N)中之每一者的长度可以是16位,且熵增强引擎14可对真正随机静态熵Es及动态熵Ed(1)到Ed(N)的对应位执行互斥或运算,以生成增强熵Eout中之相应位,从而生成16位的增强熵Eout。熵增强引擎14可包括互斥或(XOR)闸,或采用数据加密标准(data encryption standard,DES)算法、高级加密标准(advanced encryption standard,AES)算法或哈希函数来执行混合的处理器。在一些实施例中,熵增强引擎14可还包括伪随机数生成器。伪随机数生成器可以是线性回馈移位寄存器,且可将互斥或门或处理器的输出作为种子以生成增强熵Eout。
静态熵源10可以是物理不可复制函数(physically unclonable function,PUF),非易失性内存或包括多个真正随机静态熵位的固定逻辑电路。例如,物理不可复制函数可以是32位乘32位的内存单元,包括熵位池,且内存单元的每一列、每一行或对角线都可包括真正的随机熵位。熵位池可包括多个熵位,多个熵位具有固定值,且对于采用熵生成器1的每个装置来说各自的多个熵位都不相同。物理不可复制函数可依据预定的选定算法输出真正随机静态熵Es。例如,物理不可复制函数可以预定的行顺序从多行内存单元中选择熵位,以作为真正随机静态熵Es。在一些实施例中,静态熵源10可以为生成真正随机静态熵Es的伪随机数生成器(pseudo random number generator,PRNG)(称为确定性随机位生成器(deterministic random bit generator,DRBG))。
动态熵源12(1)至12(N)可分别实时生成动态熵Ed(1)至Ed(N)。图2系为熵生成器1的动态熵源12(n)之方块图,n是介于1及N之间的整数。动态熵源12(n)可包括第一振荡器20,第二振荡器22及结合电路24。结合电路24可包括正反器240。第一振荡器20和第二振荡器22可耦接于正反器240。
第一振荡器20可生成第一振荡信号OSC1,第一振荡信号OSC1以第一频率振荡。第二振荡器22可生成第二振荡信号OSC2,第二振荡信号OSC2以第二频率振荡。结合电路24可根据第一振荡信号OSC1及第二振荡信号OSC2生成动态熵Ed(n)。第一振荡器20及第二振荡器22可为环形振荡器。
在一些实施例中,正反器240可使用第二振荡信号OSC2对第一振荡信号OSC1进行采样,以生成动态熵Ed(n)。在一些实施例中,第一频率和第二频率可不同,且第一频率及第二频率可为质数的倍数,即第一振荡信号OSC1及第二振荡信号OSC2的电平切换未对齐。例如第一频率可以是3MHz,第二频率可以是5MHz。由于一质数不能被另一质数完全整除,因此正反器240可以依序生成动态熵Ed(n)。在其他实施例中,第一频率及第二频率可实质上相等,例如第一频率及第二频率都可以是3MHz。由于第一振荡器20及第二振荡器22的组件、绕线、电压及工作温度环境可不完全相同,因此第一振荡信号OSC1及第二振荡信号OSC2可持续互相竞争以抢先到达正反器240,从而依序生成随机的逻辑电平“0”或逻辑电平“1”作为动态熵Ed(n)。
第一振荡器20及第二振荡器22可由图3中之环形振荡器3实现。环形振荡器3可包括与非门30及反相器32(1)至32(M),M是偶数。反及(NAND)闸30可耦接于第一反相器32(1),反相器32(1)至32(M)可依顺序彼此耦接,且最后的反相器32(M)可耦接于与非门30。
与非门30可接收致能信号EN以启动环形振荡器3并输出反及输出。当致能信号EN被设置于逻辑电平“0”时,环形振荡器3被停用以停止生成振荡信号OSC。当致能信号EN被设置于逻辑电平“1”时,环形振荡器3被启动以生成振荡信号OSC。振荡信号OSC的频率可由反相器32(1)至32(M)的总延迟来判定。反相器32(1)至32(M)的总数增加会造成总延迟增加,从而降低振荡信号OSC的频率。
图4系为熵生成器1的另一种动态熵源12(n)之方块图。图4及图2中之动态熵源12(n)相似,但图4中之结合电路44还包括互斥或门440。互斥或门440耦接于第一振荡器20、第二振荡器22及正反器240。第一振荡信号OSC1的第一频率及第二振荡信号OSC2的第二频率可不同,且第一频率及第二频率都可为质数的倍数。互斥或门440可对第一振荡信号OSC1及第二振荡信号OSC2执行互斥或运算以生成随机信号Sr。正反器240可使用时钟信号CLK对随机信号Sr进行采样以生成动态熵Ed(n)。时钟信号CLK可由熵生成器1内部或外部的另一振荡器生成。
图5系为熵生成器1的另一种动态熵源12(n)之方块图。动态熵源12(n)可包括初始熵源50及耦接于初始熵源50的累积电路52。
初始熵Eini可以是一位流,所述位流以时间顺序排列的序列,包括熵位Eini(1)至Eini(P),P为正整数,例如P可以是4。初始熵源50可以由图2中的第一振荡器20、第二振荡器22及结合电路24,或图4中的第一振荡器20、第二振荡器22及结合电路44来实现。
累积电路52可将熵位Eini(1)至Eini(P)结合成动态熵Ed(n)中的位。累积电路52可包括耦接于初始熵源50的互斥或门520。互斥或门520可获取预定的时段(例如4个频率周期)中的熵位Eini(1)至Eini(P),且对熵位Eini(1)至Eini(P)执行互斥或运算以生成动态熵Ed(n)中的位。即累积电路52可在每预定时段后生成一位。相较于图2及图4,图5中的动态熵源12(n)可以更增加动态熵Ed(n)的最小熵。
图6系为熵生成器1的另一种动态熵源12(n)之方块图。动态熵源12(n)可包括初始熵源60及耦接于初始熵源60的累积电路62。初始熵源60可生成携带熵位序列的随机信号Sr。累积电路62可结合预定的时段(例如四个频率周期)中的熵位的序列以在动态熵Ed(n)中生成位。
初始熵源60可包括第一振荡器20、第二振荡器22及互斥或门440。第一振荡器20、第二振荡器22及互斥或门440的配置及操作与图4相似,在此不再赘述。累积电路62可包括互斥或门620、多路复用器622、计数器624、选择电路626、正反器240及更新电路628。互斥或门620可耦接于互斥或门440。计数器624可耦接于选择电路626。多路复用器622可耦接于互斥或门440、互斥或门620及选择电路626。正反器240可具有输入数据端D,耦接于多路复用器622;频率端,用以接收时钟信号CLK;及输出数据端Q。更新电路628可耦接于选择电路626及正反器240的输出数据端Q。
互斥或门620可将随机信号Sr中的熵位与累积熵Eac相加以生成新累积熵Eac'。累积熵Eac可包括在预定时段之内的累积熵位。多路复用器622可从选择电路626接收选择信号sel,以从随机信号Sr及新累积熵Eac'中选择一者以生成多路复用器输出信号。在一些实施例中,当选择信号sel被设置为逻辑电平“0”时,多路复用器622可选择新累积熵Eac′作为多路复用器输出信号。当选择信号sel被设置为逻辑电平“1”时,多路复用器622可选择随机信号Sr作为多路复用器输出信号。正反器240可对多路复用器输出信号进行采样以生成累积熵Eac。
更新电路628可在预定时段的第一频率周期依据累积熵Eac来更新动态熵Ed(n)。在一些实施例中,更新电路628可为开关,依据选择信号sel在更新电路628之内部的累积熵Eac和动态熵Ed(n)之间进行选择以生成动态熵Ed(n)。当选择信号sel被设置至逻辑电平“1”时,更新电路628可选择累积熵Eac以更新动态熵Ed(n),并且当选择信号sel被设置为逻辑电平“0”时,更新电路628可维持动态熵Ed(n)中的电压电平而不进行更新。以这种方式,更新电路628可在每预定时间周期更新动态熵Ed(n)。
计数器624可由致能信号EN致能,并且可以是环形计数器,于时钟信号CLK的每个时钟脉冲更新计数信号cnt。计数信号cnt可对预定时段进行计数。选择电路626可依据计数信号cnt生成选择信号sel。在预定时段的第一频率周期时,选择电路626可将选择信号sel设置为逻辑电平“1”,以便重置累积熵Eac及更新动态熵Ed(n)。相较于图2及图4,图6中的动态熵源12(n)可以更增加动态熵Ed(n)的最小熵。
图7系为图6中之动态熵源12(n)的时序图,显示时钟信号CLK、第一振荡信号OSC1、第二振荡信号OSC2、计数信号cnt、选择信号sel及累积熵Eac的波形。
在时间t0,计数信号cnt从数据状态“0”开始,选择信号sel被设置为逻辑电平“1”,以选择随机信号Sr作为多路复用器输出信号。在时间t1,计数信号cnt进入数据状态“1”,随机信号Sr具有第一数据“a”,“a”是第一振荡信号OSC1及第二振荡信号OSC2的值之和。在时间t1,正反器240对多路复用器输出信号中的第一数据“a”进行采样以更新累积熵Eac,然后将选择信号sel设置为逻辑电平“0”以选择新累积熵Eac’作为多路复用器输出信号。在时间t2,计数信号cnt进入数据状态“2”,新累积熵Eac’具有第二资料“a+b”,“b”是第一振荡信号OSC1及第二振荡信号OSC1在时刻t2的值之和,正反器240对多路复用器输出信号中的第二数据“a+b”进行采样以更新累积熵Eac,然后将选择信号sel保持在逻辑电平“0”以选择新累积熵Eac'作为多路复用器输出信号。在时间t3,计数信号cnt进入数据状态“3”,新累积熵Eac'具有第三资料“a+b+c”,“c”是第一振荡信号OSC1及第二振荡信号OSC1在时刻t3的值之和,正反器240对多路复用器输出信号中的第三数据“a+b+c”进行采样以更新累积熵Eac,然后选择信号sel保持在逻辑电平“0”以选择新累积熵Eac'作为多路复用器输出信号。在时间t4,计数信号cnt再循环到数据状态“0”,新累积熵Eac'具有第四资料“a+b+c+d”,“d”是第一振荡信号OSC1及第二振荡信号OSC1在时刻t4的值之和,正反器240对多路复用器输出信号中的第四数据“a+b+c+d”进行采样,以更新累积熵Eac,然后将选择信号sel设置为逻辑电平“1”以选择随机信号Sr作为多路复用器输出信号。在时间t5,计数信号cnt进入数据状态“1”,随机信号Sr具有第五数据“e”,正反器240在多路复用器输出信号中采样第五数据“e”以更新累积熵Eac,然后将选择信号sel设置为逻辑电平“0”,以选择新累积熵Eac'作为多路复用器输出信号。
熵生成器1利用真正随机静态熵Es及动态熵Ed(1)至Ed(N)来提供增强熵Eout的真正随机性及动态随机性,从而为使用熵生成器1的装置提供数据安全性。
图8系为本发明实施例中一种增强熵生成方法800之流程图。增强熵生成方法800包括步骤S802至S806,使用真正随机静态熵Es及动态熵Ed(n)生成增强熵Eout。任何合理的步骤改变或调整都在本公开的范围内。步骤S802至S806说明如下:
步骤S802:静态熵源10提供真正随机静态熵Es;
步骤S804:动态熵源12(n)生成动态熵Ed(n);
步骤S806:熵增强引擎14依据真正随机静态熵Es及动态熵Ed(n)生成增强熵Eout。
方法800的细节已经在前面的段落中解释,在此不再赘述。方法800利用真正随机静态熵Es及动态熵Ed(n)来提供增强熵Eout的真正随机性及动态随机性,从而为安全装置提供数据安全性。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
- 熵生成器及生成增强熵的方法
- 用于提供隔离的熵元素和熵元素生成器的方法