首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GPG加密邮件大小与收件人数量和文件大小不成比例?

为什么GPG加密邮件大小与收件人数量和文件大小不成比例?
EN

Security用户
提问于 2014-12-05 22:10:37
回答 2查看 2.4K关注 0票数 3

我注意到,当我使用GnuPG加密多个收件人的文件时,加密消息的大小似乎与收件人的数量不成正比。

例如,我测试的文件是纯文本中的836字节。

  • 为一个接收者加密,是1090字节。
  • 对两个收件人加密,为1619字节(每个收件人为810字节)
  • 对9个收件人加密,为4738字节(每个收件人为526字节)。
  • 为51个收件人加密,26 397字节(每个收件人517字节)

由于加密数据应该看起来是随机的,我认为这种差异并不是由于压缩造成的。不是所有的51个键都是相同的密钥大小/算法,但我不知道这怎么能解释如此惊人的平均文件大小。

如何才能为51人加密一个836字节的文件,这样他们就可以将我的文件解密回原来的大小,而无需为每个接收者追加至少836字节?

EN

回答 2

Security用户

回答已采纳

发布于 2014-12-05 22:33:17

因为每个收件人的整个邮件都不是单独加密的。

相反,随机选择一个对称加密密钥,使用该密钥对消息进行加密一次,然后为每个收件人单独加密加密密钥,使用该收件人的公钥,并将其附加到加密的消息中。

每个接收方首先使用其私钥解密对称加密,然后使用该密钥解密消息。

因为键通常比明文短得多,这就节省了很多空间。(它还让收件人知道他们都解密了同一条消息。如果邮件是为收件人单独加密的,则狡猾的发送者可以向每个收件人发送不同的消息,假装它们都是同一条消息的副本。)

使用您的数据,将第二个收件人添加527字节。第二个接收者可能有一个512字节的密钥,加上15个字节来识别接收者.连续的收件人将拥有不同的密钥长度和不同的标识数据,因此每个收件人的添加量都会有所不同。

票数 7
EN

Security用户

发布于 2014-12-06 00:33:58

混合加密系统

OpenPGP定义了一种混合加密系统,它结合了非对称(公钥)加密和对称加密的优点。非对称加密在密钥管理方面非常出色,但对大量数据的加密速度非常慢;另一方面,对称加密将需要与您希望单独通信的每个人交换密钥,但性能很好。

混合加密系统使用非对称加密来加密对称加密的随机密钥,而实际消息则是对称加密的。在OpenPGP中,这个键被称为会话密钥。

多接受者

这还有另一个优点:如果要处理多个收件人,则不需要对消息进行多次加密。相反,所需要做的就是为每个人加密会话密钥。您可以通过对多个人加密后查看文件中包含的数据包来观察这一点(在这里,pgpdump提供了比gpg --list-packets更好的输出):

代码语言:javascript
运行
复制
echo 'foo' | gpg --recipient a4ff2279 --recipient d745722b --encrypt | LANG=C pgpdump
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
    New version(3)
    Key ID - 0xCC73B287A4388025
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA m^e mod n(4093 bits) - ...
        -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
    New version(3)
    Key ID - 0xDAA855623A5E68F7
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA m^e mod n(2046 bits) - ...
        -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
    Ver 1
    Encrypted data [sym alg is specified in pub-key encrypted session key]
        (plain text + MDC SHA1(20 bytes))

公钥加密的会话密钥包包含双倍,每次加密(子)密钥一次.不同的密钥大小可以解释不同的密钥大小(RSA 2048 k和RSA 4096 k用于子项)。数据隐藏在对称加密和MDC数据包中。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/74412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档