密碼學系列之:twofish對稱密鑰分組算法 簡介 twofish的起源 twofish的性能 twofish的原理

簡介

之前的文章我們講到blowfish算法因爲每次加密的塊比較小隻有64bits,所以不建議使用blowfish加密超過4G的文件。同時因爲加密塊小還會導致生日攻擊等。所以纔有了blowfish的繼承者twofish。

今天我們一起來揭祕一下twofish這個加密算法。

twofish的起源

twofish和blowfish一樣,也是一種對稱加密算法。不同的是twofish的塊大小是128bits,而它的密鑰長度是256bits。

AES相信大家都很熟悉了,AES的全稱是The Advanced Encryption Standard,它是由美國國家標準技術研究院(NIST)批准的標準的對稱分組密碼技術。

AES是從1997年到2000年公開選拔出來的。主要是爲了替換DES而創建的。因爲DES只有56位密鑰,容易受到暴力攻擊。

NIST在1997年1月2日宣佈,他們希望選擇DES的繼任者,即AES。 與DES一樣,它也應是“一種能夠在二十世紀之前很好地保護政府敏感信息的,未公開的,公開的加密算法。” 但是,NIST並沒有簡單地發佈一個繼任者,而是進行公開的選拔,候選者需要提供相關的資料,證明其比DES優秀。 這種開放式徵集立即引起了人們的濃厚興趣。

在隨後的幾個月裏面,NIST收到了來自多個國家的15個提案。他們是CAST-256,CRYPTON,DEAL,DFC,E2,FROG,HPC,LOKI97,MAGENTA,MARS,RC6,Rijndael,SAFER +,Serpent和Twofish。

在隨後的評估中,密碼學家對這些候選的算法進行了包括安全性,性能和有限環境運行等因素進行了評估,最終在1999年8月宣佈了5個最終入圍的算法:MARS ,RC6,Rijndael,Serpent和Twofish。

最終在2000年10月2日,NIST宣佈選中Rijndael作爲最終的AES算法。並於2001年11月26日作爲正式的AES標準。

twofish雖然沒有作爲最後的AES標準,但是能夠躋身5強,也是很厲害了。

twofish的性能

在2000年的時候,對於大多數平臺來說,twofish在128-bit keys的表現要比Rijndael 要慢,這也是爲什麼Rijndael會當選爲AES標準的原因。但是在256-bit keys的表現要好於Rijndael 。

但是隨着Rijndael 作爲AES的標準,越來越多的硬件都基於AES做了優化,最後導致twofish和Rijndael 的差距越來越大。

twofish和Blowfish一樣也是免費的。

twofish的原理

twofish是由blowfish演化來的。我們先看下twofish的工作圖:

twofish和DES一樣,也是使用的Feistel structure。

首先將128bits的明文分成4部分,然後分別和K0,K1,K2,K3進行異或操作,生成4個結果,我們稱他們爲A1,A2,A3,A4。

虛線括起來的部分是F函數。

A1,A2作爲F的輸入生成的結果和A3進行異或操作,然後右移一位,和A4左移一位的結果進行異或操作,然後交換左右部分的位置。

最後一輪的輸出不進行交換直接與四個擴展密鑰字進行異或而得到密文C。

我們再來看看F函數。

F是64位數據上與密鑰相關的置換函數,它有三個參數,R1,R2兩個輸入,還有一個r表示的子項的輪數。

R1和R2先通過S-box的變換,然後乘以MDS矩陣,然後再進行PHT變換,最後和子密鑰進行異或操作。

本文已收錄於 http://www.flydean.com/twofish/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章