CN103731257A - 一种Piccolo加密算法硬件实现方法 - Google Patents
一种Piccolo加密算法硬件实现方法 Download PDFInfo
- 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
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种Piccolo加密算法硬件实现方法,利用相同的轮运算只实现一次,采用重复调用方式完成;原r-1轮可重复调用直接变成r轮重复调用。同时在r轮循环运算后增加一个RP-1轮置换函数,运算一次使输出密文正确。本发明使原算法最后第r轮不必重新实现,而是直接复用前面可重复轮函数模块,只需在最后增加一个相对简单的RP-1,本发明方法使Piccolo密码算法中的模块高度复用,有效节省硬件实现面积,同时提高加密速度。
Description
技术领域
本发明涉及信息安全中的密码算法领域,特别是涉及轻量级密码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表示轮运算轮数;
轮密钥扩:
其中,|为连接符,⊕为异或符,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位;
初始密钥key长度为128位:
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
当(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)进行轮密钥扩展;
其中,|为连接符,⊕为异或符,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位;
F函数变换依次包括S盒变换、列混合变换及S盒变换,如图3所示:
其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};
所述列混合变换中所使用的矩阵M为:
现有技术中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组,记作:及令 及 返回步骤1);
步骤4:对statusRP进行RP-1轮置换函数运算,获得RP-1轮置换函数运算结果将64位的从高位开始按16位一组依次分成4组,记作: 及将与wk2进行异或运算获得将与wk3进行异或运算获得利用及组成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表示轮运算的轮数:
轮密钥扩展:
其中,|为连接符,⊕为异或符,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位;
2)初始密钥key长度为128位
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
当(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)进行轮密钥扩展;
其中,|为连接符,⊕为异或符,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位;
所述的F函数变换依次包括S盒变换、列混合变换及S盒变换;
其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};
所述列混合变换中所使用的矩阵M为:
所述的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)四个模块。以下对四个模块进行描述:
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代替及输入端口: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)运算代码描述如下:
以上代码运算过程用文字表述如下:
第一步,将计数器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来构造参数,其中参数生成代码为: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。代码如下:
每加密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代替及输入端口: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)运算代码描述如下:
以上代码运算过程用文字表述如下:
第一步,将计数器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组,记作:及令 及 返回步骤1);
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表示轮运算的轮数:
轮密钥扩展:
其中,|为连接符,⊕为异或符,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位;
2)初始密钥key长度为128位
将初始密钥从高位开始按16位一组划分为8个部分,分别记作k0、k1、k2、k3、k4、k5、k6及k7,按照以下公式生成白化密钥wka和轮密钥rk2i、rk2i+1,其中,0≤a<4,0≤i<r,r表示轮运算轮数:
当(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)进行轮密钥扩展;
其中,|为连接符,⊕为异或符,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位;
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为
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位输出数据。
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013129055A1 (ja) * | 2012-03-02 | 2013-09-06 | ソニー株式会社 | 情報処理装置、および情報処理方法、並びにプログラム |
-
2014
- 2014-01-17 CN CN201410022523.6A patent/CN103731257B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013129055A1 (ja) * | 2012-03-02 | 2013-09-06 | ソニー株式会社 | 情報処理装置、および情報処理方法、並びにプログラム |
Non-Patent Citations (2)
Title |
---|
赵光耀,李瑞林等: "《Piccolo算法的差分故障分析》", 《计算机学报》 * |
赵新杰,郭世泽,王韬等: "《Piccolo密码代数故障分析研究》", 《计算机学报》 * |
Cited By (5)
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 |