RC5算法协处理器设计实现一 | 您所在的位置:网站首页 › rc5算法 › RC5算法协处理器设计实现一 |
队伍编码:CICC1905 队伍名称:青稞战队1、RC5算法参数选择 通过三个可变参数可确定一组加密算法,可表示为RC5-w/r/b。w表示明文/秘文字分组后的字长,完整明文/秘文字长为2w;w一般长度为16,32,64。r表示加密轮数,0 2、 RC5涉及的运算符表1-1 RC5涉及的运算符 Tab.1-1 Operators involved in RC5 符号 含义 X X循环左移Ybit + 模2^w加 ^ 逐为异或 /3、 RC5密钥扩展 第一步:初始化两个有w决定的常数Pw和Qw,。这两个常数的定义如下: Pw = Odd((e-2)*2^w) Qw =Odd((q-1)*2^w) 其中e=2.718281828459...(自然对数的底),q=1.618033988749...(黄金分割),Odd[x]表示距离x最近的奇数,对于w=16,32,64时,Pw,Qw用十六进制表示如表1-1所示: 表1-2 Pw、Qw的十六进制表示 Table 1-2 Hexadecimal representation of PW and QW w 16 32 64 Pw b7e1 b7e15163 b7e151628aed2a6b Qw 9e37 9e377b9 9e3779b97f4a7c15 第二步:将密钥由字节数组Key[0,...,b-1]填充得到数组L[0,...,c-1],c= [b/u],u= w/8, 在这w=32,故u=4,c=4,填充时从地位到高位按自然顺序填充,即L[0] = key[31:24] key [23:16] key [15:8] key [7:0];L[1] = key [63:56] key [55:48] key [47:40] key [39:32];L[2] = key [95:88] key [87:80] key [79:72] key [71:64];L[3] = key [127:120] key [119:112] key [111:104] key[103:96][2];算法描述为 i=j=0,x=y=0 Do 3*max(t,c)times; S[i]=(S[i]+s+y) L[j]=(L[j]+x+y) 其中t=2r+2; 第三步:经26轮的迭代循环密钥混合后的得出26个子密钥。 i=j=0; A =B =0; Do 3*max(t,c)times; A=S[i]=(S[i]+A+B) B=L[j]=(L[j]+A+B) i=(i+1)mod(t); j=(j+1)mod(c); RC5密钥扩展算法的流程图,如图1.2.1是基于RC5-w/r/b=RC5-32、12、16的流程图
图1-1 RC5-w/r/b=RC5-32、12、16 Fig.1-1 RC5-W/R/B = RC5-32, 12, 16 用于存放子密钥的变量s被定义为832bit,以存放26个子密钥,s的初始值设为0,通过逐个加32’h9e3779b9形成固定的26个初始化密钥。该加法过程描述如下: S[31:0] = 32’d0+32’h9e3779b9; S[63:32] = S[31:0] + 32’h9e3779b9; ... S[831:800] = S[799:768]+ 32’h9e3779b9; 4、加密算法RC5加密算法的加密过程需要输入2wbit的明文,分别存于a和b两个寄存器,加密步骤描述如下: 先用a和b分别模2^w加上s[0]和s[1],再赋值给a,b,完成a和b的初始化; (1)a和b异或赋给a,a再循环左移bit; (2)a模2^w加s[2*i],再赋给a,此时a为这一轮的最新值; (3)a的最新值异或b,存入b; (4)把b循环左移abit,注意要用a的最新值; (5)B模2^w加s[2*i+1],存入b; (8)回到(1),重复复执行r轮。 伪代码描述如下: A = A + S[0] B = B + S[1] for i = 1 to r do: A = ((A ^ B) B = ((B ^ A) return A, B 5、 解密算法加密的逆过程即为解密,用伪代码描述如下: for i = r down to 1 do: B = ((B - S[2 * i + 1]) >>> A) ^ A A = ((A - S[2 * i]) >>> B) ^ B B = B - S[1] A = A - S[0] return A, B |
CopyRight 2018-2019 实验室设备网 版权所有 |