android - 优化密码(技术上)是什么意思? (Java中的AES案例)

标签 android algorithm security encryption cryptography

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

我选择的轻量级密码是 Clefia这是 Sony 的 128 位 block 密码,我将它与臭名昭著的 128 位 AES 进行比较,两个 key 都是 128 位。

我的比较是在运行 Android 操作系统 (Samsung Galaxy S3) 的真实移动设备上运行的。

paper关于 Clefia 声明它比 AES 更快。

这似乎是合乎逻辑的,因为它是一种用于资源较少的设备的轻量级算法。

为了在 android 上编译这两个代码,我转换了 official code Clefia 的原样用 C 语言编写到 Java。 (虽然 C 可以在 android 上编译?不确定) 对于 AES,我使用了原生的 Javax.Crypto 库。 (网上有很多例子)

令我吃惊的是,完全相反的事情发生了。 AES 比 Clefia 快大约 350 倍,而不是 Clefia。

现在我能想到的唯一原因是Clefia在他们官方网站上发布的代码没有优化,他们承认这一点;因为下面是他们代码的复制粘贴。

* 注意 * 编写此引用代码是为了清楚地了解 CLEFIA * 基于 CLEFIA 规范的分组密码算法。 * 因此,此代码不包含任何优化 * 高速或低成本实现或任何反制措施 * 实现攻击。

我可以假设(我可能是错的)Javax.Crypto 类使用 AES 的优化版本。

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

因此我的问题如下。

  • 当我们说优化时;技术上是什么意思?减少回合有利于安全?不同的代码?等等?
  • 可以用不同的方式解释造成这种速度差异的原因吗?也就是说,优化不是造成这种速度差异的原因。
  • 我仍然找不到 Clefia 的优化版本,而且我不确定 Java 是否将其包含在他们最新的 JDK 中,因为 Clefia 现在是 standard。 .优化算法是留给想要使用它进行开发的用户还是公司(提出算法的一方)提供?

任何想法、见解和想法都将受到高度赞赏。 (如果您发现我发布的内容存在逻辑缺陷,请随时分享。另请注意,我打算将其发布在 http://crypto.stackexchange.com 上,但那里的用户群很低,并且涉及 java,所以目前我将它发布在这里,但如果您认为我需要将它移到那里,请提出建议。此外,如果需要,我不介意共享 Clefia 和 AES 的代码。)

最佳答案

硬件速度

在您提到的论文中,他们表明在考虑 Kbps/gate 时,Clefia 在硬件中实现时可以比 AES 更快。最好的 Clefia 有 268.63 Kbps/gate,最好的 AES 有 135.81 Kbps/gate - 大约是 2 倍。

软件速度

他们还对软件实现进行了比较,其中 Clefia 的执行速度为 12.9 周期/字节,而 AES 的速度仅为 10.6 周期/字节。

所以这表明两种算法本身的速度在2倍以内。

现在,问题是您比较高度优化的,甚至可能是硬件支持的(ARMv8 指令集现在包括在一个指令中执行完整的AES 轮次的指令instruction) implementation, to your own java port of an implementation that is not optimized place (The original code even states: this code does not include any optimizations for high-speed).

此外,您测试的数据集有多大?测试中如何考虑 JIT 编译的影响?

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

关于android - 优化密码(技术上)是什么意思? (Java中的AES案例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013401/

相关文章:

java - 仅使用运行时数据查找大 O 时间复杂度函数

algorithm - 不同ElasticSearch相似度算法的简单解释

php - 如何保护PHP中的配置文件?

security - SSL证书验证

php - Yii 同时使用 mongo DB 和 MySQL

java - 如何知道应用程序是通过 Facebook 推广还是 Google Play 安装的?

android - 更改操作栏选项卡的背景颜色

android - Android 允许的最大文件路径是多少

php - Retrofit 2.0 GET @Query 参数未传递给 PHP 的 $GET [""];

python - 使用坐标 python 列表的广度优先搜索