官术网_书友最值得收藏!

1.8 BLOWFISH加密算法

BLOWFISH加密算法是由美國的Bruce Schneier于1993年提出的,屬于分組密碼,它采用平衡Feistel結構,分組長度、迭代層數和DES加密算法完全相同,結構框架和DES加密算法也很相似,只是其密鑰長度可變,變化范圍為1~448比特。

整個加密算法由密鑰擴展和數據加密兩個獨立的部分組成。密鑰擴展是由輸入密鑰生成1042個32比特的字的子密鑰過程(下文所指的字均為32比特)。該過程工程量大,需要預先完成,將大批的子密鑰存放在緩沖存儲器中,以備數據加密時調用。在這1042個字的子密鑰中,前18個字組成P數組{P1, P2, …, P18},后面的1024個字按順序組成4個S盒,每個S盒由256個字組成,記為Siji=1,2,3,4; j=0,1, …,255)。

數據加密采用一個16層的平衡Feistel結構,每層由一次加亂、一個P置換和一個S盒代替組成,層內也只有簡單的xor和模232加運算。

輸入的64比特明文平分成32比特的左右兩部分,記為XLXR。16層加密過程可用下面的偽代碼表示。

for i=1 to 16 do
{
    XL=XLPi
    XR=XRF(XL)
    交換XLXR
}
XL=XRP17
XR=XLP18

XLXR即密文。

層函數F如下:將XL從左到右按字節分成4個值(abcd),然后分別在4個S盒(S1S2S3S4)中進行代替,得到4個字S1aS2bS3cS4d,按下式對這4個字進行結合,可得到F函數的輸出。

F(XL)={[(S1a+S2b)mod 232]⊕S3c}+S4d mod 232

從上面可以看出,BLOWFISH加密算法的數據加密非常簡潔,操作也非常簡單,如果子密鑰預先存儲在高速緩沖存儲器中,則BLOWFISH加密算法的實現要比DES加密算法快得多。

BLOWFISH的脫密過程和加密過程完全一樣,只需將P數組逆序使用即可。

子密鑰的生產也使用了BLOWFISH加密算法,具體生成方法如下:

(1)用一個隨機序列(可以固定不變)初始化P數組和4個S盒。

(2)對密鑰K進行擴展,使擴展后的密鑰不小于18×32比特,將擴展后的密鑰與P數組進行模2加得到新的數組。

(3)采用BLOWFISH加密算法對64比特的全0串進行加密,用最后輸出的XLXR替代P1P2;然后將XLXR作為明文,用更新后的子密鑰和BLOWFISH加密算法進行加密,用最后輸出的XLXR替代P3P4;重復此過程521次,更新1042個的子密鑰。

和DES加密算法相比,BLOWFISH加密算法減少了S盒的數量,但是它的S盒不是固定不變的,而是隨密鑰數據變化的,結構是未知的。4個S盒的輸出經過模2加和模232加結合后才作為層函數F的輸出,各層所加亂數各不相關,因此BLOWFISH加密算法能有效抵制線性攻擊和差分分析攻擊,具有極高的安全性。

主站蜘蛛池模板: 隆子县| 德格县| 呼玛县| 禹州市| 永修县| 德州市| 武乡县| 西青区| 长宁县| 亳州市| 梧州市| 南召县| 皮山县| 乌兰察布市| 奎屯市| 临沂市| 峨眉山市| 文化| 建宁县| 荆州市| 青铜峡市| 新密市| 绥阳县| 尉犁县| 疏勒县| 湖北省| 海丰县| 个旧市| 中宁县| 朔州市| 阿合奇县| 贡山| 金塔县| 黄龙县| 玛沁县| 甘南县| 教育| 千阳县| 金阳县| 巴彦县| 舞阳县|