2011-05-18 354 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

随着谷歌,你还会发现的源代码。