一种DRAMPUF测试系统及其DRAMPUF提取方法与流程

文档序号:16786583发布日期:2019-02-01 19:26阅读:868来源:国知局
一种DRAM PUF测试系统及其DRAM PUF提取方法与流程

本发明涉及嵌入式系统安全领域,特别是一种基于raspberrypib+的drampuf测试系统及其drampuf提取方法。



背景技术:

近年来,随着物联网技术的迅速发展,嵌入式设备的需求也随之激增,开始广泛地被应用于日常生活的各个领域,而与此同时,嵌入式系统的安全性引起了人们的重视,由于现在多种攻击方式的盛行,嵌入式系统在工作环境中很容易受到各种攻击而丧失安全性。在传统电子器件的安全措施中,密钥等重要数据主要存储于eeprom、flash等非易失性存储器(non-volatilememory,nvm)中,而nvm存储设备易受侵入攻击而被侵入者获取密钥等重要数据,加上常用的加密算法往往是公开的,因此密钥的泄漏往往会直接导致整个系统安全性的崩溃,嵌入式设备的信息安全受到极大的威胁。通过利用物理实体的内在物理构造差异这一特性,物理不可克隆函数(physicalunclonablefunction,puf)的概念被提了出来。它为保护硬件安全提供了一种有效的、全新的方法。

puf是一个物理函数,它利用了物理个体的某些物理差异,用来决定激励和响应之间的映射关系,对于一个给定的已知激励,函数将会产生一个唯一对应的响应。puf的本质可以看做是一种芯片指纹,而在ic制造过程中,这个指纹则来源于一些无法预测、复制和控制的细微制造差异,从而能够抵御针对nvm的物理攻击。

而截至目前,大多数的puf种类结构,都需要添加新的硬件,或者利用fpga来实现,并且其中的大多数只有在上电时才能够被访问,而drampuf是基于dram单元停止刷新的延时掉电特性而进行提取的,由于dram是目前较为广泛存在于嵌入式系统中的用于存储数据的硬件设备,进行drampuf的提取不需要额外的硬件或fpga电路,并且它的构造可以实现在linux运行时也能够被查询,相比较于其他puf来说,drampuf在消费电子设备以及嵌入式设备中有着较为宽广的应用前景。

raspberrypib+是树莓派系列中的一款开发板,是深受广大嵌入式系统开发爱好者喜爱的一款设备,它的内存则是由512m大小的dram构成,因此理论上来说可以通过固件或内核获取到dram控制器的接口,从而控制dram刷新过程,提取puf。但由于树莓派官方提供的各个版本内核源码中,均未公开dram控制器的驱动部分,设备树信息也并未给出,因此无法在官方内核中插入kernelmodule来实现对dram的控制、读写操作。



技术实现要素:

本发明所要解决的技术问题是克服现有技术的不足而提供一种基于raspberrypib+的drampuf测试系统及其drampuf提取方法,在启动阶段以及运行阶段均可以实现dram的控制并提取drampuf,并在测量全过程中保持系统原有代码正常运行。

本发明为解决上述技术问题采用以下技术方案:

根据本发明提出的一种基于raspberrypib+的drampuf测试系统,包括dram、cpu端和gpu端,cpu端包括uart数据获取模块和mailbox数据发送模块,gpu端包括mailbox数据接收模块、dram初始化模块、dram刷新控制模块、cpu代码手动刷新模块和dram内容读取模块;其中,

dram初始化模块,用于在启动阶段以及运行阶段对指定待测试dram区域进行初始化操作,将全0或全1写入待测试dram区域;

dram刷新控制模块,用于控制全部dram区域的刷新频率,通过对dram刷新控制模块中的dram控制寄存器写入刷新控制字来实现启用或禁止全部dram区域的刷新;

uart数据获取模块,用于接收用户输入的测试参数并输出至mailbox数据发送模块,测试参数包括待测试dram区域、dram初始值和延时时长;

mailbox数据发送模块,用于在cpu端利用mailbox发送测试参数给gpu端,并通知gpu端开始puf测试;

mailbox数据接收模块,用于在gpu端利用mailbox接收cpu端发送的测试参数,并将待测试dram区域和dram初始值传递至dram初始化模块,延时时长传递至dram刷新控制模块,待测试dram区域传递至dram内容读取模块;

cpu代码手动刷新模块,用于在dram停止刷新并延时等待期间刷新cpu代码存储区域;

dram内容读取模块,用于在延时等待完毕,dram刷新控制模块恢复dram刷新后,读取待测试dram区域的全部存储内容,并通过串口输出。

作为本发明所述的一种基于raspberrypib+的drampuf测试系统进一步优化方案,cpu代码手动刷新模块以64ms/次的刷新频率。

基于上述的一种基于raspberrypib+的drampuf测试系统的drampuf提取方法,包括启动阶段和运行阶段,具体如下:

