ログイン
編集不可のページディスカッション情報添付ファイル
"alstamber/HowToUseGPGForMac"の差分

MMA
2と3のリビジョン間の差分
2011-05-10 02:30:43時点のリビジョン2
サイズ: 5066
編集者: alstamber
コメント:
2011-05-10 14:08:40時点のリビジョン3
サイズ: 12883
編集者: alstamber
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 73: 行 73:
=== 鍵をつくろう ===
 * Thunderbird上でGUI的に作れる方法と, 端末を用いてCUI的に作れる方法がある.
  * MMA的にはFreeBSDを使用する機会が多いので, CUIを用いて鍵を作成することとする.

 * 端末を立ち上げる. 次のように操作.
{{{
 % gpg --gen-key
}}}
 * 指示に従って操作する.
{{{
ご希望の鍵の種類を選択してください:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
選択は? 1

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) /* 何も押さずにエンター */

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n> = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0) /* 好きなのを選べば良い */

Key does not expire ****
これで正しいですか? (y/N) y

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

本名: Naben Erst

メールアドレス: naben@erst.com

コメント:

次のユーザーIDを選択しました:
    “Naben Erst <naben@erst.com>”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O /* 大文字のオー */

パスフレーズを入力: /* パスフレーズなのでスペースなどが入っていてもいい. つまり文章でもよい */
パスフレーズを再入力: /* もう一度 */

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。 /* 鍵の生成はすぐ終わってしまうがこの間にキーボードを叩いたりするとよりいい鍵を作れる */

gpg: 鍵********を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0 有効性: 2 署名: 2 信用: 0-, 0q, 0n, 0m, 0f, 2u
gpg: 深さ: 1 有効性: 2 署名: 0 信用: 0-, 0q, 0n, 0m, 2f, 0u
pub 2048R/******** 20xx-xx-xx
                 指紋 = **** **** **** **** **** **** **** **** **** ****
uid Naben Erst <naben@erst.com>
sub 2048R/******** 20xx-xx-xx
}}}

 * この時pub 2048Rの横にある8文字の記号が「ID」と呼ばれるものである. メモしておくと良い.
 * 指紋とかかれているところの横にある記号の羅列は, FingerPrintと呼ばれるものである.

=== 鍵をThunderbirdに登録する ===
 * Thunderbirdを起動して, 「OpenPGP」→「設定ウィザード」を開く.
  * 指示に従って操作する. 途中鍵を選択するダイアログが出てくるので, さっき作った鍵を指定する.

=== 公開鍵をインターネット上のサーバにアップロードする ===
 * 公開鍵は広く公開して初めて意味を持つ. なぜなら受信者が公開鍵を持っていることが電子署名の前提だからだ.
 * 公開鍵を公開するための専用のサーバがいくつか存在する. →鍵サーバという
 * 鍵サーバに自分の公開鍵をアップロードするには次のようなコマンドを端末で入力する.
{{{
 % gpg --key-server サーバー名 --send-keys 鍵のID
}}}
 * 鍵サーバとしてはpgp.nic.ad.jpなどが有名である. [[http://www.keyserver.net/|Keyserver.net]]なども利用出来る.

=== 公開鍵をインターネット上のサーバにアップロードする2 ===
 * 先程は端末を使う方法を説明したが, サーバはインターネット上にあるのでWebブラウザを使ってもアップロードできる.
 * Webブラウザにアップロード出来る形にするために端末を立ち上げて次のコマンドを打ち込む.
{{{
 % gpg -a --export ID
}}}
 * 上のコマンドを実行するとずらずらと文字列が出てくる. これが公開鍵である. リダイレクションなどを使ってファイルに出力してもいいと思う.
 * 公開鍵をコピーして, pgp.nic.ad.jpなどの鍵サーバにブラウザでアクセスする.
 * ページの指示に従って公開鍵を貼りつけ送信する.

=== Thunderbirdから他人の公開鍵を手に入れる方法 ===
 * 電子署名のついたメールを受け取ったら公開鍵を何らかの方法で手に入れなければ電子署名の確認ができない.
 * 電子署名されたメールをひらくと, 一番上にOpenPGPのメッセージが表示されている部分があることに気づく.
  * この一番右にある「詳細」をクリックし「公開鍵を読み込む」をクリックすれば, 公開鍵を自動的に鍵サーバから拾ってくることができる.

=== 端末を使って他人の公開鍵を手に入れる方法 ===
 * 相手の公開鍵IDか本名の一部が分かっていれば次の方法で公開鍵を手に入れられる.
{{{
 % gpg --key-server 鍵のあるサーバ --recv-keys IDor名前
}}}
 * 他のところからとってきた鍵は, 自分が署名し, かつ信用度を設定しないと使えない.
  * 次のコマンドを実行する.
{{{
 % gpg --lsign-key ID /* こうすると一応署名はできるが, 他の人にコピーして渡すと署名が消えてしまう中途半端な署名に出来る */
 % gpg --edit-key ID
 > trust
 (1~4の間で信用度を指定する. 実際にあったことがあり鍵が本人のものだと分かっているのなら4でいいと思われる)
}}}
 * わざわざ中途半端な署名にするのは, その鍵は完全に正当なものだと保証はできないけどとりあえず使う為には署名をしなければならない, という苦肉の策である.
 * 念のため指紋が手に入るのなら, 指紋の照合もしておくと良い.
{{{
 % gpg --fingerprint ID
}}}

