GnuPG

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page GnuPG and the translation is 94% complete.

GnuPG (GNU Privacy Guard) 略して GPG は、OpenPGP 標準 (RFC 4880) のフリーな実装です。GPG は対称鍵暗号方式と公開鍵暗号方式の両方をサポートしており、典型的には両方を使用して操作します。

GPG は、デジタル署名、認証、データの暗号化に使用することができます。e メールメッセージの暗号化と署名によく使用されますが、ファイルやプレーンテキストにも使用することができます。

GPG は、YubiKey などの、OpenPGP モジュールを持つハードウェアセキュリティデバイスをサポートしています。

app-crypt/gnupg は、ssh-agent として使用することができる gpg-agent を含んでいます。

インストール

USE フラグ

USE flags for app-crypt/gnupg The GNU Privacy Guard, a GPL OpenPGP implementation

bzip2 Enable bzip2 compression support
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
ldap Add LDAP support (Lightweight Directory Access Protocol)
nls Add Native Language Support (using gettext - GNU locale utilities)
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
smartcard Build scdaemon software. Enables usage of OpenPGP cards. For other type of smartcards, try app-crypt/gnupg-pkcs11-scd. Bring in dev-libs/libusb as a dependency; enable scdaemon.
ssl Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security)
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
tofu Enable support for Trust on First use trust model; requires dev-db/sqlite.
tools Install extra tools (including gpgsplit and gpg-zip).
tpm Enable TPM support via app-crypt/tpm2-tss and build tpm2d.
usb Build direct CCID access for scdaemon; requires dev-libs/libusb.
user-socket try a socket directory which is not removed by init manager at session end
verify-sig Verify upstream signatures on distfiles
wks-server Install the wks-server

Emerge

root #emerge --ask app-crypt/gnupg

追加のソフトウェア

GnuPG は単独で使用することもできますが、様々なソフトウェアと統合することもできます。

メールクライアント

  • PinePGP (mail-client/pinepgp)。
  • Mutt (mail-client/mutt) - 小さいがパワフルなテキストベースのメールクライアント。
  • Claws Mail - スレッド表示、GPGME を利用した GPG、自動化機能をサポートする、パワフルなメールプログラム。
  • Evolution (mail-client/evolution) - Microsoft Outlook によく似た GNOME のメールクライアント
  • KMail (kde-apps/kmail) - KDEのメールクライアント
    • KGPG (kde-apps/kgpg)をインストールすることは、KDEのデスクトップ環境を使用しているときに興味深く思えるかもしれません。この小さなプログラムがあれば、鍵ペアの生成、ASCIIファイルからの鍵のインポート、インポートした鍵への署名、鍵のエクスポートやその他のいくつかの素晴らしい機能を利用できます。

その他

  • Tor (net-vpn/tor) - 匿名で鍵のサーバーにアクセスするために使用できます。

設定

GPG を実際に使い始めるために必要な設定はほとんどないか、まったくありません。多くの設定は gpg-agent および pinetry の挙動に関するものに集中する傾向があります。これらは完全に省略可能ですが、セキュリティを向上させるために ~/.gnupg/gpg.confgpg の設定を修正することが推奨されます。

GPG セキュリティ

以下のオプションは GLEP 63 の構成要素であり、一部はすでにデフォルトになっています:

  • utf8-strings - GPG はデフォルトで、引数が display-charset と同じ文字集合でエンコードされていると仮定します。このオプションを設定することで、GPG は引数を utf8 として解釈します。
  • fixed-list-mode - GnuPG 2.0.10 からデフォルト - --with-colon 出力モード使用時に、user ID と主鍵とマージしません。
  • keyid-format - key ID を指定されたフォーマットで表示します。先頭に 0x を持つオプションは、key ID が 16 進であることを示すために 0x を追加します。
  • personal-digest-preferences - ダイジェストアルゴリズムの選択順を調整します。メッセージの署名時により強力なハッシュタイプを優先するために利用することができます。
  • default-preference-list - 編集メニュー内で setpref によって使用される、優先リストを設定します。より強力なメソッドを優先するために利用することができます。
  • verify-options - show-uid-validity がデフォルトで有効化されています。このオプションは鍵を検証するときに、どの種類の検証を表示するか調整するために使用されます。
  • list-option - show-uid-validity がデフォルトで有効化されています。鍵または署名を列挙するときに、どの種類の検証を表示するか調整するために使用されます。
  • cert-digest-algo - 鍵に署名するときに使用されるダイジェストアルゴリズム。
  • s2k-cipher-algo - 対称暗号化のためにデフォルトで使用される暗号アルゴリズム。
  • s2k-digest-algo - 対称暗号化のために使用されるパスフレーズをマングルするために使用されるダイジェストアルゴリズム。


ファイル ~/.gnupg/gpg.confReference GLEP63 configuration
# Assume that command line arguments are given as UTF8 strings.
utf8-strings
 
# when outputting certificates, view user IDs distinctly from keys:
fixed-list-mode
 
# long keyids are more collision-resistant than short keyids (it's trivial to make a key
# with any desired short keyid)
# NOTE: this breaks kmail gnupg support!
keyid-format 0xlong
 
# when multiple digests are supported by all recipients, choose the strongest one:
personal-digest-preferences SHA512 SHA384 SHA256 SHA224
 
# preferences chosen for new keys should prioritize stronger algorithms:
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed
 
# You should always know at a glance which User IDs GPG thinks are legitimately bound to
# the keys in the keyring:
verify-options show-uid-validity
list-options show-uid-validity
 
# include an unambiguous indicator of which key made a signature:
# (see http://thread.gmane.org/gmane.mail.notmuch.general/3721/focus=7234)
# (and http://www.ietf.org/mail-archive/web/openpgp/current/msg00405.html)
sig-notation issuer-fpr@notations.openpgp.fifthhorseman.net=%g
 
# when making an OpenPGP certification, use a stronger digest than the default SHA1:
cert-digest-algo SHA512
s2k-cipher-algo AES256
s2k-digest-algo SHA512

Pinentry

app-crypt/pinentry は、gpg-agent がグラフィカルウィンドウでパスフレーズを要求するために使用される、ヘルパーアプリケーションです。gtk3qt5tty、そして curses など、多くのフレーバーがあります。

メモ
pinentry-curses は典型的にフォールバック pinentry として使用されるので、ビルドしておくことが推奨されます。

app-crypt/pinentry が複数の種類のポップアップウィンドウとともにインストールされている場合、eselect pinentry コマンドでウィンドウを選択することができます:

root #eselect pinentry list
Available pinentry binary implementations:
  [1]   pinentry-gnome3
  [2]   pinentry-qt5 *
  [3]   pinentry-curses
  [4]   pinentry-tty
