BLOWFISH

BLOWFISH

Blowfish布魯斯·施奈爾於1993年開發的區塊加密算法,對稱加密的一種。

基本介紹

概要,算法說明,算法解密,

概要

Blowfish是一個對稱加密塊算法,由Bruce Schneider於1993年設計,現已套用在多種加密產品。Blowfish能保證很好的加密速度,並且目前為止沒有發現有效地破解方法。目前為止AES比Blowfish有更廣的知名度。
Schneider 設計的Blowfish算法用途廣泛,意在摒棄DES的老化以及其他算法的強制捆綁。Blowfish剛剛研發出的時候,大部分其他加密算法是專利所有的或屬於商業(政府)機密,所以發展起來非常受限制。Schneider 則聲明 Blowfish 的使用沒有任何限制,任何國家任何人任何時候都可以隨意使用 Blowfish算法。
Blowfish 主要包括關鍵的幾個S盒和一個複雜的核心變換函式。
BlowfishAdvancedCS是一個新的檔案加密工具,它支持七種以上的算法,能將數據有效的壓縮,而且使用安全的金鑰來把守防止數據被破解,同時加密之後檔案不會露出蛛絲馬跡,不容易用各種軟體找到破解線索,並且能與Windows檔案總管做整合,設定每日自動檔案加密工作。
BlowfishAdvancedCS軟體支持的功能主要有加密(Encrypt)、解密(Decrypt)、消除數據(Wipe),在檔案加密的同時可以設定開啟密碼,也能壓縮數據,或者更改檔案名稱,更改之後的檔名通常以無意義的隨機數檔案名稱為主,若不更改檔案名稱則加密之後會改以擴展名bfa來儲存,因此不容易被人察覺,要解密時只要輸入密碼並且使用本軟體選擇相同的算法即可。

算法說明

BlowFish算法用來加密64Bit長度的字元串。
BlowFish算法使用兩個“盒”——unsignedlongpbox[18]和unsignedlongsbox[4,256]。
BlowFish算法中,有一個核心加密函式:BF_En(後文詳細介紹)。該函式輸入64位信息,運算後,以64位密文的形式輸出。用BlowFish算法加密信息,需要兩個過程:密鑰預處理和信息加密。
分別說明如下:
密鑰預處理:
BlowFish算法的源密鑰——pbox和sbox是固定的。我們要加密一個信息,需要自己選擇一個key,用這個key對pbox和sbox進行變換,得到下一步信息加密所要用的key_pbox和key_sbox。具體的變化算法如下:
1)用sbox填充key_sbox
2)用自己選擇的key8個一組地去異或pbox,用異或的結果填充key_pbox。key可以循環使用。
比如說:選的key是"abcdefghijklmn"。則異或過程為:
key_pbox[0]=pbox[0]abcdefgh
key_pbox[1]=pbox[1]ijklmnab
…………
…………
如此循環,直到key_pbox填充完畢。
3)用BF_En加密一個全0的64位信息,用輸出的結果替換key_pbox[0]和key_pbox[1],i=0;
4)用BF_En加密替換後的key_pbox,key_pbox[i+1],用輸出替代key_pbox[i+2]和key_pbox[i+3];
5)i+2,繼續第4步,直到key_pbox全部被替換;
6)用key_pbox[16]和key_pbox[17]做首次輸入(相當於上面的全0的輸入),用類似的方法,替換key_sbox信息加密
信息加密就是用函式把待加密信息x分成32位的兩部分:xL,xRBF_En對輸入信息進行變換。

算法解密

用BlowFish算法解密,同樣也需要兩個過程。
1.密鑰預處理
2.信息解密
密鑰預處理的過程與加密時完全相同,信息解密的過程就是把信息加密過程的key_pbox逆序使用即可。可以看出,選擇不同的key,用BlowFish算法加密同樣的信息,可以得出不同的結果。要破解BlowFish算法,就是要得到BlowFish算法的key。所以,使用BlowFish算法進行加密,最重要的也就是key的選擇以及key的保密。其中key的選擇可以使用bf_sdk中的_WeakKey函式進行檢驗。以下是該函式的說明:
源文:
_WeakKey
Function:TestifthegeneratedBoxesareweak
Argument:none
Return:AX=Status(1=weak,0=good)
Affects:AX,BX,CX,DX,SI,DI,directionFlag
Description:After"_InitCrypt"youshouldtesttheBoxeswiththisfunction.
Iftheyprovideaweaknesswhichacryptoanalystcoulduseto
breaktheciphera"1"isreturned.Inthiscaseyoushould
reloadtheoriginalboxesandlettheuserchooseadifferent
password.
譯文:
_WeakKey
功能:測試產生的box是否安全
參數:無
返回:AX=1不安全;AX=0安全
影響:AX,BX,CX,DX,SI,DI,方向標誌
描述:使用"_InitCrypt"函式產生用於加密的Boxes後,你應該用這個函式測試產生的Boxes是否安全,如果該key產生的Boxes不安全——可以被密碼分析者通過分析Boxes得到key,那么,你應該採用另外一個key產生一個安全的Boxes用來加密。

相關詞條

熱門詞條

聯絡我們