一种高效熵提取的TRNG设计

一,TRNG概念,背景及现状

        是指利用非确定性的物理现象的测量和采样产生具有不可预测且不可复制性的随机数(即真随机数)的器件。物理熵源有大气噪声,电子噪声,频率抖动,辐射衰变,单光子发射/探测,量子噪声等等。

        在如今人工智能与虚拟交互的时代,人们对​​于信息安全有了更高的要求。随机数作为信息加密与通信协议中最为基本的一环,其随机性与不可预测性有了更高的标准。尽管人们可以通过计算机,利用算法产生的伪随机数来作为随机源,但随着新技术新科技的发展,在信息安全领域随机数的质量也成为了一个潜在的隐患。因为通过算法产生的伪随机数得到的随机序列在一定大的周期内具有周期性,并非是完全不可预测的。如果将这类随机数应用于安全领域,将存在一定的潜在隐患。与伪随机数相比,真随机数发生器(TRNG)通过利用如电子噪声,频率抖动,辐射衰变,量子效应等物理现象来产生不可预测且不可复制性的随机数,能够更好地保护信息的传输与加密。

        真随机数发生器利用物理熵源来产生真随机数序列,1947年人们就开始了基于物理随机源的TRNG的设计; 1955年年,历史上第一个真随机数发生器由兰德公司设计并实现,这是一个以固定时间间隔采样随机频率脉冲的真随机数发生器;在1999年年年,英特尔发布Intel810芯片组时,配备了利用电阻和振荡器生成的热噪声作为随机熵源的硬件随机数发生器迄今为止,绝大多数芯片商家都集成了硬件随机数发生器,使用十分方便,一系列基于信息安全的TRNG也在不断产出。随着可编程逻辑器件的发展,基于FPGA实现真随机数发生器也在不断的研究与设计中。

二,主要内容与章节安排

        基于抖动的真随机数发生器的设计一般的方法是将多个奇数环形振荡器并联后经过异或产生。这样的真随机数发生器尽管可以产生不错的随机性,但为了实现一定的随机需求,需要上百个环形振荡器来并联,资源开销较大本文提出了一种新颖的高效熵提取方法,有效的提高了环形振荡器的熵提取效率主要内容如下:

    (1)本文所设计的熵源为基于时钟振荡的环形振荡器,通过一个与非门和两个缓冲器所构成的闭合环路实现。我们利用控制端BTN实现对环形振荡器的控制。振荡电路在FPGA中通过查找表(LUT)实现。

    (2)本文重点阐述了这种高效熵提取的方法。我们对环形振荡器采样时,一般通过对门的输出进行采样,在此次设计中,我们使用量化的延迟抽头来代替门的延时,再对抽头延时链进行分块采样,便能更加精准的采样到抖动区间,从而产生更多随机位,抽头延时链在FPGA中通过使用快速进位链(CARRY4)结构设计完成。

        文章的结构安排如下:

        首先介绍TRNG的背景,实现方法以及论文的章节安排等;

        其次是TRNG相关技术的研究首先介绍了数字式真随机数发生器的熵源的基本架构,接着说明选用的的Verilog语言的原因,最后介绍FPGA的基础知识以及文章所涉及到的CARRY4结构。

        接着是论文的核心部分,首先介绍设计所需的软硬件环境,然后介绍数字式真随机数发生器的实现,包括电路设计,电路仿真与综合,内核的构建,IP核时钟的搭建与调试等;

        最后为设计结果的讨论优化部分。

三,ROs的基本架构

        在数字电路中,由于热噪声,散粒噪声,低频噪声等不可控因素,时钟信号总会存在抖动(抖动)现象。周期并非稳定在一个值不变,会不可控的缩短或加长。我们可以使用很多方法来表征抖动现象,随机抖动的统计特性满足高斯分布,其平均值为0随机抖动延伸出的双独立时钟的相对漂移也具有随机特性,他们可以作为真随机数发生器的随机熵源,或称噪声源。设计这种真随机数发生器的核心就是能否准确提取该随机信号。

        在FPGA中,环形振荡器可以由奇数个反相器或者带有控制端的与非门和若干个缓冲器组成,最后一个门的输出反馈回第一个门的输入。所得到的时钟信号的周期取决于门的延时与环形振荡器的阶数。但是考虑到这种振荡源的功耗较大,所以需要加入多路选择器,在不需要振荡环工作时关闭,以降低系统功耗。在本设计中,我们用一个与非门和两个缓冲器形成闭合环路,来代替多个奇数反相器串联形成的环路。

一种高效熵提取的TRNG设计_第1张图片

基于LUT技术的RO的

        环形振荡器的输出不可避免的存在时钟抖动与相位漂移现象,和通过利用PLL,DLL或等采取反抖动措施产生的时钟相比,具有更大的抖动,便于采样。在FPGA内ROS的长度与抖动周期比存在相关:办事处的长度越短,抖动宽度所占时钟周期的比例越大因此,在本设计中选取一个与非门和两个缓冲器形成的振荡环路作为随机熵源,更可利于有效获取随机信号,节省资源开销。

