「GnuPG」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(未訳部分の翻訳&削除された翻訳の復活)
(翻訳続行)
397行目: 397行目:
 
このコマンドで {{ic|/home/user1/.gnupg}} と {{ic|/home/user2/.gnupg}} が作成されスケルトンディレクトリからファイルがコピーされます。既に GnuPG ホームディレクトリが存在するユーザーは無視されます。
 
このコマンドで {{ic|/home/user1/.gnupg}} と {{ic|/home/user2/.gnupg}} が作成されスケルトンディレクトリからファイルがコピーされます。既に GnuPG ホームディレクトリが存在するユーザーは無視されます。
   
=== Revoking a key ===
+
=== 鍵の無効化 ===
   
 
{{Warning|
 
{{Warning|
  +
*無効化証明書にアクセスできれば誰でも鍵を無効化して、利用できなくすることができてしまいます。
*Anybody having access to your revocation certificate can revoke your key, rendering it useless.
 
  +
*鍵を無効化するのは、鍵が解読されたり消失したり、あるいはパスフレーズを忘れた場合にのみ行なってください。}}
*Key revocation should only be performed if your key is compromised or lost, or you forget your passphrase.}}
 
   
  +
新しい鍵を生成すると無効化証明書が自動的に生成されます。ユーザーが手動で後から生成することも可能です。無効化証明書は {{ic|~/.gnupg/openpgp-revocs.d/}} に存在します。証明書のファイル名は無効化する鍵のフィンガープリントになります。
Revocation certificates are automatically generated for newly generated keys, although one can be generated manually by the user later. These are located at {{ic|~/.gnupg/openpgp-revocs.d/}}. The filename of the certificate is the fingerprint of the key it will revoke.
 
   
  +
鍵を無効化したい場合、無効化証明書をインポートするだけです:
To revoke your key, simply import the revocation certificate:
 
   
 
$ gpg --import ''<fingerprint>''.rev
 
$ gpg --import ''<fingerprint>''.rev
   
  +
そして鍵サーバーをアップデート:
Now update the keyserver:
 
   
 
$ gpg --keyserver subkeys.pgp.net --send ''<userid>''
 
$ gpg --keyserver subkeys.pgp.net --send ''<userid>''
415行目: 415行目:
 
=== 信頼モデルの変更 ===
 
=== 信頼モデルの変更 ===
   
