RC6加密算法
1、rc6的來歷
1997年NIST(NationalInstituteofStandardsandTechnology)向全世界招募在21世紀替代DES的高級加密標準AES(AdvancedEncryptionStandard),1999年,NIST宣布有5個加密算法作為最后的候選者接受全世界將近一年的考察。這其中就有RC6加密算法算法。
RC6加密算法是在RC5基礎上發展起來的,按照AES的要求設計的新型加密算法。跟RC5類似,RC6使用的是相關數據循環移位的思想。RC5本身是一個非常快的分組密碼,但它在處理128位分組塊時使用2個64位的工作寄存器,而AES目前在講究效率和簡潔方面不支持64位操作,所以RC6對此做了修改,改用四個32位工作寄存器,這樣使得在每次循環中要做兩次循環移位操作,讓更多的數據位來決定循環次數。RC6中又添加了整數乘法操作。乘法操作在RC6中被用來計算循環移位的位數,使得循環移位的位數將與另一個寄存器中的所有位相關,因此RC6每次循環都比RC5有更快的擴散性。這使得RC6可以利用較少的循環次數達到要求的安全性能,從而提高了數據的吞吐能力。
RC6加密算法的性能
算法時間測試
?
?
以上數據取的是時間平均值,每個測試執行10遍,并統一換算到200MHzCPU的情況下。從上表可以看出,RC6的加密速度很快。在VPN的加密方案中,由于為了確保要求的安全性往往會影響到數據的傳輸速率。RC6在這一方面有很強的優勢。
RC6加密算法的安全性
這里假設攻擊RC6加密算法最好的途徑是窮舉法,窮舉b位的密鑰(或者擴展密鑰),這種野蠻的攻擊方式對任何的塊加密都適用,但只能在一定長度的密鑰下進行分析。
?
從數據上可以看出,RC6加密算法在加入了二次函數f(x)=x(2x+1)以及二次函數變換,大大提高了密碼擴散性和密碼的非線性。而且,RC6的加解密的時間都與數據無關,可以有效地避免“時間攻擊”。
?
參考:淺析RC6加密算法
RC6繼承了RC5的優點,在加密過程中不需要查表,加上算法中的乘法運算可以用平方代替,所以該算法對內存要求極低,這使得RC6適合在單片機上實現。至于RC6的安全性,對RC6最為有效的攻擊是強力攻擊。但由于分組長度和密鑰都至少是128bit,窮舉法并不可行。對20輪的RC6,用線性分析法至少需要2^155個明文,用查分分析法至少需要2^238個明文。
?????RC6分組長度為128bit,使用了4個寄存器,并使用32bit的整數模乘運算,用于加強擴散特性。RC6更精確的表示是RC6-w/r/b,其中字長為w bit,r為加密輪數,b為加密密鑰用字節表示的長度。通常令w=32,r=20,b=16(24,32)。
?加密過程:(把128bit明文放入4個32bit的寄存器A、B、C、D中)
?????B=B+S[0] (S為密鑰)
?????D=D+S[1]
?????for i=1 to r do
?????????????t=ROL(B*(2B+1),log2w) ?
??????????????u=ROL(D*(2D+1),log2w)
?????A=ROL(A⊕t,u)+S[2i]
?????C=ROL(C⊕u,t)+S[2i+1]
????(A,B,C,D)=(B,C,D,A)
A=A+S[2r+2]
C=C+S[2r+3]
A、B、C、D即為密文。
解密過程:(把128bit密文放入4個32bit的寄存器A、B、C、D中)
????????C=C-S[2r+3]
??????A=A-S[2r+2]
??????for i=r down to 1 do
???????????????(A,B,C,D)=(D,A,B,C)?
???????????????u=ROL(D*(2D+1),log2w)
??????????????t=ROL(B*(2B+1),log2w)
??????????????C=ROR(C-S[2i+1],t)⊕u
??????????????A=ROR(A-S[2i],u)⊕t
???????D=D-S[1]
???????B=B-S[0]
???????A、B、C、D即為明文。
密鑰擴展方案:(在密鑰擴展中用到兩個常數P、Q,P=0xB7E15163,Q=0x9E3779B9。
首先,將用戶密鑰輸入到c個w比特字的L[0],...,L[c-1]陣列,若不夠,用0字節填充,其中c為8b/w的整數部分)
個人理解:每個L陣列可以存放4個字符,即若c為4時,密鑰密鑰最長為16個字符。
???????S[0]=P
for i=1 to 2r+3 do
??????????????S[i]=S[i-1]+Q
用戶密鑰混合到S中
A=B=i=j=0
v=3*max{c,2r+4}
for s=1 to v do循環體循環v次
A=S[i]=ROL(S[i]+A+B,3)
B=L[j]=ROL(L[j]+A+B,A+B)
i=(i+1)mod(2r+4)
j=(j+1)modc
輸出S[0],S[1],...,S[2r+3]即為子密鑰
?
繼續rc6加解密算法。
?
?
總結
- 上一篇: java 文件图标_如何用java程序修
- 下一篇: 小故事折射出大道理:风靡办公室的管理寓言