Blowfish加密算法是一种常用的强对称加密算法。由于其高效、易于实现等优良性能,越来越多地应用于电子商务、军事、安全通信等领域,逐渐取代了DES的地位。16轮Blowfish加密算法可以抵抗差分攻击。
BLOWFISH-64(以下简称BLOWFISH)是一个可变密钥64位块加密系统。算法可分为两部分(密钥扩展和数据加密或解密):
密钥扩展部分将密钥(最多448位)转换为一些字密钥序列(共4168位)。
数据加密或解密包括16轮操作,每轮由密钥变换和数据变换组成。所有操作均为32位和操作。每轮唯一的额外操作是四次数据查询。
算法描述
子密钥生成
在数据加密或数据解密之前,Blowfish加密算法使用了许多字密钥。
(1)P数组由18个32位字密钥组成:P1、P2、P18。
(2)还有4个32位56的32位S盒:
S(1,0),S(1,1)..
S(2,0),S(2,1)...
S(3,0),S(3,1)...
S(4,0),S(4,1)...
生成算法
(1)P数组和S盒按固定字符串的顺序初始化,字符串由16进制值组成。
P1=0x243f6a88。
P2=0x85a308d3。
P3=0x13198a2e。
P4=0x03707344。
(2)用P1和密钥的前32位进行操作,P2和后32位进行操作,等等,直到密钥的所有位置(可能是P14)重复循环,直到P数组和密钥进行操作(有重复字符的短密钥会有相同的结果,如A、AA、AAA等。
(3)Blowfish加密算法加密全零字符串时,用第(1)、(2)步描述子钥。
(4)用第(3)步输出代替p1和p2。
(5)用修改后的BLOWFISH子钥加密第(3)步输出。
(6)用第(5)步输出替换p3和p4。
(7)继续操作,用动态BLOWFISH算法替换所有P数组和S盒。
总共需要521次重复计算来生成所有子钥匙。将子钥匙存储在缓冲区比在加密过程中重复计算要好得多(这也是BLOWFISH快于DES的关键)。
数据加密
Blowfish加密算法由16轮变换组成:
(1)将x平分为xl、xr(32位)
(2)Fori=1to16。
xl=xlxorpi。
XR=F(xl)XORXR。
交换xl,xr。
(3)XL交换,XR(恢复最后一轮交换)
(4)XR=XRXORP17。
(5)xl=xlxorp18。
(6)合并xl,xr。
函数F():
平分xl为4个8位子块:a、b、c、d。
F(xl)={S(1,a)+S(2,b)mod232]XORS(3,c)}+S(4,d)mod232。
数据解密
解密类似于加密,但P1、P2、P18顺序相反。
安全性分析
根据密码分析师的研究,目前还没有破解16轮Blowfish加密算法的方法,但少于16轮的Blowfish可以通过某种方式破解。
blowfish加密算法中存在弱密钥,但生成弱密钥的概率很低。blowfish的提出者b.schneier认为,虽然分析弱密钥非常重要,但没有必要找到blowfish的弱密钥。但从实际应用中可以看出,高。