首页> 中国专利> 一种Piccolo加密算法硬件实现方法

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

摘要

本发明公开了一种Piccolo加密算法硬件实现方法,利用相同的轮运算只实现一次,采用重复调用方式完成;原r-1轮可重复调用直接变成r轮重复调用。同时在r轮循环运算后增加一个RP

著录项

  • 公开/公告号CN103731257A

    专利类型发明专利

  • 公开/公告日2014-04-16

    原文格式PDF

  • 申请/专利权人 衡阳师范学院;

    申请/专利号CN201410022523.6

  • 申请日2014-01-17

  • 分类号H04L9/06;

  • 代理机构长沙市融智专利事务所;

  • 代理人黄美成

  • 地址 421002 湖南省衡阳市珠晖区衡花路16号

  • 入库时间 2024-02-19 23:45:29

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-17

    授权

    授权

  • 2014-05-14

    实质审查的生效 IPC(主分类):H04L9/06 申请日:20140117

    实质审查的生效

  • 2014-04-16

    公开

    公开

说明书

技术领域

本发明涉及信息安全中的密码算法领域,特别是涉及轻量级密码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表示轮运 算轮数;

白化密钥扩展:

轮密钥扩:(rk2i,rk2i+1)(con2i80,con2i+180)(k2,k3)ifimod5=0or2(k0,k1)ifimod5=1or4(k4,k4)idimod5=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位;

其中,{}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表示轮运算轮数:

白化密钥扩展:

当(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位;

(con2i128|con2i+1128)(ci+1|c0|ci+1|{00}2|ci+1|c0|ci+1|){6547a98b}16.

F函数变换依次包括S盒变换、列混合变换及S盒变换,如图3所示:

其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};

所述列混合变换中所使用的矩阵M为:2311123111233112.

现有技术中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组,记作:及 令P0=status0RP,P1=status1RP,P2=status2RPP3=status3RP,返回步骤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表示轮运 算的轮数:

白化密钥扩展:

轮密钥扩展:(rk2i,rk2i+1)(con2i80,con2i+180)(k2,k3)ifimod5=0or2(k0,k1)ifimod5=1or4(k4,k4)idimod5=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 位;

其中,{}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表示轮运算轮数:

白化密钥扩展:

当(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位;

(con2i128|con2i+1128)(ci+1|c0|ci+1|{00}2|ci+1|c0|ci+1|){6547a98b}16.

所述的F函数变换依次包括S盒变换、列混合变换及S盒变换;

其中,所述S盒变换所使用的S盒为{e,4,b,2,3,8,0,9,1,a,7,f,6,c,5,d};

所述列混合变换中所使用的矩阵M为:2311123111233112.

所述的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先产生 参数,再利用产生的参数合成每轮的轮密钥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代替及输入端口: 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%。

以上结合具体实施例对本发明进行了详细的说明,这些并非构成对本发明的限制。在不 脱离本发明原理的情况下,本领域的技术人员还可以作出许多变形和改进,包括把此发明方 法应用到其它加密算法,这些也应属于本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号