当前位置:首页 >资讯 >Blowfish加密算法及安全性分析


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的弱密钥。但从实际应用中可以看出,高。