RC5
1. 背景與歷史
RC5是Ron Rivest開發的對稱密鑰塊加密算法。RC5的主要特性是很快,只是用基本的計算機運算(加、異或、移位等),輪數可變,密鑰位數可變,從而大大增加靈活性。需要不同安全性的應用程序可以相應設置這些值。RC5的另一個重要特性是執行所需的內存更少。
2.RC5工作的基本原理
RC5的字長(即輸入明文塊的長度)、輪數和密鑰8位字節數都是可變的。一旦確認之后,這些值在執行特定的加密算法時保持不變。這些變量在執行特定的RC5實例之前是可變的,可以從取值范圍中選擇。而DES的塊長只能是64位,密鑰長度只能是56位;IDEA的塊長只能是64位,密鑰長度只能是128位。下表列出了RC5一些參數的取值范圍:
從表中可以得到下列結論:
(1)明文塊長可以是32、64或者128位(使用2個字)
(2)密鑰長度為0~2040位(指定了8位密鑰的取值)
RC5的輸出是密文,與輸入明文具有相同的參數。由于RC5算法的三個參數可以改變數值,因此RC5算法的特定實例記作RC5-w/r/b,其中w為字長(位),r為輪數,b為密鑰的8位字節數。這樣,RC5-32/16/16表示為RC5的塊長為64位(注:RC5使用兩個字塊)、16輪加密和16字節密鑰。Ron Rivest推薦的最低安全版本為RC5-32/16/16。
2.1 操作原理
由于使用上述記法,RC5初看起來比較復雜。首先介紹RC5的工作原理,為了便于理解RC5算法,假設輸入明文塊的長度為64位,其他塊長的操作原理是一樣的。
在一次性初始操作中,輸入明文塊分成兩個32位塊A和B,前兩個子密鑰(稍后會介紹如何生成)S[0]和S[1]分別加進A和B,分別產生C和D,表示一次性操作結束。
然后開始各輪,每一輪完成系列操作:
(1)位異或運算;
(2)循環左移;
(3)對C和D增加下一個子密鑰,先是加法運算,然后將結果用2w2^w2w求模(由于這里w=32,因此為2322^{32}232)。
RC5 的工作原理,如下圖所示:
從上圖可以看出,初始操作有兩步,然后是幾輪操作,輪數可以取0~255。也可以從中看出,一個塊的輸出是另一個塊的輸入,是整個邏輯很難破譯。
2.2 一次性初始操作
首先看一次性初始操作,如圖1-2所示:
從上圖可以看出,RC5中的一次性初始操作包括兩個簡單步驟:第一,輸入明文分為兩個等長的A和B;第二,第一個子密鑰S[0]與A相加,第二個子密鑰S[1]與B相加。
注:這些操作用2322^{32}232求模,分別得到C和D。
2.3 每輪的細節
下面介紹每一輪的細節,后面每一輪都是一樣的。
第一步:C和D異或
每一輪的第一步為C和D異或運算,得到E。
第二步:循環左移E
現在將E循環左移D位
第三步:將E與下一個子密鑰相加
這一步要將E與下一個子密鑰相加。第一輪為S[2],第i輪為S[2i],這個運算結果為F。
注:第4~ 6的運算與第1~ 3步相同,只是第4~ 6步的輸入與第1~ 3步不同。
第四步:D和F異或
每一輪的第一步為D和F異或運算,得到G。
第五步:循環左移G
現在將G循環左移F位
第六步:將G與下一個子密鑰相加
這一步要將G與下一個子密鑰相加。第一輪為S[3],第i輪為S[2i+1],這個運算結果為H。
第七步:其他任務
這一步要檢查所有的各輪是否結束,為此要實現如下步驟:(1)將i加1;(2)檢查是否i<r。
2.4 子密鑰生成
RC5子密鑰的生成只有兩步:
(1)第一步,生成子密鑰(標為S[0],S[1],…)。
(2)原先的密鑰稱為L,第二步,子密鑰(標為S[0],S[1],…)與原密鑰相應的部分(L[0],L[1],…)混合。
下面將介紹這兩個步驟:
第一步:子密鑰生成
這一步使用兩個常量P和Q。生成的子密鑰數組稱為S,第一個子密鑰為S[0]用P值初始化。
每個后續子密鑰(S[1],S[2],…)根據前面的子密鑰和常量Q求出,用2322^{32}232求模。這個過程要進行2(r+1)-1次,其中r位輪數。下圖顯示了子密鑰生成的數學形式:
下圖顯示了子密鑰生成的過程:
第二步:子密鑰混合
子密鑰混合階段將子密鑰S[],S[],…與原密鑰L[],L[],…混合。其數學形式如下圖所示:
如上圖所示,首先初始化i,j,A和B;其次將子密鑰與A和B相加,并左移3位,賦給A和該子密鑰,將原密鑰與A和B相加,并左移A加B位,賦給B和該原密鑰;最后,將i加1,并用2(r+1)求模,將j加1,并用c求模,循環3×n次結束。
注:c是原密鑰中最后一個子密鑰部分,<<<表示循環左移。
3.RC5的模式
如下表所示的算法模式來實現RC5,可以獲得更好的性能,這些定義在2040中。
總結
- 上一篇: 当下的力量实践手册读书笔记(1.29)
- 下一篇: 山东大学项目实训(二十七)—— 微信小程