ソフトをダウンロードしたら、本体のほかに .sig ってファイルが付いてた
何に使うん
【疑問】配布ファイルに .asc と .sig が付いてた。GnuPG の鍵の作成・暗号化・復号・署名・検証・失効【LPICレベル1】
前提のおさらい。SSH の鍵は秘密鍵と公開鍵の組で、公開鍵は配ってよくて、秘密鍵は自分だけが持つ。GnuPG(gpg)の鍵も同じ考え方
>>1
作った人の秘密鍵で付けた署名。作った人の公開鍵で gpg --verify ファイル.sig ファイル と確かめると、途中で書き換えられてないか、本当にその人が作ったかが分かる
>>3
試したい。鍵の作り方は?
>>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/
>>5gpg -k(--list-keys)で見たら、pub が ed25519 で [SC](署名と証明)、sub が cv25519 で [E](暗号化)、uid が user <user@example.com> の [ultimate]。秘密鍵の一覧は gpg -K で sec と ssb
>>2
暗号化と復号は?
>>7
受け取る人の公開鍵で暗号化して、受け取った人が自分の秘密鍵で復号するgpg -e -r user@example.com msg.txt で msg.txt.gpg ができる。-a を付けると -----BEGIN PGP MESSAGE----- で始まる文字だけの形(ASCII 形式)gpg -d msg.txt.gpg で元の secret message が出た
>>8
相手の公開鍵はどうやって手に入れるん
>>9
相手に gpg --export -a 名前 > pub.asc で書き出してもらって(-----BEGIN PGP PUBLIC KEY BLOCK----- で始まる)、自分で gpg --import pub.asc。本人の鍵か、フィンガープリントを別の方法で確かめる(gpg --fingerprint)
>>3
署名の付け方の違いは?
>>11gpg -b ファイル:署名を別のファイル(.sig)に。配布物に付いてたのはこれgpg --clearsign ファイル:本文はそのまま読めて、前後に署名が付く(.asc)gpg -s ファイル:本文と署名をまとめたバイナリ
>>12
試した。-b で作った msg.txt.sig を gpg --verify msg.txt.sig msg.txt で確かめたら Good signature。msg.txt に1行足してからもう一度やったら BAD signature になった
>>12
clearsign のファイルは -----BEGIN PGP SIGNED MESSAGE----- と Hash: SHA512 で始まってた
>>5
秘密鍵をなくしたり盗まれたりしたら?
>>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 やった
>>5
パスフレーズは毎回聞かれるん?
>>17
gpg-agent が秘密鍵の操作を受け持って、しばらく覚えててくれる。GNUPGHOME の中に S.gpg-agent などのソケットができてた。止めるのは gpgconf --kill gpg-agent
>>3
パッケージの署名も同じしくみ?
>>19
同じ考え方。rpm -K や apt のリポジトリの検証も、配布元の公開鍵で署名を確かめてる。チェックサム(sha256sum)は壊れてないかは分かるけど、誰が作ったかは分からない
>>3
暗号化は相手の公開鍵、署名は自分の秘密鍵、-b で .sig、--clearsign で .asc、確かめるのは --verify、失効証明書は openpgp-revocs.d にもある。.sig は作者の署名やったんか
管理人のひとこと
- 鍵の作成は gpg --gen-key・--full-generate-key(--quick-gen-key)。保存先は ~/.gnupg/(pubring.kbx、private-keys-v1.d/、trustdb.gpg、openpgp-revocs.d/)。一覧は -k(--list-keys)、秘密鍵は -K。
- 暗号化は相手の公開鍵:
gpg -e -r 相手 ファイル(-a で ASCII 形式)。復号は自分の秘密鍵:gpg -d。公開鍵のやりとりは--export -aと--import、確認は --fingerprint。 - 署名は自分の秘密鍵:-b(分離署名 .sig)、--clearsign(本文が読める .asc)、-s。検証は
gpg --verify 署名 ファイル(Good・BAD signature)。 - 失効証明書は --gen-revoke で作り、--import して公開鍵を配り直す。鍵の作成時に openpgp-revocs.d/ にも作られる。gpg-agent がパスフレーズと秘密鍵の操作を受け持つ。