我可以使用特定密钥大小加密的文件的最大大小

信息安全 密码学 openssl RSA
2021-09-04 02:39:29

openssl genrsa privateKey.pem 1024使用该命令生成一个 1024 位的私钥。

我们使用命令从私钥中提取公钥

openSSl rsa -in privatekey.pem -pubout -out publickey.pem

我想知道我的私钥和我的公钥的大小?

我想知道我想用我的公钥加密的文件的最大大小?

以及我想用我的私钥解密的最大大小?

2个回答

首先,一个 1024 位的 RSA 密钥太小了,不舒适。当前对 RSA 的建议是 3072 或 4096(更好的安全余量)与 2048(更好的性能)之间的争论。看:

我想知道我想用我的公钥加密的文件的最大大小?以及我想用我的私钥解密的最大大小?

这里的限制实际上并不在于 RSA 本身,因为实际的公钥密码术几乎总是混合密码术,其中 RSA 用于封装对称加密密钥(通常用于某些基于 AES 的算法),并且实际数据是用这些加密的。因此,实际上限制您可以加密的文件大小的是文件或消息格式的设计。例如,使用 AES-GCM,您无法加密大于 64 GiB 的单个消息,并且您不应使用一个密钥加密超过 2 32条消息,但这实际上意味着要加密大量数据,软件应将其拆分为更小的块并将每个消息加密为单独的消息,在超过一定数量的块后轮换密钥。

(旁注:即使对于较小的文件,最好将它们加密成中等大小的块,这样软件就可以拒绝伪造,而不必在产生任何输出之前解密整个文件。例如,EFail 漏洞的原因之一是GnuPG 在执行可选的防伪检查之前输出伪造文件的解密。)

这只是一个例子;一般的答案是,仅凭您提供的信息无法具体回答您的问题,而具体答案需要查看您的特定加密软件以了解其设计和实现方式。例如,GnuPG 的文档告诉你,对于它的一些对称算法,你不应该加密大于 4 GiB 的文件

由于其 1970 年代的 64 位块大小,[3DES] 不应用于加密超过约 4Gb 的数据。不过,除此之外,它还是坚如磐石,很少有 GnuPG 用户会注意到它的问题。如果您不加密超过 4Gb 的数据,您可以放心地使用 3DES。

如果您违反此规则,我无法快速找到故障模式,并且我不能保证它是否会给您一个错误,说明您做了坏事(应该如此),或者只是默默地产生一个潜在不安全的输出文件(这将是可怕的) . 买者自负。

密钥上的 1024 位数字描述了用作消息加密和解密一部分的模数(请参阅https://security.stackexchange.com/a/8914/29905),它与公钥的公共指数配对和私钥的私钥 - 实际上,消息首先被取到公共指数e或私人指数d的幂,然后找到该数字的模数和 1024 位N。1024 位N的最高位始终为 1,因此任何 1023 位的块都可以加密为N将始终是一个更大的数字 - 如果明文是 1024 位,最高有效位设置为 1,则需要检查其数值是否小于N那么,您的问题的基本答案是 RSA 可以加密和解密最多(密钥长度 - 1)位的消息。但是,可以将消息分成足够小的块以允许填充(使每个块具有统一的长度并增加不确定性),并且每个块都使用 RSA 单独加密。

您还询问了密钥的大小。我之前提到过,密钥实际上是两个数字的组合,Neded通过互为模λ(N)的模乘逆而相关,即(e * d) mod λ(N) = 1它们的长度与N的位长并不完全相关,但一个越小,另一个越大,因为e * d > N(注意e,d > 1)。因此,复合键的大小是N的位长度加上ed的长度,其中e一般是小素数。然而,在实际实现中,并没有存储大的d,而是存储了它的某些因素,这些因素可以更快地完成解密步骤,并且在计算过程中占用的内存更小,因此完整私钥的长度要小得多。