1.一种轻量级密码算法HBcipher实现方法,其特征在于,包括以下步骤:步骤1:获取待加密的明文,并依据密钥位数确定轮数r,轮数控制信号的初始值为1;
其中,所述待加密的明文按高位到低位、从左至右的顺序排列成8×8的明文矩阵;
步骤2:依据当前轮数控制信号count,对待加密的数据矩阵进行矩阵划分,获得数据块L和数据块R;
若当前轮数控制信号count为奇数,则将待加密的数据矩阵的左半部分和右半部分分别作为数据块L和数据块R;
其中,数据块的每一行由对应矩阵部分的连续两行按照从高位至低位排列获得;
若当前轮数控制信号count为偶数,则将待加密的数据矩阵的上半部分和下半部分分别作为数据块L和数据块R;
步骤3:将密钥按照从高位到低位、从左至右,每行16位排列,得到轮密钥矩阵,将轮密钥矩阵的左半部分和右半部分分别作为左控制密钥Qi和右控制密钥Qi+1;
步骤4:依据当前轮数控制信号,将数据块与控制密钥进行轮函数操作;
当轮运算控制信号count为奇数时,左控制密钥Qi与数据块L进行F1函数、右控制密钥Qi+1与数据块R进行F2函数运算;
当轮运算控制信号count为偶数时,右控制密钥Qi+1与数据块L进行F1函数、左控制密钥Qi与数据块R进行F2函数运算;
将经过F1函数、F2函数运算后的数据转换成16进制数据后合并,再进行F3函数运算;
所述F1函数依次包括轮密钥加、S1盒置换、行移位运算;
所述F2函数依次包括轮密钥加、S2盒置换、轮常数加运算;
所述F3函数依次包括列混淆和P2置换运算;
步骤5:判断当前轮数控制信号count是否等于轮数r,若不等于,令count=count+1,将经过F3函数运算输出的结果作为新一轮的待加密数据,返回步骤2,否则,输出加密结果。
2.根据权利要求1所述的方法,其特征在于,所述F3函数中的P2置换运算过程如下:将待进行P2置换的4×16数据矩阵按照从左至右的顺序划分成顺序连接的4个4×4的矩阵,并从左至右标记4个矩阵的对角线,依次为a、b、c、d,相邻矩阵的对角线首尾连接,得到依次画出4个矩阵的对角线标号a、b、c、d,获得8个等腰三角形,其a、c为从左上角到右下角的主对角线,b、d为从左下角到右上角的次对角线;
将对角线a、b、d上方的三角形中的数据沿对角线向下翻折变换;
将对角线b下方和对角线c上方的三角形中的数据,沿矩形边向右翻折变换;
将对角线c下方的三角形中的数据,沿对角线向上翻折变换;
将对角线a、d下方的三角形中的数据分别沿顺时针、逆时针旋转90°变换,其中,对角线d下方的三角形经过逆时针旋转变换后移至第一个4×4的矩阵所在的区域;
次对角线b、d经过的数据沿逆时针旋转90°变换;
主对角线a、c经过的数据沿顺时针旋转90°变换,其中,主对角线a经过的数据经过顺时针旋转变换后移至最后一个4×4的矩阵所在的区域。
3.根据权利要求2所述的方法,其特征在于,当密钥长度为64位时,轮数r为16;当密钥长度为128位时,轮数r为20。
4.根据权利要求3所述的方法,其特征在于,所述左控制密钥Qi和右控制密钥Qi+1在每一轮的运算中按照以下过程获取:当密钥长度为64位时,具体过程如下:
步骤A1:将64位轮密钥K{K1、K2······K64}用4×16矩阵表示,第一轮的轮密钥为初始密钥;
步骤A2:将步骤A1得到的矩阵中的每一列作为一个分组,得到16个4位分组B0{K1,K17,K33,K49},...,B15{K16,K32,K48,K64};
步骤A3:将步骤A2得到的第一个和最后一个分组B0、B15分别进行S1盒替换得到B0’、B15’;
步骤A4:将{B0’,B1,B2·····B15’}进行位排列P1置换;
步骤A5:将步骤A4得到的结果进行行移位运算获得更新后轮密钥矩阵;
步骤A6:将更新得到的轮密钥矩阵进行左右划分,得到两个4×8的矩形块,作为新一轮的左控制密钥Qi和右控制密钥Qi+1;
所述位排列P1置换是指将第i组数据移动至P1(i)列:
当密钥长度为128位时,具体过程如下:
步骤B1:将128位轮密钥K{K1,K2······K128}用8×16的矩形表示,第一轮的轮密钥为初始密钥;
步骤B2:将步骤A1得到的矩阵中的每一列作为一个分组,得到16个8位分组B0{K1,K17,K33,K49,K65,K81,K97,K113},...,B15{K16,K32,K48,K64,K80,K96,K112,K128};
步骤B3:将步骤A2得到的第一个和最后一个分组B0、B15分别进行S1盒替换得到B0’、B15’;
步骤B4:将{B0’,B1,B2·····B15’}作为中间密钥矩阵进行移位运算得到更新后轮密钥矩阵;
将中间密钥矩阵的第二行循环左移3位并整体上移到第一行的位置,第三行循环左移5位并整体上移到第二行的位置,第四行循环左移7位并整体上移到第三行的位置,第五行循环左移9位并整体上移到第四行的位置,第六行循环左移11位并整体上移到第五行的位置,第七行循环左移13位并整体上移到第六行的位置,第八行循环左移15位并整体上移到第七行的位置,第一行循环左移1位整体下移到第八行的位置;
步骤B5:从更新后轮密钥矩阵中选取前四行作为控制密钥矩阵;
步骤B6:将步骤B5获得的控制密钥矩阵进行左右划分,得到两个4×8的矩形块,作为新一轮的左控制密钥Qi和右控制密钥Qi+1。
5.根据权利要求4所述的方法,其特征在于,在对密文进行解密时,先将密文进行P2逆置换,再进行逆列混淆,将经过逆列混淆后得到的结果高32位、低32位分别进行F1函数逆运算、F2函数逆运算,将经过F1函数逆运算、F2函数逆运算得到的结果进行合并,r轮迭代得到解密后的明文;
在轮密钥加逆变换运算中和加密过程一样依据当前轮数控制信号count'确定每一轮使用的控制密钥;
所述F1函数逆运算依次为逆行移位、S1-1盒置换、轮密钥加逆变换;
所述F2函数逆运算依次为轮常数加逆运算、S2-1盒置换、轮密钥加逆变换;
所述P2逆置换、逆列混淆与加密过程中的P2置换、列混淆运算互逆,所述F1函数逆运算中的逆行移位、S1-1盒置换、轮密钥加逆变换分别与F1函数运算中的行移位、S1盒置换、轮密钥加运算互逆,所述F2函数逆运算中的轮常数加逆运算、S2-1盒置换、轮密钥加逆变换分别与F2函数运算中的轮密钥加、S2盒置换、轮常数加运算互逆。
6.根据权利要求5所述的方法,其特征在于,所述列混淆和逆列混淆分别采用如下矩阵实现:列混淆: 逆列混淆:
7.一种轻量级密码算法HBcipher实现装置,其特征在于,包括:初始化单元:获取待加密的明文,并依据密钥位数确定轮数r,轮数控制信号的初始值为1;
其中,所述待加密的明文按高位到低位、从左至右的顺序排列成8×8的明文矩阵;
数据拆分单元:依据当前轮数控制信号count,对待加密的数据矩阵进行矩阵划分,获得数据块L和数据块R;
若当前轮数控制信号count为奇数,则将待加密的数据矩阵的左半部分和右半部分分别作为数据块L和数据块R;
其中,数据块的每一行由对应矩阵部分的连续两行按照从高位至低位排列获得;
若当前轮数控制信号count为偶数,则将待加密的数据矩阵的上半部分和下半部分分别作为数据块L和数据块R;
控制密钥选取单元:将密钥按照从高位到低位、从左至右,每行16位排列,得到轮密钥矩阵,将轮密钥矩阵的左半部分和右半部分分别作为左控制密钥Qi和右控制密钥Qi+1;
轮函数迭代单元:依据当前轮数控制信号,采用权利要求1-5任一项所述的方法将数据块与控制密钥进行轮函数操作;
判断当前轮数控制信号count是否等于轮数r,若不等于,令count=count+1,将经过F3函数运算输出的结果作为新一轮的待加密数据,重新进行数据拆分和选取控制密钥后,再进行轮函数迭代,否则,输出加密结果。
8.根据权利要求7所述的装置,其特征在于,还包括解密单元,所述解密单元采用权利要求6所述的方法对输入的密文进行解密,得到解密数据。