root #eselect pinentry set pinentry-qt5
メモ
eselect pinentry/usr/bin/pinentry シンボリックリンクを選択された pinentry ヘルパーに変更します。
メモ
If GPG gives an error like
user $gpg -o /dev/null -s /etc/hostname
gpg: signing failed: pinentry error
gpg: signing failed: pinentry error
then it can be fixed either by using one of pinentry-tty or pinentry-curses, or by launching with dbus-launch.
user $dbus-launch gpg -o /dev/null -s /etc/hostname

鍵管理

鍵を生成する

重要
Gentoo 開発者は Gentoo インフラストラクチャの鍵生成手順に従うべきです。

gpg --full-generate-key は基本的な鍵対を生成するために使用することができますが、gpg --expert --full-generate-key を使用することで、楕円曲線鍵の作成、署名と証明での証明書の分離など、多数の有用なオプションが提供されます。

メモ
gpg コマンドの初回実行時には、ディレクトリ ~/.gnupg~/.gnupg/pubring.kbx が作成されるでしょう。
主鍵

GPG 鍵作成プロセスは以下により始めることができます:

user $gpg --expert --full-generate-key
コード 鍵生成を開始する
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (7) DSA (機能をあなた自身で設定)
   (8) RSA (機能をあなた自身で設定)
   (9) ECC と ECC
  (10) ECC (署名のみ)
  (11) ECC (機能をあなた自身で設定)
  (13) 既存の鍵
  (14) カードに存在する鍵
あなたの選択は? 11

この最初に生成された鍵が証明 (certify) 機能のみを持つようにするために、(11) ECC (機能をあなた自身で設定) が選択されています。追加の副鍵は暗号化 (encryption)、署名 (sign)、および認証 (authentication) 機能を自由に組み合わせて作成することができます。

デフォルトでは、最初の鍵には署名 (sign) および証明 (certify) オプションが設定されているはずです。s で署名 (sign) オプションを取り除いてください:

コード sign 機能を取り除く。
鍵ECDSA/EdDSAに認められた操作: Sign Certify Authenticate 
現在の認められた操作: Sign Certify 

   (S) 署名機能を反転する
   (A) 認証機能を反転する
   (Q) 完了

あなたの選択は? s
コード 主鍵の編集を完了する
鍵ECDSA/EdDSAに認められた操作: Sign Certify Authenticate 
現在の認められた操作: Certify 

   (S) 署名機能を反転する
   (A) 認証機能を反転する
   (Q) 完了

あなたの選択は? q

q を選択したら、鍵の種類として (1) Curve 25519 または好きなもの選択することができます。

コード 鍵の種類を設定する
ご希望の楕円曲線を選択してください:
   (1) Curve 25519
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
あなたの選択は? 1

鍵の種類を選択したら、次は有効期限を設定するべきです。有効期限を設定しておくと、もし鍵やパスフレーズが流出したとしても、いずれ鍵の有効期限が切れることで攻撃が可能な期間を最小化でき、セキュリティの向上に役立ちます。これは鍵の失効の代わりになるものではありません。中から高程度のセキュリティのためには、1 から 3 年後の未来に有効期限を設定するのが妥当でしょう。

重要
鍵を紛失した場合や、流出した可能性がある場合は、失効証明書を共有するべきです。ただ単に鍵の有効期限が切れるのを待って最善を期待する、ということはしないでください。
メモ
有効期限を 0 に設定すると、鍵は決して期限切れになりません。

これで鍵のパラメータの定義が完了したので、次は本人識別情報を提示する必要があります。

メモ
--allowfreeform-uid を使用することで 5 文字より短い名前を GPG で使用することができますが、これは鍵の所有者の名前の代わりにフィンガープリントを使用する必要性を発生させ、宛先の名前をマッチするときに問題を引き起こすことがあります。

最後に、鍵にパスフレーズを追加する必要があります。このパスフレーズは秘密鍵を保護するために使用されるので、重要です。

コード GPG 主鍵作成時の出力
gpg: /root/.gnupg/trustdb.gpg: 信用データベースができました
gpg: ディレクトリ'/root/.gnupg/openpgp-revocs.d'が作成されました
gpg: 失効証明書を '/root/.gnupg/openpgp-revocs.d/D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479.rev' に保管しました。公開鍵と秘密鍵を作成し、署名しました。
 
pub   ed25519 2023-04-25 [SC]
      D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479
uid                      Larry (wiki example key) <larry@gentoo.org>
重要
失効証明書が配置された場所をメモしておいてください。これは、鍵/パスフレーズへの認可されていないアクセスが発生したときに、鍵を失効させるために使用することができます。
メモ
At this point, only the primary [c]ertify(key signing key) key has been created, typically [s]igning and [e]ncryption keys are created.
署名鍵を追加する

作成された鍵を表示および編集するために、gpg --expert --edit-key D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479 を使用することができます。検出されたキーリングにユーザとして Larry が存在する限り、gpg --expert --edit-key Larry でも動作するはずです。

メモ
ECC 鍵の作成のためにはエキスパートモードを使用する必要があります。
user $gpg --expert --edit-key D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

秘密鍵が利用できます。

sec  ed25519/F980BCF1FADC7479
     作成: 2023-04-25  有効期限: 無期限      利用法: C   
     信用: 究極        有効性: 究極
[  究極  ] (1). Larry (wiki example key) <larry@gentoo.org>
コード 署名鍵を追加する
gpg> addkey
ご希望の鍵の種類を選択してください:
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (5) Elgamal (暗号化のみ)
   (6) RSA (暗号化のみ)
   (7) DSA (機能をあなた自身で設定)
   (8) RSA (機能をあなた自身で設定)
  (10) ECC (署名のみ)
  (11) ECC (機能をあなた自身で設定)
  (12) ECC (暗号化のみ)
  (13) 既存の鍵
  (14) カードに存在する鍵
あなたの選択は? 10
コード 鍵の種類を選択する (Curve25519)
ご希望の楕円曲線を選択してください:
   (1) Curve 25519
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
あなたの選択は? 1
重要
鍵は gpg 内で save コマンドで保存する必要があります。単に終了しても生成された鍵は保存されません。
暗号化鍵を追加する
user $gpg --expert --edit-key D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

秘密鍵が利用できます。

sec  ed25519/F980BCF1FADC7479
     作成: 2023-04-25  有効期限: 無期限      利用法: C   
     信用: 究極        有効性: 究極
