我们计划在项目中实施高强度的安全要求,需要进行大量高性能的加密操作。
我认为公钥基础设施(PKI)比对称加密更慢、更复杂,但是我找不到数据来支持我的想法。
我们计划在项目中实施高强度的安全要求,需要进行大量高性能的加密操作。
我认为公钥基础设施(PKI)比对称加密更慢、更复杂,但是我找不到数据来支持我的想法。
纯非对称加密比对称加密(如DES或AES)慢得多,这就是为什么真实应用中使用混合加密的原因:昂贵的公钥操作仅用于加密(和交换)用于加密实际消息的对称算法所需的加密密钥。
公钥加密解决的问题是没有共享密钥。使用对称加密时,您必须信任所有相关方保持密钥机密。这个问题比性能问题更加重要(可以通过混合方法来缓解性能问题)。
公钥密码操作不适用于原始数据加密。像Diffie-Hellman和RSA这样的算法被设计为交换块密码算法的密钥。因此,例如,您可以使用安全的随机数生成器生成一个128位的随机密钥用于AES,并使用RSA加密这16个字节。
像RSA这样的算法比AES不太“用户友好”。使用随机密钥,您提供给AES的明文块将对没有密钥的任何人都是随机的。但这并不适用于RSA,它与AES相比只是一个数学方程式。因此,除了正确存储和管理密钥外,您还必须非常小心地格式化RSA明文块的方式,否则就会出现漏洞。
没有密钥管理基础设施公钥是无法工作的。如果您没有验证公钥的计划,攻击者可以将他们自己的密钥对替换为真实的密钥对,以发起“中间人”攻击。这就是为什么SSL强制您通过证书的复杂程序的原因。块密码算法例如AES也会遇到这个问题,但是如果没有PKI,则AES的安全性与RSA一样。
公钥加密操作比AES更容易受到实现漏洞的影响。 例如,RSA事务的双方都必须就要传递给RSA方程的参数达成一致。攻击者可以替换恶意值来悄悄地禁用加密。Diffie Hellman同样如此,而Elliptic Curve则更加如此。另一个例子是在多个高端SSL实现中发生的RSA签名伪造漏洞,该漏洞发生在两年前。
使用公钥是表明你正在做一些“不寻常”的事情的证据。在密码学中超出寻常范围的事情正是您绝对不想做的事情;除了算法之外,密码学设计在被视为安全之前要经过数年的审核和测试。
对于想要在其应用程序中使用密码学的客户,我们提出两个建议:
对于“静态数据”,请使用PGP。真的!PGP已经被批评了十多年,并被认为是免受愚蠢的实现错误的安全方式。它有开源和商业版本。
对于“动态数据”,请使用TLS / SSL。世界上没有比TLS更为了解和经过更好的测试的安全协议;金融机构普遍接受它作为移动最敏感数据的安全方法。
这里有一篇不错的文章 [matasano.com],我和专业的密码学家Nate Lawson在几年前写过。它详细介绍了这些要点。
使用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)。但是,除非您确实需要处理大量数据,否则这并不重要。您可以使用非对称加密来交换对称加密密钥。
是的,像PGP、TLS和CMS这样的标准加密方案提供的混合加密确实会对每个消息或会话产生固定的性能成本。这种影响有多大取决于所选算法以及您所讨论的操作。
对于RSA,解密和签名操作相对较慢,因为它需要使用具有大私有指数的模幂运算。另一方面,RSA加密和签名验证非常快,因为它使用小的公共指数。这种差异随着密钥长度的增加呈二次比例。
在ECC下,由于同级别的人使用相似大小的密钥进行相同的数学计算,因此操作比RSA更平衡。在集成加密方案中,可以生成一个临时的EC密钥,并在密钥协商算法中使用;这需要发送者进行一些额外的工作。ECDH密钥协商比RSA加密要慢得多,但比RSA解密要快得多。
就相对数字而言,使用AES进行解密可能比使用RSA进行解密快100,000倍。就绝对数字而言,根据硬件的不同,AES可能需要每个块几个纳秒,而RSA则需要1到2毫秒。这引发了一个问题,为什么有人会使用非对称算法呢?
答案是这些算法在混合加密方案中一起使用,用于不同的目的。像AES这样快速的对称算法用于保护消息本身,而RSA这样慢速的非对称算法则用于保护对称算法所需的密钥。这就允许之前从未共享过任何秘密信息的各方(比如你和搜索引擎)之间进行安全通信。也许您可以添加一些关于您的项目的详细信息,以便获得更高质量的答案。您试图保护什么?来自谁?如果您能解释安全要求,您将得到更好的答案。如果加密机制没有保护您认为应该保护的内容,那么性能就没有多大意义。
例如,X509证书是保护客户端/服务器端点的工业标准方式。PGP装甲可用于保护许可文件。对于简单性而言,使用Perl或Java中的Cipher block chaining和Blowfish(以及其他密码)易于使用,如果您控制两个端点。
谢谢。