我们希望对我们的项目做一些严格的安全性要求,我们需要进行大量高性能的加密。
我认为我知道PKI比对称加密慢得多且复杂得多,但我找不到数字来支持我的感受。
答案 0 :(得分:25)
是的,纯粹的非对称加密比对称密码(如DES或AES)慢得多,这就是真正的应用程序使用hybrid cryptography的原因:昂贵的公钥操作仅用于加密(和交换)加密用于加密真实消息的对称算法的关键。
公钥加密解决的问题是没有共享密钥。使用对称加密,您必须信任所有相关方以保持密钥的秘密。这个问题应该是一个比性能更大的问题(可以通过混合方法减轻)
答案 1 :(得分:22)
在运行OS X 10.5.5的Macbook和OpenSSL的库存版本中,“openssl speed”以每秒46,000 1024位块的速度为AES-128-CBC计时。同一个盒子以每秒169个签名计时1024位RSA。 AES-128-CBC是“教科书”块加密算法,而RSA 1024是“教科书”公钥算法。它是苹果到橙子,但答案是: RSA要慢得多。
然而,这并不是您不应该使用公钥加密的原因。这是真正的原因:
公钥加密操作不适用于原始数据加密。像Diffie-Hellman和RSA这样的算法被设计为一种交换块加密算法的密钥的方法。因此,例如,您使用安全随机数生成器为AES生成128位随机密钥,并使用RSA加密这16个字节。
像RSA这样的算法远比AES “用户友好”。使用随机密钥,您向AES提供的明文块将随机出现给没有密钥的任何人。实际情况并非RSA的情况,这比AES更多 - 只是一个数学方程式。因此,除了正确存储和管理密钥之外,您还必须非常小心格式化RSA纯文本块的方式,否则最终会遇到漏洞。
没有密钥管理基础架构,公钥无法正常工作。如果您没有验证公钥的方案,攻击者可以用自己的密钥对替换真正的密钥对来启动“中间人”攻击。这就是SSL强迫您通过证书的严格要求的原因。块加密算法(如AES do )也会遇到此问题,但如果没有PKI,AES的安全性就不比RSA安全。
公钥加密操作容易受到比AES 更多的实施漏洞的影响。例如,RSA事务的双方必须就参数达成一致,参数是馈送到RSA等式的数字。攻击者可以替代恶意值来静默禁用加密。对于Diffie Hellman来说也是如此,对于Elliptic Curve来说更是如此。另一个例子是两年前在多个高端SSL实施中发生的RSA Signature Forgery漏洞。
使用公钥证明您正在做一些“与众不同”的事情。与众不同的是你永远想要加密的东西;除了算法之外,加密设计在被认为安全之前已经过多年的审核和测试。
对于希望在其应用程序中使用加密技术的客户,我们提出两项建议:
对于“静止数据”,请使用PGP 。真! PGP已经被打了十多年,被认为是安全的,不会出现愚蠢的实施错误。它有开源和商业变体。
对于“飞行中的数据”,请使用TLS / SSL 。世界上没有任何安全协议比TLS更好理解和更好的测试;各地的金融机构都认为它是移动最敏感数据的安全方法。
Here's a decent writeup [matasano.com]我和专业密码学家Nate Lawson几年前写道。它更详细地介绍了这些要点。
答案 2 :(得分:7)
使用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
答案 3 :(得分:4)
基于实用PKI的加密系统使用非对称加密来加密对称密钥,然后使用该密钥进行对称加密以加密数据(有人说,有人会指出反例)。
因此,非对称加密算法相对于对称加密算法所产生的额外开销是固定的 - 它不依赖于数据大小,只取决于密钥大小。
上次我对此进行了测试,验证了一组3个左右的X.509证书[编辑添加:以及他们签署的数据]在以100MHz左右运行的ARM上花了不到一秒的时间(平均值超过很多重复,显然)。我不记得有多小 - 不可忽视,但不到一秒钟。
抱歉,我不记得具体的细节,但总结是,除非你是在一个非常有限的系统或进行大量加密(如果你想要接受尽可能多的SSL连接一秒), NIST批准的非对称加密方法很快。
答案 4 :(得分:2)
显然它差了1000倍。 (http://windowsitpro.com/article/articleid/93787/symmetric-vs-asymmetric-ciphers.html)。但除非你真的在处理大量数据,否则它并不重要。您可以做的是使用非对称加密来交换对称加密密钥。
答案 5 :(得分:0)
也许您可以添加一些有关项目的详细信息,以便获得更高质量的答案。你想要保证什么?从谁?如果您能解释您的安全要求,您将获得更好的答案。如果加密机制不能保护您的想法,性能并不意味着什么。
例如,X509证书是保护客户端/服务器端点的工业标准方法。 PGP装甲可用于保护许可证文件。为简单起见,如果您控制两个端点,使用Blowfish(以及许多其他密码)的密码块链接很容易在Perl或Java中使用。
感谢。
答案 6 :(得分:0)
是的,由标准化密码方案(例如PGP,TLS和CMS)提供的混合加密确实在每条消息或会话上增加了固定的性能成本。影响到底有多大取决于所选择的算法以及您正在谈论的操作。
对于RSA,解密和签名操作相对较慢,因为它需要具有较大私有指数的模幂。另一方面,RSA加密和签名验证非常快,因为它使用了小的公共指数。此差异与密钥长度成正比。
在ECC下,由于同位体使用相同大小的密钥进行相同的数学运算,因此操作比RSA更平衡。在集成加密方案中,可以生成临时EC密钥,并将其用于密钥协商算法。消息发送者需要做一些额外的工作。 ECDH密钥协议比RSA加密慢很多,很多,但是比RSA解密快很多。
就相对数量而言,使用AES解密可能比使用RSA解密快100,000倍。就绝对数而言,AES在每个块上可能花费几个 nanoseconds ,而RSA则需要花费一两个毫秒。这就引出了一个问题,为什么有人会使用非对称算法?
答案是这些算法在混合加密方案中出于不同的目的一起使用。快速,对称算法(例如AES)用于保护消息本身,而慢速非对称算法(例如RSA)用于保护对称算法所需的密钥。这样,以前从未共享过任何秘密信息的各方(例如您和您的搜索引擎)就可以安全地进行通信。