2011-05-18 352 views
1

我試圖實現AES。我目前已經實現了subByte(),shiftRow(),mixColumn(),addRoundkey()和生成8位AES的roundkey,並且正在工作。但其表現並不好。所以我想在軟件中實現32位AES,但生成擴展的S盒卻讓我感到困惑。數據作爲8位輸入如何以32位出現?我無法在軟件中找到AES的32位實現。AES加密的32位實現

+4

我強烈推薦閱讀[Rijndael算法書的設計(http://www.amazon.com/Design-RijndaeL-Encryption-Information-Cryptography/dp/3540425802%3FSubscriptionId%3DAKIAIIBINOD46VC3JCLQ%26tag%3Dws%26linkCode%3Dxm2 %26camp%3D2025%26creative%3D165953%26creativeASIN%3D3540425802) - 它是一個非常棒的文本,並且廣泛地涵蓋了對8位和32位處理器的優化。此外,[DJB的Salsa20優化](http://cr.yp.to/snuffle.html)已針對不同處理器優化了他的Salsa20算法版本,您可能會發現它們對研究有用。 (也許不是。) – sarnold 2011-05-18 03:24:26

+1

標準的openssl實現是32位的,並且是開源的。你將16個字節塊打包成4個32位字,而「S-box」則是subByte(4x),shiftRow和mixColumn的組合,應用於4個組。我還推薦上面提到的關於Design的書。 – 2011-05-18 11:32:02

+4

你是否簽署了足球射擊協議? http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html – crazyscot 2011-05-18 12:42:09

回答

1

我建議以切片方式實施它。位切片實現不僅可以很好地擴展,而且在定時攻擊方面也具有非常好的屬性。我知道這需要重新設計你的功能。如果您並行計算多個AES操作,則只能歸檔性能增益。

最快的AES實現(無英特爾AES指令)是位片: http://eprint.iacr.org/2009/129

隨着谷歌,你還會發現的源代碼。