[  究極  ] (1). Larry (wiki example key) <larry@gentoo.org>
コード 暗号化鍵を追加する
gpg> addkey
ご希望の鍵の種類を選択してください:
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (5) Elgamal (暗号化のみ)
   (6) RSA (暗号化のみ)
   (7) DSA (機能をあなた自身で設定)
   (8) RSA (機能をあなた自身で設定)
  (10) ECC (署名のみ)
  (11) ECC (機能をあなた自身で設定)
  (12) ECC (暗号化のみ)
  (13) 既存の鍵
  (14) カードに存在する鍵
あなたの選択は? 12
コード 鍵の種類を選択する (Curve25519)
ご希望の楕円曲線を選択してください:
   (1) Curve 25519
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
あなたの選択は? 1

署名 (sign) および証明 (certify) 鍵の作成時と同様に、有効期限を設定する必要があります。GPG は鍵を追加する前に鍵パスワードの入力を促すでしょう。

重要
鍵は gpg 内で save コマンドで保存する必要があります。単に終了しても生成された鍵は保存されません。
認証鍵を追加する

SSH のために GPG 鍵を使用するためには、認証 (Authentication) 鍵を作成する必要があります。

認証鍵は以下で作成できます:

コード 認証鍵を作成する
gpg> addkey
ご希望の鍵の種類を選択してください:
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (5) Elgamal (暗号化のみ)
   (6) RSA (暗号化のみ)
   (7) DSA (機能をあなた自身で設定)
   (8) RSA (機能をあなた自身で設定)
  (10) ECC (署名のみ)
  (11) ECC (機能をあなた自身で設定)
  (12) ECC (暗号化のみ)
  (13) 既存の鍵
  (14) カードに存在する鍵
あなたの選択は? 11

鍵ECDSA/EdDSAに認められた操作: Sign Authenticate 
現在の認められた操作: Sign 

   (S) 署名機能を反転する
   (A) 認証機能を反転する
   (Q) 完了

あなたの選択は? s

鍵ECDSA/EdDSAに認められた操作: Sign Authenticate 
現在の認められた操作: 

   (S) 署名機能を反転する
   (A) 認証機能を反転する
   (Q) 完了

あなたの選択は? a

鍵ECDSA/EdDSAに認められた操作: Sign Authenticate 
現在の認められた操作: Authenticate 

   (S) 署名機能を反転する
   (A) 認証機能を反転する
   (Q) 完了

あなたの選択は? q
ご希望の楕円曲線を選択してください:
   (1) Curve 25519
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
あなたの選択は? 1
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)400
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
重要
鍵は gpg 内で save コマンドで保存する必要があります。単に終了しても生成された鍵は保存されません。

鍵をエクスポートする

鍵を一覧表示する

ロードされている公開鍵は gpg -k で表示することができます:

user $gpg -k
/root/.gnupg/pubring.kbx
------------------------
pub   ed25519 2023-04-25 [SC]
      1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
uid           [  究極  ] Larry (wiki test key) <larry@gentoo.org>
sub   cv25519 2023-04-25 [E]
sub   ed25519 2023-04-25 [A]

秘密鍵は gpg -k ではなく gpg -K を使用することで一覧表示できます:

user $gpg -K
/root/.gnupg/pubring.kbx
------------------------
sec   ed25519 2023-04-25 [SC]
      1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
uid           [  究極  ] Larry (wiki test key) <larry@gentoo.org>
ssb   cv25519 2023-04-25 [E]
ssb   ed25519 2023-04-25 [A]
公開鍵

公開鍵は --export を使用してエクスポートすることができます。鍵を armored 形式で標準出力にエクスポートするには:

user $gpg --armor --export Larry
-----BEGIN PGP PUBLIC KEY BLOCK-----
 
mDMEZEfeAhYJKwYBBAHaRw8BAQdArguazSgVcquYvBlx0/Zf59sc/FuPNDCxZ7Ch
q3FHIQa0K0xhcnJ5ICh3aWtpIGV4YW1wbGUga2V5KSA8bGFycnlAZ2VudG9vLm9y
Zz6IkAQTFggAOBYhBNKlwQ4ve6w23bwK/PmAvPH63HR5BQJkR94CAhsDBQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAAAoJEPmAvPH63HR5KhgBAOUqhecyl7a9srOzR6pV
aiLIb1piUldUh+WxLTKGGGxSAQD+4mlnhkQDbjhW36yE1XPTzQjkPXfSUKDnk+DC
4sKOC7g4BGRH4T8SCisGAQQBl1UBBQEBB0CO2YaH9u6TqANovaCUDirs7W2xBZdz
i3dV28u2bA7rHAMBCAeIfgQYFggAJhYhBNKlwQ4ve6w23bwK/PmAvPH63HR5BQJk
R+E/AhsMBQkB4TOAAAoJEPmAvPH63HR58UsBAIYFWB3JfmkrSy03Hi/R+D8yapLD
+dnpbBrvg9arZNPFAPwIklhrFSO+1exgUnIIv/4d6FreEcxNHik6qdU2M3yJBbgz
BGRH4iIWCSsGAQQB2kcPAQEHQH/4R7RST15/rVFDSYXXvgnjzWe73MwhIZ0ZFtpa
YWB0iHgEGBYIACAWIQTSpcEOL3usNt28Cvz5gLzx+tx0eQUCZEfiIgIbIAAKCRD5
gLzx+tx0eS8SAQC27hYFV5C5A5MMI46/vD3eeQQ8pGNIR92YGYBCj7EVhQEAu4ux
0fxWpQOTeXxu+HJj/vhBioB6G4l25Q+Ry8Gbbwk=
=UXWK
-----END PGP PUBLIC KEY BLOCK-----

または、ファイルにエクスポートするには:

user $gpg --output larry.pub --export 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
ヒント
この場合では、ユーザ名 Larry とキーグリップ 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6 はどちらも GPG 内の鍵を参照する妥当な方法であるため、これらのうちいずれかを --export の引数として使用できます。
メモ
--armor を省略すると、標準出力にバイナリデータが書き出されるでしょう。--armor は GPG ヘッダおよびフッタをデータに追加して、簡単にコピーできるように、あるいはそもそも印字できるように、Base64 を使用してエンコードします。
秘密鍵

秘密鍵は gpg --output {key}.secret.gpg --export-secret-keys {key} および gpg --output {key}.secret-sub.gpg --export-secret-subkeys {key} を使用してエクスポートできます。ただし {key} はその鍵に関連付けられた uid またはフィンガープリントです。

鍵をインポートする

鍵のインポートは、gpg --import keyfile.asc を使用してファイルから、または gpg --import を使用して標準入力から行うことができます。標準入力からインポートする場合は、鍵をペーストした後、Ctrl+D を使用して EOF を送信することで、ロードすることができます。

Gentoo リリース鍵

