GPG/PGP - 暗号化全般

暗号化全般 | IT用語集

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-cryptsopsといったツールと組み合わせると、チーム内で安全に秘密情報を共有できます。

# ファイルの暗号化
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年最新】OpenSSLの深刻な問題とは?

暗号化技術の全体像とGPGの位置づけについても解説しています。

最新動向(2026年)

GPG 2.4系の進化

GnuPG 2.4では、パフォーマンスの向上と新しい暗号アルゴリズムのサポートが追加されています。特にEd25519Curve25519がデフォルトで推奨されるようになりました。

代替ツールの台頭

  • age:シンプルで現代的な暗号化ツール。GPGよりも使いやすい
  • minisign:署名に特化した軽量ツール
  • signify:OpenBSD発のシンプルな署名ツール

Keybaseの終焉とその後

GPGの公開鍵の共有・検証に使われていたKeybaseは、Zoom買収後にサービスの方向性が変わりました。代替としてkeys.openpgp.orgSequoia-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-keyexpireコマンドを使い有効期限を延長。更新した公開鍵を配布。

権威あるリソース

公式ドキュメント

セキュリティ関連

関連用語

この用語についてもっと詳しく

GPG/PGPに関するご質問や暗号化システム導入のご相談など、お気軽にお問い合わせください。