実践!SMTP

  1. 実習の前準備
  2. telnet を使用した SMTP 体験
  3. メール構造の確認作業
  4. GPG を使用した暗号化, 復号体験
  5. [付録] どこまでが信用できる情報か?

4 GPG を使用した暗号化, 復号体験

[4.1] GPG とは

GPG (GNU Privacy Guard) はフリーの暗号化ソフトです. 単にファイルを暗号化, 復号出来るだけでなく, ファイルに電子署名をつけることもできます.

ここからの実習は二人一組になって行ってもらいます(三人のところはうまくやってください...笑).

[4.2] 鍵ペアの生成

公開鍵と秘密鍵のペアを生成します(この作業は二人とも行う). 以下は, アカウント名 hoge が鍵を生成する例です.

まず X を立ち上げます.

hoge$ startx


次に端末を立ち上げて端末内に鍵のペアを生成するためのコマンドを打ちます. 使うコマンドは gpg です.

hoge$ gpg --gen-key


鍵の設定に関して何項目か質問されるので, 本実習では以下のように設定しましょう.

gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

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

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
要求された鍵長は 2048 ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期限は? (0) 0
Key does not expire at all
これで正しいですか? (y/N) y

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

本名: HOGE Hoge
電子メール・アドレス: hoge@ec.hokudai.ac.jp
コメント: test
次のユーザーIDを選択しました:
     "HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>"

名前(N), コメント(C), 電子メール(E)の変更、 または OK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを入力: (password) 
パスフレーズを再入力: (password)

今から長い乱数を生成します。 キーボードを打つとか、 マウスを動かす
とか、 ディスクにアクセスするとかの他のことをすると、 乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、 お勧めいたします。
+++++
....+++++
今から長い乱数を生成します。 キーボードを打つとか、 マウスを動かす
とか、 ディスクにアクセスするとかの他のことをすると、 乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、 お勧めいたします。
+++++
....+++++
gpg: /home/hoge/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 最小の「ある程度の信用」3、 最小の「全面的信用」1、 PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   XXXXX/XXXXXXXX 2011-07-26
                  指紋 = XXXX XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX XXXX
uid                  HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>
sub   XXXXX/XXXXXXXX 2011-07-26



--> 鍵の種類を選択




-->鍵のサイズを選択










-->鍵の有効期限を選択
(0 は無期限) -->この設定でいいのか確認 -->鍵の持ち主の user ID 登録 -->実名 -->メールアドレス -->コメント -->鍵の ID -->鍵の ID 情報に変更がなければ O (ローマ字のオー) -->鍵を使う際に必要なパスワードの入力 -->パスワードの確認 -->鍵を生成している間は
マウスを動かしたり, 何かソフトを起動する
などして OS に負荷をかける. -->生成完了

今生成した公開鍵が自分の所有する公開鍵リストに登録されていることを確認しましょう.

hoge$ gpg --list-key
-------------------------------------------------------------
pub   XXXXX/XXXXXXXX 2011-07-26
uid                  HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>
sub   XXXXX/XXXXXXXX 2011-07-26

今生成した秘密鍵も自分の所有する秘密鍵リストに登録されていることを確認しましょう.

hoge$ gpg --list-secret-key
-------------------------------------------------------------
sec   XXXXX/XXXXXXXX 2011-07-26
uid                  HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>
ssb   XXXXX/XXXXXXXX 2011-07-26

これで公開鍵・秘密鍵の設定は終了です.ペアの受講生も同様にして 鍵を作成しましょう.以下では hoge さんの相方のアカウント名を hero として進めていきます.

hero$ gpg --gen-key
 "HERO Hero (test) <hero@ec.hokudai.ac.jp>"

[4.3] 鍵のエクスポート, インポート

お互いの公開鍵を登録します. 以下の例は hero さんが hoge さんの公開鍵を登録する手順です.

まず hoge さんが自分の公開鍵を hoge_pub-key.asc という名前のアスキー形式ファイルとしてエクスポートします.

hoge$ gpg -a --export hoge@ec.hokudai.ac.jp > hoge_pub-key.asc
--> -a は出力されるファイルをアスキー形式と指定するオプション

  • gpg は使用する鍵の ID の指定を鍵作成の際に登録したメールアドレスで行います.

    次に hero さんが hoge_pub-key.asc をインポートします.

    hero$ gpg --import /home/hoge/hoge_pub-key.asc
    

    正しくインポートされたか確認.

    hero$ gpg --list-keys
    --------------------------------------
    pub   YYYYY/YYYYYYYY 2011-07-26
    uid                  HERO Hero (test) <hero@ec.hokudai.ac.jp>
    ssd   YYYYY/YYYYYYYY
    pub   XXXXX/XXXXXXXX 2011-07-26
    uid                  HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>
    ssd   XXXXX/XXXXXXXX 2011-07-26
    

    [4.4] ファイルの暗号化, 復号

    それでは, いよいよファイルを暗号化, 復号する実習をしましょう. 以下の例では, hero さんが hoge さんの公開鍵で暗号化し, hoge さんが自分の秘密鍵で復号化する例です.

    まず, hero さんが暗号化するためのテキストファイルを作成します.

    hero$ echo "hello World" > /home/hero/hello.txt
    

    hello.txt を hoge さんの公開鍵で暗号化します.

    hero$ gpg -a -r hoge@ec.hokudai.ac.jp -e /home/hero/hello.txt
    ---------------------------------------
    gpg: XXXXXXXX: この鍵が本当に本人のものである、 という兆候が、 ありません
    
    pub   XXXXX/XXXXXXXX 2011-07-26 HOGE Hoge (test) <hoge@ec.hokudai.ac.jp>
     主鍵の指紋: XXXX XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX XXXX
     副鍵の指紋: YYYY YYYY YYYY YYYY YYYY  YYYY YYYY YYYY YYYY YYYY
    
    この鍵は、 このユーザーIDをなのる本人のものかどうか確信できません。 
    今から行うことを * 本当に * 理解していいない場合には、 
    次の質問にはnoと答えてください。
    
    それでもこの鍵を使いますか? (y/N) y
    

    hello.txt.asc というファイルが作成されているはずなので, 本当に暗号化されているか 中身を見てみましょう!

    hero$ lv /home/hero/hello.txt.asc
    

    無事に暗号化されていれば,あなたには読めなくなっているはずです.

    次に hoge さんが hello.txt.asc を自分のホームディレクトリにコピーします.

    hoge$ cp /home/hero/hello.txt.asc /home/hoge/
    

    最後に hoge さんが hello.txt.asc を自身の秘密鍵で復号する.

    hoge$ gpg hello.txt.asc
    ------------------------------------
    次のユーザーの秘密鍵のロックを解除するには
    パスフレーズがいります: "HOGE Hoge ( test ) "
    2048ビットRSA鍵, ID XXXXXXXX作成日付は2011-07-26 (主鍵ID XXXXXXXX)
    
    パスフレーズを入力:(先ほど入力したパスワード)
    gpg: 2048-ビットRSA鍵, ID XXXXXXXX, 日付2011-07-26に暗号化されました
           "HOGE hoge ( test ) "
    

    hello.txt が生成され, 中身がもとのものと一致すれば成功!

    hoge$ cat /home/hoge/hello.txt
    
    > 時間が余った人は [付録] へ


  • 最終更新日: 2014/07/04 齊藤 大晶 Copyright © 2000-2014 inex