一种基于真随机序列和安全散列算法可靠加密FPGA设计的方法
朱宇
摘 要: FPGA在定制项目和具有设计重构需求的项目开发中广泛应用,随着硬件设计集成度不断提高,在一个FPGA设计中往往集成多个厂商提供的软核设计(IPCore),IPCore知识产权保护显得尤为重要。提出一种真随机序列与密钥结合,并通过安全散列算法加密验证,实现对FPGA设计中商用IPCore知识产权保护的方法。
关键词: FPGA; IPCore; 真随机序列; 安全散列算法
中图分类号: TN911.2?34 文献标识码: A 文章编号: 1004?373X(2017)07?0078?03
A reliable encryption FPGA design method based on true random
sequence and security hash algorithm
ZHU Yu
(Division of Aviation, Southwest China Institute of Electronic Technology, Chengdu 610036, China)
Abstract: The FPGA is widely used in the customization project and development of the needing reconstruction project. With the continuous increase of the hardware design integration, the design of the single FPGA is often integrated with the IPCores provided by multiple manufacturers, so the intellectual property protection of the IPCore is particularly important. A method combining the true random sequence with secret key is proposed to protect the commercial IPCore intellectual property of the FPGA design by means of the encryption verification of the security hash algorithm.
Keywords: FPGA; IPCore; true random sequence; security hash algorithm
0 引 言
FPGA规模和性能日益强大,几乎可以实现包括高性能处理器、各种协议处理、通用和專用集成电路、接口电路在内的所有硬件电路功能[1]。FPGA强大的性能支撑硬件设计集成度不断提高,而在一个FPGA设计中往往需要集成不同厂商提供的协议处理、专用处理等IPCore,一个厂商开发的IPCore也可能提供给多个用户使用,与用户设计集成,那么对IPCore进行有效的知识产权保护才能防止用户恶意窃取,保证IPCore开发者的核心利益。
用户集成IPCore的方法有两种:一种是源码级集成,该方法用户能完全掌握IPCore详细设计,可轻易将其直接移植甚至修改优化用于其他设计,IPCore知识产权无法保护;另一种是网表级集成[2],IPCore开发者提供IPCore编译后生成的网表文件,用户将IPCore网表文件与其他逻辑集成完成FPGA设计,这种方法用户无法窥探IPCore内部详细设计,但由于用户熟悉IPCore使用接口,如果不加以保护,仍然可以将该网表文件在未经开发者许可的情况下用作其他设计。
相较于目前行业内其他几种常用保护FPGA设计的方法,本文提出一种低成本,基于真随机序列与密钥结合,并通过安全散列算法加密验证,实现IPCore知识产权可靠保护的方法。
1 几种FPGA设计知识产权保护的方法及劣势
(1) 依靠FPGA自带加密保护功能
目前主流FPGA芯片都自带加密保护功能,加密原理如下:FPGA内部有片128 b或者更大的非易失存储区域用于存放密钥,在使用FPGA bit流文件生成烧写文件时,对密钥进行设置,通过AES128等加密算法生成密文烧写文件,写入FPGA的配置芯片,同时将相同的密钥烧写进FPGA的密钥寄存器,该寄存器烧写一次之后不能读取和修改。当FPGA启动时,从配置芯片中加载密文配置文件,FPGA从内部密钥寄存器中读出密钥,通过解密算法输出明文完成FPGA加载[3]。
该方法能够有效地防止通过监测FPGA加载管脚信号流实现FPGA功能设计复制,同时,由于AES128等加密算法安全等级较高,暴力破解几乎不可能,因此能够有效保护FPGA设计的知识产权。但是这种方法仅对完整的FPGA设计有效保护,而无法对IPCore的网表文件进行保护。
(2) 依靠外部加密芯片保护核心算法
目前市面上有数款加密芯片,能够存储和运行部分软件代码或硬件描述语言,使用者可将IPCore拆分,将部分核心算法移植加密芯片,IPCore必须依赖外部加密芯片才能正常运行[4]。
IPCore开发者只需要控制加密芯片的算法即可实现对IPCore知识产权保护。但这种方法需要将成熟的IPCore拆分,增加了额外工作量,拆分出的逻辑部分需要适配加密芯片的容量,同时,在每次进行核心运算时需要与加密芯片通信和同步,严重影响IPCore运算的效率。
(3) 利用外部芯片产生伪随机码序列验证产生IPCore工作使能
利用在CPLD等外部芯片内实现线性反馈移位寄存器产生伪随机码序列输入IPCore,IPCore中采用相同的电路产生相同的伪随机码序列,当IPCore验证伪码序列相同时,产生IPCore工作使能,否则IPCore不工作[5]。
随着线性反馈电路级数的增加,伪码序列周期呈指数增加,利用已知伪码序列反推特征多项式难度较大,保护IPCore知识产权。由于线性反馈移位寄存器设计类似,目前高性能计算机通过已知伪码序列“训练”,“拟合”,有较大概率设计出一种在足够长时间内产生同样伪码序列的特征多项式,甚至反推出相同的特征多项式,无法可靠保证IPCore的知识产权。
2 一种可靠、低成本保护FPGA设计知识产权
的方法
2.1 实现原理
FPGA IPCore加密认证系统框图如图1所示。FPGA IPCore中包含核心状态控制模块、密钥存储模块、真随机数生成模块、加密算法模块、通信模块、验证模块和工作逻辑部分。加密算法模块包括合成模块和加密算法模块,合成模块的作用是将密钥和随机数合成为一个信号,加密算法模块是对合成后的信号进行加密;通信模块用于向存储密钥的芯片发送随机数并接收其返回加密后的数据;验证模块用以返回加密的数据与FPGA自己加密的数据是否一致有效,有效则使能工作逻辑,否则禁能工作逻辑。核心状态控制模块控制加密认证系统工作流程的状态跳转。
外围用于存储密钥和加密的芯片可选用小封装、低成本的CPLD,例如XILINX公司coolRunner?IIA系列CPLD X2C32A,包含32个宏单元和21个I/O,5 mm×5 mm BGA封装、仅需0.85美元。X2C64A包含64个宏单元和37个I/O,7 mm×7 mm BGA封装,仅需1.2美元。十分适合用作外部加密芯片。
外部CPLD包含密钥存储器、加密算法模块和通信模块。存储的密钥,加密算法模块与FPGA内部设计模块一致,通信模块用以接收FPGA发送的随机数并向FPGA发送加密后的数据。
2.2 真随机数生成模块
区别于其他FPGA设计中常用伪随机码实现随机码功能,在本设计中采用一种真随机码生成方法——环形振荡器队列产生真随机码。真随机数生成模块如图2所示。
真随机数生成模块分为环形振荡源、拼接、数字化、模二加移位寄存输出几个部分。振荡源由3个以上的非门首尾相接,组成一个闭合环路,得到一个高频振荡时钟,该时钟信号的周期与门延时及反向器个数有关,而与外部信号无关。将[n]组环形振荡器拼接成一个[n]位数据,通过D触发器采样数字化。由于这种高频振荡时钟初始态随机,并在一定范围内随机抖动,通过一个较慢的时钟采样所得的[n]位数据也是随机的。由于芯片内部会受到温度、电压的影响,特别是当采样时钟频率较高时,得到的随机数会存在一定的偏置现象,消偏的方法有很多种,模二加移位寄存在可编程逻辑器件中实现简单,同时可以很好的消偏,经过模二加移位寄存输出的数据是典型的随机数据[6]。在本设计中环形振荡源采用3级级联,环形振荡器8组。
2.3 加密算法模块
加密算法模块采用安全散列算法,该算法是基于单向函数的一种散列函数,它能够将可变输入长度串(预映射)转换成固定长度的输出串(散列值)。安全散列算法是单向工作函数,从预映射值很容易计算其散列值,但是已知其散列值得出预映射值几乎不可能。安全散列算法具有单向性、惟一性和高雪崩效应,实现简单,是通信领域常用的高效的加密手段[7]。
[z=f(x,y),]其中[x]为真随机数,[y]为密钥,共同组成预映射值,[f]为安全散列函数,[z]为加密后的密文,由于[f]和[y]均不可见,因此已知[z]和[x]无法反推外围加密芯片设计。安全散列算法种类很多,统筹考虑算法安全等级和实现所需逻辑资源,MD2,MD5,SHA?1,SHA?256等都非常适合FPGA和CPLD实现,这里以MD5函数为例介绍加密过程。
(1) 对消息进行补位,随机数采集长度为64位,密钥长度为64位,在其后补充1位1和319位0,后64位用于表示原始消息长度为128,组成一个512位数据,该512位数即原始明文。该原始明文被分为16组32位数据[M0~M15。]
(2) 核心操作,按照图3的逻辑算法,将[An,Bn,Cn,Dn]经过非线性运算、移位寄存,并加入一些非线性数值,从而生成新的[An+1,Bn+1,Cn+1,Dn+1]值。经过64次运算,得出[An,Bn,Cn,Dn]值输出[8]。
其中[A0,B0,C0,D0]是4个32位自定义数,即算法密钥,[n]从0~63共计64次运算,分为4组:0~15,16~31,32~47,48~63,4组运算中使用的[Ft]非线性函数为:
[Ft=F(B,C,D)=(B and C) or (~B) and D,0≤n≤15G(B,C,D)=(B and D) or C and (~D),16≤n≤31H(B,C,D)=B × or C× or D,32≤n≤47I(B,C,D)=C × or B or (~D),48≤n≤64]
在使用HDL语言中,可采用case语句实现。
[Mj]即16组原始明文中的一组,j=n%16。
[Ti=232×abssin i,]由于三角函数在FPGA中较难实现,由于[0≤i≤15,]可以预先计算好,存储在16个32位寄存器中,使用时寻址取出。
循环左移[S]位运算可采用拼接运算{P[31-S:0],P[31:31-S+1]}实现,循环位数[S]自定义。
算法按照如图4所示的有限状态机运算64次,得到[A63,B63,C63,D63,]将其拼接[A63,B63,C63,D63]为一个128位数据,这就是MD5算法加密所得密文。
若选择其他安全散列算法,如SHA?1,SHA?256等实现方法类似,安全等级进一步提高,所占用逻辑稍大。
2.4 验证使能
在FPGA IPCore中和在CPLD中加密算法实现方法一致,密钥和原始明文分别在FPGA和CPLD中进行加密运算,CPLD运算完成后,将密文通过通信模块发送至FPGA的验证模块中,与FPGA运算完成的密文进行比较,若一致则向IPCore的工作逻辑发送使能信号,IPCore开始工作,否则禁能IPCore,从而达到知识产权保护的功能。
3 结 论
本文论述了一种基于真随机序列和安全散列算法可靠加密FPGA设计的方法。FPGA IPCore通过环形振荡序列产生真随机序列,每次系统上电,FPGA发送给CPLD的数据无法预测和模拟,使得侦测该数据无意义。另外,利用安全散列算法的单向性,即使能够侦测得到CPLD加密后发送给FPGA的密文,但无法反推出密钥和加密算法,从而可靠保护网表级FPGA设计的知识产权。同时CPLD具有体积小、成本低廉、无法暴力破解的特性,使这种方法具有较高性价比和商业价值,可广泛应用于商用IPCore保护和大规模FPGA联合设计中。
参考文献
[1] 吴继华,王诚.设计与验证:Verilog HDL[M].北京:人民邮电出版社,2006.
[2] 何清平,劉佐濂.基于FPGA设计的综合技术分析[J].中国科技信息,2006(11):181?183.
[3] 李正杰.高密度FPGA配置体系的设计与实现[D].成都:电子科技大学,2012.
[4] 杨春林,张春雷,高山,等.基于DS28E01的FPGA加密认证系统的设计[J].微计算机信息,2009(8):129?130.
[5] 周强,陈利学,王博,等.用CPLD实现安全可靠的FPGA加密设计[J].现代电子技术,2005,28(22):86?87.
[6] SCHELLEKENS D, PRENEEL B, VERBAUWHEDE I. FPGA vendor agnostic true random number generator [C]// Proceedings of 2006 IEEE Field Programmable Logic and Applications. [S.l.]: IEEE, 2006: 1?6.
[7] SCHNEIER Bruce.应用密码学:协议、算法与C源程序[M].吴世忠,柷世雄,张文政,等译.北京:机械工业出版社,2000.
[8] 马才根.基于EDA技术的MD5散列算法的硬件实现[D].南京:东南大学,2007.
摘 要: FPGA在定制项目和具有设计重构需求的项目开发中广泛应用,随着硬件设计集成度不断提高,在一个FPGA设计中往往集成多个厂商提供的软核设计(IPCore),IPCore知识产权保护显得尤为重要。提出一种真随机序列与密钥结合,并通过安全散列算法加密验证,实现对FPGA设计中商用IPCore知识产权保护的方法。
关键词: FPGA; IPCore; 真随机序列; 安全散列算法
中图分类号: TN911.2?34 文献标识码: A 文章编号: 1004?373X(2017)07?0078?03
A reliable encryption FPGA design method based on true random
sequence and security hash algorithm
ZHU Yu
(Division of Aviation, Southwest China Institute of Electronic Technology, Chengdu 610036, China)
Abstract: The FPGA is widely used in the customization project and development of the needing reconstruction project. With the continuous increase of the hardware design integration, the design of the single FPGA is often integrated with the IPCores provided by multiple manufacturers, so the intellectual property protection of the IPCore is particularly important. A method combining the true random sequence with secret key is proposed to protect the commercial IPCore intellectual property of the FPGA design by means of the encryption verification of the security hash algorithm.
Keywords: FPGA; IPCore; true random sequence; security hash algorithm
0 引 言
FPGA规模和性能日益强大,几乎可以实现包括高性能处理器、各种协议处理、通用和專用集成电路、接口电路在内的所有硬件电路功能[1]。FPGA强大的性能支撑硬件设计集成度不断提高,而在一个FPGA设计中往往需要集成不同厂商提供的协议处理、专用处理等IPCore,一个厂商开发的IPCore也可能提供给多个用户使用,与用户设计集成,那么对IPCore进行有效的知识产权保护才能防止用户恶意窃取,保证IPCore开发者的核心利益。
用户集成IPCore的方法有两种:一种是源码级集成,该方法用户能完全掌握IPCore详细设计,可轻易将其直接移植甚至修改优化用于其他设计,IPCore知识产权无法保护;另一种是网表级集成[2],IPCore开发者提供IPCore编译后生成的网表文件,用户将IPCore网表文件与其他逻辑集成完成FPGA设计,这种方法用户无法窥探IPCore内部详细设计,但由于用户熟悉IPCore使用接口,如果不加以保护,仍然可以将该网表文件在未经开发者许可的情况下用作其他设计。
相较于目前行业内其他几种常用保护FPGA设计的方法,本文提出一种低成本,基于真随机序列与密钥结合,并通过安全散列算法加密验证,实现IPCore知识产权可靠保护的方法。
1 几种FPGA设计知识产权保护的方法及劣势
(1) 依靠FPGA自带加密保护功能
目前主流FPGA芯片都自带加密保护功能,加密原理如下:FPGA内部有片128 b或者更大的非易失存储区域用于存放密钥,在使用FPGA bit流文件生成烧写文件时,对密钥进行设置,通过AES128等加密算法生成密文烧写文件,写入FPGA的配置芯片,同时将相同的密钥烧写进FPGA的密钥寄存器,该寄存器烧写一次之后不能读取和修改。当FPGA启动时,从配置芯片中加载密文配置文件,FPGA从内部密钥寄存器中读出密钥,通过解密算法输出明文完成FPGA加载[3]。
该方法能够有效地防止通过监测FPGA加载管脚信号流实现FPGA功能设计复制,同时,由于AES128等加密算法安全等级较高,暴力破解几乎不可能,因此能够有效保护FPGA设计的知识产权。但是这种方法仅对完整的FPGA设计有效保护,而无法对IPCore的网表文件进行保护。
(2) 依靠外部加密芯片保护核心算法
目前市面上有数款加密芯片,能够存储和运行部分软件代码或硬件描述语言,使用者可将IPCore拆分,将部分核心算法移植加密芯片,IPCore必须依赖外部加密芯片才能正常运行[4]。
IPCore开发者只需要控制加密芯片的算法即可实现对IPCore知识产权保护。但这种方法需要将成熟的IPCore拆分,增加了额外工作量,拆分出的逻辑部分需要适配加密芯片的容量,同时,在每次进行核心运算时需要与加密芯片通信和同步,严重影响IPCore运算的效率。
(3) 利用外部芯片产生伪随机码序列验证产生IPCore工作使能
利用在CPLD等外部芯片内实现线性反馈移位寄存器产生伪随机码序列输入IPCore,IPCore中采用相同的电路产生相同的伪随机码序列,当IPCore验证伪码序列相同时,产生IPCore工作使能,否则IPCore不工作[5]。
随着线性反馈电路级数的增加,伪码序列周期呈指数增加,利用已知伪码序列反推特征多项式难度较大,保护IPCore知识产权。由于线性反馈移位寄存器设计类似,目前高性能计算机通过已知伪码序列“训练”,“拟合”,有较大概率设计出一种在足够长时间内产生同样伪码序列的特征多项式,甚至反推出相同的特征多项式,无法可靠保证IPCore的知识产权。
2 一种可靠、低成本保护FPGA设计知识产权
的方法
2.1 实现原理
FPGA IPCore加密认证系统框图如图1所示。FPGA IPCore中包含核心状态控制模块、密钥存储模块、真随机数生成模块、加密算法模块、通信模块、验证模块和工作逻辑部分。加密算法模块包括合成模块和加密算法模块,合成模块的作用是将密钥和随机数合成为一个信号,加密算法模块是对合成后的信号进行加密;通信模块用于向存储密钥的芯片发送随机数并接收其返回加密后的数据;验证模块用以返回加密的数据与FPGA自己加密的数据是否一致有效,有效则使能工作逻辑,否则禁能工作逻辑。核心状态控制模块控制加密认证系统工作流程的状态跳转。
外围用于存储密钥和加密的芯片可选用小封装、低成本的CPLD,例如XILINX公司coolRunner?IIA系列CPLD X2C32A,包含32个宏单元和21个I/O,5 mm×5 mm BGA封装、仅需0.85美元。X2C64A包含64个宏单元和37个I/O,7 mm×7 mm BGA封装,仅需1.2美元。十分适合用作外部加密芯片。
外部CPLD包含密钥存储器、加密算法模块和通信模块。存储的密钥,加密算法模块与FPGA内部设计模块一致,通信模块用以接收FPGA发送的随机数并向FPGA发送加密后的数据。
2.2 真随机数生成模块
区别于其他FPGA设计中常用伪随机码实现随机码功能,在本设计中采用一种真随机码生成方法——环形振荡器队列产生真随机码。真随机数生成模块如图2所示。
真随机数生成模块分为环形振荡源、拼接、数字化、模二加移位寄存输出几个部分。振荡源由3个以上的非门首尾相接,组成一个闭合环路,得到一个高频振荡时钟,该时钟信号的周期与门延时及反向器个数有关,而与外部信号无关。将[n]组环形振荡器拼接成一个[n]位数据,通过D触发器采样数字化。由于这种高频振荡时钟初始态随机,并在一定范围内随机抖动,通过一个较慢的时钟采样所得的[n]位数据也是随机的。由于芯片内部会受到温度、电压的影响,特别是当采样时钟频率较高时,得到的随机数会存在一定的偏置现象,消偏的方法有很多种,模二加移位寄存在可编程逻辑器件中实现简单,同时可以很好的消偏,经过模二加移位寄存输出的数据是典型的随机数据[6]。在本设计中环形振荡源采用3级级联,环形振荡器8组。
2.3 加密算法模块
加密算法模块采用安全散列算法,该算法是基于单向函数的一种散列函数,它能够将可变输入长度串(预映射)转换成固定长度的输出串(散列值)。安全散列算法是单向工作函数,从预映射值很容易计算其散列值,但是已知其散列值得出预映射值几乎不可能。安全散列算法具有单向性、惟一性和高雪崩效应,实现简单,是通信领域常用的高效的加密手段[7]。
[z=f(x,y),]其中[x]为真随机数,[y]为密钥,共同组成预映射值,[f]为安全散列函数,[z]为加密后的密文,由于[f]和[y]均不可见,因此已知[z]和[x]无法反推外围加密芯片设计。安全散列算法种类很多,统筹考虑算法安全等级和实现所需逻辑资源,MD2,MD5,SHA?1,SHA?256等都非常适合FPGA和CPLD实现,这里以MD5函数为例介绍加密过程。
(1) 对消息进行补位,随机数采集长度为64位,密钥长度为64位,在其后补充1位1和319位0,后64位用于表示原始消息长度为128,组成一个512位数据,该512位数即原始明文。该原始明文被分为16组32位数据[M0~M15。]
(2) 核心操作,按照图3的逻辑算法,将[An,Bn,Cn,Dn]经过非线性运算、移位寄存,并加入一些非线性数值,从而生成新的[An+1,Bn+1,Cn+1,Dn+1]值。经过64次运算,得出[An,Bn,Cn,Dn]值输出[8]。
其中[A0,B0,C0,D0]是4个32位自定义数,即算法密钥,[n]从0~63共计64次运算,分为4组:0~15,16~31,32~47,48~63,4组运算中使用的[Ft]非线性函数为:
[Ft=F(B,C,D)=(B and C) or (~B) and D,0≤n≤15G(B,C,D)=(B and D) or C and (~D),16≤n≤31H(B,C,D)=B × or C× or D,32≤n≤47I(B,C,D)=C × or B or (~D),48≤n≤64]
在使用HDL语言中,可采用case语句实现。
[Mj]即16组原始明文中的一组,j=n%16。
[Ti=232×abssin i,]由于三角函数在FPGA中较难实现,由于[0≤i≤15,]可以预先计算好,存储在16个32位寄存器中,使用时寻址取出。
循环左移[S]位运算可采用拼接运算{P[31-S:0],P[31:31-S+1]}实现,循环位数[S]自定义。
算法按照如图4所示的有限状态机运算64次,得到[A63,B63,C63,D63,]将其拼接[A63,B63,C63,D63]为一个128位数据,这就是MD5算法加密所得密文。
若选择其他安全散列算法,如SHA?1,SHA?256等实现方法类似,安全等级进一步提高,所占用逻辑稍大。
2.4 验证使能
在FPGA IPCore中和在CPLD中加密算法实现方法一致,密钥和原始明文分别在FPGA和CPLD中进行加密运算,CPLD运算完成后,将密文通过通信模块发送至FPGA的验证模块中,与FPGA运算完成的密文进行比较,若一致则向IPCore的工作逻辑发送使能信号,IPCore开始工作,否则禁能IPCore,从而达到知识产权保护的功能。
3 结 论
本文论述了一种基于真随机序列和安全散列算法可靠加密FPGA设计的方法。FPGA IPCore通过环形振荡序列产生真随机序列,每次系统上电,FPGA发送给CPLD的数据无法预测和模拟,使得侦测该数据无意义。另外,利用安全散列算法的单向性,即使能够侦测得到CPLD加密后发送给FPGA的密文,但无法反推出密钥和加密算法,从而可靠保护网表级FPGA设计的知识产权。同时CPLD具有体积小、成本低廉、无法暴力破解的特性,使这种方法具有较高性价比和商业价值,可广泛应用于商用IPCore保护和大规模FPGA联合设计中。
参考文献
[1] 吴继华,王诚.设计与验证:Verilog HDL[M].北京:人民邮电出版社,2006.
[2] 何清平,劉佐濂.基于FPGA设计的综合技术分析[J].中国科技信息,2006(11):181?183.
[3] 李正杰.高密度FPGA配置体系的设计与实现[D].成都:电子科技大学,2012.
[4] 杨春林,张春雷,高山,等.基于DS28E01的FPGA加密认证系统的设计[J].微计算机信息,2009(8):129?130.
[5] 周强,陈利学,王博,等.用CPLD实现安全可靠的FPGA加密设计[J].现代电子技术,2005,28(22):86?87.
[6] SCHELLEKENS D, PRENEEL B, VERBAUWHEDE I. FPGA vendor agnostic true random number generator [C]// Proceedings of 2006 IEEE Field Programmable Logic and Applications. [S.l.]: IEEE, 2006: 1?6.
[7] SCHNEIER Bruce.应用密码学:协议、算法与C源程序[M].吴世忠,柷世雄,张文政,等译.北京:机械工业出版社,2000.
[8] 马才根.基于EDA技术的MD5散列算法的硬件实现[D].南京:东南大学,2007.