密码学系列之: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/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
總結
以上是生活随笔為你收集整理的密码学系列之:twofish对称密钥分组算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构之:微服务架构漫谈
- 下一篇: 架构之:微服务和单体服务之争