=== ブラウザを使って他人の公開鍵を手に入れる方法 ===
 * ブラウザを使って鍵サーバにアクセスすることで, 公開鍵を検索できる. そこで見つけた公開鍵を自分のところに取り込む方法である.
 * まず, 公開鍵をコピーしてファイルに保存する.
 * 次のコマンドを実行.
{{{
 % gpg --import ファイル名
}}}
 * 他のところからとってきた鍵は, 自分が署名し, かつ信用度を設定しないと使えない.
  * 次のコマンドを実行する.
{{{
 % gpg --lsign-key ID /* こうすると一応署名はできるが, 他の人にコピーして渡すと署名が消えてしまう中途半端な署名に出来る */
 % gpg --edit-key ID
 > trust
 (1~4の間で信用度を指定する. 実際にあったことがあり鍵が本人のものだと分かっているのなら4でいいと思われる)
}}}
 * わざわざ中途半端な署名にするのは, その鍵は完全に正当なものだと保証はできないけどとりあえず使う為には署名をしなければならない, という苦肉の策である.
 * 指紋が分かっているのなら, 指紋照合を行っておくと良い.
{{{
 % gpg --fingerprint ID
}}}

なにこれ

  • 暗号化ソフトウェアとしてUNIXでよく知られている実装が, GPG(GNU Privacy Guard)である.
    • PGPの別実装として, PGPが抱えていたライセンス問題をクリアしたものである.
  • MMA部員にもGPGを活用しているひとが多いようだ.
  • GPGを使うことでメールの電子署名とか暗号化ができるようだ.
  • ならうちのMacにもいれてみたいってことでいれてみた.

電子署名って何よ

電子署名

  • 電子署名は次のようなことを保証するためのいい方法である. メールに電子署名する場合で例えると……
    • そのメールが本当に差出人から来たものかどうか
    • そのメールが途中で改ざんされていない

電子署名の原理

  • まず秘密鍵と公開鍵という鍵を作る. 秘密鍵は暗号化だけができる暗号の鍵であり, 公開鍵は暗号をもとに戻すことだけができる暗号の鍵である.
  • メール本文を特殊な関数に通して, ハッシュ値という値を得る. (ハッシュ値から本文を復元することは極めて難しいような特殊な関数を使う)
  • ハッシュ値を秘密鍵を使って暗号化する.
  • ハッシュ値をメールに添えて送信する.
  • 受信者はメール本文からハッシュ値を計算する.
  • メールにくっついてきた暗号化されたハッシュ値を公開鍵で復号化する.
  • 暗号をもとに戻して出てきたハッシュ値とメール本文から計算したハッシュ値を比較する.
  • 一致していればこのメールは確かに差出人からやってきて、かつ内容が途中で改ざんされていないといえる.
  • この方法では公開鍵が改ざんされる可能性があるという問題がある.
    • そこで公開鍵を特殊な関数に通して「フィンガープリント」というものを作成する. (やはりフィンガープリントから公開鍵そのものを復元するのは極めて難しい)
    • フィンガープリントを受信者に伝える.
    • 受信者は公開鍵からフィンガープリントを同じようにして作り, 両方のフィンガープリントが一致していることを確かめる. 一致していれば公開鍵は改ざんされてないと言える.
  • MMAのMLを注意深く見ていると, この公開鍵とフィンガープリントについて署名で明記している人がいることに気づきます. この人達は自分の鍵をすでに持っていてその情報を署名に書いているのでしょう.