Gentoo の GPG 鍵は、以下を実行することでインポートできます:

user $wget -O - https://qa-reports.gentoo.org/output/service-keys.gpg | gpg --import

または

user $gpg --import /usr/share/openpgp-keys/gentoo-release.asc
標準入力から鍵をロードする
user $gpg --import
-----BEGIN PGP PUBLIC KEY BLOCK-----
 
mDMEZEfmDhYJKwYBBAHaRw8BAQdAdor/95lVxt0cDnAh9am37X8svi7khQKWXoqP
ROBroWi0KExhcnJ5ICh3aWtpIHRlc3Qga2V5KSA8bGFycnlAZ2VudG9vLm9yZz6I
kAQTFggAOBYhBBCA4nPMnAv5s6Io6qVi35A9C7f2BQJkR+YOAhsDBQsJCAcCBhUK
CQgLAgQWAgMBAh4BAheAAAoJEKVi35A9C7f2PeEA/3jNAQwngMq4k89wCFBKoKwZ
fmY+SCjdR6ZE7qi7OsOrAP45o6Yb/MGwpeMO+Zjo4TRAghLBwyLjlfXmidbRozje
B7g4BGRH5iASCisGAQQBl1UBBQEBB0B0vG919/1fH7wWqgaRryoqwQZJY2/Ga+eY
Wo0tCWd3UwMBCAeIeAQYFggAIBYhBBCA4nPMnAv5s6Io6qVi35A9C7f2BQJkR+Yg
AhsMAAoJEKVi35A9C7f2kZoBALcK7qEzwqs3gRF0BDJk8sejA0y4qnR1iZHQsoGp
MKzJAQDWcR6MSjfkmfMhRKBp+BO0FjtXW5JqK78WHf9+9PWQDrgzBGRH5ioWCSsG
AQQB2kcPAQEHQO3KCdy134zfo1ii8dxSKFQ3xOhO7X0AJONjNt4358YiiHgEGBYI
ACAWIQQQgOJzzJwL+bOiKOqlYt+QPQu39gUCZEfmKgIbIAAKCRClYt+QPQu39n4G
AQCrH85V3y2vH8Cwz+Tnp0lUYil2yZGX87v2aXTOLbfIEgEAn1PAUEhCweoKqlKr
FVRpfQN4KfmgT8EMTjXfjUQZog8=
=KXyX
-----END PGP PUBLIC KEY BLOCK-----gpg: 鍵A562DF903D0BB7F6:"Larry (wiki test key) <larry@gentoo.org>"変更なし
gpg:           処理数の合計: 1
gpg:               変更なし: 1

秘密鍵をロードする場合は、pinentry に鍵パスワードの入力を促されることがあります:

user $gpg --import larry.secret*
gpg: 鍵A562DF903D0BB7F6:"Larry (wiki test key) <larry@gentoo.org>"変更なし
gpg: 'secring.gpg'の移行には、スマードカードそれぞれで、以下を実行してください: gpg --card-status
gpg: 鍵A562DF903D0BB7F6: 秘密鍵をインポートしました
gpg: 鍵A562DF903D0BB7F6:"Larry (wiki test key) <larry@gentoo.org>"変更なし
gpg: 鍵A562DF903D0BB7F6: 秘密鍵をインポートしました
gpg:           処理数の合計: 2
gpg:               変更なし: 2
gpg:       秘密鍵の読み込み: 2
gpg:     秘密鍵のインポート: 2
gpg:         無変更の秘密鍵: 1
警告
鍵に信用を与える際には本物かよく確認してください。ここに公開鍵暗号方式の弱点の一つがあります。

鍵のバックアップをインポートする際には、その鍵を究極的に信用されたものとしてマークするのが合理的かもしれません:

user $gpg --edit-key Larry
秘密鍵が利用できます。
gpg> trust
sec  ed25519/A562DF903D0BB7F6
     作成: 2023-04-25  有効期限: 無期限      利用法: SC  
     信用: 未定義      有効性: 不明の
ssb  cv25519/70373C88C49E535A
     作成: 2023-04-25  有効期限: 無期限      利用法: E   
ssb  ed25519/9019FBB6586D8EE1
     作成: 2023-04-25  有効期限: 無期限      利用法: A   
[  不明  ] (1). Larry (wiki test key) <larry@gentoo.org>
 
他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください
(パスポートを見せてもらったり、他から得たフィンガープリントを検査したり、などなど)

  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = まぁまぁ信用する
  4 = 充分に信用する
  5 = 究極的に信用する
  m = メーン・メニューに戻る

あなたの決定は? 5
本当にこの鍵を究極的に信用しますか? (y/N) y
                                                             
sec  ed25519/A562DF903D0BB7F6
     作成: 2023-04-25  有効期限: 無期限      利用法: SC  
     信用: 究極        有効性: 不明の
ssb  cv25519/70373C88C49E535A
     作成: 2023-04-25  有効期限: 無期限      利用法: E   
ssb  ed25519/9019FBB6586D8EE1
     作成: 2023-04-25  有効期限: 無期限      利用法: A   
[  不明  ] (1). Larry (wiki test key) <larry@gentoo.org>
プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、
ということを念頭においてください。

鍵に署名する

インポートした鍵が検証されたら、それに署名 (証明) することができます。

鍵を証明するということは、その鍵が署名者によって信用されていることを意味します。所有者が署名された鍵を再配布できるように、署名された鍵はその所有者に送り返すことができます。そうすることで、署名を行った鍵を信用する人は誰でも、署名された鍵を暗黙的に信用することができます。

以下の例では repomirror 鍵が Larry によって署名されています:

user $gpg --edit-key repomirrorci@gentoo.org
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
pub  rsa4096/A13D0EF1914E7A72
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: C   
     信用: 不明の      有効性: 不明の
sub  rsa2048/7C2AC09CD98F2EDF
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: S   
[  不明  ] (1). Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>
 
gpg> trust      
pub  rsa4096/A13D0EF1914E7A72
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: C   
     信用: 不明の      有効性: 不明の
sub  rsa2048/7C2AC09CD98F2EDF
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: S   
[  不明  ] (1). Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>
 
他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください
(パスポートを見せてもらったり、他から得たフィンガープリントを検査したり、などなど)

  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = まぁまぁ信用する
  4 = 充分に信用する
  5 = 究極的に信用する
  m = メーン・メニューに戻る

あなたの決定は? 4
                
pub  rsa4096/A13D0EF1914E7A72
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: C   
     信用: 充分        有効性: 不明の
sub  rsa2048/7C2AC09CD98F2EDF
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: S   
[  不明  ] (1). Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>
プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、
ということを念頭においてください。
 
