**公開鍵暗号とは [#q78b1a1e]
一般にファイルを暗号化するという場合、共通の秘密の言葉、つまりパスワードを使ってこれを鍵として暗号化します。これを共通鍵暗号といいます。暗号化そのものの方式はたくさんのアルゴリズムが世の中には存在します。(DES, AES, ....)~
公開鍵暗号とは公開している鍵で暗号化してもらい、その公開鍵と対をなす他人には内緒の秘密鍵を持っているひとだけが復号できるというもので、共通の秘密の言葉はいらなくなります。
よくたとえに、鍵をかけるときは公開鍵、あけるときは秘密鍵をつかうという表現がされます。
ここで、公開鍵はだれでも知っているのだが、それでは復号できないというのがこの方式のきもです。対になった秘密鍵をつかってのみ復号できるのです。(正確には公開鍵では復号がとても難しく、秘密鍵をつかうととても簡単)
**gnuPGの利用 [#j17fd2f8]
公開鍵暗号を実現するためにPGPというプログラムがありますが、特許問題を回避したオープンソースなgnuPGができました。このgnuPGを利用してアーカイブの暗号化をすることにします。~
GnuPGで暗号化されたファイルをgpgファイルということにします。~
利用までの準備としてgnuPGを導入、公開/秘密鍵の作成、公開鍵の公表があります。

よく暗号の話ではAlice, Bob, Cris(ABC)の3人がいるとして説明されます。
AliceがBobにCrisには内緒で伝えたいことがあるとします。~
(つまりCrisが世間の代表者と考えます。)
全般的に[[gnuPG:http://gnupg.hclippr.com/]]がが詳しいですが少し難しいかもしれません。~
ここではUnix系に関しては説明しません。~
Windows上では[[Gpg4Win:http://www.gpg4win.org/]]が統合環境で利用できて便利の様ですが、私の環境では旨く動かないし、いやな常駐プロセスが入りそうなので、MingW32環境のコマンドライン版について説明します。MingW32環境とはWindows環境そのものでこの版のgnuPGはコマンドプロンプト窓で動作します。もう一つCygwin環境というのもありますが、これはUnix系と考えて差し支えありません。

共通鍵暗号方式ではパスワードをAliceとBobは共有しておかなければなりません。
共有するにはすくなくとも1回は物理的にAliceからBobに伝えないといけないので、
Crisはは様々な手段を講じてそれを横取りして盗み見ることができるのです。
***インストール [#a0f98969]
[[http://keizai.xrea.jp/gnupg/gpg.html:http://keizai.xrea.jp/gnupg/gpg.html]]にインストールから設定、利用まで
とてもよく説明されていますが、リンクされているバイナリがちょっと古いので、
[[http://www.ring.gr.jp/pub/net/gnupg/binary/:http://www.ring.gr.jp/pub/net/gnupg/binary/]]から一番あたらしそうな
[[gnupg-w32cli-1.4.12.exe:http://www.ring.gr.jp/pub/net/gnupg/binary/gnupg-w32cli-1.4.12.exe]]をダウンロードして使うようにしてください。~
なお、鍵の種類は上の説明のものと「既定」が違いますが、あまり気にしないで「既定」でいいとおもいます。世間的にはDSA/Elgamalの方が暗号の強度は高いと言われているようです。
RSAのときは鍵長は2048ビット以上を設定してください。
 キー生成時にユーザーIDとか何か文字列をいれないといけないのですが
 今回の目的には適当なものでいいです。
 たとえばメールアドレスはにせものでもいいです。
 RFCにはexample.com example.orgは文書中に例を書くために利用できるとされています。
 ですので、hogehoge@example.orgとかで充分です。
 他の目的でgnuPGを使うときは正しいキーをつくって利用してくださいね。
説明の通りに公開鍵をファイルにはき出し、その内容を[[連絡けいじばん:http://jbbs.livedoor.jp/radio/24266/]]に貼ってください。

公開鍵暗号方式はBobが公開鍵を公表しているので、それを使ってAliceは伝えたいこと暗号化しそれをBobに送れば、秘密鍵をもつBobだけが復号できるのです。、
Crisには暗号化された何かが渡ったことしかわかりません。Bobの公開鍵では復号ができないので
あきらめるしかありません。
つぎにsaramiの公開鍵を自分の環境に登録します。
私が作ったgpgファイルにはsaramiの署名がついています。
これはgpgファイルをsaramiが作ったことの証明です
これを確認するためにはsaramiの公開鍵を持っていないといけません。~
添付されているsaramiの公開鍵をsarami_public_key.txt..ascに保存して
>gpg --import sarami_public_key.txt.asc

WebのSSL通信は公開鍵暗号を利用したものです。
で取り込んでください。~
これだけではだめで、この鍵にあなたの署名が必要となります。
この鍵が間違いないかを確認するためです。
>gpg --lsign-key sarami~
gpg --sign-key sarami~
(どちらか)

**GnuPGの利用 [#j17fd2f8]
***インストール [#a0f98969]
***初期設定 [#k407c00e]
パスフレーズをいれて署名完了です。~
信用データベースとやらを更新しないといけないので、
一回キーリストを表示してみましょう。
>gpg --list-keys

そうすれば信用データベースが更新されます。

これで公開キーの取り込みは完了です。
saramiに対してだけでなく一般的につかえる手順です。~
他の人向けに暗号化する場合、その人の公開鍵を上のように取り込まなければなりません。

***使い方 [#z5e77e51]
***付録 [#k6347a42]
ggpファイルhogehoge.ogoを復号するには
>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のみそです。
これらの情報をファイル付加して送ればいいわけです。~
逆に暗号化時に公開鍵が登録されていない場合、復号できなくなります。
これを回避するための方策は[[セッションキー]]で説明しています。

そして復号するとは、パスワードを自分の秘密鍵をつかって取得してから、
そのパスワードを使って、ファイルを戻すということです。
自分の秘密鍵をまもるための合い言葉がパスフレーズです。 
ですから、パスフレーズはこれらの暗号/復号では直接に関係ありません。
実際、いつでも変更できます。


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS