使用 RSA 加密纯文本消息的最大字节数是多少,该消息相当安全且高效,并且对于相同大小的字节,AES 会更好吗?顺便说一句,加密不必公开,我只是想知道 AES 在短消息上是否和在大文档上一样好。基本上,消息或文档将被加密发送,但密钥永远不会公开。我想这也会破坏 RSA 的目的,但我在网上读过几次,RSA 适合短消息,而 AES 适合长消息。
RSA 加密的最大字节数,在安全性方面与 AES 相比?
由PKCS#1定义的 RSA对大小有限的“消息”进行加密。使用常用的“v1.5 padding”和 2048 位 RSA 密钥,可以用 RSA 加密的最大数据大小为 245 字节。不再。
当你“用 RSA 加密数据”时,实际上,你实际上是用 RSA 加密一个随机对称密钥,然后用对称加密算法加密数据,该算法不限制大小。这就是它在SSL、S/MIME、OpenPGP中的工作方式……通常,有些人建议通过将输入消息分成 245 字节的块并或多或少地分别加密每个块来执行“仅 RSA”。这是一个坏主意,因为:
- 数据拆分然后重建的方式可能存在重大缺陷。没有经过充分研究的标准。
- 每个块在加密时增长一位(使用 2048 位密钥,245 字节的数据变成 256 字节);当处理大量数据时,大小开销变得很大。
- 大型消息的解密可能会变得非常昂贵。
当使用使用n位块的对称块密码加密数据时,当使用单个密钥加密的数据量接近2 n/2块(即n*2 n/2位)时,开始出现一些安全问题。对于 AES,n = 128(AES-128、AES-192 和 AES-256 都使用 128 位块)。这意味着超过 2.5 亿 TB 的限制,这足够大,不会成为问题。这正是 AES 使用 128 位块定义的原因,而不是(当时)更常见的 64 位块:因此数据大小实际上是无限的。
直接比较这两者有点像比较拖拉机和火车——它们都是车辆,但功能和结构完全不同。
RSA 是一种非对称密码。它非常适合通过不受信任的网络安全交换消息,因为每个人都可以知道公钥 - 使用公钥加密的消息只能由私钥解密。因此,如果两方知道对方的公钥,他们就可以安全地交换消息。这意味着不必传输任何秘密信息 - 只要保持真实性和完整性,您就是安全的。值得庆幸的是,RSA 提供了一种在数据上生成签名的方法,这有助于证明它是真实的。给定一条由私钥签名的消息,可以使用相应的公钥验证该签名。
根据经验,您只能加密与 RSA 密钥长度一样大的数据。所以,如果你有一个 4096 位的 RSA 密钥,你只能加密最长为 4096 位的消息。不仅如此,而且速度非常慢。RSA 并非设计为全速数据传输密码。
AES 是一种对称分组密码,速度非常快。明文被分成称为块的块,每个块都在链中加密。有不同的方法可以做到这一点,但一种常见的方法称为密码块链接,或简称为 CBC。这允许理论上无限的消息大小。但是,像 AES 这样的对称密码需要首先交换密钥。与 RSA 不同,共享密钥必须对攻击者保持未知,因此您必须提供真实性、完整性和保密性。这很难直接做到。
您会发现两种方案是一起实现的,因此 RSA 用于将密钥交换为像 AES 这样的分组密码:
- Alice 和 Bob 知道彼此的 RSA 公钥。通常,这些是带外交换的,例如通过部署为操作系统的一部分的证书。
- Alice 为 AES 选择一个随机的 256 位密钥,并使用 Bob 的公钥加密该密钥。她用她的私钥签署此消息,并将其发送给 Bob。
- Bob 使用 Alice 的公钥来验证签名。然后,他使用他的私钥解密消息。
- Eve(窃听者)看到了加密的消息,但在不知道 Bob 的私钥的情况下无法解密它。她也无法更改该消息,因为这会使签名不正确。在不知道 Alice 的私钥的情况下,她无法重新生成有效的签名。
- Alice 和 Bob 现在共享一个 256 位秘密密钥,并使用它使用对称密码(例如 AES)来加密消息。
这满足了几个要求:
- 对话可以在不受信任的网络上进行,而攻击者无法读取消息。
- 会话密钥交换可以以安全的方式进行,即在密钥上保持真实性和完整性。
- 对实际会话数据的加解密性能非常好。
就安全级别而言,比较 RSA 和 AES 并没有多大意义。他们做不同的工作。我们目前假设 128 位 AES 密钥是安全的,而 2048 位 RSA 密钥是安全的,但这完全取决于个人的安全要求。假设实施是健全的,使用 256 位 AES 和 4096 位 RSA 密钥对于未来十年应该绰绰有余。
请注意,所有这些都是简化,因为涉及到许多警告和细节,并且将 RSA 交换描述为“加密”并不完全正确,但总而言之,这应该是对方式的合理高级概述两种类型的加密工作。
根据 GoLang 加密包“消息的长度不得超过公共模数减去 11 个字节的长度”。 http://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15
您通常看不到 RSA 用于大量数据的一个原因是性能 - RSA 和 AES 对于大量和少量数据(正确实施时)都是安全的,但 RSA 速度要慢得多。
在公钥加密有意义但需要更高性能的情况下,可以实现一个混合系统来利用两者。