gpg> sign
         
pub  rsa4096/A13D0EF1914E7A72
     作成: 2018-05-28  有効期限: 2024-07-01  利用法: C   
     信用: 充分        有効性: 不明の
  主鍵フィンガープリント: EF95 38C9 E8E6 4311 A52C  DEDF A13D 0EF1 914E 7A72
 
Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>
 
この鍵は2024-07-01で期限が切れます。
本当にこの鍵にあなたの鍵"Larry (wiki test key) <larry@gentoo.org>"で署名してよいですか
(A562DF903D0BB7F6)
 
本当に署名しますか? (y/N) y
                    
gpg> save

If Larry sent this signed key to someone, and someone else sent it to someone who knew and trusted Larry, they would have reason to trust the key, even if it was distributed using an insecure method.

When a key is marked as not trusted, signatures can also be used to designate that a certain user does not trust the key.

鍵サーバを利用して鍵を交換する

デフォルトの鍵サーバを設定する

gpg にデフォルトの鍵サーバとして keys.openpgp.org を使用させるには、次の設定を使用することができます:

ファイル ~/.gnupg/gpg.confGPG にデフォルトの keyserver として keys.openpgp.org を使用させる
keyserver keys.openpgp.org
メモ
この設定は、関係する gpg コマンドの実行に毎回 --keyserver keys.openpgp.org を追加するのと等価です。
鍵サーバに鍵を送信する
重要
Gentoo 開発者は Gentoo インフラストラクチャの鍵送信手順に従うべきです。

鍵が生成されたら、鍵サーバを使用して鍵を共有することができます。これにより、その鍵を他者がインポートするのが簡単になります。

openpgp 鍵サーバに鍵を送信するには:

user $gpg --keyserver keys.openpgp.org --send-key D2A5C10E2F7BAC36DDBC0AFCF980BCF1FADC7479
gpg: sending key 0xF980BCF1FADC7479 to hkp://keys.openpgp.org
メモ
他の証明された鍵も鍵サーバに送信することができます。これは、鍵の持ち主が他の鍵を信用している (または信用していない) ことを告知します。
鍵サーバから鍵を入手する

アップロードされた Larry の鍵を入手するには、e メールアドレスなどの識別情報とともに --search-keys パラメータを使用することができます。

user $gpg --keyserver keys.openpgp.org --search-keys larry@gentoo.org
gpg: data source: http://keys.openpgp.org:12345
(1)	larry <larry@gentoo.org>
          256 bit EDDSA key 0xF980BCF1FADC7479, 作成: 2023-04-22
Keys 1-1 of 1 for "larry@gentoo.org".  番号(s)、N)次、またはQ)中止を入力してください >1
gpg: /home/larry/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵0xF980BCF1FADC7479: 公開鍵"larry <larry@gentoo.org>"をインポートしました
gpg:           処理数の合計: 1
gpg:             インポート: 1
重要
鍵サーバから鍵をインポートする際には、複数の鍵が検索にマッチすることがあるので、よく鍵を確認してください。
既存の鍵を更新する

既存の PGP 鍵は定期的な周期で (月 2 回が一般的です) 更新すべきです。鍵を更新するには、接続先の鍵サーバを定義してください:

user $gpg --keyserver hkps://keys.gentoo.org --refresh-keys

このコマンドを cron ジョブか systemd タイマーに追加するとよいでしょう。

GPG エージェント

app-crypt/gnupggpg-agent とともにパッケージ化されています。これはパスフレーズをキャッシュし、解錠された鍵へのアクセスを管理するために使用できます。

メモ
xfce-base/xfce4-meta は自動で gpg-agent および ssh-agent を実行しようとするでしょう。これのために、識別情報の管理がよりややこしくなることがあります。
メモ
gpg-agent~/.gnupg/gpg-agent.conf でユーザ単位で設定することができます。
ヒント
オプションは man gpg-agent 内の OPTIONS の項目下で文書化されています。先頭のダッシュは無視してください。
ファイル ~/.gnupg/gpg-agent.conf30 分の有効期限付きで /usr/bin/pinentry を使用するように gpg-agent を設定する
pinentry-program /usr/bin/pinentry
no-grab
default-cache-ttl 1800
ファイル ~/.gnupg/gpg-agent.confssh-agent サポートを付けて gpg-agent を設定する
enable-ssh-support

gpg-agent を使用するように GPG を設定する必要があります。これは以下によって実現できます:

ファイル ~/.gnupg/gpg.confGPG エージェントを使うための GnuPG の設定
use-agent
重要
use-agent オプションが設定されていないと、GPG はスマートカード pinentry のための入力を促すことができません。

設定の変更は以下で再読み込みできます:

user $gpg-connect-agent reloadagent /bye

SSH のために gpg-agent を使用する

SSH のために gpg-agent の SSH ソケットを使用するには、SSH_AUTH_SOCK 環境変数が gpg-agent によって作成されたソケットを指すように変更されていなくてはなりません。これは以下によって実現できます:

ファイル ~/.bashrcSSH_AUTH_SOCKET を gpg-agent ソケットにエクスポートする
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)

gpg-agent は、認証鍵のキーグリップが ~/.gnupg/sshcontrol に存在しない限り、その認証鍵を使用しません。

キーグリップは以下を実行することで取得できます:

user $gpg -K --with-keygrip
/home/larry/.gnupg/pubring.kbx
-----------------------------
pub   rsa4096 2023-04-21 [SC]
      1C1D353237DC641FE85FD636EF388174179C0E55
      Keygrip = D6DC8A04F02651E47835F0148939ABC1A1000389
uid           [  究極  ] larry (test key) <larry@gentoo.org>
sub   rsa4096 2023-04-21 [E]
      Keygrip = F2B7E9F47E394C21FA5E2A5510047E0A28F45D62
sub   rsa4096 2023-04-21 [A]
      Keygrip = 0CA0F1710A5837577FB10177355BE575A425D76D

[A] 鍵が認証鍵で、ssh ログインのために使用されます。

ファイル ~/.gnupg/sshcontrol指定された GPG 鍵を SSH 認証のために使用することを gpg-agent に許可する
0CA0F1710A5837577FB10177355BE575A425D76D

SSH 上で GPG エージェントをフォワーディングする

警告
この手順は潜在的な危険性を含んでいます。GPG エージェントソケットのフォワーディングは、信頼できる環境内でのみ行うべきです。
重要
リモートホストは対応する公開鍵を持つ必要があります。鍵を手動で転送するか、次のコマンドを使用してリモートのキーリングをローカルのもので置き換えることで、これを行えます:
user $scp ~/.gnupg/pubring.kbx remotehost:.gnupg/pubring.kbx