手順

Xcodeをインストールする

  • XcodeはMacでgccなどの開発用ツールを使えるようにするパッケージ. 下から拾ってくる.
    • ダウンロードにはAppleIDが必要.

    http://developer.apple.com/mac/

  • dmgファイルでダウンロードできるので, ダブルクリックし, インストーラを起動する.
  • 途中何をインストールするか選択できる. iOS SDKは容量を食う割に今回の目的には必要ないので外しておく. 「UNIX〜」はgccコンパイラなどを含んだパッケージなのでチェックを必ず入れておく.

MacPortsをインストールする

  • MacPortsはMac上でFreeBSDのportsに相当するものを利用出来るようになるプログラムである.

http://www.macports.org/install.php

  • Xcodeと同様にインストール.

パスを通す

  • このままだと端末からMacPortsを利用できないので, portsの実体があるディレクトリにパスを通す.

  • ターミナルを起動.
  • vimなどのエディタを使って.zshrc(←は適宜自分が使っているシェルに読み替えて)に次のスクリプトを追加する.

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
  • ターミナルに戻って, source .zshrc を実行し.zshrcの内容を適用する.

GPGのインストール

  • 以下のとおり操作.

% sudo port selfupdate
% sudo port sync
% sudo port install gnupg
  • sudoではパスワードを聞かれるので入力する.

GPGの活用方法

Thunderbirdとの統合

  • Thunderbirdに統合することでメールの電子署名や暗号化が可能となる.

Enigmailのインストール

  • 以下のサイトから拾ってくる.

    https://addons.mozilla.org/ja/thunderbird/addon/71

  • Thunderbirdを立ち上げて, 「ツール」→「アドオン」→「インストール」からダウンロードしたEnigmailをインストール.
  • Thunderbirdを再起動するとエラーが出るが, とりあえず無視して「OK」.
  • 「OpenPGP」→「設定」でダイアログを開く.
  • 「次の設定で上書き」をチェックし, テキストボックスに「/opt/local/bin/gpg」と記述. 「OK」をクリック.

鍵をつくろう

  • Thunderbird上でGUI的に作れる方法と, 端末を用いてCUI的に作れる方法がある.
    • MMA的にはFreeBSDを使用する機会が多いので, CUIを用いて鍵を作成することとする.
  • 端末を立ち上げる. 次のように操作.

 % gpg --gen-key
  • 指示に従って操作する.

ご希望の鍵の種類を選択してください:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
選択は?    1

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) /* 何も押さずにエンター */

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0) /* 好きなのを選べば良い */

Key does not expire ****
これで正しいですか? (y/N)    y

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

本名:      Naben Erst

メールアドレス:     naben@erst.com

コメント: 

次のユーザーIDを選択しました:
    “Naben Erst <naben@erst.com>”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)?      O   /* 大文字のオー */

パスフレーズを入力:  /* パスフレーズなのでスペースなどが入っていてもいい. つまり文章でもよい */
パスフレーズを再入力:  /* もう一度 */ 

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。 /* 鍵の生成はすぐ終わってしまうがこの間にキーボードを叩いたりするとよりいい鍵を作れる */

