如何确定OpenPGP加密是对称还是非对称?

布罗佐夫斯基

是否有办法判断通过GNU Privacy Guard加密的事物是对称的还是非对称的(无需解密或已经知道开始)?如何?

无论如何(对于那些想知道我在做什么的人),我使用Python 3.x编程了一种基于GUI的IDE,可以打开对称加密的文件(并保存它们)。它可以打开非对称加密的文件(输入密码以使用您的秘密密钥而不是密码来解密对称加密的文件)。但是,它不知道它们是不对称的,如果保存,会用对称加密的文件覆盖它们。能够非对称地保存它们也很好。我的编辑器gpg在Linux上使用命令行程序(没有gpg库或类似的东西)。

我可以在密码提示符下有一个用于非对称加密的复选框,但我不想这样做,因此对于用户而言,它必须是手动操作。

对于我自己的个人文件,我可以在保存的文件中添加某种标记以进行区分,但是我希望它能够正确打开它们,即使它们不是在我的IDE中创建的也是如此。

我知道有一个标题相似的问题,但正文中提出的问题根本不同。

詹斯原为

OpenPGP是一种混合密码系统,这意味着始终使用所谓的会话密钥对称地加密消息(或文件)会话密钥再次使用非对称加密(使用公共密钥)或对称加密(使用字符串到密钥功能)进行加密。

这有技术原因(对于大量数据,非对称加密非常慢),但也有实际原因:通过多次对小会话密钥进行加密(每个接收者一次),您还可以使多个接收者使用不同的密钥,甚至混合使用非对称加密单个OpenPGP消息中的(公共密钥)和对称(基于密码)加密。

会话密钥的那些加密副本中的每一个都形成一个OpenPGP数据包,该数据包可以是带有标签1的数据包(公共密钥加密会话密钥数据包),也可以是带有标签3的数据包(对称密钥加密会话密钥数据包)。使用可以轻松分解OpenPGP消息中的那些数据包pgpdump使用GnuPG创建一个OpenPGP消息的示例,该消息既为我自己的密钥加密,又为密码短语对称加密foo

$ echo foo | gpg --recipient a4ff2279 --symmetric --passphrase foo --encrypt | 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(4096 bits) - ...
        -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Symmetric-Key Encrypted Session Key Packet(tag 3)(46 bytes)
    New version(4)
    Sym alg - AES with 128-bit key(sym 7)
    Iterated and salted string-to-key(s2k 3):
        Hash alg - SHA512(hash 10)
        Salt - 0c a6 e6 1d d2 f4 9a 50 
        Count - 102400(coded count 105)
    Encrypted session key
        -> sym alg(1 bytes) + session key
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
    Ver 1
    Encrypted data [sym alg is specified in sym-key encrypted session key]
        (plain text + MDC SHA1(20 bytes))

前两个数据包中的每个数据包都构成一个密钥,用于打开“对称加密的MDC数据包”中的加密字符串

这也已经说明了如何分析消息的加密方式:浏览数据包,查找标记1或3的数据包,指示非对称或对称加密(并注意两者可能同时存在)。您似乎很幸运,Python GnuPG模块已经带来了一个ListPackets类,因此您无需接口pgpdump无需编写自己的OpenPGP解析器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

静态非对称加密

来自分类Dev

非对称加密

来自分类Dev

HTTPS使用非对称或对称加密?

来自分类Dev

Jasypt和非对称加密

来自分类Dev

JWT使用非对称加密

来自分类Dev

如何将BCrypt用于RSA(非对称加密)

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

SSH何时使用非对称和对称加密?

来自分类Dev

如何使用PHP解密对称加密的OpenPGP消息?

来自分类Dev

使用KeyCzar的Android非对称加密

来自分类Dev

使用KeyCzar的Android非对称加密

来自分类Dev

非对称Android RSA加密-.NET

来自分类Dev

本地模式下的非对称加密?

来自分类Dev

如何删除numpy数组中的非对称对?

来自分类常见问题

如何通过套接字正确地非对称加密和解密

来自分类Dev

如何在非对称加密(libsodium)中使用随机数?

来自分类Dev

如何不依靠已安装的密钥环等在命令行上进行非对称加密?

来自分类Dev

非对称衰减函数

来自分类Dev

NetworkX 非对称权重

来自分类Dev

多于两个收件人的非对称加密?

来自分类Dev

我可以对 AWS KMS 使用非对称加密吗?

来自分类Dev

C 上信封的 EVP 非对称加密和解密

来自分类Dev

非对称地图标记

来自分类Dev

Python:完整的非对称网格

来自分类Dev

Android LinearLayout 非对称居中

来自分类Dev

如何在Android上创建非对称布局

来自分类Dev

如何使用gpg对称加密文件?

来自分类Dev

如何知道ssh使用的对称加密的类型?

来自分类Dev

如何导出对称加密密钥?