四,CARRY4结构

一种高效熵提取的TRNG设计_第2张图片

        每个CARRY4有10个独立的输入端口和8个输出端口,其中,端口CYINIT用来作为初始信号的输入端口,端口CIN用来与相邻的CARRY4级联,形成一条延时链。每个CARRY4由4个MUXCY和1个额外MUX组成,最多能引出4个抽头(C0,C1,C2,C3),每个抽头都有相应的触发器进行锁存。

五,设计实现

1.开发环境

        软件:ISE14.3

        硬件:Virtex6-XC6VLX240T的FPGA芯片和FPGA Mis-603开发板

2.电路设计

一种高效熵提取的TRNG设计_第3张图片

设计实现电路图

        为了对环形振荡器进行完整采样,本设计通过三组CARRY4链分别对环形振荡器的各阶进行采样,如图所示,每一组CARRY4链包括8节CARRY4。这样3组8节CARRY4可以产生96位的随机数列,通过平行每三节CARRY4的异或,并进行奇偶校验后处理产生一位随机数。

一种高效熵提取的TRNG设计_第4张图片

抽头延时线使用快速进位链来实现

3.代码实现

        在电路实现的基础上,我们用的的Verilog语言对电路行为功能进行描述首先利用查找表(LUT)技术架构环形振荡电路其主要代码(部分)及相应分析解释如下:

线BTN; //定义使能端
(* KEEP =“TURE”*)wire tmp_1; 
(* KEEP =“TURE”*)wire tmp_2; 
(* KEEP =“TURE”*)wire tmp_3; //保持真实保证缓冲器不被优化
分配出= tmp_3; 
LUT2#(//实现一个2输入NAND门
		.INIT(4'h7)// 4'b0111指定LUT内容
)LUT2_nand(
	.O(tmp_1),// LUT一般输出
	.I0(btn),// LUT输入
	.I1(tmp_3)// LUT输入
); 
LUT1#(//实现一个缓冲器
		的.init(2'b10)
)LUT1_buffer1(
	.O(TMP_2)
	,.I0(tmp_1)
); 
LUT1#(
		的.init(2'b10)
)LUT1_buffer2(
	.O(tmp_3)
	,.I0(TMP_2)
);

        再利用CARRY4结构级联形成的抽头延时线对的RO的三个输出口tmp_1,TMP_2,tmp_3分别采样,此处显示了一组8节CARRY4链对tmp_1的采样,主要代码(部分)如下:

模块test2(clk,
co_1 co_2,co_3,co_4,co_5,co_6,co_7,co_8,
o-1,0-2,o_3,o_4,o_5,0-6,o_7,o_8,tmp_1,TMP_2,tmp_3,
Q_1 ,Q_2,Q_3,Q_4,Q_5,Q_6,Q_7,Q_8 //第一组8段
); 
输入clk; //时钟输入
输出[3:0] co_1,co_2,co_3,co_4,co_5,co_6,co_7,co_8; // CARRY4 co端四位输出
输出[3:0] o_1,o_2,o_3,o_4,o_5,o_6,o_7,o_8; // CARRY4 o端四位输出
输出[3:0] Q_1,Q_2,Q_3,Q_4,Q_5,Q_6,Q_7,Q_8; //ø端经触发器逆序四位输出Q 
输入tmp_1; 
reg [3:0] DI = 4'b0000; 
reg [3:0] S = 4'b1111; 
CARRY4 CARRY_inst_1(//第一节CARRY4,以下依次,直至第八节CARRY4 
.CO(co_1),
.O(O_1)
.CI(0),
.CYINIT(tmp_1),
.DI(DI),
.S (S)
); 

