pki与对称加密的性能有何不同?

时间:2020-03-06 14:34:26  来源:igfitidea点击:

我们正在寻求对我们的项目进行一些严格的安全性要求,并且我们需要进行许多高性能的加密。

我想我知道PKI比对称加密要慢得多,也更复杂,但是我找不到能证明我想法的数字。

解决方案

使用OpenSSL的" speed"命令对算法进行基准测试并亲自查看。

[dave@hal9000 ~]$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 26126940 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 7160075 aes-128 cbc's in 3.00s
...
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     139343.68k   152748.27k   155215.70k   155745.61k   157196.29k

[dave@hal9000 ~]$ openssl speed rsa2048
Doing 2048 bit private rsa's for 10s: 9267 2048 bit private RSA's in 9.99s
Doing 2048 bit public rsa's for 10s: 299665 2048 bit public RSA's in 9.99s
...
                  sign    verify    sign/s verify/s
rsa 2048 bits 0.001078s 0.000033s    927.6  29996.5

显然,情况要差1000倍。 (http://windowsitpro.com/article/articleid/93787/symmetric-vs-asymmetric-ciphers.html)。但是,除非我们真的要处理大量数据,否则这将无关紧要。我们可以做的是使用非对称加密来交换对称加密密钥。

实用的基于PKI的加密系统使用非对称加密对对称密钥进行加密,然后使用该密钥对对称加密来对数据进行加密(尽管如此,有人会指出一个反例)。

因此,非对称加密算法比对称加密算法施加的额外开销是固定的,它不取决于数据大小,而仅取决于密钥大小。

上一次我进行此测试时,验证了3个左右的X.509证书链(编辑以添加:以及它们所签名的数据),在运行于100MHz左右的ARM上花费了不到一秒钟的时间(多次重复计算得出的平均值,明显地)。我不记得有多小不能忽略,但不到一秒钟。

抱歉,我不记得确切的详细信息,但是摘要是,除非我们使用的系统非常受限或者要进行大量加密(例如,如果我们想每秒接受尽可能多的SSL连接),否则必须经过NIST批准非对称加密方法很快。

是的,纯粹的非对称加密比对称密码(例如DES或者AES)要慢得多,这就是为什么实际应用使用混合密码技术的原因:昂贵的公共密钥操作仅用于加密(和交换)对称算法的加密密钥,将用于加密真实消息。

公钥加密解决的问题是没有共享的秘密。使用对称加密,我们必须信任所有相关方以保持密钥机密。与性能相比,此问题应引起更大的关注(可以通过混合方法来缓解)

也许我们可以添加有关项目的一些详细信息,以便获得更好的质量答案。我们想保护什么?从谁?如果我们可以解释安全性的要求,那么我们将获得更好的答案。如果加密机制不能保护我们认为的真正性能,那么性能并不重要。

例如,X509证书是保护客户端/服务器端点的工业标准方法。 PGP装甲可用于保护许可证文件。为简单起见,如果同时控制两个端点,则在Perl或者Java中易于使用带有Blowfish(和许多其他密码)的密码块链接。

谢谢。

在运行OS X 10.5.5的Macbook和OpenSSL的常规版本上," openssl速度"将AES-128-CBC的时钟频率设置为每秒46,000个1024位块。那个盒子以每秒169个签名的速度为1024位RSA计时。 AES-128-CBC是"教科书"块加密算法,而RSA 1024是"教科书"公钥算法。它是苹果到橙子,但是答案是:RSA慢得多。

但是,这不是为什么我们不应该使用公共密钥加密的原因。这是真正的原因:

  • 公钥加密操作不适用于原始数据加密。像Diffie-Hellman和RSA这样的算法被设计为交换块密码算法密钥的一种方式。因此,例如,我们将使用安全随机数生成器为AES生成一个128位随机密钥,并使用RSA加密这16个字节。
  • 像RSA这样的算法比" AES"更不"用户友好"。使用随机密钥,我们提供给AES的明文块将对没有密钥的任何人随机出现。 RSA实际上不是这种情况,它比AES更是如此-只是一个数学方程式。因此,除了正确地存储和管理密钥外,我们还必须格外小心格式化RSA纯文本块的方式,否则最终会出现漏洞。
  • 没有密钥管理基础结构,公钥将无法工作。如果我们没有验证公用密钥的方案,攻击者可以用自己的密钥对代替真实的密钥对,以发起"中间人"攻击。这就是SSL强制我们通过证书严格规定的原因。像AES这样的块加密算法也确实会遭受这个问题的困扰,但是如果没有PKI,AES的安全性就不亚于RSA。
  • 公钥加密操作比AES容易遭受更多的实现漏洞。例如,RSA交易的双方必须在参数上达成共识,这些参数是输入给RSA方程的数字。攻击者可以替代一些邪恶的值来静默禁用加密。 Diffie Hellman也是这样,椭圆曲线甚至更是如此。另一个示例是2年前在多个高端SSL实施中发生的RSA签名伪造漏洞。
  • 使用公共密钥可以证明我们在"非同寻常"地做某事。与众不同的是,我们绝对不想使用密码学。除了算法之外,加密设计还需要经过数年的审核和测试,然后才能被认为是安全的。

对于希望在其应用程序中使用加密技术的客户,我们提出了两项​​建议:

  • 对于"静态数据",请使用PGP。真的! PGP被打了十多年,被认为可以避免愚蠢的实现错误。它有开源和商业版本。
  • 对于"传输中的数据",请使用TLS / SSL。与TLS相比,世界上没有哪个安全协议可以更好地理解和测试。各地的金融机构都将其视为移动最敏感数据的安全方法。

这是我的体面文章[matasano.com],几年前,专业密码学家Nate Lawson写下了这篇文章。它更详细地介绍了这些要点。