◾️はじめに
https://dk521123.hatenablog.com/entry/2026/02/12/143942
https://dk521123.hatenablog.com/entry/2026/02/13/152548
の続き。 gpgコマンドについて、徐々にメモっていく
目次
【1】確認系 1)gpg --list-packets 2)gpg --list-keys 3)gpg --list-public-keys 4)gpg --list-secret-keys 【2】鍵作成系 1)gpg --full-generate-key 【3】暗号化・複合化 1)gpg --encrypt 2)gpg --decrypt 【4】Export系 1)gpg --armor --export 2)gpg --armor --export-secret-key 【5】署名系 1)gpg --detach-sign 2)gpg --verify
【1】確認系
1)gpg --list-packets
* GPG暗号化ファイルや公開鍵/秘密鍵の内部構造(パケット)を 可視化して表示するデバッグ・解析用コマンド
構文
gpg --list-packets <file.gpg> gpg -vv --list-packets <file.gpg> gpg --verbose --list-packets <file.gpg> gpg --batch --pinentry-mode loopback --list-packets <file.gpg>
| Option | Explanations |
|---|---|
| --batch | 非対話モード。ユーザー入力(パスフレーズなど)を求めない |
| --pinentry-mode loopback | パスフレーズ入力方法を制御。gpg自身が直接パスフレーズを受け取るモード |
2)gpg --list-keys
* GnuPG(GPG)の鍵束(キーリング)に登録されている 公開鍵一覧を表示するコマンド
構文
gpg --list-keys # grep(-A/-B: 前後X行表示) gpg --list-keys | grep -A 5 -B 5 your-target-key
出力結果例
pub rsa3072 2026-04-09 [SC] [expires: 2028-04-09] ABCD1234EFGH5678IJKL9012MNOP3456QRST7890 uid [ultimate] demo-sample (For test) <demo@sample.com> sub rsa3072 2026-04-09 [E] [expires: 2028-04-09]
| Outputs | Explanations |
|---|---|
| pub rsa3072 2026-04-09 [SC] [expires: 2028-04-09] | pub:公開鍵(public key)/ rsa3072: 鍵の種類と長さ-RSA方式(3072ビット) / 2026-04-09: 鍵作成日/[SC]:用途(Capabilities)- S = Sign(署名),C = Certify(他の鍵に署名する)/[expires: 2028-04-09]: 鍵の有効期限 |
| ABCD1234EFGH5678IJKL9012MNOP3456QRST7890 | 鍵のフィンガープリント(指紋)またはキーID |
| uid [ultimate] demo-sample (For test) <demo@sample.com> | 鍵所有者情報。[ultimate]:この鍵に対する信頼レベル「完全に信頼している」という意味。通常は自分の鍵に付く |
| sub rsa3072 2026-04-09 [E] | sub: サブキー(補助鍵)/[E]: 用途 - E = Encrypt(暗号化) |
* [A] → 認証(Authentication) * <受信者ID>は、以下のようになる 1) メールアドレス ... demo@sample.com 2) 名前 ... demo-sample 3) 鍵ID(短いIDや長いID) ... ABCD1234EFGH5678...
3)gpg --list-public-keys
* GnuPG(GPG)鍵束に登録されているすべての公開鍵を一覧表示
構文
gpg --list-public-keys # 短縮形 gpg -k
4)gpg --list-secret-keys
* 秘密鍵の確認オプション
構文
gpg --list-secret-keys # 秘密鍵の一覧をサブキー指紋付きで表示 gpg --list-secret-keys --with-subkey-fingerprint # 公開キーと秘密キーの両方がある GPG キーを長い形式で一覧表示 gpg --list-secret-keys --keyid-format=long
【2】鍵作成系
1)gpg --full-generate-key
* 新しいGPG鍵を生成した
構文
gpg --full-generate-key
【3】暗号化・複合化
1)gpg --encrypt
* 暗号化
構文
gpg --encrypt <file> # <受信者ID>は、「gpg --list-keys」で確認できる gpg --encrypt -r <受信者ID> <file> # 署名(--sign)付きで暗号化 gpg --encrypt --sign -r <受信者ID> <file>
2)gpg --decrypt
* 複合化
構文
gpg --decrypt <file> # ファイル出力 gpg --output <output_file> --decrypt <file> gpg --ignore-mdc-error --output <output_file> --decrypt <file> # 詳細なログを出す gpg --status-fd=2 -vvv --decrypt <file> # [GNUPG:] XXXX 的なメッセージからFailedになっている原因が解明できる # => e.g. [GNUPG:] ERROR nomdc_with_legacy_cipher 152
| Options | Explanations |
|---|---|
| --ignore-mdc-error | MDCが存在しない、または破損している古いGPG暗号化ファイルを強制的に復号するコマンドオプション |
| --force-mdc | MDCを強制する |
| --status-fd=2 | 実行ステータス情報(進捗、エラー、鍵情報など)をファイルディスクリプタ2(標準エラー出力:stderr)にリアルタイムで出力するオプション。--status-fd=1 (stdout。標準出力) |
| -v(verbose)/-vv/-vvv | 詳細情報(vが増えれば更に詳しく) |
補足:MDC (Modification Detection Code; 修正検出コード)
* 暗号化されたメッセージが改ざんされていないかを確認する技術 * SHA-1などのハッシュ値を用いてデータの整合性を保証し、 古く安全性が低い暗号形式(MDCなし)で発生する データ改ざん検知の脆弱性を防ぐ => ただし、古いファイル(2003年以前)だとまだ適用されていないので --ignore-mdc-errorを使って、複合化する
【4】Export系
1)gpg --armor --export
* GPG公開鍵をASCII Armor形式(テキスト形式)でエクスポートし、 標準出力に表示
構文
gpg --armor --export <鍵指紋|鍵ID> # ファイル出力 gpg --armor --export <鍵指紋|鍵ID> > public_key.asc # または gpg --armor --output public_key.asc --export <鍵指紋|鍵ID>
補足:ASCII Armor 形式(アスキーアーマー)
* PGPやGPG暗号化されたバイナリデータを、 メールなどで送信可能なテキスト形式(Radix-64)に変換する技術 [変換方式] * データをBase64でエンコードし、CRCチェックサムを付与してテキスト化 [構成] * 「-----BEGIN PGP ...----- 」から始まるヘッダー、 Base64データ、「-----END PGP ...----- 」で終わるフッターで構成
2)gpg --armor --export-secret-key
* 秘密鍵のエクスポート
構文
gpg --armor --export-secret-keys <鍵指紋>
【5】署名系
1)gpg --detach-sign
* 署名を作る
構文
gpg --detach-sign <file.sig>
2)gpg --verify
* 署名検証
構文
gpg --verify <file.sig> gpg --verify <file.sig> <file>
参考文献
https://qiita.com/r_saiki/items/fb0bbbaa861e93f65ce9
https://qiita.com/mazeneko/items/806d7e10afacb021502a
関連記事
gpgコマンド 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2026/02/12/143942
gpgコマンド 〜 あれこれ編 〜
https://dk521123.hatenablog.com/entry/2026/02/13/152548
Python 〜 python-gnupg 〜
https://dk521123.hatenablog.com/entry/2025/10/18/222208