読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】配布ファイルに .asc と .sig が付いてた。GnuPG の鍵の作成・暗号化・復号・署名・検証・失効【LPICレベル1】

21レスカテゴリ:Linux
1: 名無しさん

ソフトをダウンロードしたら、本体のほかに .sig ってファイルが付いてた
何に使うん

2: 名無しさん

前提のおさらい。SSH の鍵は秘密鍵と公開鍵の組で、公開鍵は配ってよくて、秘密鍵は自分だけが持つ。GnuPG(gpg)の鍵も同じ考え方

3: 名無しさん

>>1
作った人の秘密鍵で付けた署名。作った人の公開鍵で gpg --verify ファイル.sig ファイル と確かめると、途中で書き換えられてないか、本当にその人が作ったかが分かる

4: 名無しさん

>>3
試したい。鍵の作り方は?

5: 名無しさん

>>4
対話式なら gpg --gen-key(細かく選ぶなら --full-generate-key)。作業用に GNUPGHOME を /workspace の下にして、gpg --batch --passphrase '' --quick-gen-key 'user <user@example.com>' default default never で作った(GnuPG 2.4.7)
できたのは pubring.kbx(公開鍵の束)、private-keys-v1.d/(秘密鍵)、trustdb.gpg(信用の情報)、openpgp-revocs.d/(失効証明書)。普段の場所は ~/.gnupg/

6: 名無しさん

>>5
gpg -k(--list-keys)で見たら、pub が ed25519 で [SC](署名と証明)、sub が cv25519 で [E](暗号化)、uid が user <user@example.com> の [ultimate]。秘密鍵の一覧は gpg -K で sec と ssb

7: 名無しさん

>>2
暗号化と復号は?

8: 名無しさん

>>7
受け取る人の公開鍵で暗号化して、受け取った人が自分の秘密鍵で復号する
gpg -e -r user@example.com msg.txt で msg.txt.gpg ができる。-a を付けると -----BEGIN PGP MESSAGE----- で始まる文字だけの形(ASCII 形式)
gpg -d msg.txt.gpg で元の secret message が出た

9: 名無しさん

>>8
相手の公開鍵はどうやって手に入れるん

10: 名無しさん

>>9
相手に gpg --export -a 名前 > pub.asc で書き出してもらって(-----BEGIN PGP PUBLIC KEY BLOCK----- で始まる)、自分で gpg --import pub.asc。本人の鍵か、フィンガープリントを別の方法で確かめる(gpg --fingerprint)

11: 名無しさん

>>3
署名の付け方の違いは?

12: 名無しさん

>>11
gpg -b ファイル:署名を別のファイル(.sig)に。配布物に付いてたのはこれ
gpg --clearsign ファイル:本文はそのまま読めて、前後に署名が付く(.asc)
gpg -s ファイル:本文と署名をまとめたバイナリ

13: 名無しさん

>>12
試した。-b で作った msg.txt.sig を gpg --verify msg.txt.sig msg.txt で確かめたら Good signature。msg.txt に1行足してからもう一度やったら BAD signature になった

14: 名無しさん

>>12
clearsign のファイルは -----BEGIN PGP SIGNED MESSAGE----- と Hash: SHA512 で始まってた

15: 名無しさん

>>5
秘密鍵をなくしたり盗まれたりしたら?

16: 名無しさん

>>15
失効証明書で「この鍵はもう使わない」と知らせる。gpg --gen-revoke 名前 > revoke.asc で作って、使うときは gpg --import revoke.asc してから公開鍵を配り直す
今の GnuPG は鍵を作ったときに openpgp-revocs.d/ に自動で作る。試したマシンでも フィンガープリント.rev ができてた。--gen-revoke は対話式で、--batch では can't do this in batch mode やった

17: 名無しさん

>>5
パスフレーズは毎回聞かれるん?

18: 名無しさん

>>17
gpg-agent が秘密鍵の操作を受け持って、しばらく覚えててくれる。GNUPGHOME の中に S.gpg-agent などのソケットができてた。止めるのは gpgconf --kill gpg-agent

19: 名無しさん

>>3
パッケージの署名も同じしくみ?

20: 名無しさん

>>19
同じ考え方。rpm -K や apt のリポジトリの検証も、配布元の公開鍵で署名を確かめてる。チェックサム(sha256sum)は壊れてないかは分かるけど、誰が作ったかは分からない

21: 名無しさん

>>3
暗号化は相手の公開鍵、署名は自分の秘密鍵、-b で .sig、--clearsign で .asc、確かめるのは --verify、失効証明書は openpgp-revocs.d にもある。.sig は作者の署名やったんか

管理人のひとこと