Blowfish加密算法及其安全性分析
Blowfish加密算法是一種常用的強(qiáng)對(duì)稱加密算法,由于它的高效、容易實(shí)現(xiàn)等優(yōu)良性能,正越來越多地運(yùn)用于電子商務(wù)、軍事、安全通信等諸多領(lǐng)域,逐步取代了DES的地位。16輪Blowfish加密算法可以抗差分攻擊。

BLOWFISH-64(以下簡記為BLOWFISH)是可變長密鑰64位塊加密系統(tǒng)。算法可分為兩部分(密鑰擴(kuò)展部分和數(shù)據(jù)加密或解密部分):
密鑰擴(kuò)展部分把密鑰(至多448位)轉(zhuǎn)換為一些字密鑰序列(共4168位)。
數(shù)據(jù)加密或解密部分包括16輪位操作,每一輪由密鑰變換和數(shù)據(jù)變換組成。所有的操作都為32位與運(yùn)算。每輪唯一的附加操作是四次數(shù)據(jù)查詢。
算法描述
子密鑰生成
Blowfish加密算法要使用很多字密鑰,這些字密鑰都在數(shù)據(jù)加密或數(shù)據(jù)解密前被計(jì)算出來。
(1)P數(shù)組由18個(gè)32位字密鑰組成:P1,P2,……,P18
(2)還有4個(gè)具有256個(gè)入口的32位S盒:
S(1,0),S(1,1),……,S(1,255)
S(2,0),S(2,1),……,S(2,255)
S(3,0),S(3,1),……,S(3,255)
S(4,0),S(4,1),……,S(4,255)
生成算法
(1)用固定字符串順序初始化P數(shù)組和S盒,字符串由16進(jìn)制值組成。例如:
P1=0x243f6a88
P2=0x85a308d3
P3=0x13198a2e
P4=0x03707344
(2)用P1和密鑰的前32位進(jìn)行與運(yùn)算,P2和后32位進(jìn)行與運(yùn)算,依此類推直到密鑰的所有位(可能到P14),重復(fù)循環(huán)直到P數(shù)組與密鑰進(jìn)行與操作(有重復(fù)字符的短密鑰將有相同的結(jié)果,例如:A,AA,AAA等等)。
(3)當(dāng)Blowfish加密算法加密全零字符串時(shí),用第(1),(2)步所描述子鑰。
(4)用第(3)步的輸出代替p1,p2。
(5)用修改后的BLOWFISH子鑰加密第(3)步的輸出。
(6)用第(5)步輸出替換p3,p4。
(7)繼續(xù)操作,用動(dòng)態(tài)改變的BLOWFISH算法按順序替換所有的P數(shù)組和S盒。
總共需要521次重復(fù)計(jì)算產(chǎn)生所有子鑰。把子鑰存在緩沖區(qū)中要比在加密過程中重復(fù)計(jì)算好得多(這也是BLOWFISH比DES快的關(guān)鍵所在)。
數(shù)據(jù)加密
Blowfish加密算法由16輪變換組成(設(shè)x為64位輸入數(shù)據(jù)):
(1)把x平分為部分:xL,xR(32位)
(2)For i=1to16
xL=xL XOR Pi
xR=F(xL)XOR xR
交換xL,xR
(3)交換xL,xR(恢復(fù)最后一輪交換)
(4)xR=xR XOR P17
(5)xL=xLXOR P18
(6)合并xL,xR
函數(shù)F():
平分xL為4個(gè)8位子塊:a、b、c、d
F(xL)={[S(1,a)+S(2,b)mod232]XOR S(3,c)}+S(4,d)mod232
數(shù)據(jù)解密
解密與加密類似,但P1,P2,……,P18順序相反。
安全性分析
據(jù)密碼分析人士研究,目前對(duì)于16輪的Blowfish加密算法還沒有破解的方法,但是對(duì)于少于16輪的blowfish則可以通過某些手段加以破解。
Blowfish加密算法存在弱密鑰,但生成弱密鑰的機(jī)率是很低的。Blowfish的提出者B.Schneier則認(rèn)為,雖然對(duì)于弱密鑰的分析是非常重要的,但尋找blowfish的弱密鑰是不必要的。但是從實(shí)際應(yīng)用中可以看出,該算法的強(qiáng)度還是相當(dāng)高的。








