对称加密:性能问题

时间:2010-04-04 16:52:20

标签: performance encryption

对称加密算法的性能是否取决于加密的数据量?假设我需要通过网络快速发送大约1000个字节,最好将50个字节的数据加密20次,或者一次加密1000个字节?哪个会更快?它取决于使用的算法吗?如果是这样,对于512字节以下的数据量,最高性能,最安全的算法是什么?

4 个答案:

答案 0 :(得分:5)

简短的答案是:

  • 您希望一次加密所有数据。实际上,您希望在一次函数调用中为它们提供加密代码,以便它可以更快地运行。

  • 使用适当的加密算法,加密速度将明显快于网络本身。它需要一个非常糟糕的实现,一台非常旧的PC或一个非常快速的网络,使加密成为瓶颈。

  • 如有疑问,请使用SSL/TLS等全部协议。如果在协议中选择加密算法,请使用AES。

现在答案越长:

块密码流密码。流密码以初始化阶段开始,其中密钥在系统中输入(通常称为“密钥调度”),然后“在运行中”加密数据字节。利用流密码,加密消息具有与输入消息相同的长度,并且加密时间与输入消息长度成比例,除了密钥调度的计算成本。我们这里不是说大数字;在一台不太新的PC上,密钥调度时间低于1微秒。然而,为了获得最佳性能,您需要进行一次密钥计划,而不是50次。

分组密码也有一个关键的时间表。当已经执行密钥调度时,分组密码可以加密块,即固定长度的数据块。块长度取决于算法,但通常为8或16个字节。 AES是分组密码。为了加密任意长度的“消息”,必须多次调用块密码,这比看起来更棘手(存在许多安全问题)。决定这些调用如何组合在一起的部分称为链接模式。众所周知的链接模式称为CBC。根据链接模式,可能需要一个称为 padding 的额外步骤,其中将一些额外字节添加到输入消息中,以使其长度与所选链接兼容。填充必须是这样的,在解密时,它可以被明确地删除。常见的填充方案称为“PKCS#5”。

有一种称为“CTR”的链接模式,可以有效地将块密码转换为流密码。它有一些好处;特别是,CTR模式不需要填充,加密的消息长度将与输入消息的长度相同。带CTR模式的AES很好。 典型PC上的加密速度约为100 MB / s(例如使用单核的2.4 GHz Intel Core2)。

警告:使用相同的密钥加密多个消息时存在问题。对于链接模式,这些问题隐藏在“IV”的名称下(作为“初始值”)。对于大多数链接模式,IV是密码块的相同大小的随机值。 IV不需要保密(它通常与加密消息一起传输,因为解密方也必须知道它)但必须随机且统一地选择,并且每个消息需要新的IV。一些链接模式(例如CTR)可以容忍非均匀IV,但仅针对具有给定密钥的第一消息。使用CBC甚至第一条消息需要完全随机的IV。如果这段话对你没有意义,那么,不要试图设计加密协议,它比你想象的要复杂得多。而是使用已指定的协议,例如SSL(用于加密隧道)或CMS(用于加密消息)。这些协议的制定是一个漫长而痛苦的攻击和对策历史,牙齿磨损很多。不要重演这段历史......

警告2:如果您使用加密,那么您担心的是安全问题:可能会有不利实体在攻击您的系统。大多数情况下,简单加密并不能完全阻止它们;单独使用(正确应用)加密仅会击败被动攻击者,即那些观察传输字节但不会改变它们的人。通用攻击者也活动,即他删除了一些数据字节,移动和复制其他数据,或者增加了他自己设计的额外字节。要击败活跃的攻击者,您需要的不仅仅是加密,还需要进行完整性检查。同样,SSL和CMS等协议已经处理好了细节。

答案 1 :(得分:3)

AES应该是一个不错的选择。

AES的良好实现(例如openssl库中包含的那个)每个字节需要大约10-20个CPU周期来加密。当您加密小邮件时,您还必须考虑密钥设置的时间。例如,DES的典型实现需要几千个周期来进行密钥设置。即,在开始使用其他密码进行加密之前,您可能实际上已经使用AES加密了一条小邮件。

较新的处理器(例如基于Westmere的CPU)具有支持AES的指令集,允许以每字节1.5-4个周期的速度进行加密。这几乎是不可能被任何其他密码击败的。

如果可能的话,尝试加密更长的消息,而不是将它们分成小块。主要原因不是加密速度,而是安全性。即,安全加密模式通常需要使用初始化向量和消息认证(MAC)。这些将为每个密文部分添加大约32个字节。即如果将消息分成小部分,那么这种开销就会很大。

答案 2 :(得分:1)

对称加密算法通常是分组密码。对于任何给定的算法,块大小是固定的。然后,您可以选择几种不同的方法,使后续块依赖于早期的块(即密码块链接)来创建流密码。但是流密码总是缓存传入的数据并将其以完整块的形式提交给分组密码。

因此,通过20次执行50个字节,您所做的只是在缓存逻辑上。

如果您不是以流模式运行,那么小于密码的本机块大小的数据报将比完整数据块获得的保护要少得多,因为攻击者可以考虑的消息较少。

答案 3 :(得分:0)

显然,性能取决于数据量,因为每个数据部分都必须加密。通过在特定环境(语言,平台,加密算法实现)中进行测试,您可以获得比此处可能提供的任何人更好的信息:我认为设置不会超过半小时基本的绩效评估。

至于安全性,您可以使用Triple DESAES