まず、リモートサーバの SSH デーモンを設定し、リモートフォワーディングがローカルファイルを上書きできるようにする必要があります:

ファイル /etc/ssh/sshd_config
StreamLocalBindUnlink yes

次に、両方のシステムで GPG エージェントソケットのパスを取得する必要があります:

user $gpgconf --list-dirs
sysconfdir:/etc/gnupg
bindir:/usr/bin
libexecdir:/usr/libexec
libdir:/usr/lib64/gnupg
datadir:/usr/share/gnupg
localedir:/usr/share/locale
socketdir:/run/user/1000/gnupg
dirmngr-socket:/run/user/1000/gnupg/S.dirmngr
agent-ssh-socket:/run/user/1000/gnupg/S.gpg-agent.ssh
agent-extra-socket:/run/user/1000/gnupg/S.gpg-agent.extra
agent-browser-socket:/run/user/1000/gnupg/S.gpg-agent.browser
agent-socket:/run/user/1000/gnupg/S.gpg-agent
homedir:/home/larry/.gnupg
メモ
ローカルシステムの S.gpg-agent.extra をリモートシステムの S.gpg-agent ソケットにフォワーディングします。

GPG エージェントソケットを自動的にフォワーディングするように SSH を設定することができます:

ファイル ~/.ssh/configGPG エージェントソケットを SSH 上で自動的にフォワーディングする
host remoteHost
    HostName 1.2.3.4
    RemoteForward /run/user/1000/gnupg/S.gpg-agent:/run/user/1000/gnupg/S.gpg-agent.extra

SSH ログインのために pinentry を変更する

SSH 上で gpg-agent を使用する場合、グラフィカルな pinentry パスワードプロンプトはログインシェルに表示されないでしょう。これにより、パスワードを必要とするすべての操作が失敗してしまいます。その場合は以下のスニペットを ~/.bash_profile に追加することができます。これは gpg-agent に対して、現在のシェル内の curses プロンプトを使用するように命令します。このスニペットはローカルシェルを使用するときの pinentry 設定には影響しません。

ファイル ~/.bash_profileSSH ログインのために curses pinentry を使用する
export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

gpg-agent の自動起動

汎用的な方法

GPG エージェントを自動起動するための汎用的な方法は、gpgconf --launch gpg-agent をシェルの rc ファイルに追加することです。

ファイル ~/.bashrcシェル初期起動時に gpg-agent を自動起動する
gpgconf --launch gpg-agent

KDE

KDE は以下のファイルを使用して GPG エージェントを管理します:

  1. /etc/xdg/plasma-workspace/env/10-agent-startup.sh - システムのエージェント開始設定
  2. /etc/xdg/plasma-workspace/env/10-agent-shutdown.sh - システムのエージェント終了設定
  3. ~/.config/plasma-workspace/env/gpg-agent.sh - ユーザの開始設定
  4. ~/.config/plasma-workspace/shutdown/gpg-agent.sh - ユーザの終了設定


システム設定は GPG エージェントのためのテンプレートを含んでいるはずです。以下の内容のコメントを解除することで有効化できます。単一のユーザに対して有効化するには、この設定をユーザの設定に追加する必要があります。

ファイル /etc/xdg/plasma-workspace/env/10-agent-startup.shPlasma に gpg-agent を自動起動させる
if [ -x /usr/bin/gpg-agent ]; then
    if [ -x /usr/bin/gpgconf ]; then
        gpgconf --launch gpg-agent >/dev/null 2>&1
        if [ $? = 2 ]; then
            eval "$(/usr/bin/gpg-agent --enable-ssh-support --daemon)"
        fi
    fi
fi
ファイル /etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.shPlasma に gpg-agent をシャットダウンさせる
if [ -n "${GPG_AGENT_INFO}" ]; then
    kill $(echo ${GPG_AGENT_INFO} | cut -d':' -f 2) >/dev/null 2>&1
fi

使い方

いくつかの GPG コマンドに共通して適用される引数として、以下のものがあります:

  • --armor - base64 としてエンコードされたデータに、PGP ヘッダおよびフッタを追加します。標準出力に出力するときに有用です。
  • --local-user (-u) - 署名に使用する鍵を指定します。
  • --output (-o) - 出力ファイル。指定されない場合は標準出力が使用されます。
メモ
引数の順序は重要です。一般的に --armor は最初の引数として使用するべきです。

署名

署名は、既知の公開鍵に紐づいた秘密鍵を持つ誰かがデータに署名したことを検証します。鍵の所有者が安全に鍵を保持していると信じるならば、彼らがその鍵を使って署名したメッセージを送信したことを、合理的に確信することができます。署名は暗号化と併用することで、意図した受信者だけがメッセージを読めることを確実にすることができ、さらにメッセージが正しい送信元から来たことを検証できます。

データは --sign (-s) で署名できます:

user $gpg --armor --sign --local-user larry
pgp signed
-----BEGIN PGP MESSAGE-----
 
owGbwMvMwCG2NOn+BFvu7d8YTwsmMaR4LjMpSC9QKM5Mz0tN4epoZ2EQ42DQF1Nk
EWh4VHxmDvfPzYs0XsG0sDIB1VsKyuQkFhVVOqSn5pXk5+vlF6UzcHEKwNQ8mc/w
P1f2StrZVbZqfdX7fKY8XPLrVZ3/vnKmh5r7C+epci2amMnIMHX3/W/CQoW+PDsu
+B1wPaHWWPiWj+ueWvQVp8IZ1fNq+AE=
=MWu8
-----END PGP MESSAGE-----
重要
これ単独ではデータは暗号化されません。

クリア署名

平文のデータは、データの送信者または発行者を検証するために署名することができます。--clear-sign--sign と異なり、メッセージを平文のまま保持したうえで、その下に署名を配置します:

user $gpg --clear-sign --local-user Larry
clear signed data!
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
 
clear signed data!
-----BEGIN PGP SIGNATURE-----
 
iIcEARYIAC8WIQQQgOJzzJwL+bOiKOqlYt+QPQu39gUCZEmlbhEcbGFycnlAZ2Vu
dG9vLm9yZwAKCRClYt+QPQu39oxbAQDk5mEpEUXv+d9Wk7zOIzHzTMfgomzQvqPf
XEzq3mjiMAEAm7QpY28vI6xBAJlCebveJ37U5iqhmQKCmDGDRjiMdA4=
=VAr8
-----END PGP SIGNATURE-----
メモ
--clear-sign はデータを armored 形式で出力することを含意します。

分遣署名

GPG を使用して、署名をデータ自身から分離したうえでデータに署名することができます。署名ファイルはデータとともに配布することができます。これは --detach-sig を使用することで実現できます。以下のコマンドは、ファイル sign-me に対する署名を含む sign-me.sig という名前のファイルを出力するでしょう:

