「GnuPG」の版間の差分
細 (style fix) |
(未訳部分の翻訳&削除された翻訳の復活) |
||
67行目: | 67行目: | ||
$ gpg --armor --output public.key --export ''<user-id>'' |
$ gpg --armor --output public.key --export ''<user-id>'' |
||
− | あるいは、[[#鍵サーバを使用する|鍵サーバ]]で鍵を共有する方法もあります。 |
+ | あるいは、[[#鍵サーバーを使用する|鍵サーバー]]で鍵を共有する方法もあります。 |
{{Tip|{{ic|--no-emit-version}} を使うか、これを設定ファイルに書くことでバージョン番号の表示を抑制できます。}} |
{{Tip|{{ic|--no-emit-version}} を使うか、これを設定ファイルに書くことでバージョン番号の表示を抑制できます。}} |
||
77行目: | 77行目: | ||
$ gpg --import public.key |
$ gpg --import public.key |
||
− | あるいは、[[#鍵サーバを使用する|鍵サーバ]]で公開鍵を見つけます。 |
+ | あるいは、[[#鍵サーバーを使用する|鍵サーバー]]で公開鍵を見つけます。 |
− | === 鍵サーバを使用する === |
+ | === 鍵サーバーを使用する === |
− | 自分の公開鍵を公共の PGP 鍵サーバに登録することで、他の人があなたに直接連絡することなしにあなたの鍵を入手できるようになります。 |
+ | 自分の公開鍵を公共の PGP 鍵サーバーに登録することで、他の人があなたに直接連絡することなしにあなたの鍵を入手できるようになります。 |
$ gpg --send-keys ''<key-id>'' |
$ gpg --send-keys ''<key-id>'' |
||
− | 鍵サーバから鍵をインポートするには: |
+ | 鍵サーバーから鍵をインポートするには: |
$ gpg --recv-keys ''<key-id>'' |
$ gpg --recv-keys ''<key-id>'' |
||
− | {{Warning|誰でも鍵サーバに鍵を送ることができます。そのため、ダウンロードした鍵が本当にその人のものであると信用してはいけません。入手した鍵の指紋を、持ち主が別の場所(ブログ、サイト、メール・電話で連絡するなど)で公開している指紋と比較してその鍵の真正性を確かめるべきです。複数の情報源を使うことでその鍵の信頼性は増します。[[Wikipedia:Public key fingerprint]] を参照。}} |
+ | {{Warning|誰でも鍵サーバーに鍵を送ることができます。そのため、ダウンロードした鍵が本当にその人のものであると信用してはいけません。入手した鍵の指紋を、持ち主が別の場所(ブログ、サイト、メール・電話で連絡するなど)で公開している指紋と比較してその鍵の真正性を確かめるべきです。複数の情報源を使うことでその鍵の信頼性は増します。[[Wikipedia:Public key fingerprint]] を参照。}} |
{{Tip| |
{{Tip| |
||
− | * 代わりの鍵サーバは {{ic|pool.sks-keyservers.net}} で {{ic|--keyserver}} で指定できます。[[wikipedia:Key server (cryptographic)#Keyserver examples]] を参照 |
+ | * 代わりの鍵サーバーは {{ic|pool.sks-keyservers.net}} で {{ic|--keyserver}} で指定できます。[[wikipedia:Key server (cryptographic)#Keyserver examples]] を参照 |
− | * {{ic|--use-tor}} を使うと [[Tor]] で鍵サーバに接続できます。{{ic|hkp://jirk5u4osbsr34t5.onion}} は sks-keyservers プールの onion アドレスです。[https://gnupg.org/blog/20151224-gnupg-in-november-and-december.html GnuPG のブログ記事] を参照。}} |
+ | * {{ic|--use-tor}} を使うと [[Tor]] で鍵サーバーに接続できます。{{ic|hkp://jirk5u4osbsr34t5.onion}} は sks-keyservers プールの onion アドレスです。[https://gnupg.org/blog/20151224-gnupg-in-november-and-december.html GnuPG のブログ記事] を参照。}} |
=== 暗号化と復号化 === |
=== 暗号化と復号化 === |
||
107行目: | 107行目: | ||
{{Tip| |
{{Tip| |
||
* 受取人を変更したい場合は {{ic|-r ''<user-id>''}} (または {{ic|--recipient ''<user-id>''}}) オプションで変更できます。 |
* 受取人を変更したい場合は {{ic|-r ''<user-id>''}} (または {{ic|--recipient ''<user-id>''}}) オプションで変更できます。 |
||
+ | * 暗号メッセージに受取人の鍵 ID を入れたくないときは {{ic|--recipient}} のかわりに {{ic|-R ''<user-id>''}} または {{ic|--hidden-recipient ''<user-id>''}} を追加してください。メッセージの受取人を隠蔽して、トラフィックの解析に対する対抗策になります。 |
||
− | * Add {{ic|-R ''<user-id>''}} or {{ic|--hidden-recipient ''<user-id>''}} instead of {{ic|--recipient}} to not put the recipient key IDs in the encrypted message. This helps to hide the receivers of the message and is a limited countermeasure against traffic analysis. |
||
+ | * バージョン番号を出力したくないときは {{ic|--no-emit-version}} を追加してください。または設定ファイルに同じ設定を追加してください。}} |
||
− | * Add {{ic|--no-emit-version}} to avoid printing the version number, or add the corresponding setting to your configuration file.}} |
||
{{Note|gnupg を使えば機密文書を暗号化できますが、一度に複数のファイルを暗号化することはできません。ディレクトリやファイルシステム全体を暗号化したいときは、[[TrueCrypt]] や [[EncFS]] などを使用するか、tarball にファイルをまとめて暗号化すると良いでしょう。}} |
{{Note|gnupg を使えば機密文書を暗号化できますが、一度に複数のファイルを暗号化することはできません。ディレクトリやファイルシステム全体を暗号化したいときは、[[TrueCrypt]] や [[EncFS]] などを使用するか、tarball にファイルをまとめて暗号化すると良いでしょう。}} |
||
165行目: | 165行目: | ||
$ gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.gpg |
$ gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.gpg |
||
+ | {{Warning|''!'' を追加するのを忘れると、全ての副鍵がエクスポートされます。}} |
||
− | {{Warning|If you forget to add the !, all of your subkeys will be exported.}} |
||
ここで作業を終えても良いですが、パスフレーズの変更もしておくと安全です。一時フォルダに鍵をインポートします: |
ここで作業を終えても良いですが、パスフレーズの変更もしておくと安全です。一時フォルダに鍵をインポートします: |
||
303行目: | 303行目: | ||
* gnupg ホームディレクトリが {{ic|~/.gnupg}} の場合、パスを指定する必要はありません。 |
* gnupg ホームディレクトリが {{ic|~/.gnupg}} の場合、パスを指定する必要はありません。 |
||
* {{ic|gpg -agent}} は標準ソケットを使いません。代わりに gnupg のホームディレクトリにある {{ic|S.gpg-agent}} という名前のソケットを使います。environment ファイルを読み込んで {{ic|/tmp}} に作成されたランダムなソケットのパスを取得するスクリプトは忘れることができます。 |
* {{ic|gpg -agent}} は標準ソケットを使いません。代わりに gnupg のホームディレクトリにある {{ic|S.gpg-agent}} という名前のソケットを使います。environment ファイルを読み込んで {{ic|/tmp}} に作成されたランダムなソケットのパスを取得するスクリプトは忘れることができます。 |
||
− | * |
+ | * gpg-agent の SSH 機能を使用している場合 (--enable-ssh-support)、上記の systemd ユニットは使えません。 |
}} |
}} |
||
360行目: | 360行目: | ||
== Tips and tricks == |
== Tips and tricks == |
||
− | === |
+ | === 他のアルゴリズム === |
+ | 強力なアルゴリズムを使用したい場合: |
||
− | You may want to use stronger algorithms: |
||
{{hc|~/.gnupg/gpg.conf| |
{{hc|~/.gnupg/gpg.conf| |
||
373行目: | 373行目: | ||
}} |
}} |
||
+ | GnuPG の最新版では、デフォルトのアルゴリズムとして SHA256 と AES が使われており、どちらも殆どの場合安全です。しかしながら、2.1 以前の古い GnuPG を使っている場合や、さらに高いセキュリティを求めたい場合、上記のように設定するようにしてください。 |
||
− | In the latest version of GnuPG, the default algorithms used are SHA256 and AES, both of which are secure enough for most people. However, if you are using a version of GnuPG older than 2.1, or if you want an even higher level of security, then you should follow the above step. |
||
− | === |
+ | === パスワードの暗号化 === |
+ | パスワードを暗号化すれば、設定ファイルに平文で書き込まれなくなります。メールのパスワードなどが良い例でしょう。 |
||
− | It can be useful to encrypt some password, so it will not be written in clear on a configuration file. A good example is your email password. |
||
+ | まずパスワードを記述したファイルを作成してください。パスワードの後に空行を'''一行'''だけ追加しておく必要があります。そうしないとファイルを評価するときに gpg がエラーメッセージを返します。 |
||
− | First create a file with your password. You '''need''' to leave '''one''' empty line after the password, otherwise gpg will return an error message when evaluating the file. |
||
+ | そして次を実行: |
||
− | Then run: |
||
$ gpg -e -a -r ''<user-id>'' ''your_password_file'' |
$ gpg -e -a -r ''<user-id>'' ''your_password_file'' |
||
− | {{ic|-e}} |
+ | {{ic|-e}} は encrypt、{{ic|-a}} は armor (ASCII 出力)、{{ic|-r}} は受取人のユーザー ID です。 |
− | + | 新しく {{ic|''your_password_file''.asc}} ファイルが作られます。 |
|
+ | === 新規ユーザーのデフォルトオプション === |
||
− | === Default options for new users === |
||
+ | 新規ユーザーのデフォルトオプションを設定したいときは、{{ic|/etc/skel/.gnupg/}} に設定ファイルを置いて下さい。システムに新しいユーザーが追加されたとき、ここからファイルが GnuPG のホームディレクトリにコピーされます。''addgnupghome'' というシンプルなスクリプトもあり、既存のユーザーに新しい GnuPG ホームディレクトリを作成できます: |
||
− | If you want to setup some default options for new users, put configuration files in {{ic|/etc/skel/.gnupg/}}. When the new user is added in system, files from here will be copied to its GnuPG home directory. There is also a simple script called ''addgnupghome'' which you can use to create new GnuPG home directories for existing users: |
||
# addgnupghome user1 user2 |
# addgnupghome user1 user2 |
||
− | + | このコマンドで {{ic|/home/user1/.gnupg}} と {{ic|/home/user2/.gnupg}} が作成されスケルトンディレクトリからファイルがコピーされます。既に GnuPG ホームディレクトリが存在するユーザーは無視されます。 |
|
=== Revoking a key === |
=== Revoking a key === |
||
413行目: | 413行目: | ||
$ gpg --keyserver subkeys.pgp.net --send ''<userid>'' |
$ gpg --keyserver subkeys.pgp.net --send ''<userid>'' |
||
− | === |
+ | === 信頼モデルの変更 === |
− | By default GnuPG uses the [[Wikipedia |
+ | 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]. |
− | === |
+ | === 受取人の 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>''}}). |
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 を使う === |
− | + | キーサーバーやキーリングにある鍵の正当性をユーザーが確認 (つまり鍵の持ち主が本人であることを確認) できるように、PGP/GPG はいわゆる信頼の輪 ("Web of Trust") を利用しています。信頼の輪を維持するために様々なハッカーイベントが開かれており、キーサインパーティはそのひとつです。[[Wikipedia:Zimmermann–Sassaman key-signing protocol|Zimmermann-Sassaman]] 鍵署名プロトコルはキーサインパーティを効果的に行うための方式です。[http://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html こちら] にハウツー記事があります。 |
|
キーサインパーティの後、鍵に署名したり所有者に署名を送るのを簡略化するために、''caff'' というツールを使うことができます。AUR のパッケージ {{AUR|caff-svn}} でインストールすることができ、{{AUR|signing-party-svn}} パッケージなど他の便利なツールにも付属しています。どちらにせよ、AUR から大量の依存パッケージをインストールすることになります。また、以下のように CPAN からインストールすることも可能です: |
キーサインパーティの後、鍵に署名したり所有者に署名を送るのを簡略化するために、''caff'' というツールを使うことができます。AUR のパッケージ {{AUR|caff-svn}} でインストールすることができ、{{AUR|signing-party-svn}} パッケージなど他の便利なツールにも付属しています。どちらにせよ、AUR から大量の依存パッケージをインストールすることになります。また、以下のように CPAN からインストールすることも可能です: |
||
429行目: | 429行目: | ||
cpanm GnuPG::Interface |
cpanm GnuPG::Interface |
||
+ | 所有者に署名を送信するには [[Wikipedia:ja:メール転送エージェント|MTA]] が必要です。MTA を設定していない場合、[[msmtp]] をインストールして下さい。 |
||
− | To send the signatures to their owners you need a working [[Wikipedia:Message transfer agent|MTA]]. If you do not have already one, install [[msmtp]]. |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
=== Make it work behind an http proxy === |
=== Make it work behind an http proxy === |
||
+ | 2.1.9 から http プロキシのオプションは以下のように設定できます: |
||
− | Since 2.1.9 the http proxy option can be set like this: |
||
$ gpg --keyserver-option http-proxy=HOST:PORT |
$ gpg --keyserver-option http-proxy=HOST:PORT |
||
− | + | 詳しくは https://bugs.gnupg.org/gnupg/issue1786 を参照。 |
|
=== Not enough random bytes available === |
=== Not enough random bytes available === |
||
444行目: | 444行目: | ||
Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! |
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 |
+ | $ cat /proc/sys/kernel/random/entropy_avail |
エントロピーがたくさんある健康的な Linux 環境ならマックスの 4,096 ビットに近い値が返されます。返ってくる値が 200 以下の場合、システムのエントロピーが足りていません。 |
エントロピーがたくさんある健康的な Linux 環境ならマックスの 4,096 ビットに近い値が返されます。返ってくる値が 200 以下の場合、システムのエントロピーが足りていません。 |
||
476行目: | 476行目: | ||
Gnome keyring は GPG エージェントコンポーネントを実装していますが、GnuPG バージョン 2.1 から、GnuPG は {{ic|GPG_AGENT_INFO}} 環境変数を無視するようになったため、Gnome keyring を GPG エージェントとして使うことはできません。 |
Gnome keyring は GPG エージェントコンポーネントを実装していますが、GnuPG バージョン 2.1 から、GnuPG は {{ic|GPG_AGENT_INFO}} 環境変数を無視するようになったため、Gnome keyring を GPG エージェントとして使うことはできません。 |
||
− | + | ただし、バージョン 0.9.6 から {{Pkg|pinentry}} パッケージには {{Ic|pinentry-gnome3}} プログラムが入っています。{{Ic|gpg-agent.conf}} ファイルに以下のオプションを設定することで pinentry プログラムを利用することが可能です: |
|
− | + | pinentry-program /usr/bin/pinentry-gnome3 |
|
− | in order to make use of that pinentry program. |
||
+ | バージョン 0.9.2 から、全ての pinentry プログラムでは設定によって libsecret でパスフレーズを保存することができるようになりました。例えば、{{Ic|pinentry-gnome3}} でユーザーにパスフレーズの要求がいった場合に、パスワードマネージャを使ってパスフレーズを保存するかどうか決めるチェックボックスが表示されます。残念ながら、{{Pkg|pinentry}} パッケージでこの機能は有効になっていません (理由は {{Bug|46059}} を参照)。libsecret を有効にするために {{AUR|pinentry-libsecret}} を代替として使うことができます。 |
||
− | Since version 0.9.2 all pinentry programs can be configured to optionally save a passphrase with libsecret. For example, when the user is asked for a passphrase via {{Ic|pinentry-gnome3}}, a checkbox is shown whether to save the passphrase using a password manager. Unfortunately, the package {{Pkg|pinentry}} does not have this feature enabled (see {{Bug|46059}} for the reasons). You may use {{AUR|pinentry-libsecret}} as a replacement for it, which has support for libsecret enabled. |
||
− | === mutt |
+ | === mutt と gpg === |
− | + | GnuPG 2.1 現在、セッションごとに GnuPG のパスワードが一回要求されるようにするには、[https://bbs.archlinux.org/viewtopic.php?pid=1490821#p1490821 こちらのフォーラムスレッド] を参照してください。 |
|
=== gnupg バージョン 2.1 にアップグレードすると鍵が"消失"する === |
=== gnupg バージョン 2.1 にアップグレードすると鍵が"消失"する === |
2016年1月26日 (火) 20:48時点における版
公式サイト によれば:
- 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/gpg.conf
と ~/.gnupg/dirmngr.conf
です。デフォルトの場所を変更したい場合は、$ gpg --homedir path/to/file
と gpg を実行するか $GNUPGHOME
変数を使って下さい。どんな長いオプションもこのファイルに追加します。2つのダッシュを書かないで、オプションや必要な引数の名前を書いて下さい。スケルトンファイルは /usr/share/gnupgl
にあります。gpg がなんらかの操作のため最初に起動されたとき、~/.gnupg
が存在しなければこれらのファイルが ~/.gnupg
にコピーされます。#参照 に他の例があります。
使い方
鍵の作成
秘密鍵を生成するにはターミナルに次を入力:
$ gpg --full-gen-key
いくつか質問がきかれます。一般的に、ほとんどのユーザーは RSA (署名のみ) と RSA (暗号化のみ) の両方の鍵が必要になります。鍵長は2048ビットで十分です。4096ビットを使ったところで "大した効果はありませんし、無駄に時間がかかるようになるだけです" 。
副鍵の有効期限の設定は技術的には必須ではありませんが、設定することは悪くありません。標準的なユーザーなら、1年間で十分でしょう。たとえ鍵束へのアクセスを失っても、他の人が有効でないことを知ることができるようになります。鍵を作成した後、新しい鍵を再発行しなくても満了日は延長することができます。
安全なパスフレーズを選ぶようにしてください (セキュリティ#パスワードの管理を参照)。
秘密鍵のバックアップ
秘密鍵をバックアップするには:
$ gpg --export-secret-keys --armor <user-id> > privkey.asc
秘密鍵はロックされたコンテナや暗号化されたドライブなど安全な場所に置いてください。
公開鍵のエクスポート
他の人があなたに暗号化したメッセージを送れるようにするには、彼らがあなたの公開鍵を知っている必要があります。
(メールで送る場合などのために) ASCII 版の公開鍵を生成するには:
$ gpg --armor --output public.key --export <user-id>
あるいは、鍵サーバーで鍵を共有する方法もあります。
鍵のインポート
メッセージを暗号化して他の人に送るには、彼らの公開鍵が必要です。公開鍵を自分の公開鍵リングにインポートするには:
$ gpg --import public.key
あるいは、鍵サーバーで公開鍵を見つけます。
鍵サーバーを使用する
自分の公開鍵を公共の PGP 鍵サーバーに登録することで、他の人があなたに直接連絡することなしにあなたの鍵を入手できるようになります。
$ gpg --send-keys <key-id>
鍵サーバーから鍵をインポートするには:
$ gpg --recv-keys <key-id>
暗号化と復号化
暗号化や復号化をするときは複数の秘密鍵を使用することが可能です。複数の鍵を使うときは使用する鍵を選択する必要があります。-u <user-id>
オプションや --local-user <user-id>
オプションを使うことで選択できます。このオプションを使うとデフォルトの鍵を使用する代わりに指定された鍵を使用します。
(テキストでメッセージをコピー&ペーストするのに適している) ASCII armor を使ってファイルを暗号化するには、次を使用:
$ gpg --encrypt --armor secret.txt
単に暗号化だけしたいときは --armor
は不要です。
ファイルを復号化するには、次を使用:
$ 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
エージェントのリロード
設定を変更した後は、gpg-connect-agent
に RELOADAGENT
という文字列をパイプで渡して、エージェントをリロードしてください。
$ 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
変更を行った後は、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
無人のパスフレーズ
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
スマートカード
GnuPG はスマートカードリーダーのインターフェイスとして scdaemon を使います。詳しくは man ページを参照してください。
GnuPG のみ設定
GnuPG ベース以外のカードを使う予定がない場合は、~/.gnupg/scdaemon.conf
の reader-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 ホームディレクトリが存在するユーザーは無視されます。
Revoking a key
Revocation certificates are automatically generated for newly generated keys, although one can be generated manually by the user later. These are located at ~/.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
Now update the keyserver:
$ gpg --keyserver subkeys.pgp.net --send <userid>
信頼モデルの変更
By default GnuPG uses the Web of Trust as the trust model. You can change this to Trust on First Use by adding --trust-model=tofu
when adding a key or adding this option to your GnuPG configuration file. More details are in this email to the GnuPG list.
受取人の 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 hidden-recipient <user-id>
. To remove it for all recipients add 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 --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 をインストールして下さい。
トラブルシューティング
Make it work behind an http proxy
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/
と同じのが正しいです。
エージェントがファイルの終末についてエラーを表示する
デフォルトの pinentry プログラムは pinentry-gtk-2 であり、D-Bus セッションバスを正しく実行する必要があります。詳しくは一般的なトラブルシューティング#セッションのパーミッションを見て下さい。
もしくは、pinentry-qt
を使うこともできます。#pinentry を参照。
KGpg 設定のパーミッション
There have been issues with kdeutils-kgpg being able to access the ~/.gnupg/
options. One issue might be a result of a deprecated options file, see the bug report.
Another user reported that KGpg failed to start until the ~/.gnupg
folder is set to drwxr-xr-x
permissions. If you require this work-around, ensure that the directory contents retain -rw-------
permissions! Further, report it as a bug to the developers.
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.gpg
と secring.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 の例です。