当前位置:首页 > 演讲稿 > 【基于SHA-1算法的加密认证系统设计】 u盘加密系统设计
 

【基于SHA-1算法的加密认证系统设计】 u盘加密系统设计

发布时间:2019-02-16 04:35:56 影响了:

  摘要:为了进一步提高数字系统的安全性,保护设计者的知识产权,本文提出了一种基于安全哈希算法(Secure Hash Algorithm,SHA-1)的加密认证系统设计方法。整个认证系统通过1-wire总线,使FPGA完成与DS28E01-100加密芯片的通信,主机内核采用了Xilinx公司设计开发的8位微控制器软核PicoBlaze。设计完成后’,通过编译器KCPSM2将汇编文件转换成Veri log或VHDL文件,然后采用xilinx公司的ISE软件编译综合,最终完成FPGA验证调试。实验证明该设计能够完成加密认证系统的全过程。
  关键词:加密认证系统;SHA-1;1-wire;IFF
  1.引言
  加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称为密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。数字签名技术是不对称加密算法的典型应用。而在种类众多的数字签名技术中通常都会用到一类特殊的数学算法一哈希(Hash)算法,它在数字签名技术中占有极其重要的地位。哈希算法也即散列算法,其作用是对任何不定长的比特串(称为消息)计算出一个定长的比特串(称为消息摘要或散列值)。目前应用广泛的是安全Hash算法SHA-1,SHA-1算法是一种非常复杂的算法,包含多次32位5路加法,复杂的逻辑函数,数据移位和大量的循环。
  对于一个真正安全的认证系统,最苛刻的功能是鉴定。这是因为认证必须能够证明它是由发行者授权,而且是可信的。认证应该可以简单地用其所包含发行者在内才能生成的加密信息来证明其合法性,这就是所谓加密认证。它的另一个关键技术是所使用的复杂数学运算法则应该是不可逆的,否则盗窃者采用逆运算,就能够推导出密码。基于SHA-1算法的芯片利用上述安全认证方法可以设计出可靠的嵌入式认证加密系统,将其加入到受保护的电子设备中,就可以起到保护电子产品的作用。
  本文对散列算法SHA-1作了深入分析与研究,同时采用DS28E01-100加密芯片塔建了一套可靠的认证加密系统。整个认证系统通过1--wire总线,使FPGA完成与DS28E01-100的通信,同时将信息认证在FPGA内部进行,这样就避免了在一些小的系统设计中通过破译程序的机器码而获得程序的解密。主机内核采用了Xlinx公司设计的8位微控制软核PicoBlaze,它是为Virtex系列FPGA、Spa~an系列FPGA专用的嵌入式MCU IP核。PicoBlaze是一个由VHDL语言实现的完全嵌入式MCU IP核,不需要预编译,可直接由布局布线工具嵌入到FPGA器件中,设计灵活方便,运行速度快,占用资源少。
  2.系统模块设计
  本文主要实现了基于SHA-1算法的,采用FPGA和DS28E01-100的认证模块的设计。通过配置FPGA内部的数据加密内核,进行与DS28E01-100的指令问答完成身份验证过程。
  2.1lFF的概念
  IFF(Identification Friend-or-Foe)的字面含义为识别朋友或者敌人,图1所示为采用了IFF概念的认证系统的顶层结构图。SHA-1 IFF模块中有安全存储器中的匹配密钥,能够根据和安全存储器中SHA-1引擎相同的输入来计算SHA-1算法。只有当安全存储器和FPGA中的哈希计算结果相匹配时,输出就是一个朋友(Friend),否则就是一个敌人(Foe)。
  
  2.2lFF认证模块的实现
  系统一旦上电,以嵌有SHA-1 IFF参考设计的用户设计配置完FPGA后,首先要完成与加密芯片的匹配过程,其流程如图2所示。
  (1)FPGA执行随机数产生器,产生一个随机数,把它发送给安全存储器。并读取加密芯片的序列号。
  (2)加密芯片利用仅对设计者开放的密钥、器件序列号、质询码等,通过SHA-1引擎来产生一个160位的MAC值。
  (3)FPGA使用相同的密钥产生期望信息,同时读取加密芯片产生的实际信息160位MAC值。
  (4)如果期望信息值和实际信息值相同,则IFF模块使能用户设计,如果不相同则禁用它。
  一旦使能用户设计后,关断IFF模块以降低功耗。同时也可以连接外部逻辑模块或硬件复位信号来复位IFF模块,再次启动工作。
  2.3 IFF认证模块的FPGA设计
  
  2.3.1 IFF认证模块的总体框架
  整个认证模块主要由四部分组成,如图3所示。其中1-wire模块主要工作在主模式,负责加密芯片之间的通信;指令译码模块主要负责加密芯片和认证模块之间通信的指令译码工作,译码前指令存储在ROM块中;SHA-1引擎的核心处理器为Xilinx公司的PieoBlaze 8位微处理器,主要功能是计算SHA-1算法,进行安全认证。它接收外部加密芯片通过1-wire总线接口传送来的信息,将其和MAC结果进行对比。只有当哈希计算结果和加密芯片中SHA-1引擎的哈希结果匹配时,才使能用户设计;随机数发生器(RNG)是当复位信号置位SHA-I引擎模块时,RNG为该模块产生一串随机数。SHA-1引擎模块处理这一串随机数,转换成40位随机数据,并用来进行哈希计算。
  
  2.3.2-wire总线模块设计
  1-wire总线芯片在数据传输过程中,每个1-wire总线芯片都拥有唯一的地址,系统主机一旦选通该芯片,就会保持通信连接直到复位。1-wire总线通信协议定义了如下几种信号类型,即复位脉冲、应答脉冲、写0、写1、读0和读l。主机发送所有的命令和数据都是字节的低位在前。在写数据过程中,总线发出复位信号同步整个总线,然后由系统主机初始化每一位数据时隙,利用宽脉冲或窄脉冲来实现写“0”或写“1”;读数据时,主机利用窄脉冲初始化时隙,从机将数据线保持在低电平,通过展宽低电平脉冲返回逻辑“0”,或保持脉冲宽度不变来返回逻辑“1”。
  总线数据通信主要相关程序如下:
  writebyte:CALL writeslow
  CALL writeslow
  CALL writeslow
  CALL writeslow
  CALL writeslow
  CALL writeslow
  CALL writeslow
  JUMP writeslow
  writeslow:LOAD intreg,0A
  CALLwait;wait 10us
  RR a
  RT.a
  J U MP N C,writeOslow
  writeOslow:CALL iblow
  LOAD intreg,3C
  CALL wait;wait 60us
  SR0 a
  JUMP ibhigh   writelslow:CALL iblow
  LOAD intreg,06
  CALLwait
  ;wait 6us
  CALL ibhigh
  LOAD intreg,09
  CALLwait
  ;wait9us
  INPUT tmphh,ib
  RRtmphh
  SRA a
  LOAD intreg,2D
  JUMPwait;wait45us
  readbyte:LOAD a,FF
  2.3.3随机数发生器模块设计
  为了尽可能节省资源,随机数发生器采用了震荡采样法,并在这个基础上,根据实际应用,做了一定的改进和简化,从而使得通用性更强,也更加便于移植。其电路如图4所示,采用了两个反相器震荡环的输出异或,得到了一组随机信号构成的新波形,同时由两个D触发器以一个较低的时钟频率进行采样和同步,从而得到随机序列。
  
  2.3.4指令译码模块设计
  指令译码模块主要由ROM组成,ROM中存有微处理器PicoBlaze运行指令,模块启动后,将命令顺序读出送入PicoBlaze微处理器运行,实现哈希算法以及加密芯片之间的通信。该模块是由译码器KCPSM2根据Rom form.vhd和Rom_form.coe两个模板文件生成,模板文件定义了程序存储器的端口、框架(1024×8)、逻辑综合的INIT属性描述(综合时初始化存储器,将操作码写到ROM中)。
  
  
  
  
  2.3.5 SHA-1引擎模块设计
  SHA-1引擎模块计算SHA-1算法,进行安全认证。它接收外部加密芯片通过1-wire接口传送来的信息,将其和MAC结果进行对比。只有当SHA-1计算结果和加密芯片中的计算结果匹配时,才能使能用户设计。
  整个算法的核心处理模块为PicoBlaze,初始值分别为A=0x67452301、B=0xEFCDAB89、C=Ox98BADCFE、D=0x10325476、E=0xC3D2E1FO,同时将输入的512bit数据分别存储到处理器、存储器、寄存器00-3F中。整个算法结束后将结果储存在S00--S13中。
  A:=0x67452301
  sha:LOAD all,01
  LOAD alh,23
  LOAD ahl,45
  LOAD ahh,67
  ;B:=0xEFCDAB89
  LOAD b11,89
  LOAD blh,AB
  LOAD bhl,CD
  LOAD bhh,EF
  ;C:=0x98BADCFE
  LOAD cll,FE
  LOAD clh,DC
  LOAD chl,BA
  LOAD chh,98
  :D:=0x10325476
  LOAD dll,76
  LOAD dlh,54
  LOAD dhl,32
  LOAD dhh,10
  ;E:=0xC3D2E 1 FO
  LOAD e11.F0
  LOAD elh,E1
  LOAD ehl,D2
  LOAD ehh,C3
  在SHA-1引擎中还包括状态处理模块控制整个SHA-1引擎的运行,其中包含上电后进入startl状态,模块使能信号en为低时进入start0状态,然后等待en为高。当检测到en的上升沿,通过1--wire总线搜索外部加密芯片,搜索成功后接收信息,启动SHA-1引擎,根据接收到的信息开始哈希运算,运算成功后,将得到的结果同收到的MAC值比较,失败则进入fail状态,pass信号保持为低,否则进入pass状态,pass信号拉高。下面是状态转移的部分代码。
  LOAD a,0l
  OUTPUT a,ib;set pass low
  starth INPUT a,ib
  AND a,02
  JUMP NZ,startl;wait for en to g0 low
  start0:INPUT a,ib
  AND a,02
  JUMP Z,start0;wait for en to go high
  LOAD a,01
  OUTPUT a,ib;set pass low
  ;check for a D$28E01
  CALL resetslow
  AND a.a
  JUMP NZ,fail:if n0 1--wire device is present
  ;check to see if DS28E0 1 responds OK t0 a random chNlenge
  CALLiff
  AND a,a
  JUMP NZ,fail:if iff has failed
  pass:LOAD a,03
  OUTPUT a,ib;set pass high
  JUMP startl
  fail:LOAD a,01
  OUTPUT a,ib;set pass low
  JUMP startl
  3.验证与调试
  通过布局布线后,把设计生成的网表下载到FPGA验证平台上的FPGA芯片中进行调试。调试过程中的工具使用Xilinx提供的DeBug软件ChipScope。它可以在FPGA工作时,实时地抓取其内部信号的波形。这些波形是电路实际工作时的实时波形,它真实地反映了电路的工作状态。
  下面是设计的调试过程:
  (1)首先FPGA发送ROM命令码Skip ROM(CCH),此命令可以在不知道64位ROM地址码的情况下访问存储器,从而节省时间。接着输入Write Scratchpad命令码(0FH)并指定目标地址TAl(80H)和TA2(OOH),然后将数据(密钥)写入暂存器。图5所示即是将64bit密钥EE、FF、45、32、A0、9D、18、67写入了暂存器。(图6为命令格式,RST为FPGA产生的1-wire复位脉冲,PD为DS28E01-100产生的在线应答脉冲,select是ROM功能命令,WSP为Write Scrachpad命令,TA是目标地址TAl和TA2,CRCl6/为传输取反后的CRCl6)。
  (2)执行Load First Secret(5AH),将暂存器内容替换器件的当前密钥。如图7所示,首先发送ROM命令码Skip ROM(CCH)接着是Load FirstSecret(5AH),同时提供一个3字节的授权格式TAl,TA2,E/S),这个授权格式如果与地址寄存器的数据完全匹配且密钥未加写保护,则授权标记置位同时开始复制,复制时间为t。,在复制时间结束之后,如果读到AA则表明复制成功(如图8所示),读到FF表明复制失败。
  (3)读器件ID。FPGA发送ROM命令码ReadROM(33H),此条命令允许FPGA读取DS28E01-100的8位家族码、48位唯一序列号和8位CRC校验码。图8所示即为实际读出的器件。   (4)为了增加保密性,发送ROM命令码SkipROM(CCH),接着输入Write Scratch-pad命令码(0FH)再将器件ID写回暂存器中,以便作为生成新密钥的数据,工作过程如第1步),如图9所示。
  (5)计算新的密钥Compute Next Secret(33H)。为增加安全性,DS28E01-100能够基于当前密钥,指定暂存器页的内容以及暂存器中所有数据组成的部分密钥计算出一个新的密钥。在ROM命令码CCH后发出Compute Next Secret(33H)后,FPGA提供一个两字节的目标地址OOH、OOH,此时启动512位SHA-1引擎,FPGA必须等待tCSHA计算新密钥,再等待一定延时后,主机等待tpROG将新密码复制到密钥寄存器。如果复制成功,则最后一个字节应读出AAH,如果不成功则读出FFH。图10、11正确地反应了计算新密钥的格式。总线主机不必知道器件的当前密钥,就可以成功计算出一个新密钥,并用它覆盖现存的密钥。计算出来的新密钥是不可
  见的。
  (6)读取MAC码以及部分存储页的数据。MAC是根据密钥、随机数、附加数据及器件识别号来计算的,所以首先要写入随机数,如图12。过程与第1步类似。然后利用Read Authenticated Page(A5H),FPGA发出命令代码并指定了目标地址(TAl和TA2)(

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3