优化的密码(从技术上讲)是什么意思?(Java的AES案)



我正在进行轻量级密码与非轻量级的比较。

我选择的轻量级密码是Clefia,是Sony的128位密码,我将其与两个键的128位臭名昭著的AE进行了比较,两个键为128位。

我的比较是在运行Android OS的真实移动设备上进行的(Samsung Galaxy S3)。

关于克利夫亚的论文规定它比AES快。

这似乎是合乎逻辑的,鉴于它是一种轻巧的算法,可在较不足的设备上使用。

为了在Android上编译这两个代码,我按原样将Clefia的官方代码转换为Java。(尽管C可以在Android上编译?不确定)对于AE,我使用了本机Javax.Crypto库。(互联网上有很多示例)

令我震惊的是,完全相反的事情发生了。与克利夫(Clefia)的速度更快,而是AES比Clefia快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的优化版本。

这是我能想到为什么速度会有如此巨大的唯一原因。

因此,我的问题如下。

  • 当我们说优化时;从技术上讲是什么意思?更少的回合支持安全?不同的代码?等?
  • 可以用不同的解释这种速度差异的原因吗?也就是说,优化不是速度差异的原因。
  • 我仍然无法找到Clefia的优化版本,而且我不确定Java是否将其与最新的JDK一起纳入了最新的JDK,因为Clefia现在已成为标准。是为想要使用它开发的用户还是为使用该算法的用户(提出算法)提供的算法?

任何想法,见解和思想都得到高度赞赏。(如果您在发布的内容中找到逻辑缺陷,请随时分享。还请注意,我要在http://crypto.stackexchange.com上发布此信息,但是用户群在那里很低,这涉及Java,所以目前是我在这里发布它,但是如果您认为我需要将其移动到那里,请告知。此外,我不介意在需要时分享Clefia和AES的代码。)

硬件速度

在您所指的论文中,它们表明 CLEFIA 在硬件中实现时,在考虑KBPS/GATE时,可以比 aes 更快。最好的 clefia 具有268.63 kbps/gote和最佳 aes 具有135.81 kbps/gate-大约为2个。

软件速度

它们还具有软件实现的比较,其中 clefia 在12.9个周期/字节时的执行速度较慢,而 aes> aes 仅使用10.6循环/字节。

因此,这表明两种算法的速度本身在2个。

现在,问题是您比较了一个高度优化的,甚至可能支持硬件(ARMV8指令集现在包含一个完成一个完整 AES> AES 回合的指令指令)实现,到您自己的Java端口,该端口一开始未进行优化(原始代码甚至指出:此代码不包括高速的任何优化)。

另外,您测试数据集有多大?在测试中如何解释JIT汇编的效果?

如果您想要比较结果,也应该在Java中实现AES算法 - 然后进行比较。我的猜测是,这种方法也会给予AES的相对缓慢的实现。

最新更新