CN103731257A - 一种Piccolo加密算法硬件实现方法 - Google Patents

一种Piccolo加密算法硬件实现方法 Download PDF

Info

Publication number
CN103731257A
CN103731257A CN201410022523.6A CN201410022523A CN103731257A CN 103731257 A CN103731257 A CN 103731257A CN 201410022523 A CN201410022523 A CN 201410022523A CN 103731257 A CN103731257 A CN 103731257A
Authority
CN
China
Prior art keywords
key
wheel
round
computing
piccolo
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410022523.6A
Other languages
English (en)
Other versions
CN103731257B (zh
Inventor
李浪
贺位位
刘波涛
邹祎
许琼方
刘辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hengyang Normal University
Original Assignee
Hengyang Normal University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hengyang Normal University filed Critical Hengyang Normal University
Priority to CN201410022523.6A priority Critical patent/CN103731257B/zh
Publication of CN103731257A publication Critical patent/CN103731257A/zh
Application granted granted Critical
Publication of CN103731257B publication Critical patent/CN103731257B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开了一种Piccolo加密算法硬件实现方法,利用相同的轮运算只实现一次,采用重复调用方式完成;原r-1轮可重复调用直接变成r轮重复调用。同时在r轮循环运算后增加一个RP-1轮置换函数,运算一次使输出密文正确。本发明使原算法最后第r轮不必重新实现,而是直接复用前面可重复轮函数模块,只需在最后增加一个相对简单的RP-1,本发明方法使Piccolo密码算法中的模块高度复用,有效节省硬件实现面积,同时提高加密速度。

Description

一种Piccolo加密算法硬件实现方法
技术领域
本发明涉及信息安全中的密码算法领域,特别是涉及轻量级密码Piccolo算法硬件实现方法。
背景技术
Piccolo轻量级密码算法是在2011年国际顶级密码硬件与嵌入式系统会议(CHES)上被提出,是一种适合资源受限的智能卡加密算法。
Piccolo算法是一种轻量级分组加密算法,分组长度64位,密钥长度有80位和128位,其中密钥为80位时记作Piccolo-80,迭代轮数r为25轮;密钥128位记作Piccolo-128,迭代轮数r为31轮。算法采用非平衡型Feistel结构;算法包括密钥扩展运算,每轮中,加密数据同子密钥都进行异或运算(AddRoundKey,ARK操作)、F函数运算与RP轮置换函数运算(最后一轮没有使用RP轮置换函数);将64位明文输入分为4个分支,每个分支为16位;将从左到右第一个分支与第三个分支分别同白化密钥wk0与wk1进行异或(AddWhiteningKey,AWK操作);然后进行r-1轮迭代加密;最后一轮输入的64位中间值同样划分为4个分支,每个分支为16位;然后进行同样的F函数运算和子密钥异或运算(AddRoundKey,ARK操作),得到的结果第一个分支与第三个分支直接同白化密钥wk0与wk1进行异或,最终得到64位密文输出。RP函数置换运算将输入64位值划分为8个字节,然后进行字节的置换操作,如图4所示,将RP轮置换函数的64输入位数据从高位到低位依次划分为8个字节g0,g1,g2,g3,g4,g5,g6,g7,以g2,g7,g4,g1,g6,g3,g0,g5作为RP轮置换函数运算的64位输出数据。
密钥扩展部分:
初始密钥key长度为80位:
将初始密钥从高位开始按16位一组划分为5个部分,分别记作k0、k1、k2、k3及k4,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数;
白化密钥扩展:
Figure BDA0000458065760000011
轮密钥扩: ( rk 2 i , rk 2 i + 1 ) &LeftArrow; ( con 2 i 80 , con 2 i + 1 80 ) &CirclePlus; ( k 2 , k 3 ) if i mod 5 = 0 or 2 ( k 0 , k 1 ) if i mod 5 = 1 or 4 ( k 4 , k 4 ) id i mod 5 = 3
其中,|为连接符,⊕为异或符,mod代表取余运算,k0、k1、k2、k3及k4的上标L表示k0、k1、k2、k3及k4的高8位,k0、k1、k2、k3及k4的上标R表示k0、k1、k2、k3及k4的低8位;
Figure BDA0000458065760000021
其中,{}16为16进制数,{}2为二进制数,ci是用五位二进制数表示的十进制数i;
初始密钥key长度为128位:
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
白化密钥扩展:
Figure BDA0000458065760000022
当(2i+2)mod8=0时,则按照(k0,k1,k2,k3,k4,k5,k6,k7)←(k2,k1,k6,k7,k0,k3,k4,k5)进行轮密钥扩展,否则,依据(k0,k1,k2,k3,k4,k5,k6,k7)进行轮密钥扩展;
轮密钥扩展:有
Figure BDA0000458065760000023
其中,|为连接符,⊕为异或符,mod代表取余运算,k0、k1、k2、k3、k4、k5、k6及k7的上标L表示k0、k1、k2、k3、k4、k5、k6及k7的高8位,k0、k1、k2、k3、k4、k5、k6及k7的上标R表示k0、k1、k2、k3、k4、k5、k6及k7的低8位;
( con 2 i 128 | con 2 i + 1 128 ) &LeftArrow; ( c i + 1 | c 0 | c i + 1 | { 00 } 2 | c i + 1 | c 0 | c i + 1 | ) &CirclePlus; { 6547 a 98 b } 16 .
F函数变换依次包括S盒变换、列混合变换及S盒变换,如图3所示:
其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};
所述列混合变换中所使用的矩阵M为: 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 .
现有技术中Piccolo轻量级密码算法实现方法为:
明文生成密文、密钥扩展生成子密钥是相互独立的两个部分,对于生成白化密钥与轮密钥先用寄存器保存起来,然后与明文进行白化密钥加和轮密钥加操作,这种操作延迟加密时间与增加寄存器数量,不利于减少芯片实现面积;
Piccolo-80算法是采用24+1轮运算,前24轮在轮函数硬件资源上可重复调用实现,最后一轮需要重新分配轮运算资源,因此25轮迭代运算时不能连续重复。同理,Piccolo-128算法,采用30+1轮运算,前30轮在轮函数硬件资源上可重复调用实现,最后一轮需要重新分配轮运算资源。Piccolo原始算法中由于最后一轮运算需单独实现,这种方法不利于最大限度重复运行相同模块,从而增加芯片实现面积,同时占用资源。
发明内容
本发明研究实现了一种面积优化的轻量级Piccolo加密算法硬件实现方法,该方法在优化实现Piccolo加密算法时,通过对算法结构深入研究;采取以下方法对Piccolo算法现有实现技术进行合理优化,达到节省Piccolo加密算法硬件实现面积,使其更适合在资源约束的硬件芯片上实现,同时加密性能提高。
一种Piccolo加密算法硬件实现方法,包括以下步骤:
步骤1:将64位的待加密数据加载至寄存器;
步骤2:将加载至寄存器的64位待加密数据从高位开始按16位一组依次分成4组,记作:P0、P1、P2及P3;同时将初始密钥key进行Piccolo白化密钥扩展运算,生成16位白化密钥wka,其中,0≤a<4,a为整数;
设定加密轮数r:当初始密钥长度为80位时,加密轮数r=25;当初始密钥长度为128位时,加密轮数r=31;
步骤3:将P0与wk0进行异或运算获得P′0,P2与wk1进行异或运算获得P′2,P′0、P1、P′2及P3组成轮运算的运算数据,对轮运算的运算数据进行r轮轮运算;
轮运算包括以下几个步骤:
1)将P′0和P′2分别进行F函数变换,将获得的变换结果分别记为P″0和P″2,同时将初始密钥key进行Piccolo轮密钥扩展运算,生成两个16位轮密钥rk2i、rk2i+1,其中,0≤i<r,第i轮轮运算需要使用两个轮密钥rk2i、rk2i+1
2)将P″0、轮密钥rk2i及P1进行异或运算,获得运算结果记为P′1;将P″2、轮密钥rk2i+1及P3进行异或运算,获得运算结果记为P′3
3)将P″0、P′1、P″2及P′3组成64位的运算数据status,对运算数据status进行RP轮置换函数运算,获得RP运算结果statusRP,如果到达r轮,则进入步骤4;否则,将64位运算结果statusRP从高位开始按16位一组依次分成4组,记作:
Figure BDA0000458065760000041
Figure BDA0000458065760000042
P 0 &prime; = statu s 0 RP , P 1 = status 1 RP , P 2 &prime; = status 2 RP P 3 = sta tus 3 RP , 返回步骤1);
步骤4:对statusRP进行RP-1轮置换函数运算,获得RP-1轮置换函数运算结果
Figure BDA00004580657600000417
将64位的
Figure BDA00004580657600000418
从高位开始按16位一组依次分成4组,记作:
Figure BDA0000458065760000044
Figure BDA0000458065760000045
Figure BDA0000458065760000046
Figure BDA0000458065760000047
与wk2进行异或运算获得
Figure BDA0000458065760000048
Figure BDA0000458065760000049
与wk3进行异或运算获得
Figure BDA00004580657600000410
利用
Figure BDA00004580657600000411
Figure BDA00004580657600000412
组成64位密文,完成加密操作。
所述步骤2与步骤3中对初始密钥key进行Piccolo白化密钥扩展和轮密钥扩展运算具体过程如下:
1)初始密钥key长度为80位
将初始密钥从高位开始按16位一组划分为5个部分,分别记作k0、k1、k2、k3及k4,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算的轮数:
白化密钥扩展:
Figure BDA00004580657600000413
轮密钥扩展: ( rk 2 i , rk 2 i + 1 ) &LeftArrow; ( con 2 i 80 , con 2 i + 1 80 ) &CirclePlus; ( k 2 , k 3 ) if i mod 5 = 0 or 2 ( k 0 , k 1 ) if i mod 5 = 1 or 4 ( k 4 , k 4 ) id i mod 5 = 3
其中,|为连接符,⊕为异或符,mod为取余运算,k0、k1、k2、k3及k4的上标L表示k0、k1、k2、k3及k4的高8位,k0、k1、k2、k3及k4的上标R表示k0、k1、k2、k3及k4的低8位;
Figure BDA00004580657600000415
其中,{}16为16进制数,{}2为二进制数,ci是用五位二进制数表示的十进制数i;
2)初始密钥key长度为128位
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
白化密钥扩展:
Figure BDA0000458065760000051
当(2i+2)mod8=0时,则按照(k0,k1,k2,k3,k4,k5,k6,k7)←(k2,k1,k6,k7,k0,k3,k4,k5)进行轮密钥扩展,否则,依据(k0,k1,k2,k3,k4,k5,k6,k7)进行轮密钥扩展;
轮密钥扩展:有
Figure BDA0000458065760000052
其中,|为连接符,⊕为异或符,mod代表取余运算,k0、k1、k2、k3、k4、k5、k6及k7的上标L表示k0、k1、k2、k3、k4、k5、k6及k7的高8位,k0、k1、k2、k3、k4、k5、k6及k7的上标R表示k0、k1、k2、k3、k4、k5、k6及k7的低8位;
( con 2 i 128 | con 2 i + 1 128 ) &LeftArrow; ( c i + 1 | c 0 | c i + 1 | { 00 } 2 | c i + 1 | c 0 | c i + 1 | ) &CirclePlus; { 6547 a 98 b } 16 .
所述的F函数变换依次包括S盒变换、列混合变换及S盒变换;
其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};
所述列混合变换中所使用的矩阵M为: 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 .
所述的RP轮置换函数将输入64位数据划分为8个字节,然后进行字节的置换操作;RP-1轮置换函数运算是RP函数置换的逆运算,将RP-1轮置换函数的64输入位数据从高位到低位依次划分为8个字节g0,g1,g2,g3,g4,g5,g6,g7,以g6,g3,g0,g5,g2,g7,g4,g1作为RP-1轮置换函数运算的64位输出数据。
RP-1轮置换函数运算是RP函数置换逆运算,结合图5。
对上述Piccolo加密算法硬件实现方法,其将Piccolo加密算法分为四个模块:常数更新模块(UpdateConstant)、F函数变换模块(Function)、轮函数模块(PiccoloRound)、主控制模块(Piccolo)四个模块。以下对四个模块进行描述:
常数更新模块(UpdateConstant):包含轮密钥扩展运算步骤,对传递进来轮数i先产生
Figure BDA0000458065760000055
参数,再利用产生的参数合成每轮的轮密钥rk2i、rk2i+1
F函数变换模块(Function):包含S盒,列混合矩阵,运算顺序为S盒变换→列混合变换→S盒变换,如图3所示。
轮函数模块(PiccoloRound):包含常数更新、F函数变换两个运算模块,其本身含有RP轮置换函数运算与异或运算(AddRoundKey,ARK操作),利用Verilog HDL语言的assign语句将常数更新模块与F变换模块并行运行,将得到P″0、轮密钥rk2i与P1进行异或运算,将P″2、轮密钥rk2i+1及P3进行异或运算,将得到的P′1、P′3与P″0、P″2分别进行RP轮置换函数运算。
主控制模块(Piccolo):将加密数据64位明文进行分组处理,将初始密钥进行白化密钥扩展产生白化密钥;分组处理数据与产生的白化密钥进行白化密钥异或运算,运算结果进入轮函数模块,利用计数器count控制r轮轮函数加密,然后将r轮轮函数加密结果做一次RP-1轮置换函数运算,接着进行白化密钥异或运算,得到正确密文。
有益效果
与现有技术相比,本发明的优点主要体现在以下几个方面:
1.本发明所述方法在算法实现过程中,通过构造RP-1轮置换函数,在r轮运算调用完成后,利用新增的RP-1轮置换函数,来输出正确密文。整个实现过程改变了现有技术中只能对r-1轮轮运算的重复调用,而第r轮轮运算需要单独实现造成资源浪费、速度较慢的问题。本发明对第r轮轮运算的实现可以直接复用前面r-1轮可重复轮函数,由r-1轮重复调用变成了r轮重复,最大限度的实现了资源的重复调用,由于新构造的RP-1相比原第r轮运算简单,从而节省了实现该算法所需的硬件面积;
2.在实现过程中,利用Verilog HDL语言的assign语句将密钥扩展与F函数变换并行运行,将密钥扩展得到的结果与F变换得到的结果同时进行下一步运算;在不延迟加密时间的情况下,可以有效节省算法硬件实现时寄存器占用数量。
附图说明
图1为本发明所述方法的运算结构图;
图2为Piccolo加密算法轮函数模块(PiccoloRound)结构图;
图3为Piccolo加密算法的F函数模块运算图;
图4为Piccolo加密算法的RP轮置换函数图;
图5为Piccolo加密算法的RP-1轮置换函数图。
具体实施方式
下面将结合附图和实施例对本发明做进一步的说明。
实施例一:
Piccolo-80加密算法优化原理与具体的操作过程如下:
加密运算包括以下模块:常数更新模块(UpdateConstant)、F函数变换模块(Function)、轮函数模块(PiccoloRound)、主控制模块(Piccolo)。
UpdateConstant模块中包括四个端口,在UpdateConstant模块代码中:三个输入端口分别为初始密钥key(80位)、轮数i(0<=i<25,i为整数)模5取余数用q(8位)表示及常数ci+1(5位)等于轮数i+1用c_i表示;一个输出端口为子密钥rk(由rk2i、rk2i+1组成)。用连续赋值(assign)方式,通过常数c_i来构造参数,其中参数生成代码为:constant={c_i[3:7],5'b00000,c_i[3:7],2'b00,c_i[3:7],5'b00000,c_i[3:7]}^32'hf1e2d3c,其中5'b00000表示5位宽的二进制数。将q的值作为选择初始密钥key的相应位与constant异或条件,得到最终结果rk。公式如下:其中初始密钥key依次用字母k0-k5表示,
当q等于0或者2时:rk={k2,k3}^constant;
当q等于1或者4时:rk={k0,k1}^constant;
当q等于3时:rk={k4,k4}^constant;
Function模块(F函数)中包括输入端口in、输出端口res,在Function模块代码中:输入端口为P′0或P′2用in表示,输出端口为P″0或P″2用res表示。在模块中声明16个宽为4位的寄存器:reg[0:3]sbox[0:15],在initial语句中初始化S盒(sbox)。将输入端口in每四位做S盒变换,通过连续赋值方式保存到线网型变量t(16位)矩阵中,接着做列混合变换,固定矩阵M与t如下:
M={
2,3,1,1,
1,2,3,1,
1,1,2,3,
3,1,1,2
}
t={t0,t1,t2,t3}
在有限域上,列混合变换是以t与转置矩阵MT相乘实现。再将列混合变换的结果每四位做S盒变换,结果赋给res输出端口。
RP运算过程将输入结果的相应位数做置换变换,但RP函数运算步骤包含在轮函数运算模块(PiccoloRound)中。
Piccolo-80密码算法加密过程主要为r轮(r为25)的轮函数模块运算。轮函数模块包括五个端口,在轮函数模块代码中:res、state、key、q、计数器count;其中输出端口res代替statusRP,输入端口state代替P′0、P1、P′2及P3;P′0、P′1、P′2及P′3用线网型变量X[0]、X[1]、X[2]及X[3]表示。在轮函数模块内部,将包含常数更新模块与F函数变换模块运算,利用Verilog HDL语言的assign语句将常数更新模块与F函数变换模块并行运行,将常数更新模块得到的结果直接与F变换模块得到的结果同时进行下一步运算;做到在不延迟加密时间的前提下,减少寄存器使用数量。将常数更新模块的输出子密钥信号记为rk(由rk2i、rk2i+1组成),F函数变换模块的输出信号记为X[0]与X[2],接着做如下运算步骤:
步骤1:X[1]=state[16:31]^X[0]^rk[0:15];
步骤2:X[3]=state[48:63]^X[2]^rk[16:31];
步骤3:得到结果再做RP运算,将最终结果赋给输出端口信号res。
主控制模块(Piccolo)主要运算包括计数器count控制r(r为25)轮函数模块运算、RP-1轮置换函数运算、白化密钥生成运算和白化密钥异或运算。在主控制模块(Piccolo)运算代码描述中:一个输出端口result代替
Figure BDA0000458065760000081
Figure BDA0000458065760000082
输入端口:key代替k0、k1、k2、k3及k4,state代替P0、P1、P2及P3,t_res代替statusRP,轮函数模块输入端口res代替P′0、P1、P′2及P3,时钟信号clk(1位)。设置计数器count控制轮函数模块运算轮数。白化密钥的生成代码:wk0={key[0:7],key[24:31]};wk1={key[16:23],key[8:15]};wk2={key[64:71],key[56:63]};wk3={key[48:55],key[72:79]};
主控制模块(Piccolo)运算代码描述如下:
Figure BDA0000458065760000083
以上代码运算过程用文字表述如下:
第一步,将计数器count初始化为0,q初始化为0,工作信号ready初始为1;
第二步,将state[0:15]与白化密钥wk0异或,state[32:47]与白化密钥wk1异或,将运算结果赋给寄存器res;
第三步,将res、key、count、q作为轮函数模块的输入端信号,线网型t_res作为轮函数模块的输出信号;
第四步,时钟信号clk为上升沿的时候,判断count是否等于25,如果count等于25,res值不变化,ready值更新为0(表示运算结束);否则count加1,i更新为i+1模5取余数赋给q,t_res赋给res,key更新为下一轮的子密钥输入数据;跳到第三步,此时ready等于1;
第五步,将输出res值做一次RP-1变换,接着将变换结果第0到15位与白化密钥wk2做异或运算,第32到47位与白化密钥wk3做异或运算,运算结果连接其他没有运算的位一起赋给输出端口result。
三个输入端口分别为:时钟信号clk、明文输入plaintext及初始密钥key(80位),一个输出端口:输出密文ciphertext。其中clk为一位,plaintext、ciphertext为64位。
Piccolo-80算法测试如下:
步骤1:初始明文:plaintext=64'h0123_4567_89AB_CDEF;
初始密钥:key=80'h0011223344_5566778899;
时钟信号:clk=1,跳到步骤2;
步骤2,初始化计时器count=0,初始明文相应位与wk0,wk1异或,跳到步骤3;
步骤3,调用PiccoloRound模块,计数器加count=count+1,跳到步骤4;
步骤4,如果count等于r=25,跳到步骤5;否则跳到步骤3;
步骤5,PiccoloRound模块输出结果做一次新构造RP-1运算跳到步骤6;
步骤6,RP-1运算输出结果相应位与wk2,wk3异或,跳到步骤7;
步骤7,输出加密正确密文结果:result=64’h8d2b_ff99_35f8_4056;
步骤8,加密结束。
实施例二:
Piccolo-128加密算法优化原理与具体的操作过程如下:
加密运算包括以下模块:常数更新模块(UpdateConstant)、F函数变换模块(Function)、轮函数模块(PiccoloRound)、主控制模块(Piccolo)。
UpdateConstant模块中包括输入端口,在UpdateConstant模块代码中:密钥key(128位)、常数ci+1(5位)等于轮数i+1(0<=i<31,i为整数)用c_i(8位)表示;输出端口:子密钥rk(由rk2i、rk2i+1组成),当(2i+2)mod8=0时用线网型变量up_key(128位)表示重新调整密钥key元素值。用连续赋值(assign)方式,通过常数c_i来构造
Figure BDA0000458065760000102
参数,其中参数生成代码为:constant={c_i[3:7],5'b00000,c_i[3:7],2'b00,c_i[3:7],5'b00000,c_i[3:7]}^32'hf1e2d3c,其中5'b00000表示5位宽的二进制数。常数c_i的最后两位的值(相当对4取余)作为选择密钥key的相应位与constant异或条件,得到最终结果rk。代码如下:
Figure BDA0000458065760000101
每加密4轮,需要重新调整key元素的值,调整公式与代码如下:其中密钥key用k字母表示,
(k0,k1,k2,k3,k4,k5,k6,k7)←(k2,k1,k6,k7,k0,k3,k4,k5);
assign up_key=(c_i[6:7]==2'b11)?{key[32:47],key[16:31],key[96:111],key[112:127],
key[0:15],key[48:63],key[64:79],key[80:95]}:key;
[0090]Function模块中包括输入端口in、输出端口res,在Function模块代码中:输入端口为P′0或P′2用in表示,输出端口为P″0或P″2用res表示。在模块中声明16个宽为4位的寄存器:reg[0:3]sbox[0:15]。在initial语句中初始化S盒(sbox)。将输入端口in每四位做S盒变换,通过连续赋值方式保存到线网型变量t(16位)矩阵中。接着做列混合变换,通过固定矩阵M与t如下:
M={
2,3,1,1,
1,2,3,1,
1,1,2,3
3,1,1,2
}
t={t0,t1,t2,t3}
在有限域上,列混合变换是以t与转置矩阵MT相乘实现。再将列混合变换的结果每四位做S盒变换,结果赋给res输出端口。
RP运算过程将输入结果的相应位数做置换变换,但RP函数运算步骤包含在轮函数运算模块(PiccoloRound)中。
Piccolo-128密码算法加密过程主要为r轮(r为31)的轮函数模块运算。在轮函数模块包括五个端口,在轮函数模块代码中:res、state、up_key(128位)、原始密钥key(128位)、计数器count;其中输出端口:线网型变量res代替statusRP、,输入端口:state代替P′0、P1、P′2及P3、线网型变量rk(由rk2i、rk2i+1组成);P′0、P′1、P′2及P′3用线网型变量X[0]、X[1]、X[2]及X[3]表示。在轮函数模块内部,将包含常数更新模块与F函数变换模块运算,利用Verilog HDL语言的assign语句将常数更新模块与F函数变换模块并行运行,将常数更新模块得到的结果直接与F变换模块得到的结果同时进行下一步运算;在不延迟加密时间的前提下减少寄存器的使用数量。将常数更新模块的输出信号记为rk,F函数变换模块的输出信号记为X[0]与X[2],接着做如下运算步骤:
步骤1:X[1]=state[16:31]^X[0]^rk[0:15];
步骤2:X[3]=state[48:63]^X[2]^rk[16:31];
步骤3:得到结果再做RP运算,将最终结果赋给输出端口信号res。
主控制模块(Piccolo)主要运算包括利用计数器count控制r(r为31)轮函数模块运算、RP-1轮置换函数运算、白化密钥生成运算和白化密钥异或运算。在下面主控制模块(Piccolo)运算代码描述中:一个输出端口result代替
Figure BDA0000458065760000111
Figure BDA0000458065760000112
输入端口:key代替k0、k1、k2、k3、k4、k5、k6及k7,重新调整密钥key元素值的中间值用z表示,state代替P0、P1、P2及P3,t_res代替statusRP,轮函数模块输入res代替P′0、P1、P′2及P3,时钟信号clk(1位)。设置计数器count控制轮函数模块运算轮数。白化密钥的生成代码:wk0={key[0:7],key[24:31]};wk1={key[16:23],key[8:15]};wk2={key[64:71],key[120:127]};wk3={key[112:119],key[72:79]};
主控制模块(Piccolo)运算代码描述如下:
Figure BDA0000458065760000113
Figure BDA0000458065760000121
以上代码运算过程用文字表述如下:
第一步,将计数器count初始化为0,寄存器z初始化为0,工作信号ready初始为1;
第二步,将state[0:15]与白化密钥wk0异或,state[32:47]与白化密钥wk1异或,将运算结果赋给寄存器res,同时密钥key的值赋给寄存器z;
第三步,将res、z、count作为轮函数模块的输入端信号,线网型变量up_key、t_res作为轮函数模块的输出信号;
第四步,时钟信号clk为上升沿的时候,判断count是否等于31,如果count等于31,则res、z值不在变化,ready的值更新为0(表示运算结束);否则count加1,t_res赋给res,up_key赋给z,跳到第三步,此时ready等于1;
第五步,将输出res值做一次RP-1变换,接着将结果的第0到15位与白化密钥wk2做异或运算,第32到47位与白化密钥wk3做异或运算,运算结果连接其他没有运算的位一起赋给输出端口result。
三个输入端口:时钟信号clk、明文输入plaintext、密钥key(128位),一个输出端口:输出密文ciphertext。其中clk为一位,plaintext、ciphertext为64位。
Piccolo-128算法测试如下:
步骤1:初始明文:plaintext=64'h0123_4567_89AB_CDEF;
初始密钥:key=128'h0011223344_5566778899_AABBCCDDEEFF;
时钟信号:clk=1,跳到步骤2;
步骤2,初始化计时器count=0,初始明文相应位与wk0,wk1异或,跳到步骤3;
步骤3,调用PiccoloRound模块,计数器加count=count+1,跳到步骤4;
步骤4,如果count等于r=31,跳到步骤5;否则跳到步骤3;
步骤5,PiccoloRound模块输出结果做一次新构造RP-1运算跳到步骤6;
步骤6,RP-1运算输出结果相应位与wk2,wk3异或,跳到步骤7;
步骤7,输出加密正确密文结果:result=64’h5ec4_2cea_657b_89ff;
步骤8,加密结束。
对本发明方法在Xilinx Virtex-5FPGA进行了实验验证,实验数据如下:
Piccolo-80算法:算法的实现面积从现有技术的13124Slices优化到了9897Slices;
Piccolo-128算法:算法的实现面积从现有技术的13246Slices优化到了10306Slices;
同时,加密速度提高了10%。
以上结合具体实施例对本发明进行了详细的说明,这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可以作出许多变形和改进,包括把此发明方法应用到其它加密算法,这些也应属于本发明的保护范围。

Claims (4)

1.一种Piccolo加密算法硬件实现方法,其特征在于,包括以下步骤:
步骤1:将64位的待加密数据加载至寄存器;
步骤2:将加载至寄存器的64位待加密数据从高位开始按16位一组依次分成4组,记作:P0、P1、P2及P3;同时将初始密钥key进行Piccolo白化密钥扩展运算,生成16位白化密钥wka,其中,0≤a<4,a为整数;
设定加密轮数r:当初始密钥长度为80位时,加密轮数r=25;当初始密钥长度为128位时,加密轮数r=31;
步骤3:将P0与wk0进行异或运算获得P′0,P2与wk1进行异或运算获得P′2,P′0、P1、P′2及P3组成轮运算的运算数据,对轮运算的运算数据进行r轮轮运算;
轮运算包括以下几个步骤:
1)将P′0和P′2分别进行F函数变换,将获得的变换结果分别记为P″0和P″2,同时将初始密钥key进行Piccolo轮密钥扩展运算,生成两个16位轮密钥rk2i、rk2i+1,其中,0≤i<r,第i轮轮运算需要使用两个轮密钥rk2i、rk2i+1
2)将P″0、轮密钥rk2i及P1进行异或运算,获得运算结果记为P′1;将P″2、轮密钥rk2i+1及P3进行异或运算,获得运算结果记为P3′;
3)将P″0、P′1、P′2及P′3组成64位的运算数据status,对运算数据status进行RP轮置换函数运算,获得RP运算结果statusRP,如果到达r轮,则进入步骤4;否则,将64位运算结果statusRP从高位开始按16位一组依次分成4组,记作: P 0 &prime; = statu s 0 RP , P 1 = status 1 RP , P 2 &prime; = status 2 RP P 3 = sta tus 3 RP , 返回步骤1);
步骤4:对statusRP进行RP-1轮置换函数运算,获得RP-1轮置换函数运算结果
Figure FDA00004580657500000113
将64位的从高位开始按16位一组依次分成4组,记作:
Figure FDA0000458065750000014
Figure FDA0000458065750000015
Figure FDA00004580657500000115
Figure FDA0000458065750000016
与wk2进行异或运算获得
Figure FDA0000458065750000017
Figure FDA0000458065750000018
与wk3进行异或运算获得
Figure FDA0000458065750000019
利用
Figure FDA00004580657500000110
Figure FDA00004580657500000111
组成64位密文,完成加密操作。
2.根据权利要求1所述的Piccolo加密算法硬件实现方法,其特征在于,所述步骤2与步骤3中对初始密钥key进行Piccolo白化密钥扩展和轮密钥扩展运算具体过程如下:
1)初始密钥key长度为80位
将初始密钥从高位开始按16位一组划分为5个部分,分别记作k0、k1、k2、k3及k4,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算的轮数:
白化密钥扩展:
Figure FDA0000458065750000021
轮密钥扩展: ( rk 2 i , rk 2 i + 1 ) &LeftArrow; ( con 2 i 80 , con 2 i + 1 80 ) &CirclePlus; ( k 2 , k 3 ) if i mod 5 = 0 or 2 ( k 0 , k 1 ) if i mod 5 = 1 or 4 ( k 4 , k 4 ) id i mod 5 = 3
其中,|为连接符,⊕为异或符,mod为取余运算,k0、k1、k2、k3及k4的上标L表示k0、k1、k2、k3及k4的高8位,k0、k1、k2、k3及k4的上标R表示k0、k1、k2、k3及k4的低8位;
Figure FDA0000458065750000023
其中,{}16为16进制数,{}2为二进制数,ci是用五位二进制数表示的十进制数i;
2)初始密钥key长度为128位
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
白化密钥扩展:
Figure FDA0000458065750000024
当(2i+2)mod8=0时,则按照(k0,k1,k2,k3,k4,k5,k6,k7)←(k2,k1,k6,k7,k0,k3,k4,k5)进行轮密钥扩展,否则,依据(k0,k1,k2,k3,k4,k5,k6,k7)进行轮密钥扩展;
轮密钥扩展:有
Figure FDA0000458065750000025
其中,|为连接符,⊕为异或符,mod代表取余运算,k0、k1、k2、k3、k4、k5、k6及k7的上标L表示k0、k1、k2、k3、k4、k5、k6及k7的高8位,k0、k1、k2、k3、k4、k5、k6及k7的上标R表示k0、k1、k2、k3、k4、k5、k6及k7的低8位;
( con 2 i 128 | con 2 i + 1 128 ) &LeftArrow; ( c i + 1 | c 0 | c i + 1 | { 00 } 2 | c i + 1 | c 0 | c i + 1 | ) &CirclePlus; { 6547 a 98 b } 16 .
3.根据权利要求2所述的Piccolo加密算法硬件实现方法,其特征在于,所述的F函数变换依次包括S盒变换、列混合变换及S盒变换;
其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};
所述列混合变换中所使用的矩阵M为 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 .
4.根据权利要求3所述的Piccolo加密算法硬件实现方法,其特征在于,所述的RP轮置换函数将输入64位数据划分为8个字节,然后进行字节的置换操作;RP-1轮置换函数运算是RP函数置换的逆运算,将RP-1轮置换函数的64输入位数据从高位到低位依次划分为8个字节g0,g1,g2,g3,g4,g5,g6,g7,以g6,g3,g0,g5,g2,g7,g4,g1作为RP-1轮置换函数运算的64位输出数据。
CN201410022523.6A 2014-01-17 2014-01-17 一种Piccolo加密算法硬件实现方法 Expired - Fee Related CN103731257B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410022523.6A CN103731257B (zh) 2014-01-17 2014-01-17 一种Piccolo加密算法硬件实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410022523.6A CN103731257B (zh) 2014-01-17 2014-01-17 一种Piccolo加密算法硬件实现方法

