14

我们希望对我们的项目进行一些严格的安全要求,并且我们需要进行大量高性能的加密。

我认为我知道 PKI 比对称加密要慢得多且复杂得多,但我找不到支持我感觉的数字。

4

7 回答 7

31

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

公钥密码学解决的问题是没有共享秘密。使用对称加密,您必须信任所有相关方来保守密钥的秘密。这个问题应该比性能更受关注(可以通过混合方法来缓解)

于 2008-09-23T00:54:15.097 回答
31

在运行 OS X 10.5.5 和 OpenSSL 库存版本的 Macbook 上,“openssl speed”以每秒 46,000 1024 位块的速度运行 AES-128-CBC。同一个盒子以每秒 169 个签名的速度运行 1024 位 RSA。AES-128-CBC 是“教科书”块加密算法,RSA 1024 是“教科书”公钥算法。这是从苹果到橘子,但答案是:RSA 要慢得多

然而,这不是你不应该使用公钥加密的原因。以下是真正的原因:

  1. 公钥加密操作不适用于原始数据加密。像 Diffie-Hellman 和 RSA 这样的算法被设计为一种为块加密算法交换密钥的方式。因此,例如,您将使用安全随机数生成器为 AES 生成 128 位随机密钥,并使用 RSA 加密这 16 个字节。

  2. 像 RSA 这样的算法比 AES 更不“用户友好”。使用随机密钥,您提供给 AES 的明文块将随机出现给没有密钥的任何人。RSA 实际上并非如此,它 --- 比 AES 更重要 --- 只是一个数学方程。因此,除了正确存储和管理密钥之外,您还必须非常小心格式化 RSA 纯文本块的方式,否则最终会出现漏洞。

  3. 如果没有密钥管理基础设施,公钥将无法工作。如果您没有验证公钥的方案,攻击者可以用他们自己的密钥对代替真实的密钥对来发起“中间人”攻击。这就是为什么 SSL 会强制您通过证书的繁琐。像 AES这样的块加密算法也确实存在这个问题,但是没有 PKI,AES 的安全性不亚于 RSA。

  4. 公钥加密操作比 AES 更容易受到实施漏洞的影响。例如,RSA 交易的双方必须就参数达成一致,这些参数是输入 RSA 方程的数字。攻击者可以替换一些邪恶的值来静默禁用加密。Diffie Hellman 也是如此,椭圆曲线更是如此。另一个例子是 2 年前在多个高端 SSL 实现中发生的 RSA 签名伪造漏洞。

  5. 使用公钥是您正在做一些“与众不同”的事情的证据。与众不同正是你永远不想使用密码学的东西。除了算法之外,加密设计在被认为是安全的之前都要经过多年的审计和测试。

对于希望在其应用程序中使用密码学的客户,我们提出两个建议:

  • 对于“静态数据”,请使用 PGP。真的!PGP 已经被打败了十多年,被认为可以避免愚蠢的实施错误。它有开源和商业变体。

  • 对于“传输中的数据”,请使用 TLS/SSL。世界上没有任何安全协议比 TLS 更容易理解和测试。各地的金融机构都接受它作为移动最敏感数据的安全方法。

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

于 2008-09-23T22:13:06.863 回答
11

使用 OpenSSLspeed子命令对算法进行基准测试并亲自查看。

[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
于 2008-09-23T00:48:38.090 回答
4

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

因此,非对称加密算法相对于对称加密算法的额外开销是固定的——它不依赖于数据大小,只依赖于密钥大小。

上次我对此进行测试时,验证了 3 个左右的 X.509 证书链 [编辑添加:以及他们正在签名的数据] 在以 100MHz 左右运行的 ARM 上花费了几分之一秒(多次重复的平均值,明显地)。我不记得有多小了——不是可以忽略不计,但不到一秒钟。

抱歉,我不记得确切的细节,但总结是,除非您使用非常受限的系统或进行大量加密(例如,如果您想每秒接受尽可能多的 SSL 连接),NIST 批准非对称加密方法很快。

于 2008-09-23T00:54:08.700 回答
2

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

于 2008-09-23T00:50:18.273 回答
0

也许您可以添加一些有关您的项目的详细信息,以便获得更好质量的答案。你想保护什么?从谁?如果你能解释你的安全要求,你会得到一个更好的答案。如果加密机制不能保护您认为的那样,性能就没有多大意义。

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

谢谢。

于 2008-09-23T02:15:31.920 回答
0

是的,PGP、TLS 和 CMS 等标准化加密方案提供的混合加密确实对每个消息或会话施加了固定的性能成本。这种影响有多大取决于选择的算法以及您正在谈论的操作。

对于 RSA,解密和签名操作相对较慢,因为它需要使用大的私有指数进行模幂运算。另一方面,RSA 加密和签名验证非常快,因为它使用小的公共指数。这种差异与密钥长度成二次方。

在 ECC 下,由于对等点使用大小相似的密钥进行相同的数学运算,因此操作比 RSA 更加平衡。在集成加密方案中,可以生成临时 EC 密钥,并用于密钥协商算法;这需要消息发送者做一些额外的工作。ECDH 密钥协议比 RSA 加密慢得多,但比 RSA 解密快得多。

就相对数量而言,使用 AES 解密可能比使用 RSA 解密快 100,000 倍。就绝对数字而言,很大程度上取决于硬件,AES 每个块可能需要几纳秒,而 RSA 需要一两毫秒。这就提出了一个问题,为什么有人会使用非对称算法呢?

答案是这些算法在混合加密方案中出于不同目的一起使用。AES 等快速对称算法用于保护消息本身,而 RSA 等慢速非对称算法反过来用于保护对称算法所需的密钥。这使以前从未共享过任何秘密信息的各方(例如您和您的搜索引擎)能够彼此安全地通信。

于 2019-08-29T17:15:45.610 回答