启动阶段:

步骤(1)、初始化待测dram区域,写入初始值全0或全1;

步骤(2)、对dram刷新控制模块中的dram控制寄存器写入停止刷新控制字;

步骤(3)、调用延时函数进行延时,延时期间保持dram暂停自动刷新,并等待延时结束;

步骤(4)、对dram刷新控制模块中的dram控制寄存器写入恢复刷新控制字;

步骤(5)、顺序读取待测试dram区域存储值,由串口打印并存储,记录该存储值与步骤(1)中的初始值相比所产生的位翻转,即为该dram区域产生的drampuf,由串口打印数据;

运行阶段:

步骤a、加载kernel后,cpu端通过uart数据获取模块输入的puf测试参数,puf测试参数包括待测试dram区域、dram初始值和延时时长,并分别将这些测试参数通过mailbox发送给gpu端;

步骤b、gpu端通过mailbox接收cpu端发来的全部参数,对用户指定的待测试dram区域写入指定初始值全0或全1,再对dram刷新控制模块中的dram控制寄存器写入停止刷新控制字;

步骤c、在gpu端中调用延时函数进行延时,延时时间为用户输入的禁止刷新时长值,延时期间保持dram中有cpu运行代码存储的区域进行手动刷新,待测试dram区域则保持dram暂停自动刷新,等待延时结束;

步骤d、在gpu端中对dram刷新控制模块中的dram控制寄存器写入恢复刷新控制字;

步骤e、顺序读取待测dram区域存储值,由串口打印并存储,记录该存储值与步骤a中的dram初始值相比所产生的位翻转,即为该dram区域产生的drampuf,由串口打印数据。

作为本发明所述的一种基于raspberrypib+的drampuf测试系统的drampuf提取方法进一步优化方案,在dram禁止刷新的延时期间,cpu端和gpu端均工作,将代码占用的dram地址段预先写入手动刷新列表,在延时期间保证代码存储区刷新即可。

作为本发明所述的一种基于raspberrypib+的drampuf测试系统的drampuf提取方法进一步优化方案,步骤(5)中顺序读取待测试dram区域存储值,由串口打印并存储为log文件。

作为本发明所述的一种基于raspberrypib+的drampuf测试系统的drampuf提取方法进一步优化方案,步骤e中顺序读取待测dram区域存储值,由串口打印并存储为log文件。

本发明采用以上技术方案与现有技术相比,具有以下技术效果:

(1)由于采用启动阶段的五个步骤,因此使得用户在raspberrypib+启动过程中实现dram的刷新控制与内容读写,提取drampuf值;

(2)由于采用运行阶段的五个步骤,因此使得用户在raspberrypib+运行时得到dram刷新控制器的控制权,读写dram区域存储内容,并提取puf;

(3)由于采用启动阶段的第五步,以及运行阶段的第五步,利用串口打印puf数据,因此使得用户可以通过串口接收设备进行数据的接收与存储;

(4)由于采用运行阶段的第五步,在kernel代码中编写用uart接收用户键盘输入的测试参数,可以大大提升测试效率,每一次更改测试条件不再需要重新编译;

(5)由于采用运行阶段第三步,在对dram进行禁止刷新的延时时段内,可以保证原有运行代码正常存储在dram中,不会产生丢失。

(6)本发明可以用于在任意raspberrypib+设备上测试drampuf数据,并且用户能够通过串口打印数据,生成文件便于分析;在启动阶段以及运行阶段均可以进行drampuf的提取,尤其在运行阶段,在dram停止刷新的情况下,能够通过手动刷新保证原有运行代码的不丢失,进行正常的drampuf测试流程,通过串口打印最终结果。

附图说明

图1为本发明提供的启动阶段提取drampuf具体示意图。

图2为本发明提供的运行阶段提取drampuf具体步骤图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明进行详细描述。

本发明设计了一种基于raspberrypib+的drampuf测试系统,主要包括启动阶段以及运行阶段分别提取drampuf两个部分。

图1为启动阶段提取drampuf的具体示意图,如图1所示,在启动阶段,在dram时钟初始化后,首先确定待测试的dram地址段,并将该dram部分初始化为全0或全1,之后停止dram的刷新,在进行一段时间延时后恢复刷新,根据dram的延时掉电特性,延时时间内部分dram单元会产生翻转。延时结束后,对待测试的dram地址区域内容进行读取,其内容与初始值相异或的结果即为该设备dram区域产生的puf值,最终通过串口打印puf值,并存储在log文件里。具体步骤如下:

(1)指定待测dram起始与终止区域,对该存储区域进行初始化,写入全0(0x00000000)或全1(0xffffffff)。

