当前有最先进的加密算法,例如AES,目前被认为绝对安全。在当前PC上,它们的速度约为100MB /秒(请注意:这是不使用AES指令集时的速度-我对一般情况感兴趣,而不是在有硬件加速时可用)。 />并且有快速,非安全,仅混淆的算法,例如,使用一些快速的通用非加密随机算法进行异或。它们的速度可能非常快,可能在10GB /秒的范围内。但是它们很容易被破坏(如果知道一小部分明文,则可以立即被破坏)。

在这两者之间是否有任何算法?就像,它的速度约为1GB /秒,并且可以通过一些计算工作将其破坏(例如,可以在当前PC上以每周/每月/年的蛮力搜索找到密钥)?

可以在速度很重要的情况下使用它,但是数据不是那么敏感,因此不值得破坏加密。

评论

也许我错了,但是对于当前启用了AES-NI的CPU,每秒100MB的声音听起来很低。

根据Crypto ++基准,AES在4GB / s范围内比在100MB / s范围内更多。在我的笔记本电脑上,这只是一台带AES-NI指令的普通笔记本电脑,运行openssl speed -elapsed -evp aes-128-ccm给我的值在300 + GB / s的范围内(而且似乎只使用了一个核心)。

@GuutBoy:可以。但是,如果AES-NI不可用,则约为100MB /秒。但这不是重点,仅是示例。所有安全加密算法(本人都知道)约为X * 100MB / sec(其中X是一个很小的数字)。这个问题不是关于哪种方法可能是最快的AES实现,而是是否存在一种算法,该算法比安全算法快,而安全保证却更少。

@geza也许您应该改一下这个问题。现在看来,您似乎正在寻找一个〜1GB / s范围内的密码。

@Lery:这个数字看起来很奇怪。对于我的机器,我获得了600GB /秒的速度,这意味着每个周期处理146个字节。似乎不可能... ccm为600GB /秒,而cbc为940MB /秒。它们之间相差640倍。但是,正如我对Guut Boy所说的,这不是重点。 (为清楚起见,我对问题进行了一些编辑。)

#1 楼

在我当前的计算机(相当新的MacBook Pro)上,基于表的经典AES实现将达到约160 MB / s。但是,一个人可以做得更好。当然,还有AES-NI指令,可以很容易地将机器上的速度提高到5 GB / s(使用AES-CTR等并行模式; AES-CBC加密要慢得多)。但是即使没有这些说明,AES-CTR的Käsper-Schwabe实现也可以提供超过400 MB / s的速度,这是一个实质性的改进。

在AES之外,还有ChaCha20,如RFC 7539所指定使用我自己的实现,纯通用的32位普通C代码(chacha20_ct)在笔记本电脑上以385 MB / s的速度加密或解密数据; SSE2增强的实现(chacha20_sse2)提供了584 MB / s的速度。解密作用,可以实现更好的性能。这就是ChaCha20等流密码的含义。

大约十年前,有一个eSTREAM项目产生了一系列流密码。在我的笔记本电脑上,SOSEMANUK达到约1.64 GB / s的速度,这对于十年前的设计来说还不错。值得注意的是,它比基于表的AES快10倍。 (我编写了部分代码;我不知道是谁将它打包为Zip存档,并带有修改后的文件名,从而破坏了编译。)

在更现代的设计中,可能会引用NORX。我遇到了一个在小型ARM系统上的实现,该实现始终会破坏ChaCha20。我想它还将清除现代PC上的1 GB / s标记。

摘要:实际上,在不使用AES指令的情况下,在标准硬件上使用现有算法,1 GB / s实际上是高度可行的;并且而不牺牲安全性:尽管对斗气式密码学家有广泛的接触,但以上所有内容目前都没有中断。

当然,排除AES-NI指令是人为的:在不使用该CPU功能的情况下在现代CPU上进行基准测试几乎没有意义。在没有硬件AES实现的情况下,在较小的嵌入式系统上的性能可能更重要。

评论


$ \ begingroup $
感谢您的回答! SOSEMANUK似乎非常可行。我排除了AES-NI,因为我不能依靠它。我需要一个跨平台的解决方案,该解决方案在所有平台上的性能都一样好(我需要在所有平台上使用相同的算法)。
$ \ endgroup $
– Geza
17年11月8日在14:08

$ \ begingroup $
托马斯,您的回答是否意味着没有开发出“并非完全安全但足够安全的密码”密码?因此,研究人员只开发针对完全安全性的密码吗?
$ \ endgroup $
– Geza
17年11月8日在16:09



$ \ begingroup $
@geza是的,就是这样。实际上,没有明显的方法可以使密码不能立即被破坏,但是比安全密码要快。因此,我们只是针对真正安全的算法。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
17年11月8日在16:30

$ \ begingroup $
“不可能在所有平台上都表现出色”,因为所有平台在开始时的表现均不一样
$ \ endgroup $
–橙色狗
17年11月8日在16:38

$ \ begingroup $
@OrangeDog:我的意思是,与非硬件加速密码相比,并不是所有平台上的性能都应该相同。不能选择硬件加速的AES,因为它仅在有加速功能的平台上具有良好的性能。但是,例如,与非硬件加速的AES相比,SOSEMANUK在所有平台上都应该更快。
$ \ endgroup $
– Geza
17年11月8日在16:44

#2 楼

有一些轻量级的流密码可能比AES的某些实现快10倍。 Achterbahn显然是每个字节1个周期,而Salsa20可能低至4个周期,而AES可能是18个周期。您之前创建的CSPRNG)。

评论


$ \ begingroup $
感谢您的回答,它非常有用,现在我正在检查各种密码。您在哪里找到有关Achterbahn为1个周期/字节的信息?顺便说一句,我发现了这一点:ecrypt.eu.org/stream/ciphers/abc/abc.pdf。作者声称,在奔腾4上它可以达到850MB /秒,因此对于当前的CPU,这甚至可以更快。
$ \ endgroup $
– Geza
17年11月8日13:35

$ \ begingroup $
en.wikipedia.org/wiki/…要求1 cpb。 \
$ \ endgroup $
–丹尼尔
17年11月8日14:42

$ \ begingroup $
这些周期依靠什么硬件?您链接的论文只提到了8位RISC AVR微控制器上用于AES的CPB,这显然与32位ARM或超级缩放器/乱序x86-64(即使不使用AES-你)。
$ \ endgroup $
– Peter Cordes
17年11月9日,下午3:31

$ \ begingroup $
@PeterCordes我不知道这只是来自Wikipedia表
$ \ endgroup $
–丹尼尔
17年9月9日在8:08

$ \ begingroup $
大多数CPB条目都有一条注释,该注释链接到Pentium 4,Pentium III,ARMv7TDMI或任何其他内容。 Achterbahn只是说“硬件”,所以大概他们在谈论FPGA或ASIC实现。毫不奇怪,它变得非常快...
$ \ endgroup $
– Peter Cordes
17年11月9日14:02