簡(jiǎn)述Twofish加密算法
在前兩天的文章中,我們聊了Blowfish加密算法,在文章最后,我們提到了Blowfish加密算法的發(fā)明人布魯斯·施耐爾(Bruce Schneier)建議用戶(hù)遷移至Twofish加密算法中去,那么什么是Twofish加密算法呢?我們今天就來(lái)簡(jiǎn)單了解一下。
什么是Twofish算法?
Twofish加密算法中文名為“雙魚(yú)算法”,是布魯斯·施奈爾帶領(lǐng)的項(xiàng)目組于1998年研發(fā)的區(qū)塊加密算法。和Blowfish加密算法一樣,也是一種對(duì)稱(chēng)加密算法。不同的是Blowfish的塊大小是64bits,而Twofish的塊大小是128bits,它有128、192、256位三種密鑰長(zhǎng)度可供選擇。

Twofish算法的原理
Twofish是由Blowfish演化來(lái)的,所以?xún)烧呒用茉硪彩纸咏?,也使用feistel密碼(費(fèi)斯妥密碼)。

首先將128bits的明文分成4部分,然后分別和K0,K1,K2,K3進(jìn)行異或操作,生成4個(gè)結(jié)果,我們稱(chēng)他們?yōu)锳1,A2,A3,A4(虛線(xiàn)括起來(lái)的部分是F函數(shù))。
A1,A2作為F的輸入生成的結(jié)果和A3進(jìn)行異或操作,然后右移一位,和A4左移一位的結(jié)果進(jìn)行異或操作,然后交換左右部分的位置。
最后一輪的輸出不進(jìn)行交換直接與四個(gè)擴(kuò)展密鑰字進(jìn)行異或而得到密文C。
我們?cè)賮?lái)看看F函數(shù)。
F是64位數(shù)據(jù)上與密鑰相關(guān)的置換函數(shù),它有三個(gè)參數(shù),R1,R2兩個(gè)輸入,還有一個(gè)r表示的子項(xiàng)的輪數(shù)。
R1和R2先通過(guò)S-box的變換,然后乘以MDS矩陣,然后再進(jìn)行PHT變換,最后和子密鑰進(jìn)行異或操作。
Twofish算法的起源
在1997年到2000年公開(kāi)選拔美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院批準(zhǔn)的標(biāo)準(zhǔn)的對(duì)稱(chēng)分組密碼技術(shù)(AES)中,MARS ,RC6,Rijndael,Serpent和Twofish最終進(jìn)入前五,但Rijndael被選為最終的AES算法。雖然沒(méi)有作為最后的AES標(biāo)準(zhǔn),但是能夠躋身5強(qiáng),也足以見(jiàn)得Twofish算法的優(yōu)越性。
在2000年的時(shí)候,對(duì)于大多數(shù)平臺(tái)來(lái)說(shuō),Twofish在128-bit密鑰的表現(xiàn)要比Rijndael要慢,這也是為什么Rijndael會(huì)當(dāng)選為AES標(biāo)準(zhǔn)的原因,但是Twofish算法在256-bit密鑰的表現(xiàn)要好于Rijndael 。
但是隨著Rijndael作為AES的標(biāo)準(zhǔn),越來(lái)越多的硬件都基于A(yíng)ES做了優(yōu)化,最后導(dǎo)致Twofish和Rijndael 的差距越來(lái)越大。
免責(zé)聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪稿。










