**gnuPGの利用 [#j17fd2f8] 公開鍵暗号を実現するためにPGPというプログラムがありますが、特許問題を回避したオープンソースなgnuPGがあります。このgnuPGを利用してアーカイブの暗号化をすることにします。~ GnuPGで暗号化されたファイルをgpgファイルということにします。~ 利用までの準備としてgnuPGを導入、公開/秘密鍵の作成、公開鍵の公表があります。 全般的に[[このページ:http://gnupg.hclippr.com/]]が詳しいですが少し難しいかもしれません。~ ここではUnix系に関しては説明しません。~ Windows上では[[Gpg4Win:http://www.gpg4win.org/]]が統合環境で利用できて便利の様ですが、私の環境では旨く動かないし、いやな常駐プロセスが入りそうなので、MingW32環境のコマンドライン版について説明します。MingW32環境とはWindows環境そのものでこの版のgnuPGはコマンドプロンプト窓で動作します。もう一つCygwin環境というのもありますが、これはUnix系と考えて差し支えありません。 ***インストール [#a0f98969] [[http://www.okomeda.net/?GnuPG:http://www.okomeda.net/?GnuPG]]にインストールから設定、利用までとてもよく説明されていますが、リンクされているバイナリがちょっと古いので、 [[http://www.ring.gr.jp/pub/net/gnupg/binary/:http://www.ring.gr.jp/pub/net/gnupg/binary/]]から一番あたらしそうな [[gnupg-w32cli-1.4.15.exe:http://www.ring.gr.jp/pub/net/gnupg/binary/gnupg-w32cli-1.4.15.exe]]をダウンロードして使うようにしてください。~ なお、鍵の種類は上の説明のものと「既定」が違いますが、あまり気にしないで「既定」でいいとおもいます。世間的にはDSA/Elgamalの方が暗号の強度は高いと言われているようです。 RSAのときは鍵長は2048ビット以上を設定してください。 キー生成時にユーザーIDとか何か文字列をいれないといけないのですが 今回の目的には適当なものでいいです。 たとえばメールアドレスはにせものでもいいです。 RFCにはexample.com example.orgは文書中に例を書くために利用できるとされています。 ですので、hogehoge@example.orgとかで充分です。 他の目的でgnuPGを使うときは正しいキーをつくって利用してくださいね。 説明の通りに公開鍵をファイルにはき出し、その内容を[[連絡けいじばん:http://jbbs.livedoor.jp/radio/24266/]]に貼ってください。 つぎにsaramiの公開鍵を自分の環境に登録します。 私が作ったgpgファイルにはsaramiの署名がついています。 これはgpgファイルをsaramiが作ったことの証明です これを確認するためにはsaramiの公開鍵を持っていないといけません。~ 添付されているsaramiの公開鍵をsarami_public_key.txt..ascに保存して >gpg --import sarami_public_key.txt.asc で取り込んでください。~ これだけではだめで、この鍵にあなたの署名が必要となります。 この鍵が間違いないかを確認するためです。 >gpg --lsign-key sarami~ gpg --sign-key sarami~ (どちらか) パスフレーズをいれて署名完了です。~ 信用データベースとやらを更新しないといけないので、 一回キーリストを表示してみましょう。 >gpg --list-keys そうすれば信用データベースが更新されます。 これで公開キーの取り込みは完了です。 saramiに対してだけでなく一般的につかえる手順です。~ 他の人向けに暗号化する場合、その人の公開鍵を上のように取り込まなければなりません。 ***使い方 [#z5e77e51] ggpファイルhogehoge.gpgを復号するには >gpg hogehoge.gpg とするだけです。 このときパスフレーズを求められます。 ただし、暗号時にちょっと細工をしているので、面倒な作業が発生するかもしれません。 下の参考メモを参照してください。 ***参考 [#k6347a42] こちらではいただいた公開鍵群すべて宛に暗号化します。 一般的にこのような場合、メールでいうCc状態なので、他の受け取り者の情報が出てしまう場合があります。 ですので、throw-keyidをオプションして(正確には hidden-recipientで各IDを指定)情報を含めない様にしています。 つまり、Bcc状態となります。これももっと正確に言うと、宛先人の数はわかるかもしれないが、 keyidが0となって含まれているのでIDが特定されないということです。 (登録keyidをwebで公表しているのだから意味ないかも) この場合、復号するときgpgは自分の公開キーが含まれているかわからないので、それぞれのキーごとに復号を試みます。つまり、ちょっと時間がかかります。最近のgnuPGでないとだめかもしれません。パスフレーズを入れまくらないといけないかもしれません。私はgpg.confの最後に >passphrase hogehoge と追加して入力を省略できるようにしています。 本当は良くないだろうけど。けど今回の利用法では充分でしょう。 >gpg --passphrase hogehoge hoge.gpg でもいいはず。 gpg.confは unix系なら ~/.gnupg の下、 windows系ならApplication Dataのgnupgの下にあると思います。 1つのファイルで複数人宛てに暗号化できるのは いわゆるランダムなパスワード(セッションキー)でまずファイル全体を暗号化して、 そのパスワード(セッションキー)をそれぞれの公開鍵で暗号化することで成り立っています。 これがpgp/gnuPGのみそです。 これらの情報をファイル付加して送ればいいわけです。~ 逆に暗号化時に公開鍵が登録されていない場合、復号できなくなります。 これを回避するための方策は[[セッションキー]]で説明しています。 そして復号するとは、パスワード(セッションキー)を自分の秘密鍵をつかって取得してから、 そのパスワード(セッションキー)を使って、ファイルを戻すということです。 自分の秘密鍵をまもるための合い言葉がパスフレーズです。 ですから、パスフレーズはこれらの暗号/復号では直接に関係ありません。 実際、いつでも変更できます。