例えば file
という名前のファイルを暗号化しようと思った場合は
lucy~$
gpg
-e -r
user_id file
とします。file.gpg
という暗号化されたファイルができます。user_id の部分には、送る相手の鍵の USER ID を指定します。
これについては、USER ID の指定を参照して下さい。以下では その指定部分は user_id
と書くことにしておきます。
また、-r user_id
を省略すると、USER ID を尋ねてきます。
メールに埋め込む場合など、アスキー形式で送る場合には、
lucy~$
gpg
-ea -r
user_id file
のようにオプションに a
を追加してアスキー形式を指定します。
この場合のデフォルトの出力ファイルは file.asc
です。
出力ファイルを変更するには o
オプションを使います。これは他の場合でも同様。
lucy~$
gpg
-ea -r
user_id file
-o
output_file
暗号化する場合のオプション e
を d
に変えるだけです。アスキー形式でも同様です。
lucy~$
gpg
-d
file.gpg
結果は標準出力にでるので、複号したファイルを保存するには、
とリダイレクトするなどすればいいでしょう。lucy~$
gpg
-d
file.gpg
>file
lucy~$
gpg
-s
file
lucy~$
gpg
--sign
file
file
から署名つきメッセージを作成します。
上のようにタイプした後、メッセージに従ってパスフレーズを入力すれば、file.gpg
という署名付きメッセージができます。(なお、こうしてできたファイル読むには
lucy~$
gpg
-d
file.gpg
とします。)
ただし、これはバイナリファイルなので、メールで送るには不便です。そこで
lucy~$
gpg
-sa
file
lucy~$
gpg
--sign --armor
file
とするとアスキー形式のファイルができます。ファイル名は file.asc
になります。
しかし、テキストファイルに署名する場合は次のように本文はそのままの形で使うクリア署名を使うことが多いと思われます。
lucy~$
gpg
--clearsign
file
これにより、file.asc
というファイルができます。この中身は元のテキストをそのまま含み、それにアスキー形式の署名を添付した形になっています。
さて、たとえクリア署名でも送信するファイルは元ファイルと同じではありませんし、署名は元ファイルと結合されています。 それでは不都合な場合のために、元ファイルは完全に残したまま署名は別ファイルとする分離署名が用意されています。これを生成するには、
lucy~$
gpg
-b
file
lucy~$
gpg
--detach-sig
file
などとします。署名ファイルはデフォルトでは file.sig
になります。もちろん次のようにしてアスキー形式にすることもできます。
lucy~$
gpg
-ba
file
この場合の署名ファイルはデフォルトでは、file.asc
というファイル名になります。
署名を検証する時は、
lucy~$
gpg
--verify
file
とします。これは標準の形式でもアスキー形式でも同様です。分離署名の場合は、file
とその署名 file.sig
に対して
lucy~$
gpg
--verify
file.sig file
とします(署名と元ファイルの順序に注意)。署名がアスキー形式でも同じです。
相手がこちらの公開鍵を確かに本人のものだと確認できるように、普段からメールに自分の公開鍵の電子指紋を添付しておくといいです。 相手は公開鍵から生成される電子指紋と普段のメールに添付されている鍵指紋とを比べることで正しい鍵であることをチェックできます(→電子指紋 (digital fingerprint)、鍵指紋 (key fingerprint) 参照)。
lucy~$
gpg
--fingerprint
user_id
とすれば、標準出力に user_id で指定した鍵の電子指紋が出力されます。コピーアンドペーストするなり、リダイレクトするなりして保存しておきましょう。
次のようにすれば、user_id で指定した鍵をアスキー形式で取り出せます。
lucy~$
gpg
-a --export
user_id
結果は標準出力に出されるので、コピーアンドペーストやリダイレクトで保存してから、ウェブページに貼り付けておくなりしましょう。
オプションの -a
を指定しなければ、バイナリのままの鍵が出力されますが、この場合は適当にリダイレクトしないと画面が乱れちゃいます。例えば
lucy~$
gpg
--export
user_id
>keyfile
とかすると、keyfile
に素の公開鍵が保存されます。
直接キーサーバーに鍵を登録するには、次のようにします。KEY_SERVER の部分はキーサーバーの URL に読み換えて下さい。
lucy~$
gpg
--keyserver
KEY_SERVER
--send-keys
例えばウェブページなどで公開されている相手の公開鍵を自分の鍵束に登録するには、その鍵を一旦ファイルに落して(そのファイルを file
とします)、次のようにします。鍵はアスキー形式でも素のままのものでもどちらでも構いません。
lucy~$
gpg
--import
file
なお、特に鍵の輪の中に入ってない場合は、鍵指紋と照合するなのでして確認した後に署名しないと、実際の検証には使えないので、登録後はそれも忘れずに。
また、キーサーバーなどに登録されているものをそのまま読み込むには次のようにします。KEY_SERVER の部分はキーサーバーの URL に読み換えて下さい。
lucy~$
gpg
--keyserver
KEY_SERVER
--recv-keys
user_id
lucy~$
gpg
--edit-key
user_id
とすると、対話的に鍵関係の編集、つまり、鍵を破棄したり、信用度を調整したり、という操作ができます。上のように起動すると、
Command>
というプロンプトがでます。これに対して help と打込むとコマンドとその説明がでます。日本語化してあると、
Command>
help
quit このメニューを終了 save 保存して終了 help このヘルプを見る fpr 指紋を見る list 鍵とユーザ ID の一覧 uid ユーザ ID N の選択 key 副鍵 N の選択 check 署名の一覧 sign 鍵へ署名 lsign 鍵に書き出し不可な署名 adduid ユーザ ID の追加 deluid ユーザ ID の消去 addkey 副鍵の追加 delkey 副鍵の削除 delsig 署名の削除 expire 有効期限の変更 toggle 秘密鍵と公開鍵一覧の切り替え pref 優先順位の一覧
というメニューが表示されるはずです。USER ID を追加してから前のものを消せば、USER ID の変更も可能です。
ある公開鍵が当人のものかどうかの判断には一つには鍵指紋も有効です。ただこの場合は鍵指紋自体の信用が問題になるので、普段からメールをやり取りしてる相手でないと難しいことが多いでしょう。
そこで、鍵束の項でも説明したように、信用できる人が信用している鍵は信用するという「信用の輪」を利用する仕組も用意されています[1]。 具体的には、鍵には署名をつけることができ、信用できる人が署名している鍵は信用度をアップするという方式です。
鍵の有効性(公開鍵が当人のものかどうか)は次のようにランク付けされています。
鍵の有効性 | ||
---|---|---|
有効性 | 短縮形 | 説明 |
unknown | q | 情報が不十分 |
none | n | 無効 |
marginal | m | 多分本物 |
full | f | 信用できる |
error | e | 計算に失敗 |
ultimate | u | 究極的に信用(=自分の鍵) |
一方、あなたの鍵束の中の鍵の持ち主に対しての信用のレベルは次の通りです。
鍵の持ち主への信用度 | ||
---|---|---|
信用度 | 短縮形 | 説明 |
- | - | 未設定 |
unknown | q | 未知 |
none | n | 信用しない |
marginal | m | ある程度信用する |
full | f | 完全に信用する |
どちらにおいても、短縮形は、gpg --edit-key
などでの表示に使われます(下の実際の設定の所を参照)。
鍵の有効性を、鍵に付加された署名と署名した人の信用度から計算する方法は、デフォルトでは
実際の信用度の設定は、gpg --edit-key
で編集モードに入り、user_id
trust
コマンドを用いて行います。同様に鍵への署名は sign
コマンドです。実際には次のような感じです。
fuge さんが、foo bar (baz) さんの鍵に署名する場合を想定してます。
lucy~$
gpg
--edit-key baz
gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc. (中略)Command>
trust
pub 1024D/E93A2C66 created: 2000-03-12 expires: never trust: -/q sub 1024g/56DB3E76 created: 2000-03-12 expires: never (1) foo bar (baz) <foo@inage.or.jp>
公開鍵の右の方に trust: -/q
と見えてますね。1番目が鍵の持ち主への信用度、二番目が鍵の有効性で、ともに短縮形 (信用度の短縮形/有効性の短縮形) で表示されています。
現在は信用度は未設定で、有効性は unknown ということです。
このユーザの信用度を他のユーザの鍵で検証して決めて下さい。 (パスポートを見せてもらったり、他から得た指紋と照合したり...)? 1 = 未知 2 = 信用しない 3 = ある程度信用する 4 = 完全に信用する s = より詳しい情報を見る m = メインメニューに戻る あなたの決定は?
さて、ここでは 4 と答えてみます。
あなたの決定は? 4
pub 1024D/E93A2C66 created: 2000-03-12 expires: never trust: f/q
sub 1024g/56DB3E76 created: 2000-03-12 expires: never
(1) foo bar (baz) <foo@inage.or.jp>
では次に署名もしちゃいましょう。
Command>
sign
pub 1024D/E93A2C66 created: 2000-03-12 expires: never trust: f/q Fingerprint: B07D 7899 0F60 7C7A 9D70 E60E F2DD 0386 E93A 2C66 foo bar (baz) <foo@inage.or.jp> 本当に この鍵にあなたの鍵で署名して良いですか: "fuge (hoga) <fuge@inage.or.jp>" 本当に署名しますか?yes
次のユーザのロックを解除するにはパスフレーズが必要です ユーザ: "fuge (hoga) <fuge@inage.or.jp>" 1024 ビット DSA 鍵, ID BFF38FC0 が作成されました 2000-03-20 パスフレーズを入力:←パスフレーズを入力
ここで、check してみると、
Command> check
uid foo bar (baz) <foo@inage.or.jp>
sig! E93A2C66 2000-03-12 [自己署名]
sig! BFF38FC0 2000-04-01 fuge (hoga) <fuge@inage.or.jp>
となって確かに署名がついてることが分かります。(始めの [自己署名] というのは、鍵の生成時に自動的に付けられる本人の署名です。) 最後に save
して終わりです。この後、もう一度編集モードに入れば、trust: の所が f/f に変わっていることも確かめられるはずです。
USER ID の指定方法にはいくつか方法があります。
lucy~$
gpg
--list-keys
とやると、例えば
pub 1024D/F5AF82C4 2000-01-01 foo bar (baz) <foo@inage.or.jp> sub 1024g/C557BF56 2000-01-01
と表示される一組の鍵の場合で説明することにします。上が公開鍵、下が秘密鍵です。
上では F5AF82C4 という数字が(公開)鍵の KEY ID ですが、これで指定することができます。
メールアドレスやその一部を指定する方法があります。いくつか列挙します。
=foo bar (baz) <foo@inage.or.jp>
先頭の = は、完全一致を表します。続けて USER ID の正確なメールアドレスを記します。実際には、
lucy~$
gpg
--fingerprint '=foo bar (baz) <foo@inage.or.jp>'
のように引用符で囲わないと shell に正しく渡せないので注意しましょう。
先頭の = をつけない場合は、例えば<foo@inage.or.jp>とか、
bazとかでも指定できます。複数にマッチする場合の動作は
gpg
のオプションによって違うようです。例えば --fingerprint
では全てを列挙します。
+foo baz bar+ に続けていくつかの USER ID に含まれてる語を並べるやり方があります。並べられた語を一つでも含むものが選択されます。順序は関係ありません。 ただし、それぞれの語は正確に一致している必要があります。 例えば
+foo
でなく +fo
とすると駄目です。
lucy~$
gpg
--fingerprint D88A25D2A5DAF2B42F88F0FECAB6628DF5AF63C4
pub 1024D/F5AF82C4 2000-01-01 foo bar (baz) <foo@inage.or.jp> Key fingerprint = D88A 25D2 A5DA F2B4 2F88 F0FE CAB6 628D F5AF 63C4 sub 1024g/C557BF56 2000-01-01
アスキー形式というのは一言で言うと英数字だけからなるテキスト形式ということです、というのは流石に不正確 (というか、自分でもあまりにあんまりな説明だと思う) ですが、正確な定義が分かる人は説明しなくても分かるような気もするので、これだけにしておきます。
最近では MIME 形式で画像なんかをメールに貼付して送ることができるようになっていますが、これも実際にはアスキーにエンコードして送ってるわけで、鍵とか署名をアスキー形式にできれば、いろいろ都合が良い場面も多いことは想像がつくと思います。 メールやウェブページにも直接目に見える形で貼り付けることができますし。
ということで、gpg では暗号化や署名の時などに -a
オプションを使うことでアスキー形式を出力できるようになっています。
[1] もちろんこの場合の信用できるというのは、人柄とかではなく、不用意にあやしげな鍵に署名したりしないということです。
[2] 例えば、などとすればいいはずです。試してませんが。lucy~$
gpg
--marginals-needed 2 --max-cert-depth 3 --edit-key