Publications (2)

Publication Number Publication Date
CN103731257A true CN103731257A (zh) 2014-04-16
CN103731257B CN103731257B (zh) 2016-08-17

Family

ID=50455195

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410022523.6A Expired - Fee Related CN103731257B (zh) 2014-01-17 2014-01-17 一种Piccolo加密算法硬件实现方法

Country Status (1)

Country Link
CN (1) CN103731257B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108848073A (zh) * 2018-05-31 2018-11-20 唐山智能电子有限公司 对实时数据采集系统的数据进行加密解密的方法以及系统
CN112637233A (zh) * 2020-12-29 2021-04-09 深圳大学 一种基于多用户数据的安全求均值方法
CN113572592A (zh) * 2021-06-16 2021-10-29 昆明理工大学 一种非对称密匙加密方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013129055A1 (ja) * 2012-03-02 2013-09-06 ソニー株式会社 情報処理装置、および情報処理方法、並びにプログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013129055A1 (ja) * 2012-03-02 2013-09-06 ソニー株式会社 情報処理装置、および情報処理方法、並びにプログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
赵光耀,李瑞林等: "《Piccolo算法的差分故障分析》", 《计算机学报》 *
赵新杰,郭世泽,王韬等: "《Piccolo密码代数故障分析研究》", 《计算机学报》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108848073A (zh) * 2018-05-31 2018-11-20 唐山智能电子有限公司 对实时数据采集系统的数据进行加密解密的方法以及系统
CN108848073B (zh) * 2018-05-31 2021-04-13 唐山智能电子有限公司 对实时数据采集系统的数据进行加密解密的方法以及系统
CN112637233A (zh) * 2020-12-29 2021-04-09 深圳大学 一种基于多用户数据的安全求均值方法
CN112637233B (zh) * 2020-12-29 2022-12-13 深圳大学 一种基于多用户数据的安全求均值方法
CN113572592A (zh) * 2021-06-16 2021-10-29 昆明理工大学 一种非对称密匙加密方法

