not*_*vvy 2 encryption pgp gnupg
我希望能够检查使用哪种(内部)对称算法使用公钥通过 GPG 加密文件。
我在某处读过这可以用 完成--list-packets,所以我尝试了
$ gpg --list-packets encrypted_file.asc
gpg: encrypted with 256-Bit ECDH key, ID 0865135E90D1AF38, created 2020-03-20
"First Last <first.last@somewhere.net>"
# off=0 ctb=84 tag=1 hlen=2 plen=94
:pubkey enc packet: version 3, algo 18, keyid 0865135E90D1AF38
data: [263 bits]
data: [392 bits]
# off=96 ctb=d2 tag=18 hlen=3 plen=1965 new-ctb
:encrypted data packet:
length: 1965
mdc_method: 2
# off=118 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=120 ctb=cb tag=11 hlen=2 plen=0 partial new-ctb
:literal data packet:
mode b (62), created 0, name="_CONSOLE",
raw data: unknown length
Run Code Online (Sandbox Code Playgroud)
我认为对称加密算法是在 中编码的mdc_method,但无论我使用什么算法进行加密,它总是显示2在那里。所以这似乎不是正确的方法。
如何找出对称算法?
诀窍是-vv --show-session-key向命令添加选项:
$ gpg -vv --show-session-key --list-packets encrypted_file.asc
Run Code Online (Sandbox Code Playgroud)
这会在输出中添加如下行:
gpg: AES192 encrypted data
gpg: session key: '8:32050C047C47C519E76901EFC47FDFED0CD87CDB85809AFE'
Run Code Online (Sandbox Code Playgroud)
冒号之前的数字(8此处)是用于根据此列表(取自GnuPG 源)加密文件内容的对称算法:
typedef enum
{
CIPHER_ALGO_NONE = 0,
CIPHER_ALGO_IDEA = 1,
CIPHER_ALGO_3DES = 2,
CIPHER_ALGO_CAST5 = 3,
CIPHER_ALGO_BLOWFISH = 4, /* 128 bit */
/* 5 & 6 are reserved */
CIPHER_ALGO_AES = 7,
CIPHER_ALGO_AES192 = 8,
CIPHER_ALGO_AES256 = 9,
CIPHER_ALGO_TWOFISH = 10, /* 256 bit */
CIPHER_ALGO_CAMELLIA128 = 11,
CIPHER_ALGO_CAMELLIA192 = 12,
CIPHER_ALGO_CAMELLIA256 = 13
}
cipher_algo_t;
Run Code Online (Sandbox Code Playgroud)
因此在本例中,文件是使用 AES-192 进行编码的。
请注意,这AES意味着 AES-128。