user $gpg --armor --detach-sig --local-user Larry --output sign-me.sig sign-me

対称暗号化

GPG の対称暗号化を使用して、その暗号鍵を所有する人ならだれでもアクセスできるようにデータを暗号化することができます。

利用可能な暗号アルゴリズムは、gpg --version暗号方式: の部分で確認することができます:

user $gpg --version
gpg (GnuPG) 2.2.40
libgcrypt 1.10.1
Copyright (C) 2022 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /root/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

A cipher type can be selected with --cipher-algo, and symmetric encryption can be used with --symmetric (-c):

user $gpg --armor --symmetric --cipher-algo AES256
aes256 ciphered data
-----BEGIN PGP MESSAGE-----
 
jA0ECQMCKBC2RERjZ1b/0koBrujXapFyEqaNhnLYAdfQz8xNM9IQtTwcahJau6Ri
DLDSlQJk2UBafpmF0TaiPRyaoGQD8BovK/vRZ9Nw72tTOV0cT7a9eZ1R3w==
=4hhX
-----END PGP MESSAGE-----

署名付き

Anyone who decrypts symmetrically encrypted data will not be able to verify the authenticity of it without a signature or external (non-GPG) methods being used. To sign this symmetrically encrypted data, use:

user $gpg --armor --local-user Larry --sign --symmetric --cipher-algo AES256
gpg: AES256 encryption will be used
aes256 ciphered and signed data 
-----BEGIN PGP MESSAGE-----
 
jA0ECQMCwNNr5efDiqr/0sAkAZo1EjWD3rsGERIdttMtxT4jaXGzUMKYNXMFhpbE
zcmSg6WfvFDFjwp3mbOLPF16WjwXS3tzNVeYPdKeqFNY6/K2FpkCIFFjNIYhnE1d
MnjaLeavNw2hxi5rtAhiyuPB5uRqjNFqvOgqon26WV7ZMTrbgR5AsJtE+U0+Ag/8
Yy/gUmNKxMIb4Y4E534oM9Kw2ik0ANnYOBRM4XmH935PBZa/Z/rMQkGLe1vN0GBs
wDnC/XuSkqK4lWg46AvcyyrXvv7pnNiRd6HpTIBp9DGrllk3+OQNvueJW18QDzkU
7L/lV3gq
=2XP9
-----END PGP MESSAGE-----

非対称 (公開鍵) 暗号化

GPG is generally used to perform asymmetric cryptography.

To send a message to a recipient, first view available public keys with gpg -k:

user $gpg -k
/root/.gnupg/pubring.kbx
------------------------
pub   ed25519 2023-04-25 [SC]
      1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
uid           [ultimate] Larry (wiki test key) <larry@gentoo.org>
sub   cv25519 2023-04-25 [E]
sub   ed25519 2023-04-25 [A]
 
pub   rsa4096 2018-05-28 [C] [expires: 2024-07-01]
      EF9538C9E8E64311A52CDEDFA13D0EF1914E7A72
uid           [  full  ] Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>
sub   rsa2048 2018-05-28 [S] [expires: 2024-07-01]
 
pub   rsa4096 2011-11-25 [C] [expires: 2024-07-01]
      DCD05B71EAB94199527F44ACDB6B8C1F96D8BF6D
uid           [ unknown] Gentoo ebuild repository signing key (Automated Signing Key) <infrastructure@gentoo.org>
uid           [ unknown] Gentoo Portage Snapshot Signing Key (Automated Signing Key)
sub   rsa4096 2011-11-25 [S] [expires: 2024-07-01]
 
pub   dsa1024 2004-07-20 [SC] [expires: 2024-01-01]
      D99EAC7379A850BCE47DA5F29E6438C817072058
uid           [ unknown] Gentoo Linux Release Engineering (Gentoo Linux Release Signing Key) <releng@gentoo.org>
sub   elg2048 2004-07-20 [E] [expires: 2024-01-01]
 
pub   rsa2048 2019-04-01 [C] [expires: 2024-07-01]
      ABD00913019D6354BA1D9A132839FE0D796198B1
uid           [ unknown] Gentoo Authority Key L1 <openpgp-auth+l1@gentoo.org>
 
pub   rsa2048 2019-04-01 [C] [expires: 2024-07-01]
      2C13823B8237310FA213034930D132FF0FF50EEB
uid           [ unknown] Gentoo Authority Key L2 for Developers <openpgp-auth+l2-dev@gentoo.org>
 
pub   rsa2048 2019-04-01 [C] [expires: 2024-07-01]
      18F703D702B1B9591373148C55D3238EC050396E
uid           [ unknown] Gentoo Authority Key L2 for Services <openpgp-auth+l2-srv@gentoo.org>
 
pub   rsa4096 2009-08-25 [SC] [expires: 2024-07-01]
      13EBBDBEDE7A12775DFDB1BABB572E0E2D182910
uid           [ unknown] Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>
sub   rsa2048 2019-02-23 [S] [expires: 2024-07-01]
 
pub   rsa4096 2022-07-08 [C] [expires: 2024-07-07]
      BA9A03F6BE9C0CA405C17BFE079BA8929AF1275A
uid           [ unknown] GLSAMaker <glsamaker@gentoo.org>
sub   rsa4096 2022-07-08 [S] [expires: 2024-07-07]
sub   rsa4096 2022-07-08 [E] [expires: 2024-07-07]

To encrypt a message to Larry, use --encrypt (-e) with Larry as the recipient:

user $gpg --armor --recipient Larry --encrypt
message for larry
-----BEGIN PGP MESSAGE-----
 
hF4DcDc8iMSeU1oSAQdA41y+LHzG8QyGl5U9gfVB/nywTqcDv2GdvLp/PIXT21Iw
GRj48Z13SNkkTckl9igbM62u6CFqxyd4OiM8Vl9QCpUfMgIxVRrY4AP4HldBQhyM
0k0Bbsccx5iesRLQA9DjbVDf3AU1sJ+Y3f2LBx3RsU7umIm6fhH87iY6ktgzUWhj
1LgJtSN/FBfVFFLh6IaqaN4e1NFrtnLqo9kqplfUQQ==
=E5ym
-----END PGP MESSAGE-----<pre>

署名付き

This message can also be signed, so the recipient can verify the sender:

user $gpg --armor --local-user Larry --sign --recipient Larry --encrypt
signed message to larry from larry :)
-----BEGIN PGP MESSAGE-----
 