(2)对dram刷新控制模块中的dram控制寄存器sd_sa(0x7ee00004)写入停止刷新控制字(0x00003395)。该控制字的高16位为sd_sa_rfsh_t_bits,记录了dram刷新率,以默认值0x0c293395为例,高16位0x0c29换算为十进制为3113,则刷新率为:

refreshrate:3113*(1.0/400)=7.78us

此处如果将刷新率设为0,则会暂停对dram的刷新。

(3)停止dram区域的自动刷新后,调用延时函数进行延时,延时期间保持dram暂停自动刷新,等待延时结束。根据dram原理,在停止刷新的时间里,各个dram单元会由于制造差异的原因有不同程度的掉电现象,而掉电超过阈值后,则会造成原本存储内容的变化。

(4)延时结束后,恢复对全部dram单元的刷新,对dram控制寄存器sd_sa(0x7ee00004)写入恢复刷新控制字(默认值:0x0c293395)。dram恢复刷新后,待测试存储区域中将保存该延时时间内产生的翻转位(puf),并不再产生新的puf。

(5)顺序读取该待测dram区域存储值,调用uart进行数据的打印,在电脑利用minicom等串口助手可以接收打印数据,并存储为log文件,以便于数据处理分析。

得到的数据与第一步初始值(全0或全1)进行异或运算,所得到的结果即为该dram区域在指定延时时间内产生的位翻转(bitflip),即该dram区域产生的drampuf。

图2为运行阶段流程图,如图2所示,在运行阶段,kernel部分代码跑在cpu端上,而firmware代码运行在gpu端上。

由于在kernel中无法获取dram控制寄存器的读写权限,因此需要利用gpu端和cpu端之间的mailbox通信功能,由cpu端通过uart获取用户指定的测试参数,例如测试地址段、延时时间、初始值等,并将参数通过mailbox一一发送给gpu端,gpu端接收到mailbox传来的信息后,再完成类似启动过程的dram初始化、停止刷新、延时、恢复刷新的全过程。

但由于sd_sa刷新控制器控制的是所有dram的刷新操作,cpu代码也同样存储在dram中,因此需要在延时过程中对于存储有cpu代码的dram地址段进行手动刷新(64ms/次),以避免代码随着停止刷新的延时时间而产生丢失。延时结束后,对待测试的dram地址区域内容进行读取,其内容与初始值相异或的结果即为该设备dram区域产生的puf值,最终通过串口打印puf值,并存储在log文件里。具体如下:

运行阶段:

(1)在bootcode跑完并成功加载kernel后,cpu端首先初始化uart,并通过uart数据获取模块输入的puf测试参数,puf测试参数包括待测试dram区域、dram初始值和延时时长,并分别在收集到数据后,将这些测试参数通过mailbox发送给gpu端。

(2)gpu端通过mailbox接收cpu端发来的全部参数,对用户指定的dram待测区域写入指定初始值(全0或全1,0x00000000或0xffffffff)。再对dram控制寄存器sd_sa(0x7ee00004)写入停止刷新控制字(0x00003395)。该控制字的高16位为sd_sa_rfsh_t_bits,记录了dram刷新率,此处设置0x00003395,高16位0x0000换算为十进制为0,则此时刷新率为0,停止对dram的刷新操作。

(3)停止dram区域的自动刷新后,在gpu端中调用延时函数进行延时,延时时间为用户输入的禁止刷新时长值,延时期间保持dram暂停自动刷新,等待延时结束。根据dram原理,在停止刷新的时间里,各个dram单元会由于制造差异的原因有不同程度的掉电现象,而掉电超过阈值后,则会造成原本存储内容的变化。

而由于cpu代码同样存储于dram的部分区域,而在这样的停止刷新延时中,所有dram单元的刷新都被禁止,为了保证dram中cpu运行代码存储的区域不会产生掉电,需要对该部分代码存储区域进行手动刷新(manuallyrefresh)来模拟原本的正常刷新过程,此处通过读操作进行模拟刷新,刷新频率为64ms/次,实验证明在添加手动刷新的步骤后,cpu代码遗失的问题得到了解决。

与此同时,待测试区域则需要保持dram暂停自动刷新,等待延时结束。

(4)在gpu端中对dram控制寄存器sd_sa(0x7ee00004)写入恢复刷新控制字(0x0c293395)。实际操作过程中,由于禁止刷新本身造成了时钟紊乱,因此与启动过程中测试方法相比,此处的恢复刷新过程不仅需要对控制寄存器进行操作,还需要调用time_init函数来重新初始化时钟。

(5)顺序读取该待测dram区域存储值,调用uart进行数据的打印,在电脑利用minicom等串口助手可以接收打印数据,并存储为log文件,以便于数据处理分析。

得到的数据与运行阶段中的dram初始值(全0或全1)进行异或运算,所得到的结果即为该dram区域在指定延时时间内产生的位翻转(bitflip),即该dram区域产生的drampuf。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1