Also Published As

Publication number Publication date
CN103731257B (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
CN106788974B (zh) 掩码s盒、分组密钥计算单元、装置及对应的构造方法
McLoone et al. High performance single-chip FPGA Rijndael algorithm implementations
Lim CRYPTON: A new 128-bit block cipher
CN106921487B (zh) 可重构s盒电路结构
EP3371928B1 (en) Key sequence generation for cryptographic operations
US20110013769A1 (en) Encryption apparatus having common key encryption function and embedded apparatus
CN104639314A (zh) 基于aes加密/解密算法的装置和流水控制方法
CN103684749B (zh) 一种基于面积与性能平衡优化的klein加密实现方法
CN102142957A (zh) 数据加密的方法、装置及具有数据加密功能的通信设备
US9418245B2 (en) Encryption processing device, encryption processing method, and program
CN104852798A (zh) 一种数据加解密系统及方法
CN103731257A (zh) 一种Piccolo加密算法硬件实现方法
CN109039583B (zh) 复用轮变换电路、aes加密电路及加密方法
CN104320420A (zh) 一种基于aes算法的scada文件加密方法
Miroshnik et al. Uses of programmable logic integrated circuits for implementations of data encryption standard and its experimental linear cryptanalysis
Deshpande et al. AES encryption engines of many core processor arrays on FPGA by using parallel, pipeline and sequential technique
CN111064563B (zh) 一种高效并行gcm实现方法
Chiţu et al. An FPGA implementation of the AES-Rijndael in OCB/ECB modes of operation
Talha et al. Efficient advance encryption standard (AES) implementation on FPGA using Xilinx system generator
CN109033893B (zh) 基于合成矩阵的aes加密单元、aes加密电路及其加密方法
CN109033847B (zh) Aes加密运算单元、aes加密电路及其加密方法
CN103873229A (zh) KLEIN加密AVR环境下抗timing和cache边信道攻击的快速保护方法
CN108809627B (zh) 轮变换复用电路及aes解密电路
CN105577362B (zh) 一种应用于aes算法的字节替换方法及系统
CN104753662A (zh) 基于aes算法的加密密钥流产生方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160817

Termination date: 20210117

CF01 Termination of patent right due to non-payment of annual fee