GPG/PGPとは
PGP(Pretty Good Privacy)は、1991年にPhil Zimmermann氏によって開発された電子メールの暗号化・電子署名プログラムです。GPG(GNU Privacy Guard / GnuPG)は、PGPのオープンソース実装であり、現在最も広く使用されています。
GPG/PGPは公開鍵暗号方式を採用しており、以下の機能を提供します:
- 暗号化:第三者に読まれることなくメッセージを送信
- 電子署名:メッセージの真正性と完全性を証明
- 鍵管理:公開鍵と秘密鍵のペアを管理
- 信頼の輪(Web of Trust):分散型の信頼モデル
AIエンジニアとしての実体験
AIエンジニアとして、GPGは日常的に使用するツールの一つです。特に以下の場面で重宝しています:
Gitコミットへの署名
オープンソースプロジェクトや企業のリポジトリでは、コミットへのGPG署名が求められることが増えています。これにより、コミットが確かに本人によるものであることを証明できます。
# GPG鍵の生成
gpg --full-generate-key
# 鍵の一覧表示
gpg --list-secret-keys --keyid-format=long
# Gitへの署名設定
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign true
# 署名付きコミット
git commit -S -m "Add new feature"
機密設定ファイルの暗号化
AIモデルのAPIキーやデータベース認証情報などの機密情報を、GPGで暗号化してリポジトリに保存することがあります。git-cryptやsopsといったツールと組み合わせると、チーム内で安全に秘密情報を共有できます。
# ファイルの暗号化
gpg --encrypt --recipient user@example.com secrets.yaml
# ファイルの復号化
gpg --decrypt secrets.yaml.gpg > secrets.yaml
# 対称鍵暗号での暗号化(パスワードベース)
gpg --symmetric --cipher-algo AES256 sensitive_data.tar
自社サーバー運用への応用
パッケージ署名の検証
Linux環境でのパッケージ管理において、GPG署名の検証は重要です。不正なパッケージのインストールを防ぐため、リポジトリの公開鍵をインポートして署名を検証します。
# Debian/Ubuntu でのリポジトリ鍵追加
curl -fsSL https://example.com/gpg-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/example-archive-keyring.gpg
# RPM系でのGPG鍵インポート
sudo rpm --import https://example.com/RPM-GPG-KEY
自動化スクリプトでの使用
CI/CDパイプラインでGPGを使用する場合、パスフレーズなしの鍵やgpg-agentの設定が必要になります。
# バッチモードでの復号化
echo "$GPG_PASSPHRASE" | gpg --batch --yes --passphrase-fd 0 --decrypt secrets.gpg
# gpg-agentの事前設定
gpg-connect-agent "PRESET_PASSPHRASE $KEYGRIP $PASSPHRASE" /bye
関連ブログ記事
最新動向(2026年)
GPG 2.4系の進化
GnuPG 2.4では、パフォーマンスの向上と新しい暗号アルゴリズムのサポートが追加されています。特にEd25519とCurve25519がデフォルトで推奨されるようになりました。
代替ツールの台頭
- age:シンプルで現代的な暗号化ツール。GPGよりも使いやすい
- minisign:署名に特化した軽量ツール
- signify:OpenBSD発のシンプルな署名ツール
Keybaseの終焉とその後
GPGの公開鍵の共有・検証に使われていたKeybaseは、Zoom買収後にサービスの方向性が変わりました。代替としてkeys.openpgp.orgやSequoia-PGPプロジェクトが注目されています。
トラブル事例と対策
⚠️ 「gpg: decryption failed: No secret key」エラー
原因:復号化に必要な秘密鍵がキーリングにない
対策:gpg --list-secret-keysで鍵を確認。必要に応じて鍵をインポートする。
⚠️ 信頼の輪(Web of Trust)の問題
症状:「This key is not trusted」警告が表示される
対策:gpg --edit-key <KEY_ID>で信頼レベルを設定。trustコマンドを使用。
⚠️ 鍵の有効期限切れ
症状:署名検証や暗号化ができなくなる
対策:gpg --edit-keyでexpireコマンドを使い有効期限を延長。更新した公開鍵を配布。