By default GnuPG uses the [[Wikipedia:Web of Trust|Web of Trust]] as the trust model. You can change this to [[Wikipedia::Trust on First|Trust on First]] Use by adding {{ic|1=--trust-model=tofu}} when adding a key or adding this option to your GnuPG configuration file. More details are in [https://lists.gnupg.org/pipermail/gnupg-devel/2015-October/030341.html this email to the GnuPG list].
+
デフォルトでは GnuPG は信頼モデルとして [[Wikipedia:Web of Trust|Web of Trust]] を使います。Web of Trust から [[Wikipedia:Trust on First|Trust on First]] に変更することが可能です。鍵を追加するときに {{ic|1=--trust-model=tofu}} を追加するか GnuPG の設定ファイルにオプションを追加してください。詳細は [https://lists.gnupg.org/pipermail/gnupg-devel/2015-October/030341.html GnuPG メーリングリストのメール] を参照。
   
 
=== 受取人の id を全て隠す ===
 
=== 受取人の id を全て隠す ===
   
  +
デフォルトでは暗号メッセージには受取人の鍵 ID が含まれます。{{ic|hidden-recipient ''<user-id>''}} を使うことで暗号化するときに ID は削除することが可能です。全ての受取人で ID を削除するには設定ファイルに {{ic|throw-keyids}} を追加してください。この設定によってメッセージの受取人を隠すことができ、トラフィックの解析に対抗することができます (ソーシャルエンジニアリングを使うことでメッセージを復号化できてしまえば誰が受取人なのか確認される可能性があります)。欠点としては、暗号鍵を全て試すことになるので復号化が遅くなります ({{ic|--try-secret-key ''<user-id>''}})。
By default the recipient's key ID is in the encrypted message. This can be removed at encryption time for a recipient by using {{ic|hidden-recipient ''<user-id>''}}. To remove it for all recipients add {{ic|throw-keyids}} to your configuration file. This helps to hide the receivers of the message and is a limited countermeasure against traffic analysis. (Using a little social engineering anyone who is able to decrypt the message can check whether one of the other recipients is the one he suspects.) On the receiving side, it may slow down the decryption process because all available secret keys must be tried (''e.g.'' with {{ic|--try-secret-key ''<user-id>''}}).
 
   
 
=== キーサインパーティで caff を使う ===
 
=== キーサインパーティで caff を使う ===
433行目: 433行目:
 
== トラブルシューティング ==
 
== トラブルシューティング ==
   
=== Make it work behind an http proxy ===
+
=== http プロキシを使う ===
 
2.1.9 から http プロキシのオプションは以下のように設定できます:
 
2.1.9 から http プロキシのオプションは以下のように設定できます:
   
468行目: 468行目:
 
=== KGpg 設定のパーミッション ===
 
=== KGpg 設定のパーミッション ===
   
There have been issues with {{Pkg|kdeutils-kgpg}} being able to access the {{ic|~/.gnupg/}} options. One issue might be a result of a deprecated ''options'' file, see the [https://bugs.kde.org/show_bug.cgi?id=290221 bug] report.
+
{{Pkg|kdeutils-kgpg}} には {{ic|~/.gnupg/}} のオプションが使えないという問題がありました。非推奨となった ''options'' ファイルが原因です。[https://bugs.kde.org/show_bug.cgi?id=290221 バグ] レポートを参照してください。
   
Another user reported that ''KGpg'' failed to start until the {{ic|~/.gnupg}} folder is set to {{ic|drwxr-xr-x}} permissions. If you require this work-around, ensure that the directory contents retain {{ic|-rw-------}} permissions! Further, report it as a bug to the [https://bugs.kde.org/buglist.cgi?quicksearch=kgpg developers].
+
また、{{ic|~/.gnupg}} フォルダのパーミッションを {{ic|drwxr-xr-x}} に設定しないと ''KGpg'' が起動しないという報告もあります。パーミッションを変更したときは、ディレクトリの中身のパーミッションを {{ic|-rw-------}} にしてください。さらに、バグとして [https://bugs.kde.org/buglist.cgi?quicksearch=kgpg 開発者] に報告してください。
   
 
=== gnome-keyring と gpg-agent が衝突する ===
 
=== gnome-keyring と gpg-agent が衝突する ===

2016年1月26日 (火) 21:03時点における版

公式サイト によれば:

GnuPG は RFC4880 (別名 PGP) で定義される OpenPGP 標準の完全でフリーな実装です。GnuPG を使うことでデータや通信を暗号化したり署名することができます。多目的の鍵管理システムであり、あらゆる種類の公開鍵ディレクトリのアクセスモジュールです。GnuPG (またの名を GPG) は他のアプリケーションとの簡単に連携できる機能を備えたコマンドラインツールです。豊富なアプリケーションとライブラリが利用可能です。GnuPG のバージョン2は S/MIME と ssh のサポートも含んでいます。

インストール

gnupg をインストールしてください。

gnupg をインストールすると、GnuPG がパスフレーズエントリに使用するシンプルな PIN やパスフレーズエントリダイアログのコレクションである pinentry もインストールされます。pinentry はシンボリックリンク /usr/bin/pinentry によって決められ、デフォルトでは /usr/bin/pinentry-gtk-2 になります。

グラフィカルフロントエンドや GnuPG と連携するプログラムを使いたい場合はアプリケーション一覧/セキュリティ#暗号化, 署名, ステガノグラフィーを参照してください。

環境変数

GNUPGHOME

$GNUPGHOME は全ての設定ファイルを保存するディレクトリを指定するのに GnuPG によって使われます。デフォルトでは $GNUPGHOME は設定されておらず、代わりに $HOME が使われます。そのためインストール直後は ~/.gnupg ディレクトリが確認できます。スタートアップファイルに次の行を記述することでデフォルト設定を変更できます:

export GNUPGHOME="/path/to/directory"
ノート: デフォルトでは、gnupg ディレクトリのパーミッション700 に設定されており、ディレクトリのファイルのパーミッションは 600 に設定されています。ファイルの読み書きやアクセスの権限を持っているのはディレクトリの所有者だけです (r,w,x)。これはセキュリティ上の理由で設定されていることなので変更してはいけません。ディレクトリやファイルがこのセキュリティ対策に従っていない場合、ファイルやホームディレクトリのパーミッションが安全ではないという警告が表示されます。

設定ファイル

デフォルトは ~/.gnupg/gpg.conf~/.gnupg/dirmngr.conf です。デフォルトの場所を変更したい場合は、$ gpg --homedir path/to/file と gpg を実行するか $GNUPGHOME 変数を使って下さい。どんな長いオプションもこのファイルに追加します。2つのダッシュを書かないで、オプションや必要な引数の名前を書いて下さい。スケルトンファイルは /usr/share/gnupgl にあります。gpg がなんらかの操作のため最初に起動されたとき、~/.gnupg が存在しなければこれらのファイルが ~/.gnupg にコピーされます。#参照 に他の例があります。

使い方

ノート:

鍵の作成

秘密鍵を生成するにはターミナルに次を入力:

$ gpg --full-gen-key
ヒント: --expert を使うことで他の暗号を利用することができます (楕円曲線暗号など)。

いくつか質問がきかれます。一般的に、ほとんどのユーザーは RSA (署名のみ) と RSA (暗号化のみ) の両方の鍵が必要になります。鍵長は2048ビットで十分です。4096ビットを使ったところで "大した効果はありませんし、無駄に時間がかかるようになるだけです"

副鍵の有効期限の設定は技術的には必須ではありませんが、設定することは悪くありません。標準的なユーザーなら、1年間で十分でしょう。たとえ鍵束へのアクセスを失っても、他の人が有効でないことを知ることができるようになります。鍵を作成した後、新しい鍵を再発行しなくても満了日は延長することができます。

安全なパスフレーズを選ぶようにしてください (セキュリティ#パスワードの管理を参照)。

秘密鍵のバックアップ

秘密鍵をバックアップするには:

$ gpg --export-secret-keys --armor <user-id> > privkey.asc

秘密鍵はロックされたコンテナや暗号化されたドライブなど安全な場所に置いてください。

警告: 上記のエクスポートされたファイルにアクセスできる人は誰でも、パスフレーズを知らなくてもあなたのふりをして文書を暗号化したり署名したりできます。

公開鍵のエクスポート

他の人があなたに暗号化したメッセージを送れるようにするには、彼らがあなたの公開鍵を知っている必要があります。

(メールで送る場合などのために) ASCII 版の公開鍵を生成するには:

$ gpg --armor --output public.key --export <user-id>

あるいは、鍵サーバーで鍵を共有する方法もあります。

ヒント: --no-emit-version を使うか、これを設定ファイルに書くことでバージョン番号の表示を抑制できます。

鍵のインポート

メッセージを暗号化して他の人に送るには、彼らの公開鍵が必要です。公開鍵を自分の公開鍵リングにインポートするには:

$ gpg --import public.key

あるいは、鍵サーバーで公開鍵を見つけます。

鍵サーバーを使用する

自分の公開鍵を公共の PGP 鍵サーバーに登録することで、他の人があなたに直接連絡することなしにあなたの鍵を入手できるようになります。

$ gpg --send-keys <key-id>

鍵サーバーから鍵をインポートするには:

$ gpg --recv-keys <key-id>
警告: 誰でも鍵サーバーに鍵を送ることができます。そのため、ダウンロードした鍵が本当にその人のものであると信用してはいけません。入手した鍵の指紋を、持ち主が別の場所(ブログ、サイト、メール・電話で連絡するなど)で公開している指紋と比較してその鍵の真正性を確かめるべきです。複数の情報源を使うことでその鍵の信頼性は増します。Wikipedia:Public key fingerprint を参照。
ヒント:

暗号化と復号化

暗号化や復号化をするときは複数の秘密鍵を使用することが可能です。複数の鍵を使うときは使用する鍵を選択する必要があります。-u <user-id> オプションや --local-user <user-id> オプションを使うことで選択できます。このオプションを使うとデフォルトの鍵を使用する代わりに指定された鍵を使用します。

(テキストでメッセージをコピー&ペーストするのに適している) ASCII armor を使ってファイルを暗号化するには、次を使用:

$ gpg --encrypt --armor secret.txt

単に暗号化だけしたいときは --armor は不要です。

ヒント:
  • 受取人を変更したい場合は -r <user-id> (または --recipient <user-id>) オプションで変更できます。
  • 暗号メッセージに受取人の鍵 ID を入れたくないときは --recipient のかわりに -R <user-id> または --hidden-recipient <user-id> を追加してください。メッセージの受取人を隠蔽して、トラフィックの解析に対する対抗策になります。
  • バージョン番号を出力したくないときは --no-emit-version を追加してください。または設定ファイルに同じ設定を追加してください。
ノート: gnupg を使えば機密文書を暗号化できますが、一度に複数のファイルを暗号化することはできません。ディレクトリやファイルシステム全体を暗号化したいときは、TrueCryptEncFS などを使用するか、tarball にファイルをまとめて暗号化すると良いでしょう。

ファイルを復号化するには、次を使用:

$ gpg --decrypt secret.txt.asc

パスフレーズの入力が求められます。復号化するには送信者の公開鍵をインポートしてある必要があります。

鍵の管理

鍵の編集

  • gpg --edit-key <user-id> コマンドを実行するとメニューが表示され、鍵管理に関連するほとんどの作業を行うことができます。以下は満了日を設定する例です:
$ gpg --edit-key <user-id>
> key number
> expire yyyy-mm-dd
> save
> quit

便利なコマンド:

> passwd       # change the passphrase
> clean        # compact any user ID that is no longer usable (e.g revoked or expired)
> revkey       # revoke a key
> addkey       # add a subkey to this key
> expire       # change the key expiration time
  • 公開鍵の ASCII バージョンを生成 (例: メールなどで配るため):
$ gpg --armor --output public.key --export <user-id>
  • PGP 公開鍵サーバーに鍵を登録して、他の人があなたに直接連絡しなくても鍵を取得できるようにする:
$ gpg  --keyserver pgp.mit.edu --send-keys <key-id>
  • ユーザー Bob あてに署名と暗号化:
$ gpg -se -r Bob file
  • クリアテキスト署名を作成:
$ gpg --clearsign file

副鍵のエクスポート

複数のデバイスで同じ鍵を使い回す場合、マスター鍵を分離させて、セキュリティが低いシステムでは暗号化に必要な副鍵だけを使いたいという状況が考えられます。

まず、エクスポートしたい副鍵を確認してください:

$ gpg -K

エクスポートする副鍵だけを選択:

$ gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.gpg
警告: ! を追加するのを忘れると、全ての副鍵がエクスポートされます。

ここで作業を終えても良いですが、パスフレーズの変更もしておくと安全です。一時フォルダに鍵をインポートします:

$ gpg --homedir /tmp/gpg --import /tmp/subkey.gpg
$ gpg --homedir /tmp/gpg --edit-key <user-id>
> passwd
> save
$ gpg --homedir /tmp/gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.altpass.gpg
ノート: マスター鍵が存在しない、また、マスター鍵のパスワードが変更されていないという警告が表示されますが、変更したのは副鍵のパスワードなので無視してかまいません。

これで、他のデバイスで /tmp/subkey.altpass.gpg を使うことができます。

副鍵の使用

警告: 何か特段の事情がないかぎり、有効期限が切れたり無効になった副鍵を削除しないでください。削除してしまうとその副鍵で暗号化したファイルを復号化できなくなってしまいます。満了した、または無効のキーを削除するのは他のユーザーの鍵束を整理するときだけにしてください。

副鍵を設定して一定期間後に満了したら、新しい副鍵を作成できます。他のユーザーが鍵束を更新できるように数週間前に行うようにしましょう。

ノート: 新しい鍵を作成する必要はありません。期限がきて使えなくなっただけだからです。有効期間を延長することができます。
  • 新しい副鍵を作成 (署名と暗号化の鍵の両方)
$ gpg --edit-key <user-id>
> addkey

そして質問に答えて下さい (推奨される設定については前のセクションを参照)。

  • 変更を保存:
> save
  • キーサーバーにアップデート:
$ gpg  --keyserver pgp.mit.edu --send-keys <user-id>
ノート: 満了した副鍵を失効させる必要はありません、また、良い行いとは言えません。しょっちゅう鍵を無効化させているようでしたら、他人はあなたを信用しなくなるかもしれません。

鍵を表示

  • 公開鍵束の鍵:
$ gpg --list-keys
  • 秘密鍵束の鍵:
$ gpg --list-secret-keys

gpg-agent

gpg-agent はキーチェインにパスワードをリクエストしたりキャッシュしたりするのに使われるデーモンです。メールクライアントなど外部のプログラムから GnuPG を利用する場合に便利です。gpg.conf に次の行を追加することで使用できます:

~/.gnupg/gpg.conf
use-agent

この設定によって GnuPG はパスワードが必要になった時にエージェントを使うようになります。ただし、あらかじめエージェントを実行しておく必要があります。エージェントを自動的に起動するには、.xinitrc.bash_profile に以下のエントリを追加してください。$GNUPGHOME を変更していた場合は envfile のパスを忘れずに変更するようにしてください。

~/.bash_profile
envfile="$HOME/.gnupg/gpg-agent.env"
if [[ -e "$envfile" ]] && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
    eval "$(cat "$envfile")"
else
    eval "$(gpg-agent --daemon --enable-ssh-support --write-env-file "$envfile")"
fi
export GPG_AGENT_INFO  # the env file does not contain the export statement
export SSH_AUTH_SOCK   # enable gpg-agent for ssh

その後、セッションを一度ログアウトしてからログインしなおして下さい。gpg-agent が有効になっているか確認:

$ pgrep gpg-agent

設定

gpg-agent は ~/.gnupg/gpg-agent.conf ファイルで設定することができます。設定オプションは man gpg-agent に記載されています。例えば、未使用の鍵の cache ttl を変更することができます:

~/.gnupg/gpg-agent.conf
default-cache-ttl 3600
ヒント: セッションを通してパスフレーズをキャッシュするには、次のコマンドを実行してください:
$ /usr/lib/gnupg/gpg-preset-passphrase --preset XXXXXX

XXXX は鍵輪に置き換えてください。鍵輪の値は gpg --with-keygrip -K を実行することで取得できます。パスフレーズは gpg-agent が再起動されるまで保存されます。default-cache-ttl の値を設定した場合、そちらが優先されます。

エージェントのリロード

設定を変更した後は、gpg-connect-agentRELOADAGENT という文字列をパイプで渡して、エージェントをリロードしてください。

$ echo RELOADAGENT | gpg-connect-agent

シェルに OK と出力されます。

pinentry

最後に、ユーザーにパスワードを尋ねる方法をエージェントに設定する必要があります。gpg-agent の設定ファイルで設定できます。

デフォルトでは gtk のダイアログが使われます。使用できるオプションは info pinentry を見て下さい。ダイアログの実装を変更するには pinentry-program 設定オプションを設定します:

~/.gnupg/gpg-agent.conf

# PIN entry program
# pinentry-program /usr/bin/pinentry-curses
# pinentry-program /usr/bin/pinentry-qt4
# pinentry-program /usr/bin/pinentry-kwallet

pinentry-program /usr/bin/pinentry-gtk-2
ヒント: /usr/bin/pinentry-kwallet を使うには kwalletcli パッケージをインストールする必要があります。

変更を行った後は、gpg-agent をリロードしてください。

systemd ユーザーで gpg-agent を起動

Systemd/ユーザー機能を使ってエージェントを起動することが可能です。

systemd ユニットファイルを作成:

~/.config/systemd/user/gpg-agent.service
[Unit]
Description=GnuPG private key agent
IgnoreOnIsolate=true

[Service]
Type=forking
ExecStart=/usr/bin/gpg-agent --daemon --homedir=%h/.gnupg
ExecStop=/usr/bin/pkill gpg-agent
Restart=on-abort

[Install]
WantedBy=default.target
ノート:
  • GNUPGHOME など、サービスに環境変数を設定する必要があります。詳しくは systemd/ユーザー#環境変数 を見て下さい。
  • gnupg ホームディレクトリが ~/.gnupg の場合、パスを指定する必要はありません。
  • gpg -agent は標準ソケットを使いません。代わりに gnupg のホームディレクトリにある S.gpg-agent という名前のソケットを使います。environment ファイルを読み込んで /tmp に作成されたランダムなソケットのパスを取得するスクリプトは忘れることができます。
  • gpg-agent の SSH 機能を使用している場合 (--enable-ssh-support)、上記の systemd ユニットは使えません。
ヒント: gpg-agent が実行していること、接続を待機していることを確認するには、次のコマンドを実行してください: $ gpg-connect-agent。設定が問題なければ、プロンプトが表示されます (byequit と入力すれば接続が終了します)。

無人のパスフレーズ

GnuPG 2.1.0 から gpg-agent と pinentry の利用が必須になりました。これによって --passphrase-fd 0 コマンドラインオプションによって STDIN からパイプで渡されたパスフレーズの後方互換性が損ねられています。古いリリースと同じような機能を使うには2つのことをする必要があります:

まず、gpg-agent の設定を編集して loopback pinentry モードを許可してください:

~/.gnupg/gpg-agent.conf
allow-loopback-pinentry

gpg-agent プロセスが実行している場合は再起動して変更を適用します。

次に、更新する必要があるアプリケーションに以下のようにコマンドラインパラメータを含めて loopback モードを使用します:

$ gpg --pinentry-mode loopback ...

もしくは、コマンドラインで設定ができない場合、オプションを設定に追加します:

~/.gnupg/gpg.conf
pinentry-mode loopback
ノート: 上流の開発者は gpg.confpinentry-mode loopback を設定すると他の機能が使えなくなる可能性があると示唆しています。出来るかぎりコマンドラインオプションを使うようにして下さい [1]

スマートカード

ノート: pcsclitelibusb-compat をインストールして、pcscd.service サービスを systemd で実行する必要があります。

GnuPG はスマートカードリーダーのインターフェイスとして scdaemon を使います。詳しくは man ページを参照してください。

GnuPG のみ設定

GnuPG ベース以外のカードを使う予定がない場合は、~/.gnupg/scdaemon.confreader-port パラメータを確認してください。'0' が最初に利用できるシリアルポートリーダーを、'32768' (デフォルト) が最初の USB リーダーを示しています。

GnuPG と OpenSC

opensc ドライバーであらゆるスマートカードを使う場合は (例: いろいろな国の ID カード)、GnuPG の設定に注意する必要があります。何も設定をしていないと gpg --card-status を使った時に以下のようなメッセージが表示されることがあります:

gpg: selecting openpgp failed: ec=6.108

デフォルトでは、scdaemon はデバイスに直接接続しようとします。リーダーが他のプロセスによって使用中だとこの接続は失敗します。例えば: OpenSC によって使用される pcscd デーモン。この状況に対処するには、opensc と同じ基盤のドライバーを使って一緒に動作できるようにする必要があります。scdaemon に pcscd を使用させるため、~/.gnupg/scdaemon.conf から reader-port を削除して、libpcsclite.so ライブラリの場所を指定し、ccid を無効化してください:

~/.gnupg/scdaemon.conf
pcsc-driver /usr/lib/libpcsclite.so
card-timeout 5
disable-ccid

OpenSC を使わない場合は man scdaemon をチェックしてください。

Tips and tricks

他のアルゴリズム

強力なアルゴリズムを使用したい場合:

~/.gnupg/gpg.conf
...

personal-digest-preferences SHA512
cert-digest-algo SHA512
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
personal-cipher-preferences TWOFISH CAMELLIA256 AES 3DES

GnuPG の最新版では、デフォルトのアルゴリズムとして SHA256 と AES が使われており、どちらも殆どの場合安全です。しかしながら、2.1 以前の古い GnuPG を使っている場合や、さらに高いセキュリティを求めたい場合、上記のように設定するようにしてください。

パスワードの暗号化

パスワードを暗号化すれば、設定ファイルに平文で書き込まれなくなります。メールのパスワードなどが良い例でしょう。

まずパスワードを記述したファイルを作成してください。パスワードの後に空行を一行だけ追加しておく必要があります。そうしないとファイルを評価するときに gpg がエラーメッセージを返します。

そして次を実行:

$ gpg -e -a -r <user-id> your_password_file

-e は encrypt、-a は armor (ASCII 出力)、-r は受取人のユーザー ID です。

新しく your_password_file.asc ファイルが作られます。

新規ユーザーのデフォルトオプション

新規ユーザーのデフォルトオプションを設定したいときは、/etc/skel/.gnupg/ に設定ファイルを置いて下さい。システムに新しいユーザーが追加されたとき、ここからファイルが GnuPG のホームディレクトリにコピーされます。addgnupghome というシンプルなスクリプトもあり、既存のユーザーに新しい GnuPG ホームディレクトリを作成できます:

# addgnupghome user1 user2

このコマンドで /home/user1/.gnupg/home/user2/.gnupg が作成されスケルトンディレクトリからファイルがコピーされます。既に GnuPG ホームディレクトリが存在するユーザーは無視されます。

鍵の無効化

警告:
  • 無効化証明書にアクセスできれば誰でも鍵を無効化して、利用できなくすることができてしまいます。
  • 鍵を無効化するのは、鍵が解読されたり消失したり、あるいはパスフレーズを忘れた場合にのみ行なってください。

新しい鍵を生成すると無効化証明書が自動的に生成されます。ユーザーが手動で後から生成することも可能です。無効化証明書は ~/.gnupg/openpgp-revocs.d/ に存在します。証明書のファイル名は無効化する鍵のフィンガープリントになります。

鍵を無効化したい場合、無効化証明書をインポートするだけです:

$ gpg --import <fingerprint>.rev

そして鍵サーバーをアップデート:

$ gpg --keyserver subkeys.pgp.net --send <userid>

信頼モデルの変更

デフォルトでは GnuPG は信頼モデルとして Web of Trust を使います。Web of Trust から Trust on First に変更することが可能です。鍵を追加するときに --trust-model=tofu を追加するか GnuPG の設定ファイルにオプションを追加してください。詳細は GnuPG メーリングリストのメール を参照。

受取人の id を全て隠す

デフォルトでは暗号メッセージには受取人の鍵 ID が含まれます。hidden-recipient <user-id> を使うことで暗号化するときに ID は削除することが可能です。全ての受取人で ID を削除するには設定ファイルに throw-keyids を追加してください。この設定によってメッセージの受取人を隠すことができ、トラフィックの解析に対抗することができます (ソーシャルエンジニアリングを使うことでメッセージを復号化できてしまえば誰が受取人なのか確認される可能性があります)。欠点としては、暗号鍵を全て試すことになるので復号化が遅くなります (--try-secret-key <user-id>)。

キーサインパーティで caff を使う

キーサーバーやキーリングにある鍵の正当性をユーザーが確認 (つまり鍵の持ち主が本人であることを確認) できるように、PGP/GPG はいわゆる信頼の輪 ("Web of Trust") を利用しています。信頼の輪を維持するために様々なハッカーイベントが開かれており、キーサインパーティはそのひとつです。Zimmermann-Sassaman 鍵署名プロトコルはキーサインパーティを効果的に行うための方式です。こちら にハウツー記事があります。

キーサインパーティの後、鍵に署名したり所有者に署名を送るのを簡略化するために、caff というツールを使うことができます。AUR のパッケージ caff-svnAUR でインストールすることができ、signing-party-svnAUR パッケージなど他の便利なツールにも付属しています。どちらにせよ、AUR から大量の依存パッケージをインストールすることになります。また、以下のように CPAN からインストールすることも可能です:

cpanm Any::Moose
cpanm GnuPG::Interface

所有者に署名を送信するには MTA が必要です。MTA を設定していない場合、msmtp をインストールして下さい。

トラブルシューティング

http プロキシを使う

2.1.9 から http プロキシのオプションは以下のように設定できます:

$ gpg --keyserver-option http-proxy=HOST:PORT

詳しくは https://bugs.gnupg.org/gnupg/issue1786 を参照。

Not enough random bytes available

鍵を生成するときに、gpg は以下のエラーを表示することがあります:

Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy!

残っているエントロピーを確認するには、カーネルパラメータをチェックしてください:

$ cat /proc/sys/kernel/random/entropy_avail

エントロピーがたくさんある健康的な Linux 環境ならマックスの 4,096 ビットに近い値が返されます。返ってくる値が 200 以下の場合、システムのエントロピーが足りていません。

エントロピー問題を解決するには、メッセージ通りのことをするのがベストです (例: ディスクを動かす、マウスを動かす、wiki を編集する - 何でもエントロピーの生成に繋がります)。それでも問題が解決しない場合、エントロピーを使い果たしているサービスが何なのかチェックして、しばらくそのサービスを停止してみてください。サービスを停止できない場合、乱数生成#高速な RNG を見て下さい。

su

pinentry を使う場合、使用するターミナルデバイス (例: /dev/tty1) の適切なパーミッションが必要です。しかしながら、su (または sudo) を使用すると、所有権は元のユーザーに残り、新しいユーザーにはなくなります。これでは pinentry はたとえ root であっても起動しません。pinentry を使用する (つまりエージェントで gpg を使用する) 前にデバイスのパーミッションを同じ所に変更する必要があります。root で gpg を実行する場合、gpg を使用する直前に所有者を root に変更してください:

# chown root /dev/ttyN  # where N is the current tty

そして gpg を使用した後に元に戻して下さい。おそらく /dev/pts/ と同じのが正しいです。

ノート: The owner of tty must match with the user for which pinentry is running. Being part of the group tty is not enough.

エージェントがファイルの終末についてエラーを表示する

デフォルトの pinentry プログラムは pinentry-gtk-2 であり、D-Bus セッションバスを正しく実行する必要があります。詳しくは一般的なトラブルシューティング#セッションのパーミッションを見て下さい。

もしくは、pinentry-qt を使うこともできます。#pinentry を参照。

KGpg 設定のパーミッション

kdeutils-kgpg には ~/.gnupg/ のオプションが使えないという問題がありました。非推奨となった options ファイルが原因です。バグ レポートを参照してください。

また、~/.gnupg フォルダのパーミッションを drwxr-xr-x に設定しないと KGpg が起動しないという報告もあります。パーミッションを変更したときは、ディレクトリの中身のパーミッションを -rw------- にしてください。さらに、バグとして 開発者 に報告してください。

gnome-keyring と gpg-agent が衝突する

Gnome keyring は GPG エージェントコンポーネントを実装していますが、GnuPG バージョン 2.1 から、GnuPG は GPG_AGENT_INFO 環境変数を無視するようになったため、Gnome keyring を GPG エージェントとして使うことはできません。

ただし、バージョン 0.9.6 から pinentry パッケージには pinentry-gnome3 プログラムが入っています。gpg-agent.conf ファイルに以下のオプションを設定することで pinentry プログラムを利用することが可能です:

pinentry-program /usr/bin/pinentry-gnome3

バージョン 0.9.2 から、全ての pinentry プログラムでは設定によって libsecret でパスフレーズを保存することができるようになりました。例えば、pinentry-gnome3 でユーザーにパスフレーズの要求がいった場合に、パスワードマネージャを使ってパスフレーズを保存するかどうか決めるチェックボックスが表示されます。残念ながら、pinentry パッケージでこの機能は有効になっていません (理由は FS#46059 を参照)。libsecret を有効にするために pinentry-libsecretAUR を代替として使うことができます。

mutt と gpg

GnuPG 2.1 現在、セッションごとに GnuPG のパスワードが一回要求されるようにするには、こちらのフォーラムスレッド を参照してください。

gnupg バージョン 2.1 にアップグレードすると鍵が"消失"する

gpg --list-keys を実行しても以前まで使っていた鍵が表示されない場合、また、アプリケーションが鍵を見つけられないまたは鍵が不正だとエラーを吐く場合、鍵が新しいフォーマットに移行できていない可能性があります。

GnuPG invalid packet workaround を読んで下さい。要約すると、旧式の pubring.gpgsecring.gpg ファイルの鍵にはバグが存在しており、新しい pubring.kbx ファイルと private-keys-v1.d/ サブディレクトリ、そしてディレクトリのファイルによって置き換えられたということが書かれています。以下のコマンドを実行することで消失した鍵を復旧させることができるかもしれません:

$ cd
$ cp -r .gnupg gnupgOLD
$ gpg --export-ownertrust > otrust.txt
$ gpg --import .gnupg/pubring.gpg
$ gpg --import-ownertrust otrust.txt
$ gpg --list-keys

(鍵を受信しようとすると) どのキーサーバーでも gpg がフリーズする

特定のキーサーバーで鍵を受信しようとして gpg がフリーズしている場合、dirmngr を kill して (問題が起こっていない) 他のキーサーバーにアクセスできるようにする必要があります。そうしないと全てのキーサーバーでフリーズしてしまいます。

スマートカードが検出されない

スマートカードにアクセスするための権限がない場合、カードを正しく設定して接続しても、card error が表示されることがあります。

スマートカードにアクセスする必要があるユーザーに scard を追加することで解決できます。追加したら、以下のような udev ルールを作って下さい:

/etc/udev/rules.d/71-gnupg-ccid.rules
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="664", GROUP="scard"

VENDOR と MODEL は lsusb の出力にあわせて変更する必要があります。上記は YubikeyNEO の例です。

参照