FDCE#(
.INIT(1'b0)//寄存器的初始值(1'b0或1'b1)
FDCE_inst_1_1(
.Q(Q_1 [3]),// 1位数据输出
.C(clk),// 1位
时钟输入.CE(1),// 1位
时钟使能输入.CLR(0),// 1位异步清除输入
.D(co_1 [0])// 1位数据输入
); 
FDCE#(. 
INIT(1'b0)//寄存器的初始值(1'b0或1'b1)
FDCE_inst_1_2(
.Q(Q_1 [2]),// 1位数据输出
.C(clk) / 1位
时钟输入.CE(1),// 1位
时钟使能输入.CLR(0),// 1位异步清除输入
.D(co_1 [1])// 1位数据输入
); 
FDCE#(. 
INIT(1'b0)//寄存器的初始值(1'b0或1'b1)
FDCE_inst_1_3(
.Q(Q_1 [1]),// 1位数据输出
.C(clk) / 1位
时钟输入.CE(1),// 1位
时钟使能输入.CLR(0),// 1位异步清除输入
.D(co_1 [2])// 1位数据输入
);
FDCE#(. 
INIT(1'b0)//寄存器的初始值(1'b0或1'b1)
FDCE_inst_1_4(
.Q(Q_1 [0]),// 1位数据输出
.C(clk) / 1位
时钟输入.CE(1),// 1位
时钟使能输入.CLR(0),// 1位异步清除输入
.D(co_1 [3])// 1位数据输入
); 
...... 
/ * 
省略部分包括第一组剩余7节CARRY4的级联,其原理及代码与第一节类似,不再赘述。
* / 
Endmodule

        完成对电路的描述后,对所涉及到的电路进行管脚约束,部分代码及解释如下:

INST“LUT2_nand”LOC = SLICE_X15Y21 | BEL =“D6LUT”| LOCK_PINS =“I1:A5,I0:A6”; 
INST“LUT1_buffer1”LOC = SLICE_X17Y21 | BEL =“D6LUT”| LOCK_PINS =“I0:A6”; 
INST“LUT1_buffer2”LOC = SLICE_X19Y21 | BEL =“D6LUT”| LOCK_PINS =“I0:A6”; 
/ * 
信息包含具体约束的切片地址,d查找表,I1对应d查找表的A5口,I0对应d查找表的A6口
* / 
INST“carry4_3 / CARRY_inst_1”LOC = SLICE_X15Y25; 
INST“carry4_3 / FDCE_inst_1_1”LOC = SLICE_X15Y25 | BEL =“AFF”; 
INST“carry4_3 / FDCE_inst_1_2”LOC = SLICE_X15Y25 | BEL =“BFF”; 
INST“carry4_3 / FDCE_inst_1_3”LOC = SLICE_X15Y25 | BEL =“CFF”; 
INST“carry4_3 / FDCE_inst_1_4”LOC = SLICE_X15Y25 | BEL =“DFF”;

4.内核构建

        我们用与非门与缓冲器搭建了基本的时钟振荡电路,因此在使能端BTN需要有时钟的输入才能触发振荡,同时,在电路工作时输出的随机数据流需要有接收装置。因此,考虑到以上问题,我们便通过MIS603开发板的MicroblazeSOC创建了数据的收发装置.Microblaze(MB)系统的开发包含硬件和软件部分:硬件部分主要是搭建个SOC硬核系统,在XilinxPlatform Studio(XPS)中完成的。软件部分则在赛灵思的SDK中来实现控制功能。

        我们在XPS中重新建立工程,添加嵌入式处理器,直至生成.XMP文件,弹出SDK平台,选择AXI系统。处理时钟100MHZ保持不变.RAM大小为保证足够的内存,均选择32K。从端口中的外部接口选项中,由于与外部相连的时钟采用差分输入式,与Mis603单端输入时钟不一致。在.msh文件中找到相关代码,将其改为单端时钟输入。

        在完成一个简单的MB系统之后,我们需要在主界面添加相应组件与设备,以及组件之间的连接关系。根据需求,所创建的MB系统需要实现数据的收发功能。因此,MB系统需要建立BTN输出,用于办事处的起振,建立随机数接受功能,同时需要串口通信以及中断功能。

一种高效熵提取的TRNG设计_第5张图片

        MB系统创建完成后,进行DRC检查,之后我们生成网表文件。

        关闭系统后,在ISE界面利用MB系统产生顶层文件(.V文件)。

        同时,考虑到我们的电路系统需要时钟,因此通过利用IP核里面的ClockingWizard创建。通过使用输入频率为200MHZ的时钟,二分频后产生输出频率为100MHZ的单输出时钟。

        在生成.V文件里将我们之前的的Verilog的硬件描述电路代码,IP核产生时钟例化后的代码,CARRY4例化代码以及所有管脚约束文件添加进去,重新综合与实现。编译工程后产生。位文件。

        完成编译后,通过XPS启动SDK,从打开的SDK中,由系统默认导入硬件系统文件,即.xml文件[28]。从这个文件中可以看到MB系统中的内部信息。新建空工程后,在SRC文件下,编写所需要的控制实现。考虑到MB系统随机位端口接收到的数据序列并非都是随机数,我们需要捕捉其中由于噪声产生的随机数。在这里使用奇偶校验法进行筛选。同时定义了控制用键小号键与ë键输出。100万位后停止。在程序编译成功后,生成.elf目标文件。

     最后是FPGA验证阶段,将之前生成的。位文件预先下载到FPGA中,然后在SDK平台,执行运行配置,将之前生成的.elf文件植入。然后通过友善串口助手来收集生成的随机数。再将收集到的随机数列导入NIST测试,测试其随机性。

六,总结

        本设计采取新颖的熵提取方式,即利用CARRY4结构提高了基于振荡环的TRNG的随机数采样的精度,更高效地提取到有效随机位。本设计通过三组(每一组八节CARRY4结构)延时链,从振荡环的3个输出tmp_1,TMP_2,tmp_3采样,共形成96位的随机序列,经过后处理形成1位随机位,但是相较于多组的RO并联后异或生成随机位而言,节省了资源开支,从而间接地提高了真随机数生成器的吞吐率,

(版权所有,转载请注明出处)





你可能感兴趣的:(真随机数,熵提取,抖动,环形振荡器,CARRY4)