<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ponkotuy</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ponkotuy"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Ponkotuy"/>
	<updated>2026-04-18T16:20:17Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=GnuPG&amp;diff=9095</id>
		<title>GnuPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=GnuPG&amp;diff=9095"/>
		<updated>2017-06-22T09:18:22Z</updated>

		<summary type="html">&lt;p&gt;Ponkotuy: /* pinentry */ Fix pinentry-qt4 to pinentry-qt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[en:GnuPG]]&lt;br /&gt;
[[es:GnuPG]]&lt;br /&gt;
[[ru:GnuPG]]&lt;br /&gt;
[[zh-hans:GnuPG]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|pacman-key}}&lt;br /&gt;
{{Related|ディスク暗号化}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ#暗号化, 署名, ステガノグラフィー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://www.gnupg.org 公式サイト] によれば:&lt;br /&gt;
&lt;br /&gt;
:GnuPG は RFC4880 (別名 PGP) で定義される OpenPGP 標準の完全でフリーな実装です。GnuPG を使うことでデータや通信を暗号化したり署名することができます。多目的の鍵管理システムであり、あらゆる種類の公開鍵ディレクトリのアクセスモジュールです。GnuPG (またの名を GPG) は他のアプリケーションとの簡単に連携できる機能を備えたコマンドラインツールです。豊富なアプリケーションとライブラリが利用可能です。GnuPG のバージョン2は S/MIME と ssh のサポートも含んでいます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|gnupg}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
gnupg をインストールすると、GnuPG がパスフレーズエントリに使用するシンプルな PIN やパスフレーズエントリダイアログのコレクションである {{Pkg|pinentry}} もインストールされます。&#039;&#039;pinentry&#039;&#039; はシンボリックリンク {{ic|/usr/bin/pinentry}} によって決められ、デフォルトでは {{ic|/usr/bin/pinentry-gtk-2}} になります。&lt;br /&gt;
&lt;br /&gt;
グラフィカルフロントエンドや GnuPG と連携するプログラムを使いたい場合は[[アプリケーション一覧/セキュリティ#暗号化, 署名, ステガノグラフィー]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== 設定ファイルのディレクトリ ===&lt;br /&gt;
&lt;br /&gt;
GnuPG では {{ic|$GNUPGHOME}} によって全ての設定ファイルを保存するディレクトリが指定されます。デフォルトでは {{ic|$GNUPGHOME}} は設定されておらず、代わりに {{ic|$HOME}} が使われます。そのためインストール直後は {{ic|~/.gnupg}} ディレクトリが確認できます。[[自動起動|スタートアップファイル]]に次の行を記述することでデフォルト設定を変更できます:&lt;br /&gt;
&lt;br /&gt;
 export GNUPGHOME=&amp;quot;&#039;&#039;/path/to/directory&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 設定ファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの設定ファイルは {{ic|~/.gnupg/gpg.conf}} と {{ic|~/.gnupg/dirmngr.conf}} です。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、gnupg ディレクトリの[[ファイルのパーミッションと属性|パーミッション]]は &#039;&#039;700&#039;&#039; に設定されており、ディレクトリのファイルのパーミッションは &#039;&#039;600&#039;&#039; に設定されています。ファイルの読み書きやアクセスの権限を持っているのはディレクトリの所有者だけです (&#039;&#039;r&#039;&#039;,&#039;&#039;w&#039;&#039;,&#039;&#039;x&#039;&#039;)。これはセキュリティ上の理由で設定されていることなので変更してはいけません。ディレクトリやファイルがこのセキュリティ対策に従っていない場合、ファイルやホームディレクトリのパーミッションが安全ではないという警告が表示されます。&lt;br /&gt;
&lt;br /&gt;
どんな長いオプションも設定ファイルに追加します。2つのダッシュを書かないで、オプションや必要な引数の名前を書いて下さい。スケルトンファイルは {{ic|/usr/share/gnupgl}} にあります。gpg がなんらかの操作のため最初に起動されたとき、{{ic|~/.gnupg}} が存在しなければこれらのファイルが {{ic|~/.gnupg}} にコピーされます。[[#参照]] に他の例があります。&lt;br /&gt;
&lt;br /&gt;
また、[[pacman]] がパッケージの署名の検証に使用する設定ファイルは別に存在します。詳しくは [[pacman-key]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 新規ユーザーのデフォルトオプション ===&lt;br /&gt;
&lt;br /&gt;
新規ユーザーのデフォルトオプションを設定したい場合、{{ic|/etc/skel/.gnupg/}} に設定ファイルを配置してください。新しいユーザーが追加されると、{{ic|/etc/skel/.gnupg/}} から GnuPG のホームディレクトリにファイルがコピーされます。既存のユーザーのために新しい GnuPG ホームディレクトリを作成できる &#039;&#039;addgnupghome&#039;&#039; というスクリプトも存在します:&lt;br /&gt;
&lt;br /&gt;
 # addgnupghome user1 user2&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは {{ic|/home/user1/.gnupg}} と {{ic|/home/user2/.gnupg}} を作成してスケルトンディレクトリからファイルをコピーします。既に GnuPG のホームディレクトリが存在するユーザーはスキップされます。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|コマンドに &#039;&#039;{{ic|&amp;lt;user-id&amp;gt;}}&#039;&#039; が必要なときは、鍵 ID、指紋、名前やメールアドレスの一部などを指定できます。これについて GnuPG は寛容です。}}&lt;br /&gt;
&lt;br /&gt;
=== 鍵の作成 ===&lt;br /&gt;
&lt;br /&gt;
秘密鍵を生成するにはターミナルに次を入力:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --full-gen-key&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--expert}} を使うことで他の暗号を利用することができます ([[wikipedia:ja:楕円曲線暗号|楕円曲線暗号]]など)。}}&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを実行すると複数の質問がきかれます。大抵の場合、以下の設定が必要になります:&lt;br /&gt;
&lt;br /&gt;
* RSA (署名のみ) と RSA (暗号化のみ) 鍵。&lt;br /&gt;
* 鍵長は2048ビットで十分です。4096ビットを使ったところで [https://www.gnupg.org/faq/gnupg-faq.html#no_default_of_rsa4096 &amp;quot;大した効果はありませんし、無駄に時間がかかるようになるだけです&amp;quot;] 。&lt;br /&gt;
* 副鍵の有効期限の設定は技術的には必須ではありませんが、設定することは悪くありません。標準的なユーザーなら、1年間で十分でしょう。たとえ鍵束へのアクセスを失っても、他の人が有効でないことを知ることができるようになります。鍵を作成した後、新しい鍵を再発行しなくても満了日は延長することができます。&lt;br /&gt;
* 名前とメールアドレス。後で同じ鍵に別の識別子を追加できます (複数のメールアドレスが存在する場合など)。&lt;br /&gt;
* コメントは必要ありません。コメントフィールドのセマンティクスは [https://lists.gnupg.org/pipermail/gnupg-devel/2015-July/030150.html 定義があやふや] なため、識別子としては限定的です。&lt;br /&gt;
* 安全なパスフレーズを選ぶようにしてください ([[セキュリティ#パスワードの管理]]を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|入力した名前とメールアドレスは鍵をインポートすれば誰でも確認できるようになります。}}&lt;br /&gt;
&lt;br /&gt;
=== 鍵を表示 ===&lt;br /&gt;
&lt;br /&gt;
* 公開鍵束の鍵:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
* 秘密鍵束の鍵:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --list-secret-keys&lt;br /&gt;
&lt;br /&gt;
=== 秘密鍵のバックアップ ===&lt;br /&gt;
&lt;br /&gt;
秘密鍵をバックアップするには:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --export-secret-keys --armor &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039; &amp;gt; privkey.asc&lt;br /&gt;
&lt;br /&gt;
秘密鍵はロックされたコンテナや暗号化されたドライブなど安全な場所に置いてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記のエクスポートされたファイルにアクセスできる人は誰でも、&#039;&#039;パスフレーズを知らなくても&#039;&#039;あなたのふりをして文書を暗号化したり署名したりできます。}}&lt;br /&gt;
&lt;br /&gt;
=== 公開鍵のエクスポート ===&lt;br /&gt;
&lt;br /&gt;
公開鍵暗号で交換されたメッセージの機密性を保証するのが gpg の主な利用法です。互いの鍵束の公開鍵を交換して、メッセージを暗号化するときに使用します。秘密鍵は必ず漏洩しないようにしてください。機密性が破れてしまいます。 &lt;br /&gt;
&lt;br /&gt;
他の人があなたに暗号化したメッセージを送れるようにするには、彼らがあなたの公開鍵を知っている必要があります。&lt;br /&gt;
&lt;br /&gt;
(メールで送る場合などのために) ASCII 版の公開鍵を生成するには:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --armor --output public.key --export &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるいは、[[#鍵サーバーを使用する|鍵サーバー]]で鍵を共有する方法もあります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--no-emit-version}} を使うか、これを設定ファイルに書くことでバージョン番号の表示を抑制できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 公開鍵のインポート ===&lt;br /&gt;
&lt;br /&gt;
メッセージを暗号化して他の人に送るには、彼らの公開鍵が必要です。公開鍵 ({{ic|&#039;&#039;public.key&#039;&#039;}}) を自分の公開鍵リングにインポートするには:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --import public.key&lt;br /&gt;
&lt;br /&gt;
あるいは、[[#鍵サーバーを使用する|鍵サーバー]]で公開鍵を見つけます。&lt;br /&gt;
&lt;br /&gt;
=== 鍵サーバーを使用する ===&lt;br /&gt;
&lt;br /&gt;
自分の公開鍵を公共の PGP 鍵サーバーに登録することで、他の人があなたに直接連絡することなしにあなたの鍵を入手できるようになります。&lt;br /&gt;
&lt;br /&gt;
 $ gpg --send-keys &#039;&#039;&amp;lt;key-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
鍵サーバーの鍵の情報を確認したい場合、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --search-keys &#039;&#039;&amp;lt;key-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
鍵サーバーから鍵をインポートするには:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --recv-keys &#039;&#039;&amp;lt;key-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 誰でも鍵サーバーに鍵を送ることができます。そのため、ダウンロードした鍵が本当にその人のものであると信用してはいけません。入手した鍵の指紋を、持ち主が別の場所（ブログ、サイト、メール・電話で連絡するなど）で公開している指紋と比較してその鍵の真正性を確かめるべきです。複数の情報源を使うことでその鍵の信頼性は増します。[[Wikipedia:Public key fingerprint]] を参照。&lt;br /&gt;
* ID が短いと衝突する可能性があります。インポートされた鍵には全て短い ID が割り当てられます。鍵を受け取るときに完全な指紋か長い鍵 ID を使うことで衝突を回避できます [https://lkml.org/lkml/2016/8/15/445]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|keyserver-options auto-key-retrieve}} を {{ic|gpg.conf}} に追加すると必要に応じて鍵サーバーから鍵が取得されます。&lt;br /&gt;
* 代わりの鍵サーバーは {{ic|dirmngr.conf}} の {{ic|--keyserver}} で {{ic|pool.sks-keyservers.net}} と指定できます。[[wikipedia:Key server (cryptographic)#Keyserver examples]] を参照&lt;br /&gt;
* {{ic|--use-tor}} を使うと [[Tor]] で鍵サーバーに接続できます。{{ic|hkp://jijrk5u4osbsr34t5.onion}} は sks-keyservers プールの onion アドレスです。[https://gnupg.org/blog/20151224-gnupg-in-november-and-december.html GnuPG のブログ記事] を参照。&lt;br /&gt;
* {{ic|http_proxy}} 環境変数を設定して {{ic|dirmngr.conf}} で {{ic|honor-http-proxy}} を設定することでプロキシを使って鍵サーバーに接続できます。また、{{ic|dirmngr.conf}} で {{ic|http-proxy &#039;&#039;host[:port]&#039;&#039;}} を設定すると {{ic|http_proxy}} 環境変数が上書きされます。}}&lt;br /&gt;
&lt;br /&gt;
=== 暗号化と復号化 ===&lt;br /&gt;
&lt;br /&gt;
暗号化や復号化をするときは複数の秘密鍵を使用することが可能です。複数の鍵を使うときは使用する鍵を選択する必要があります。{{ic|-u &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} オプションや {{ic|--local-user &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} オプションを使うことで選択できます。このオプションを使うとデフォルトの鍵を使用する代わりに指定された鍵を使用します。&lt;br /&gt;
&lt;br /&gt;
(テキストでメッセージをコピー＆ペーストするのに適している) ASCII armor を使ってファイルを暗号化するには、次を使用:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --encrypt --armor secret.txt&lt;br /&gt;
&lt;br /&gt;
単に暗号化だけしたいときは {{ic|--armor}} は不要です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 受取人を変更したい場合は {{ic|-r &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} (または {{ic|--recipient &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}}) オプションで変更できます。&lt;br /&gt;
* 暗号メッセージに受取人の鍵 ID を入れたくないときは {{ic|--recipient}} のかわりに {{ic|-R &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} または {{ic|--hidden-recipient &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} を追加してください。メッセージの受取人を隠蔽して、トラフィックの解析に対する対抗策になります。&lt;br /&gt;
* バージョン番号を出力したくないときは {{ic|--no-emit-version}} を追加してください。または設定ファイルに同じ設定を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|gnupg を使えば機密文書を暗号化できますが、一度に複数のファイルを暗号化することはできません。ディレクトリやファイルシステム全体を暗号化したいときは、[[TrueCrypt]] や [[EncFS]] などを使用するか、tarball にファイルをまとめて暗号化すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
ファイルを復号化するには、次のコマンドを使用:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --decrypt secret.txt.asc&lt;br /&gt;
&lt;br /&gt;
パスフレーズの入力が求められます。復号化するには送信者の公開鍵をインポートしてある必要があります。&lt;br /&gt;
&lt;br /&gt;
== 鍵の管理 ==&lt;br /&gt;
&lt;br /&gt;
=== 秘密鍵のバックアップ ===&lt;br /&gt;
&lt;br /&gt;
秘密鍵をバックアップするには以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --export-secret-keys --armor &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039; &amp;gt; &#039;&#039;privkey.asc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gpg&#039;&#039; のリリース 2.1 からデフォルトの挙動が変わっており、たとえ鍵の作成時にパスワードを設定しなかった場合でも上記のコマンドを実行したときにパスフレーズによる保護が必須になっています。エクスポートされたファイルを入手してしまえば、パスフレーズを知らなくてもファイルを暗号化したり署名を加えることができてしまうためです。&lt;br /&gt;
&lt;br /&gt;
{{Warning|パスフレーズは秘密鍵の最大の弱点となります。暗号化されたコンテナやドライブなど、秘密鍵は安全な場所に保管してください。}}&lt;br /&gt;
&lt;br /&gt;
秘密鍵のバックアップをインポートするには:&lt;br /&gt;
 $ gpg --allow-secret-key-import --import &#039;&#039;privkey.asc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 鍵の編集 ===&lt;br /&gt;
&lt;br /&gt;
* {{ic|gpg --edit-key &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} コマンドを実行するとメニューが表示され、鍵管理に関連するほとんどの作業を行うことができます。以下は満了日を設定する例です:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --edit-key &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
 &amp;gt; key &#039;&#039;number&#039;&#039;&lt;br /&gt;
 &amp;gt; expire &#039;&#039;yyyy-mm-dd&#039;&#039;&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
便利なコマンド:&lt;br /&gt;
 &amp;gt; passwd       # change the passphrase&lt;br /&gt;
 &amp;gt; clean        # compact any user ID that is no longer usable (e.g revoked or expired)&lt;br /&gt;
 &amp;gt; revkey       # revoke a key&lt;br /&gt;
 &amp;gt; addkey       # add a subkey to this key&lt;br /&gt;
 &amp;gt; expire       # change the key expiration time&lt;br /&gt;
&lt;br /&gt;
* 公開鍵の ASCII バージョンを生成 (例: メールなどで配るため):&lt;br /&gt;
&lt;br /&gt;
 $ gpg --armor --output public.key --export &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* PGP 公開鍵サーバーに鍵を登録して、他の人があなたに直接連絡しなくても鍵を取得できるようにする:&lt;br /&gt;
&lt;br /&gt;
 $ gpg  --keyserver pgp.mit.edu --send-keys &#039;&#039;&amp;lt;key-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ユーザー Bob あてに署名と暗号化:&lt;br /&gt;
&lt;br /&gt;
 $ gpg -se -r Bob &#039;&#039;file&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* クリアテキスト署名を作成:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --clearsign &#039;&#039;file&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 副鍵のエクスポート ===&lt;br /&gt;
&lt;br /&gt;
複数のデバイスで同じ鍵を使い回す場合、マスター鍵を分離させて、セキュリティが低いシステムでは暗号化に必要な副鍵だけを使いたいという状況が考えられます。&lt;br /&gt;
&lt;br /&gt;
まず、エクスポートしたい副鍵を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ gpg -K&lt;br /&gt;
&lt;br /&gt;
エクスポートする副鍵だけを選択:&lt;br /&gt;
&lt;br /&gt;
 $ gpg -a --export-secret-subkeys [subkey id]! &amp;gt; /tmp/subkey.gpg&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;!&#039;&#039; を追加するのを忘れると、全ての副鍵がエクスポートされます。}}&lt;br /&gt;
&lt;br /&gt;
ここで作業を終えても良いですが、パスフレーズの変更もしておくと安全です。一時フォルダに鍵をインポートします:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --homedir /tmp/gpg --import /tmp/subkey.gpg&lt;br /&gt;
 $ gpg --homedir /tmp/gpg --edit-key &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
 $ gpg --homedir /tmp/gpg -a --export-secret-subkeys [subkey id]! &amp;gt; /tmp/subkey.altpass.gpg&lt;br /&gt;
&lt;br /&gt;
{{Note|マスター鍵が存在しない、また、マスター鍵のパスワードが変更されていないという警告が表示されますが、変更したのは副鍵のパスワードなので無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
これで、他のデバイスで {{ic|/tmp/subkey.altpass.gpg}} を使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== 副鍵の使用 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|何か特段の事情がないかぎり、有効期限が切れたり無効になった副鍵を削除しないでください。削除してしまうとその副鍵で暗号化したファイルを復号化できなくなってしまいます。満了した、または無効のキーを削除するのは他のユーザーの鍵束を整理するときだけにしてください。}}&lt;br /&gt;
&lt;br /&gt;
副鍵を設定して一定期間後に満了したら、新しい副鍵を作成できます。他のユーザーが鍵束を更新できるように数週間前に行うようにしましょう。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しい鍵を作成する必要はありません。期限がきて使えなくなっただけだからです。有効期間を延長することができます。}}&lt;br /&gt;
&lt;br /&gt;
* 新しい副鍵を作成 (署名と暗号化の鍵の両方)&lt;br /&gt;
&lt;br /&gt;
 $ gpg --edit-key &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
 &amp;gt; addkey&lt;br /&gt;
&lt;br /&gt;
そして質問に答えて下さい (推奨される設定については前のセクションを参照)。&lt;br /&gt;
&lt;br /&gt;
* 変更を保存:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
&lt;br /&gt;
* キーサーバーにアップデート:&lt;br /&gt;
&lt;br /&gt;
 $ gpg  --keyserver pgp.mit.edu --send-keys &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|満了した副鍵を失効させる必要はありません、また、良い行いとは言えません。しょっちゅう鍵を無効化させているようでしたら、他人はあなたを信用しなくなるかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
== 署名 ==&lt;br /&gt;
&lt;br /&gt;
署名は文章を証明します。文章が改変された場合、署名の検証に失敗します。公開鍵を使用して文章を暗号化する暗号化とは違って、署名はユーザーの秘密鍵を使って作成されます。署名された文章を受け取った人は送り主の公開鍵を使って署名を検証できます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルに署名する ===&lt;br /&gt;
&lt;br /&gt;
ファイルに署名するには {{ic|--sign}} または {{ic|-s}} フラグを使います:&lt;br /&gt;
&lt;br /&gt;
  $ gpg --output &#039;&#039;doc.sig&#039;&#039; --sign &#039;&#039;doc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは暗号化も行ってファイルをバイナリ形式で保存します。&lt;br /&gt;
&lt;br /&gt;
=== ファイルやメッセージにクリア署名 ===&lt;br /&gt;
&lt;br /&gt;
バイナリ形式に圧縮しないでファイルに署名するには:&lt;br /&gt;
&lt;br /&gt;
  $ gpg --clearsign &#039;&#039;doc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは文章を ASCII-armored 署名でラッピングしますが、文章に変更は加えられません。&lt;br /&gt;
&lt;br /&gt;
=== 分離署名を作成する ===&lt;br /&gt;
&lt;br /&gt;
文章やファイルとは別に署名ファイルを作成したい場合、{{ic|--detach-sig}} フラグを使ってください:&lt;br /&gt;
&lt;br /&gt;
  $ gpg --output &#039;&#039;doc.sig&#039;&#039; --detach-sig &#039;&#039;doc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
上記の方法はソフトウェアプロジェクトを配布するときによく用いられます。署名書を検証することで第三者によってファイルが改竄されていないことが確認できます。&lt;br /&gt;
&lt;br /&gt;
=== 署名の検証 ===&lt;br /&gt;
&lt;br /&gt;
署名を検証するには {{ic|--verify}} フラグを使います:&lt;br /&gt;
&lt;br /&gt;
  $ gpg --verify &#039;&#039;doc.sig&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;doc.sig&#039;&#039;}} は検証したい署名に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
ファイルの検証と復号化を同時に行いたいお場合、{{ic|--decrypt}} フラグを使ってください。&lt;br /&gt;
&lt;br /&gt;
分離署名を検証する場合、ファイルと署名の両方が必要になります。例えば、Arch Linux の ISO を検証する場合:&lt;br /&gt;
&lt;br /&gt;
  $ gpg --verify &#039;&#039;archlinux-&amp;lt;version&amp;gt;-dual.iso.sig&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;archlinux-&amp;lt;version&amp;gt;-dual.iso&#039;&#039;}} が同じディレクトリに存在していなければなりません。&lt;br /&gt;
&lt;br /&gt;
== gpg-agent ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gpg-agent&#039;&#039; はキーチェインにパスワードをリクエストしたりキャッシュしたりするのに使われるデーモンです。メールクライアントなど外部のプログラムから GnuPG を利用する場合に便利です。&lt;br /&gt;
&lt;br /&gt;
GnuPG 2.1.0 から &#039;&#039;gpg-agent&#039;&#039; の使用は必須となっています。&#039;&#039;gpg-agent&#039;&#039; は GnuPG のツールによって必要に応じて実行されるため、手動で起動する必要はありません。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
gpg-agent は {{ic|~/.gnupg/gpg-agent.conf}} ファイルで設定することができます。設定オプションは {{ic|man gpg-agent}} に記載されています。例えば、未使用の鍵の cache ttl を変更することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.gnupg/gpg-agent.conf|&lt;br /&gt;
default-cache-ttl 3600&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|セッションを通してパスフレーズをキャッシュするには、次のコマンドを実行してください:&lt;br /&gt;
 $ /usr/lib/gnupg/gpg-preset-passphrase --preset XXXXXX&lt;br /&gt;
&lt;br /&gt;
XXXX は鍵輪に置き換えてください。鍵輪の値は {{ic|gpg --with-keygrip -K}} を実行することで取得できます。パスフレーズは {{ic|gpg-agent}} が再起動されるまで保存されます。{{ic|default-cache-ttl}} の値を設定した場合、そちらが優先されます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== エージェントのリロード ===&lt;br /&gt;
&lt;br /&gt;
設定を変更した後は、{{ic|gpg-connect-agent}} でエージェントをリロードしてください:&lt;br /&gt;
&lt;br /&gt;
 $ gpg-connect-agent reloadagent /bye&lt;br /&gt;
&lt;br /&gt;
シェルに {{ic|OK}} と出力されます。&lt;br /&gt;
&lt;br /&gt;
=== pinentry ===&lt;br /&gt;
&lt;br /&gt;
最後に、ユーザーにパスワードを尋ねる方法をエージェントに設定する必要があります。gpg-agent の設定ファイルで設定できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは gtk のダイアログが使われます。使用できるオプションは {{ic|info pinentry}} を見て下さい。ダイアログの実装を変更するには {{ic|pinentry-program}} 設定オプションを設定します:&lt;br /&gt;
{{hc|~/.gnupg/gpg-agent.conf|&lt;br /&gt;
&lt;br /&gt;
# PIN entry program&lt;br /&gt;
# pinentry-program /usr/bin/pinentry-curses&lt;br /&gt;
# pinentry-program /usr/bin/pinentry-qt&lt;br /&gt;
# pinentry-program /usr/bin/pinentry-kwallet&lt;br /&gt;
&lt;br /&gt;
pinentry-program /usr/bin/pinentry-gtk-2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/usr/bin/pinentry-kwallet}} を使うには {{AUR|kwalletcli}} パッケージをインストールする必要があります。}}&lt;br /&gt;
&lt;br /&gt;
変更を行った後は、gpg-agent をリロードしてください。&lt;br /&gt;
&lt;br /&gt;
=== systemd ユーザーで gpg-agent を起動 ===&lt;br /&gt;
&lt;br /&gt;
[[Systemd/ユーザー]]機能を使ってエージェントを起動することが可能です。&lt;br /&gt;
&lt;br /&gt;
systemd ユニットファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/gpg-agent.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GnuPG private key agent&lt;br /&gt;
IgnoreOnIsolate=true&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
ExecStart=/usr/bin/gpg-agent --daemon&lt;br /&gt;
Restart=on-abort&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|GNUPGHOME}} を変更している場合、サービスに環境変数を設定する必要があります。詳しくは [[systemd/ユーザー#環境変数]] を見て下さい。&lt;br /&gt;
* gnupg ホームディレクトリが {{ic|~/.gnupg}} の場合、パスを指定する必要はありません。&lt;br /&gt;
* {{ic|gpg -agent}} は標準ソケットを使いません。代わりに gnupg のホームディレクトリにある {{ic|S.gpg-agent}} という名前のソケットを使います。environment ファイルを読み込んで {{ic|/tmp}} に作成されたランダムなソケットのパスを取得するスクリプトは忘れることができます。&lt;br /&gt;
* gpg-agent の SSH 機能を使用している場合 (--enable-ssh-support)、上記の systemd ユニットは使えません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|gpg-agent が実行していること、接続を待機していることを確認するには、次のコマンドを実行してください: {{ic|$ gpg-connect-agent}}。設定が問題なければ、プロンプトが表示されます (&#039;&#039;bye&#039;&#039; や &#039;&#039;quit&#039;&#039; と入力すれば接続が終了します)。}}&lt;br /&gt;
&lt;br /&gt;
=== 無人のパスフレーズ ===&lt;br /&gt;
&lt;br /&gt;
GnuPG 2.1.0 から gpg-agent と pinentry の利用が必須になりました。これによって {{ic|--passphrase-fd 0}} コマンドラインオプションによって STDIN からパイプで渡されたパスフレーズの後方互換性が損ねられています。古いリリースと同じような機能を使うには2つのことをする必要があります:&lt;br /&gt;
&lt;br /&gt;
まず、gpg-agent の設定を編集して &#039;&#039;loopback&#039;&#039; pinentry モードを許可してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=~/.gnupg/gpg-agent.conf|2=&lt;br /&gt;
allow-loopback-pinentry&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
gpg-agent プロセスが実行している場合は再起動して変更を適用します。&lt;br /&gt;
&lt;br /&gt;
次に、更新する必要があるアプリケーションに以下のようにコマンドラインパラメータを含めて loopback モードを使用します:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --pinentry-mode loopback ...&lt;br /&gt;
&lt;br /&gt;
もしくは、コマンドラインで設定ができない場合、オプションを設定に追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=~/.gnupg/gpg.conf|2=&lt;br /&gt;
pinentry-mode loopback&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|上流の開発者は &#039;&#039;gpg.conf&#039;&#039; で &#039;&#039;pinentry-mode loopback&#039;&#039; を設定すると他の機能が使えなくなる可能性があると示唆しています。出来るかぎりコマンドラインオプションを使うようにして下さい [https://bugs.g10code.com/gnupg/issue1772]。}}&lt;br /&gt;
&lt;br /&gt;
=== SSH エージェント ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gpg-agent&#039;&#039; には OpenSSH エージェントのエミュレーション機能が存在します。既に GnuPG スイートを使っているのであれば、SSH 鍵をキャッシュするのに使うことが可能です。さらに、パスフレーズを管理するのに GnuPG エージェントの PIN エントリダイアログを使えます。&lt;br /&gt;
&lt;br /&gt;
GnuPG エージェントで SSH 鍵を管理するには、{{ic|~/.gnupg/gpg-agent.conf}} ファイルで SSH のサポートを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.gnupg/gpg-agent.conf|&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、&#039;&#039;gpg-agent&#039;&#039; が常時起動するようにします。[[#systemd ユーザーで gpg-agent を起動]]のユニットファイルを使用するか、{{ic|.bashrc}} ファイルに以下の行を記述してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.bashrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Start the gpg-agent if not already running&lt;br /&gt;
if ! pgrep -x -u &amp;quot;${USER}&amp;quot; gpg-agent &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
  gpg-connect-agent /bye &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
SSH が &#039;&#039;ssh-agent&#039;&#039; の代わりに &#039;&#039;gpg-agent&#039;&#039; を使うように {{ic|SSH_AUTH_SOCK}} を設定してください。シェルのタイプに関係なくプロセスが &#039;&#039;gpg-agent&#039;&#039; インスタンスを使うようにするには [[環境変数#pam_env を使う|pam_env]] を使用します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.pam_environment|2=&lt;br /&gt;
SSH_AGENT_PID	DEFAULT=&lt;br /&gt;
SSH_AUTH_SOCK	DEFAULT=&amp;quot;${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
または、Bash を使う場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.bashrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Set SSH to use gpg-agent&lt;br /&gt;
unset SSH_AGENT_PID&lt;br /&gt;
if [ &amp;quot;${gnupg_SSH_AUTH_SOCK_by:-0}&amp;quot; -ne $$ ]; then&lt;br /&gt;
  export SSH_AUTH_SOCK=&amp;quot;/run/user/$UID/gnupg/S.gpg-agent.ssh&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* GnuPG の設定ファイルのディレクトリがデフォルトと異なる場合、{{ic|gpgconf --create-socketdir}} を実行して {{ic|/run/user/$UID/gnupg/}} にソケットディレクトリを作成してください。ソケットディレクトリを作成しないと GnuPG のホームディレクトリにソケットが配置されてしまいます。&lt;br /&gt;
* エージェントを {{ic|gpg-agent --daemon /bin/sh}} で起動している場合、シェルは {{ic|SSH_AUTH_SOCK}} 変数を &#039;&#039;gpg-agent&#039;&#039; から承継します [http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/gpg-agent.c;hb=7bca3be65e510eda40572327b87922834ebe07eb#l1307]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|man gpg-agent}} にあるように、ユーザーを X セッションに切り替えた場合は GPG_TTY も設定して TTY を更新してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.bashrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Set GPG TTY&lt;br /&gt;
export GPG_TTY=$(tty)&lt;br /&gt;
&lt;br /&gt;
# Refresh gpg-agent tty in case user switches into an X session&lt;br /&gt;
gpg-connect-agent updatestartuptty /bye &amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gpg-agent&#039;&#039; が起動していれば [[SSH 鍵#ssh-agent|ssh-agent]] と同じように &#039;&#039;ssh-add&#039;&#039; で鍵を追加できます。追加された鍵は {{ic|~/.gnupg/sshcontrol}} ファイルに保存されます。パスフレーズが必要になったときは毎回 &#039;&#039;pinentry&#039;&#039; ダイアログが表示されます。パスフレーズのキャッシュは {{ic|~/.gnupg/gpg-agent.conf}} ファイルで制御します。以下の例では &#039;&#039;gpg-agent&#039;&#039; で鍵を3時間キャッシュします:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.gnupg/gpg-agent.conf|&lt;br /&gt;
default-cache-ttl-ssh 10800&lt;br /&gt;
max-cache-ttl-ssh 10800}}&lt;br /&gt;
&lt;br /&gt;
== スマートカード ==&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|pcsclite}} と {{Pkg|libusb-compat}} をインストールして、{{ic|pcscd.service}} サービスを [[systemd#ユニットを使う|systemd]] で実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
GnuPG はスマートカードリーダーのインターフェイスとして &#039;&#039;scdaemon&#039;&#039; を使います。詳しくは [[man ページ]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== GnuPG のみ設定 ===&lt;br /&gt;
&lt;br /&gt;
GnuPG ベース以外のカードを使う予定がない場合は、{{ic|~/.gnupg/scdaemon.conf}} の {{Ic|reader-port}} パラメータを確認してください。&#039;0&#039; が最初に利用できるシリアルポートリーダーを、&#039;32768&#039; (デフォルト) が最初の USB リーダーを示しています。&lt;br /&gt;
&lt;br /&gt;
=== GnuPG と OpenSC ===&lt;br /&gt;
&lt;br /&gt;
opensc ドライバーであらゆるスマートカードを使う場合は (例: いろいろな国の ID カード)、GnuPG の設定に注意する必要があります。何も設定をしていないと {{Ic|gpg --card-status}} を使った時に以下のようなメッセージが表示されることがあります:&lt;br /&gt;
&lt;br /&gt;
 gpg: selecting openpgp failed: ec=6.108&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、scdaemon はデバイスに直接接続しようとします。リーダーが他のプロセスによって使用中だとこの接続は失敗します。例えば: OpenSC によって使用される pcscd デーモン。この状況に対処するには、opensc と同じ基盤のドライバーを使って一緒に動作できるようにする必要があります。scdaemon に pcscd を使用させるため、{{ic|~/.gnupg/scdaemon.conf}} から {{Ic|reader-port}} を削除して、{{ic|libpcsclite.so}} ライブラリの場所を指定し、ccid を無効化してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.gnupg/scdaemon.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
pcsc-driver /usr/lib/libpcsclite.so&lt;br /&gt;
card-timeout 5&lt;br /&gt;
disable-ccid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
OpenSC を使わない場合は {{Ic|man scdaemon}} をチェックしてください。&lt;br /&gt;
&lt;br /&gt;
== Tips and tricks ==&lt;br /&gt;
&lt;br /&gt;
=== 他のアルゴリズム ===&lt;br /&gt;
&lt;br /&gt;
強力なアルゴリズムを使用したい場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.gnupg/gpg.conf|&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
personal-digest-preferences SHA512&lt;br /&gt;
cert-digest-algo SHA512&lt;br /&gt;
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed&lt;br /&gt;
personal-cipher-preferences TWOFISH CAMELLIA256 AES 3DES&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
GnuPG の最新版では、デフォルトのアルゴリズムとして SHA256 と AES が使われており、どちらも殆どの場合安全です。しかしながら、2.1 以前の古い GnuPG を使っている場合や、さらに高いセキュリティを求めたい場合、上記のように設定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
=== パスワードの暗号化 ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[pass]] は以下の作業を自動化します。}}&lt;br /&gt;
&lt;br /&gt;
パスワードを暗号化すれば、設定ファイルに平文で書き込まれなくなります。メールのパスワードなどが良い例でしょう。&lt;br /&gt;
&lt;br /&gt;
まずパスワードを記述したファイルを作成してください。パスワードの後に空行を&#039;&#039;&#039;一行&#039;&#039;&#039;だけ追加しておく必要があります。そうしないとファイルを評価するときに gpg がエラーメッセージを返します。&lt;br /&gt;
&lt;br /&gt;
そして次を実行:&lt;br /&gt;
&lt;br /&gt;
 $ gpg -e -a -r &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039; &#039;&#039;your_password_file&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-e}} は encrypt、{{ic|-a}} は armor (ASCII 出力)、{{ic|-r}} は受取人のユーザー ID です。&lt;br /&gt;
&lt;br /&gt;
新しく {{ic|&#039;&#039;your_password_file&#039;&#039;.asc}} ファイルが作られます。&lt;br /&gt;
&lt;br /&gt;
=== 鍵の無効化 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
*無効化証明書にアクセスできれば誰でも鍵を無効化して、利用できなくすることができてしまいます。&lt;br /&gt;
*鍵を無効化するのは、鍵が解読されたり消失したり、あるいはパスフレーズを忘れた場合にのみ行なってください。}}&lt;br /&gt;
&lt;br /&gt;
新しい鍵を生成すると無効化証明書が自動的に生成されます。ユーザーが手動で後から生成することも可能です。無効化証明書は {{ic|~/.gnupg/openpgp-revocs.d/}} に存在します。証明書のファイル名は無効化する鍵のフィンガープリントになります。&lt;br /&gt;
&lt;br /&gt;
鍵を無効化したい場合、無効化証明書をインポートするだけです:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --import &#039;&#039;&amp;lt;fingerprint&amp;gt;&#039;&#039;.rev&lt;br /&gt;
&lt;br /&gt;
そして鍵サーバーをアップデート:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --keyserver subkeys.pgp.net --send &#039;&#039;&amp;lt;userid&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 信頼モデルの変更 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは 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 メーリングリストのメール] を参照。&lt;br /&gt;
&lt;br /&gt;
=== 受取人の id を全て隠す ===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは暗号メッセージには受取人の鍵 ID が含まれます。{{ic|hidden-recipient &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}} を使うことで暗号化するときに ID は削除することが可能です。全ての受取人で ID を削除するには設定ファイルに {{ic|throw-keyids}} を追加してください。この設定によってメッセージの受取人を隠すことができ、トラフィックの解析に対抗することができます (ソーシャルエンジニアリングを使うことでメッセージを復号化できてしまえば誰が受取人なのか確認される可能性があります)。欠点としては、暗号鍵を全て試すことになるので復号化が遅くなります ({{ic|--try-secret-key &#039;&#039;&amp;lt;user-id&amp;gt;&#039;&#039;}})。&lt;br /&gt;
&lt;br /&gt;
=== キーサインパーティで caff を使う ===&lt;br /&gt;
&lt;br /&gt;
キーサーバーやキーリングにある鍵の正当性をユーザーが確認 (つまり鍵の持ち主が本人であることを確認) できるように、PGP/GPG はいわゆる信頼の輪 (&amp;quot;Web of Trust&amp;quot;) を利用しています。信頼の輪を維持するために様々なハッカーイベントが開かれており、キーサインパーティはそのひとつです。[[Wikipedia:Zimmermann–Sassaman key-signing protocol|Zimmermann-Sassaman]] 鍵署名プロトコルはキーサインパーティを効果的に行うための方式です。[http://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html こちら] にハウツー記事があります。&lt;br /&gt;
&lt;br /&gt;
キーサインパーティの後、鍵に署名したり所有者に署名を送るのを簡略化するために、&#039;&#039;caff&#039;&#039; というツールを使うことができます。AUR のパッケージ {{AUR|caff-svn}} でインストールすることができます。&lt;br /&gt;
&lt;br /&gt;
所有者に署名を送信するには [[Wikipedia:ja:メール転送エージェント|MTA]] が必要です。MTA を設定していない場合、[[msmtp]] をインストールして下さい。&lt;br /&gt;
&lt;br /&gt;
=== 長い ID やフィンガープリントを毎回表示する ===&lt;br /&gt;
&lt;br /&gt;
長い鍵 ID を表示させるには設定ファイルに {{ic|keyid-format 0xlong}} を追加してください。鍵の指紋を完全に表示するには、設定ファイルに {{ic|with-fingerprint}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== http プロキシを使う ===&lt;br /&gt;
2.1.9 から http プロキシのオプションは以下のように設定できます:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --keyserver-option http-proxy=HOST:PORT&lt;br /&gt;
&lt;br /&gt;
詳しくは https://bugs.gnupg.org/gnupg/issue1786 を参照。&lt;br /&gt;
&lt;br /&gt;
=== Not enough random bytes available ===&lt;br /&gt;
鍵を生成するときに、gpg は以下のエラーを表示することがあります:&lt;br /&gt;
 Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy!&lt;br /&gt;
残っているエントロピーを確認するには、カーネルパラメータをチェックしてください:&lt;br /&gt;
 $ cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
エントロピーがたくさんある健康的な Linux 環境ならマックスの 4,096 ビットに近い値が返されます。返ってくる値が 200 以下の場合、システムのエントロピーが足りていません。&lt;br /&gt;
&lt;br /&gt;
エントロピー問題を解決するには、メッセージ通りのことをするのがベストです (例: ディスクを動かす、マウスを動かす、wiki を編集する - 何でもエントロピーの生成に繋がります)。それでも問題が解決しない場合、エントロピーを使い果たしているサービスが何なのかチェックして、しばらくそのサービスを停止してみてください。サービスを停止できない場合、[[乱数生成#高速な RNG]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== su ===&lt;br /&gt;
&lt;br /&gt;
{{Ic|pinentry}} を使う場合、使用するターミナルデバイス (例: {{Ic|/dev/tty1}}) の適切なパーミッションが必要です。しかしながら、&#039;&#039;su&#039;&#039; (または &#039;&#039;sudo&#039;&#039;) を使用すると、所有権は元のユーザーに残り、新しいユーザーにはなくなります。これでは pinentry はたとえ root であっても起動しません。pinentry を使用する (つまりエージェントで gpg を使用する) 前にデバイスのパーミッションを同じ所に変更する必要があります。root で gpg を実行する場合、gpg を使用する直前に所有者を root に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # chown root /dev/ttyN  # where N is the current tty&lt;br /&gt;
&lt;br /&gt;
そして gpg を使用した後に元に戻して下さい。おそらく {{Ic|/dev/pts/}} と同じのが正しいです。&lt;br /&gt;
&lt;br /&gt;
{{Note|tty の所有者が pinentry を実行しているユーザーと一致している必要があります。{{Ic|tty}} グループに属しているだけでは不十分です。}}&lt;br /&gt;
&lt;br /&gt;
=== エージェントがファイルの終末についてエラーを表示する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの pinentry プログラムは pinentry-gtk-2 であり、D-Bus セッションバスを正しく実行する必要があります。詳しくは[[一般的なトラブルシューティング#セッションのパーミッション]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|pinentry-qt}} を使うこともできます。[[#pinentry]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== KGpg 設定のパーミッション ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|kdeutils-kgpg}}{{Broken package link|replaced by {{Pkg|kgpg}}}} には {{ic|~/.gnupg/}} のオプションが使えないという問題がありました。非推奨となった &#039;&#039;options&#039;&#039; ファイルが原因です。[https://bugs.kde.org/show_bug.cgi?id=290221 バグ] レポートを参照してください。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|~/.gnupg}} フォルダのパーミッションを {{ic|drwxr-xr-x}} に設定しないと &#039;&#039;KGpg&#039;&#039; が起動しないという報告もあります。パーミッションを変更したときは、ディレクトリの中身のパーミッションを {{ic|-rw-------}} にしてください。さらに、バグとして [https://bugs.kde.org/buglist.cgi?quicksearch=kgpg 開発者] に報告してください。&lt;br /&gt;
&lt;br /&gt;
=== gnome-keyring と gpg-agent が衝突する ===&lt;br /&gt;
&lt;br /&gt;
Gnome keyring は GPG エージェントコンポーネントを実装していますが、GnuPG バージョン 2.1 から、GnuPG は {{ic|GPG_AGENT_INFO}} 環境変数を無視するようになったため、Gnome keyring を GPG エージェントとして使うことはできません。&lt;br /&gt;
&lt;br /&gt;
ただし、バージョン 0.9.6 から {{Pkg|pinentry}} パッケージには {{Ic|pinentry-gnome3}} プログラムが入っています。{{Ic|gpg-agent.conf}} ファイルに以下のオプションを設定することで pinentry プログラムを利用することが可能です:&lt;br /&gt;
 pinentry-program /usr/bin/pinentry-gnome3&lt;br /&gt;
&lt;br /&gt;
バージョン 0.9.2 から、全ての pinentry プログラムでは設定によって libsecret でパスフレーズを保存することができるようになりました。例えば、{{Ic|pinentry-gnome3}} でユーザーにパスフレーズの要求がいった場合に、パスワードマネージャを使ってパスフレーズを保存するかどうか決めるチェックボックスが表示されます。残念ながら、{{Pkg|pinentry}} パッケージでこの機能は有効になっていません (理由は {{Bug|46059}} を参照)。libsecret を有効にするために {{AUR|pinentry-libsecret}} を代替として使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== mutt と gpg ===&lt;br /&gt;
&lt;br /&gt;
GnuPG 2.1 現在、セッションごとに GnuPG のパスワードが一回要求されるようにするには、[https://bbs.archlinux.org/viewtopic.php?pid=1490821#p1490821 こちらのフォーラムスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== gnupg バージョン 2.1 にアップグレードすると鍵が&amp;quot;消失&amp;quot;する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|gpg --list-keys}} を実行しても以前まで使っていた鍵が表示されない場合、また、アプリケーションが鍵を見つけられないまたは鍵が不正だとエラーを吐く場合、鍵が新しいフォーマットに移行できていない可能性があります。&lt;br /&gt;
&lt;br /&gt;
[http://jo-ke.name/wp/?p=111 GnuPG invalid packet workaround] を読んで下さい。要約すると、旧式の {{ic|pubring.gpg}} と {{ic|secring.gpg}} ファイルの鍵にはバグが存在しており、新しい {{ic|pubring.kbx}} ファイルと {{ic|private-keys-v1.d/}} サブディレクトリ、そしてディレクトリのファイルによって置き換えられたということが書かれています。以下のコマンドを実行することで消失した鍵を復旧させることができるかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ cp -r .gnupg gnupgOLD&lt;br /&gt;
 $ gpg --export-ownertrust &amp;gt; otrust.txt&lt;br /&gt;
 $ gpg --import .gnupg/pubring.gpg&lt;br /&gt;
 $ gpg --import-ownertrust otrust.txt&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
=== (鍵を受信しようとすると) どのキーサーバーでも gpg がフリーズする ===&lt;br /&gt;
&lt;br /&gt;
特定のキーサーバーで鍵を受信しようとして gpg がフリーズしている場合、dirmngr を kill して (問題が起こっていない) 他のキーサーバーにアクセスできるようにする必要があります。そうしないと全てのキーサーバーでフリーズしてしまいます。&lt;br /&gt;
&lt;br /&gt;
=== スマートカードが検出されない ===&lt;br /&gt;
&lt;br /&gt;
スマートカードにアクセスするための権限がない場合、カードを正しく設定して接続しても、{{ic|card error}} が表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
スマートカードにアクセスする必要があるユーザーに {{ic|scard}} を追加することで解決できます。追加したら、以下のような [[Udev#udev ルールを記述する|udev]] ルールを作って下さい:&lt;br /&gt;
{{hc|/etc/udev/rules.d/71-gnupg-ccid.rules|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;usb&amp;quot;, ENV{ID_VENDOR_ID}==&amp;quot;1050&amp;quot;, ENV{ID_MODEL_ID}==&amp;quot;0116|0111&amp;quot;, MODE=&amp;quot;660&amp;quot;, GROUP=&amp;quot;scard&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
VENDOR と MODEL は {{ic|lsusb}} の出力にあわせて変更する必要があります。上記は YubikeyNEO の例です。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://gnupg.org/ GNU Privacy Guard ホームページ]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Creating_GPG_Keys Creating GPG Keys (Fedora)]&lt;br /&gt;
* [https://wiki.debian.org/Subkeys OpenPGP subkeys in Debian]&lt;br /&gt;
* [http://blog.sanctum.geek.nz/series/linux-crypto/ 詳しい gpg のチュートリアル]&lt;br /&gt;
* [https://help.riseup.net/en/security/message-security/openpgp/gpg-best-practices gpg.conf の推奨事項とベストプラクティス]&lt;br /&gt;
* [https://github.com/ioerror/torbirdy/blob/master/gpg.conf Torbirdy gpg.conf]&lt;br /&gt;
* [https://www.reddit.com/r/GPGpractice/ /r/GPGpractice - a subreddit to practice using GnuPG.]&lt;/div&gt;</summary>
		<author><name>Ponkotuy</name></author>
	</entry>
</feed>