【Linux】gpgコマンド 〜基本編 〜

◾️はじめに

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