hF4DcDc8iMSeU1oSAQdAVq/Jzu/ckb41+52QQJ74JU0EG6xySBmH/Bgztotv8Rsw
msrObF+goxNUhmvDmrIhJsovddW0L2s672wcfyxEJurq6hhq5FwZIqNSaj7nTQe/
0sAqAcILx2edUsx087TOSfoPgxSOIsq/K9G6w6WtYmtYsAInsmrwiDM+vh0x0ZN+
vvCtgNa6XV3KNEGSFaD0g5X5aJJTUhMleTQdR7IZ6+wT7R0tYvdbtHP7amHiUdrm
ZXhLPYxjFvh1odYkEL64ESo6AjvPB+7NzgrrXXhrLG2ahypWeVsCJmxmutdfOO36
eXFVXvUYx5RvspCUBR5tA7A0Yj3yaMjIZQ6pMYeYPnB0bjlYa3DNb4uAlkjuNC7h
zUxbq6WfUcHzH6wVvsRhTGiRXw3IwDPelo7IfyDitxMQeRMh13A9XRg3kIPY
=vY0g
-----END PGP MESSAGE-----

署名の検証

署名されたデータの署名を検証することは非常に重要です。これが行われていないと、データの送信者は検証されないままです。検証は一般的に --verify フラグを使用して行われます:

user $gpg --verify
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
 
clear signed data!
-----BEGIN PGP SIGNATURE-----
 
iIcEARYIAC8WIQQQgOJzzJwL+bOiKOqlYt+QPQu39gUCZEmlbhEcbGFycnlAZ2Vu
dG9vLm9yZwAKCRClYt+QPQu39oxbAQDk5mEpEUXv+d9Wk7zOIzHzTMfgomzQvqPf
XEzq3mjiMAEAm7QpY28vI6xBAJlCebveJ37U5iqhmQKCmDGDRjiMdA4=
=VAr8
-----END PGP SIGNATURE-----gpg: Signature made Wed Apr 26 22:27:58 2023 UTC
gpg:                using EDDSA key 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
gpg:                issuer "larry@gentoo.org"
gpg: Good signature from "Larry (wiki test key) <larry@gentoo.org>" [ultimate]

分遣署名

分遣署名の例を使用すれば、ファイル sign-me は以下を実行することで検証できます:

user $gpg --verify sign-me.sig sign-me
gpg: Signature made Wed Apr 26 23:25:43 2023 UTC
gpg:                using EDDSA key 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
gpg:                issuer "larry@gentoo.org"
gpg: Good signature from "Larry (wiki test key) <larry@gentoo.org>" [ultimate]

復号

GPG でデータを復号するための方法は、非対称でも対称でも同じで、--decrypt (-d) フラグを使用します:

上の例を使用すれば:

user $gpg --decrypt
-----BEGIN PGP MESSAGE-----
 
jA0ECQMCKBC2RERjZ1b/0koBrujXapFyEqaNhnLYAdfQz8xNM9IQtTwcahJau6Ri
DLDSlQJk2UBafpmF0TaiPRyaoGQD8BovK/vRZ9Nw72tTOV0cT7a9eZ1R3w==
=4hhX
-----END PGP MESSAGE-----gpg: AES256.CFB encrypted data
gpg: encrypted with 1 passphrase
aes256 ciphered data
user $gpg --decrypt
-----BEGIN PGP MESSAGE-----
 
jA0ECQMCwNNr5efDiqr/0sAkAZo1EjWD3rsGERIdttMtxT4jaXGzUMKYNXMFhpbE
zcmSg6WfvFDFjwp3mbOLPF16WjwXS3tzNVeYPdKeqFNY6/K2FpkCIFFjNIYhnE1d
MnjaLeavNw2hxi5rtAhiyuPB5uRqjNFqvOgqon26WV7ZMTrbgR5AsJtE+U0+Ag/8
Yy/gUmNKxMIb4Y4E534oM9Kw2ik0ANnYOBRM4XmH935PBZa/Z/rMQkGLe1vN0GBs
wDnC/XuSkqK4lWg46AvcyyrXvv7pnNiRd6HpTIBp9DGrllk3+OQNvueJW18QDzkU
7L/lV3gq
=2XP9
-----END PGP MESSAGE-----gpg: AES256.CFB encrypted data
gpg: encrypted with 1 passphrase
aes256 ciphered and signed data
gpg: Signature made Wed Apr 26 22:39:14 2023 UTC
gpg:                using EDDSA key 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
gpg:                issuer "larry@gentoo.org"
gpg: Good signature from "Larry (wiki test key) <larry@gentoo.org>" [ultimate]
user $gpg -d
-----BEGIN PGP MESSAGE-----
 
hF4DcDc8iMSeU1oSAQdAVq/Jzu/ckb41+52QQJ74JU0EG6xySBmH/Bgztotv8Rsw
msrObF+goxNUhmvDmrIhJsovddW0L2s672wcfyxEJurq6hhq5FwZIqNSaj7nTQe/
0sAqAcILx2edUsx087TOSfoPgxSOIsq/K9G6w6WtYmtYsAInsmrwiDM+vh0x0ZN+
vvCtgNa6XV3KNEGSFaD0g5X5aJJTUhMleTQdR7IZ6+wT7R0tYvdbtHP7amHiUdrm
ZXhLPYxjFvh1odYkEL64ESo6AjvPB+7NzgrrXXhrLG2ahypWeVsCJmxmutdfOO36
eXFVXvUYx5RvspCUBR5tA7A0Yj3yaMjIZQ6pMYeYPnB0bjlYa3DNb4uAlkjuNC7h
zUxbq6WfUcHzH6wVvsRhTGiRXw3IwDPelo7IfyDitxMQeRMh13A9XRg3kIPY
=vY0g
-----END PGP MESSAGE-----
gpg: encrypted with 255-bit ECDH key, ID 70373C88C49E535A, created 2023-04-25
      "Larry (wiki test key) <larry@gentoo.org>"
signed message to larry from larry :)
gpg: Signature made Wed Apr 26 22:46:11 2023 UTC
gpg:                using EDDSA key 1080E273CC9C0BF9B3A228EAA562DF903D0BB7F6
gpg:                issuer "larry@gentoo.org"
gpg: Good signature from "Larry (wiki test key) <larry@gentoo.org>" [ultimate]

GnuPG インターフェース

メモ
S/MIME is more commonly used/supported than GPG for emails, but there is not harm in using GPG (other than it not integrating with Microsoft services)

Seahorse

Seahorse (app-crypt/seahorse) aims to be a GnuPG GUI interface for the GNOME desktop. The software has been evolving fast, but it still lacks many important features that can be found in Kgpg or the command line version.

外部資料


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Gustavo Felisberto, John P. Davis,
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.