我正在运行轻量级密码和非轻量级密码之间的比较。
我选择的轻量级密码是克莱菲亚,这是索尼的128位分组密码,我正在将它与128位臭名昭著的AES进行比较,这两个键都是128位。
我的比较是运行在一个真正的移动设备运行安卓操作系统(三星银河S3)。
关于克莱菲亚的纸说它比AES更快。
这似乎是合乎逻辑的,因为它是一个轻量级的算法,用于资源不足的设备上。
为了在android上编译这两种代码,我将用C编写的官方代码转换为Java。(虽然C可以在android上编译?))对于AES,我使用了本机Javax.Crypto库。(在互联网上有很多这样的例子)
令我印象深刻的是,完全相反的事情发生了。不是克莱菲亚速度更快,而是AES比克莱菲亚快约350倍。
我现在能想到的唯一原因是Clefia在他们的官方网站上发布的代码没有被优化,他们承认,因为下面是他们代码的拷贝粘贴。
* NOTICE * This reference code is written for a clear understanding of the CLEFIA * block cipher algorithm based on the specification of CLEFIA. * Therefore, this code does not include any optimizations for * high-speed or low-cost implementations or any countermeasures against * implementation attacks.
我可以假设(我可能错了) Javax.Crypto类使用了许多优化版本的AES。
这是我能想到为什么速度会有如此巨大差异的唯一原因。
因此,我的问题如下。
任何想法、见解和想法都会受到高度赞赏。(如果你在我发布的文章中发现了逻辑上的缺陷,请随意分享。还请注意,我打算在http://crypto.stackexchange.com上发布这篇文章,但是那里的用户基数很低,这涉及到java,所以现在我在这里发布它,但是如果您认为我需要移到那里,请告知。另外,如果需要的话,我不介意共享Clefia和AES的代码。)
发布于 2015-05-03 13:55:38
硬件速度
在您所提到的文章中,它们表明当在硬件中实现时,在考虑Kbps/Gate时可以比AES更快。最好的有268.63 Kbps/门,最好的AES有135.81 Kbps/门,这大约是2的一倍。
软件速度
他们还对软件实现进行了比较,其中以12.9周期/字节的速度比AES只执行10.6周期/字节的速度慢一些。
这表明,这两种算法本身的速度都在2倍以内。
现在的问题是,您可以比较一个高度优化的、甚至可能是硬件支持的( ARMv8指令集现在包括在一条指令中执行完整AES的指令)与您自己的实现的java端口进行比较,而这个实现一开始就没有优化(原始代码甚至声明:这段代码不包括任何高速优化)。
另外,您正在测试的数据集有多大?在测试中如何考虑JIT编译的效果?
如果您想要一个比较结果,您也应该在Java中实现AES算法,然后进行比较。我的猜测是,这种方法也会使AES的实现相对缓慢。
https://stackoverflow.com/questions/30013401
复制相似问题