gpg: 鍵********を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   2  署名:   2  信用: 0-, 0q, 0n, 0m, 0f, 2u
gpg: 深さ: 1  有効性:   2  署名:   0  信用: 0-, 0q, 0n, 0m, 2f, 0u
pub   2048R/******** 20xx-xx-xx
                 指紋 = **** **** **** **** ****  **** **** **** **** ****
uid                  Naben Erst <naben@erst.com>
sub   2048R/******** 20xx-xx-xx
  • この時pub 2048Rの横にある8文字の記号が「ID」と呼ばれるものである. メモしておくと良い.
  • 指紋とかかれているところの横にある記号の羅列は, FingerPrintと呼ばれるものである.

鍵をThunderbirdに登録する

  • Thunderbirdを起動して, 「OpenPGP」→「設定ウィザード」を開く.
    • 指示に従って操作する. 途中鍵を選択するダイアログが出てくるので, さっき作った鍵を指定する.

公開鍵をインターネット上のサーバにアップロードする

  • 公開鍵は広く公開して初めて意味を持つ. なぜなら受信者が公開鍵を持っていることが電子署名の前提だからだ.
  • 公開鍵を公開するための専用のサーバがいくつか存在する. →鍵サーバという
  • 鍵サーバに自分の公開鍵をアップロードするには次のようなコマンドを端末で入力する.

 % gpg --key-server サーバー名 --send-keys 鍵のID
  • 鍵サーバとしてはpgp.nic.ad.jpなどが有名である. Keyserver.netなども利用出来る.

公開鍵をインターネット上のサーバにアップロードする2

  • 先程は端末を使う方法を説明したが, サーバはインターネット上にあるのでWebブラウザを使ってもアップロードできる.
  • Webブラウザにアップロード出来る形にするために端末を立ち上げて次のコマンドを打ち込む.

 % gpg -a --export ID
  • 上のコマンドを実行するとずらずらと文字列が出てくる. これが公開鍵である. リダイレクションなどを使ってファイルに出力してもいいと思う.
  • 公開鍵をコピーして, pgp.nic.ad.jpなどの鍵サーバにブラウザでアクセスする.
  • ページの指示に従って公開鍵を貼りつけ送信する.

Thunderbirdから他人の公開鍵を手に入れる方法

  • 電子署名のついたメールを受け取ったら公開鍵を何らかの方法で手に入れなければ電子署名の確認ができない.
  • 電子署名されたメールをひらくと, 一番上にOpenPGPのメッセージが表示されている部分があることに気づく.
    • この一番右にある「詳細」をクリックし「公開鍵を読み込む」をクリックすれば, 公開鍵を自動的に鍵サーバから拾ってくることができる.

端末を使って他人の公開鍵を手に入れる方法

  • 相手の公開鍵IDか本名の一部が分かっていれば次の方法で公開鍵を手に入れられる.

 % gpg --key-server 鍵のあるサーバ --recv-keys IDor名前
  • 他のところからとってきた鍵は, 自分が署名し, かつ信用度を設定しないと使えない.
    • 次のコマンドを実行する.

 % gpg --lsign-key ID /* こうすると一応署名はできるが,  他の人にコピーして渡すと署名が消えてしまう中途半端な署名に出来る */
 % gpg --edit-key ID
 > trust
 (1~4の間で信用度を指定する. 実際にあったことがあり鍵が本人のものだと分かっているのなら4でいいと思われる)
  • わざわざ中途半端な署名にするのは, その鍵は完全に正当なものだと保証はできないけどとりあえず使う為には署名をしなければならない, という苦肉の策である.
  • 念のため指紋が手に入るのなら, 指紋の照合もしておくと良い.

 % gpg --fingerprint ID

ブラウザを使って他人の公開鍵を手に入れる方法

  • ブラウザを使って鍵サーバにアクセスすることで, 公開鍵を検索できる. そこで見つけた公開鍵を自分のところに取り込む方法である.
  • まず, 公開鍵をコピーしてファイルに保存する.
  • 次のコマンドを実行.

 % gpg --import ファイル名
  • 他のところからとってきた鍵は, 自分が署名し, かつ信用度を設定しないと使えない.
    • 次のコマンドを実行する.

 % gpg --lsign-key ID /* こうすると一応署名はできるが,  他の人にコピーして渡すと署名が消えてしまう中途半端な署名に出来る */
 % gpg --edit-key ID
 > trust
 (1~4の間で信用度を指定する. 実際にあったことがあり鍵が本人のものだと分かっているのなら4でいいと思われる)
  • わざわざ中途半端な署名にするのは, その鍵は完全に正当なものだと保証はできないけどとりあえず使う為には署名をしなければならない, という苦肉の策である.
  • 指紋が分かっているのなら, 指紋照合を行っておくと良い.

 % gpg --fingerprint ID

alstamber/HowToUseGPGForMac (最終更新日時 2011-05-11 18:12:02 更新者 alstamber)