Closed5

gpgで暗号化したデータの送信先と署名元がどこまで見えるのか調べてみる

zundazunda

デフォルトの暗号化

普通に暗号化すると利用した公開鍵IDが見える。電子メールの宛先は見えないと届かないし、復号する方も便利だろうし、理解できる。

$ echo Hello, World! | gpg -e --recipient zundan@proton.me | gpg --list-packets --verbose 2>/dev/null 
# off=0 ctb=84 tag=1 hlen=2 plen=94
:pubkey enc packet: version 3, algo 18, keyid 2B5F2F842E2C8886
	data: 403C25F77B6B4359009E988FA12C7D46C821D5CCEC972C7F1DEE4D5CDC7D2D454E
	data: 302E6713848D8F89AD53BB1F85D3123493D7041B542C3807C12EBD45D39209F232ACB4ABBE87F8E60D4AD4AE4F404D3061
# off=96 ctb=d2 tag=18 hlen=2 plen=73 new-ctb
:encrypted data packet:
	length: 73
	mdc_method: 2
$ gpg --list-keys 2B5F2F842E2C8886
pub   ed25519 2022-04-14 [SC]
      921F279D3152066F9D6B5144BF65B6D1D868E8EA
uid           [  full  ] zundan@proton.me <zundan@proton.me>
sub   cv25519 2022-04-14 [E]
zundazunda

宛先を隠す暗号化

宛先を隠すと宛先を隠せる。なるほどなるほど。

$ echo Hello, World! | gpg -e --hidden-recipient zundan@proton.me | gpg --list-packets --verbose 2>/dev/null 
# off=0 ctb=84 tag=1 hlen=2 plen=94
:pubkey enc packet: version 3, algo 18, keyid 0000000000000000
	data: 4072A93E786D39A841717CFFBE7971A48325B3A137CF64F7635FCA2E833E160278
	data: 30ED49EEF0E14B6B4FEA7F74895184DEB3846BF684CF81BD2D54DEC0DD35401395F7E2297917C01E1D161BB5AB157CB29E
# off=96 ctb=d2 tag=18 hlen=2 plen=73 new-ctb
:encrypted data packet:
	length: 73
	mdc_method: 2
zundazunda

デジタル署名もつける

宛先を隠さないでも署名鍵は隠される。なるほどなるほど。

$ echo Hello, World! | gpg -e --recipient zundan@proton.me --sign --default-key zundan@gmail.com | gpg --list-packets --verbose 2>/dev/null 
gpg: using "zundan@gmail.com" as default secret key for signing
# off=0 ctb=84 tag=1 hlen=2 plen=94
:pubkey enc packet: version 3, algo 18, keyid 2B5F2F842E2C8886
	data: 404139F376585659CC360128A6F8AE14D786E27B00D1EDC46B2B76857EA8727639
	data: 3076468A137773A3E29ECDE8B1CA9822A9E04EF3D6F0EF2EA37D65004C9C410BD4A7E761F9140A20B5D2A390F625DF5E65
# off=96 ctb=d2 tag=18 hlen=2 plen=0 partial new-ctb
:encrypted data packet:
	length: unknown
	mdc_method: 2
zundazunda

デジタル署名のみ

暗号化しなければ署名鍵が見える。それはそうよね。

$ echo Hello, World! | gpg --sign --default-key zundan@gmail.com | gpg --list-packets --verbose 2>/dev/null 
  :
# …
:compressed packet: algo=1
# off=2 ctb=90 tag=4 hlen=2 plen=13
:onepass_sig packet: keyid B56C20316D6E8279
	version 3, sigclass 0x00, digest 10, pubkey 1, last=1
# … 
:literal data packet:
	mode b (62), created 1709581369, name="",
	raw data: 14 bytes
# … :signature packet: algo 1, keyid B56C20316D6E8279
	version 4, created 1709581369, md5len 0, sigclass 0x00
	digest algo 10, begin of digest 94 5b
	hashed subpkt 33 len 21 (issuer fpr v4 F60960D80B224382CA8D831CB56C20316D6E8279)
	hashed subpkt 2 len 4 (sig created 2024-03-04)
	hashed subpkt 28 len 16 (signer's user ID)
	subpkt 16 len 8 (issuer key ID B56C20316D6E8279)
	data:  …
$ gpg --list-keys B56C20316D6E8279
pub   rsa3072 2020-06-24 [SC] [expires: 2024-06-25]
      F60960D80B224382CA8D831CB56C20316D6E8279
uid           [ultimate] zunda <zundan@gmail.com>
sub   rsa3072 2020-06-24 [E] [expires: 2024-06-25]
このスクラップは2ヶ月前にクローズされました