是否有办法判断通过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] 删除。
我来说两句