コンピュータネットワーク基礎
2006.07.19

Back to index page

  1. 本日の作業内容



  2. 出席確認

    電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し, 出席申告してください.なお,キーワードは授業中に紹介します.

    提出形式

    宛先 justice@mag.shimane-u.ac.jp
    件名 AttendA_07-19_net_s0440** Aクラス
    AttendB_07-19_net_s0440** Bクラス
    本文 学生番号
    氏名
    キーワード
     
    (改行)
    (改行)
    キーワードは授業中に紹介
    注意 「件名」の**をそのままにしないで,必ず自分の学生番号 に修正して下さい.また,ABクラス別は指示にしたがって下さい.

  3. 授業アンケート

    授業の最初に授業アンケートを実施します.

  4. ネットワークセキュリティ(教科書14.3)

    コンピュータネットワークを利用する上で,情報の機密を保つことはそれなりの 努力を必要とします.個人情報の漏洩の可能性が常につきまとうために,情報の 暗号化や暗号を利用した認証に関する知識は今後有用になって来ることでしょう. 今週は,公開鍵暗号方式を実習します.

    • 換字式暗号方式

      教科書のp.178にあるように,アルファベットなどの文字を決まった数だけずら す換字方式でもそれなりの暗号文を作ることができます.次に示すRubyスクリプ トで試してみましょう.

      alpha = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] 
      
      n = ARGV[0].to_i
      
      str = ""
      char = []
      
      for i in 1...ARGV.size
        str += ARGV[i] + " "
      end
      
      for i in 0...str.size
        for j in 0..25
          if str[i,1] == alpha[j]
            char[i] = alpha[(j+n)%26]
          elsif str[i,1] == " "
            char[i] = " "
          end
        end
        printf "%s", char[i]
      end
      
      printf "\n"
      

      このスクリプトは最初の引数として何文字アルファベットをずらすかを指定し, それ以後にアルファベットの小文字とスペースからなる文を引数として与えて使 用します.例えば,

      $ ruby trans.rb 2 i love you

      とすると,結果は,

      k nqxg aqw 
      

      のようになります.この場合には,ずらす数である 2 を通信する当事者で決めておけば,暗号文によるやりとり が可能ですが,あらかじめ予想できるように,最大で26種類しか選択肢 が無いので,機密性はほとんど無いことになります.そのため,その後 に書かれているように,「転置式暗号」が必要になります.

    • RSA

      二者間で暗号文で通信を行うには,お互いが暗号化の方式を知っていれば簡単に 実現可能です.しかし,多数の人間の間でやりとりしようと思うと,暗号化方式 が無数に必要になって来ます.そのため,不特定多数の間でも二者間の暗号通信 を任意の組合せで実現する方法,公開鍵方式が発明されました.その中の,RSA については教科書のp.180にありますが,実際の方式はかなり複雑になるので,ここで は,簡単な素数の組を用いて例を試してみます.

      1. p = 11, q = 17 とする

      2. n = 187, z = 160 となる

      3. d = 9 ならば e = 89 が求まる

      4. m (教科書ではP) = 10 < n を試してみる

      5. C を計算してみる (商を5としてみる)

      6. m が逆算できるか試す

      この方式を試してみるためのRuby スクリプトも作成してみました.使用方法は,自分で素数の組やd,eの値を あらかじめ決めておき,てきとうなmの値を入れてみて,そのmの値が逆算できる かを試すものです.ただし,実際に使用するような大きな素数の組合せは作業が 大変ですので,なかなかできません.そこで,このプログラムも小さな素数を使っ てやることを前提にしていますので,正しいものにはなっていません.mの値が 数百程度までは正確ですが,大きなmに対しては問題がありますので,注意して ください.

    • 暗号技術

      RSAを用いた代表的な公開鍵暗号方式であるPGP (Pretty Good Privacy) は特許 などの絡みがあって自由に利用できないことがあります.そこで,GNUライセンスで 公開されている公開鍵暗号方式のGnuPG (GNU Privacy Guard) を利用して文書の 暗号化や電子署名の自習を行います.

      • 自分の鍵の生成

        $ gpg --gen-key

        とします.初期設定だけやって勝手にコマンドが終了しますが,もう一回同じコ マンドを入力します.

        危険なメモリー使用の警告が今後発せられますが,無視しておいて下さい.

        $ gpg --gen-key

        こんどは対話形式で生成を進めて行くことになります.

        すきな鍵の種類を選択してください:
           (1) DSAとElGamal (既定)
           (2) DSA (署名のみ)
           (4) ElGamal (署名と暗号化)
           (5) RSA (sign only)
        どれにしますか? 
        

        デフォルトの(1)のままで良いでしょう.そのままEnterです.

        DSA鍵対は1024ビットになります。
        新しいELG-E鍵対を生成します。
                     最小の鍵長は  768 ビット
                     既定の鍵長は 1024 ビット
                 最大の推奨鍵長は 2048 ビット
        どの鍵長にしますか? (1024) 
        

        についてもデフォルトのままでよいので,Enterです.

        要求された鍵長は1024ビット 
        鍵の期限を決めてください。
                 0 = 無期限
              <n>  = 有効期限 n 日間
              <n>w = 有効期限 n 週間
              <n>m = 有効期限 n か月間
              <n>y = 有効期限 n 年間
        鍵の有効期間は? (0)
        

        ここもデフォルトのままです.Enterしてください.

        Key does not expire at all
        これでいいですか (y/n)? 
        

        これでよいので,yを入力します.

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

        と聞かれるのでローマ字で名前を入れましょう.スペースが入っても構いません.入力を間違 えたときに修正は効かないので,エディタなどに入力しておいて張り付けること をお薦めします.

        電子メール・アドレス: 
        

        ここには自分の電子メールアドレスを入れます.ここでも入力を間違 えたときに修正は効かないので,エディタなどに入力しておいて張り付けること をお薦めします.

        次に聞かれるコメントは不要ですので,何も入力しないでEnterしましょう.

        次のユーザーIDを設定しました:                   
            "NAWATE Masahiko <strike@mag.shimane-u.ac.jp>"
        
        名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? 
        

        もし,間違っている箇所があれば対応するアルファベットを入力して,入れ直し て下さい.OKするためにoを入力すると,

        秘密鍵を保護するためにパスフレーズがいります。                    
        
        パスフレーズを入力: 
        

        となり,パスフレーズを聞かれます.これはパスワードの代わりになるもので, 自分で適当な文章を入力します.アルファベットの利用になるので,好きな英語 の歌詞など適当に長いものが良いでしょう.パスワードの入力と同様に,画面に は何も表示されないので入力には注意が必要です.本来はするべきではないです が,エディタなどに文章を入力しておいてから張り付ける方が確実でしょう.

        パスフレーズはパスワードと同様設定するためには2回入力します.もう一度同 じ作業を行って下さい.

        今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
        とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
        乱雑さの大きないい乱数を生成しやすくなるので、お勧めします。
        ..++++++++++++++++++++.+++++++++++++++.++++++++++++++++++++++++++++++++++++++++..+++++.+++++.+++++..+++++++++++++++++++++++++++++++++++.+++++.+++++>+++++.......>+++++<+++++.........+++++
        今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
        とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
        乱雑さの大きないい乱数を生成しやすくなるので、お勧めします。
        ++++++++++++++++++++.++++++++++++++++++++^^^^^
        gpg: /home/agul/.gnupg/trustdb.gpg: 信用データベースができました
        公開鍵と秘密鍵を作り、署名しました。
        key marked as ultimately trusted.
        
        pub  1024D/29A28FF2 2004-07-15 NAWATE Masahiko 
             Key fingerprint = 17F0 D4BF ADEF 8396 BB75  CC50 2DA3 513F 29A2 8FF2
        sub  ************** 2004-07-15
        

        などと表示され,終了すると結果が表示されます.最後の方にある pub が公開鍵で,sub が秘密鍵です.秘密鍵は自分だけが扱 うものですので,人には見せないような配慮が必要です.一方,公開鍵 は積極的に公開しても構いません.

      • 鍵の確認

        作成された鍵はバイナリとして保存されています.場所は,.gnupgディ レクトリです.テキストとして保存するには次のようにします.

        $ gpg -a --export s0440** > public_key.txt

        このコマンドで生成された公開鍵を表示させてみて下さい.

        $ less public_key.txt

        -----BEGIN PGP PUBLIC KEY BLOCK-----
        Version: GnuPG v1.0.7 (GNU/Linux)
        
        mQGiBED2NPMRBACD83E0IOOY+P64Otdohqxw/EQeTxjh+iQq0lFAg381R1A/O+VN
        l/y58ESC4rDrteBuGqsXZdIS3wKyEFva6Nq+Gmwc0e1/d7Vyp/URMFxociwM6CkH
        ZR1AW80CefyDViTeRtcZ9QcaYY1NvCrjT3Zpn4dhbKrEDceYD/R56rX6VwCgx/We
        gArDw2WWXk4ETM3OynVQeiUD/1My1g25CS8VWHrt36VAl2SSOtbJV04ttw3ZCvMd
        z0jASDKMklYtw1M2WrWNq1BLhrvz4o58a0URpitf76yIpJQdQ/sy484HNnxgTRkI
        B0HG2AOkwsUOd2MlLw+YWyFRsLdMgeDFtmTklFvY2Sxf8BUV/q2DIr4Xl/S8bZEk
        O9C+A/sFZ4AucMnKe8mskgVO51Ay7iEEM0KnKTfVong8aqKD9YABUdPuLrZQARpv
        AIh0j9lic1aE2DFS7LYRivz28GWw0PtKfhxNIRjXQWnvhg6pkc2xJHQ761kfPWWG
        UCL0nFp/RDEu921XzYuKBKuDCIa7GnS5Rfss+1LmLm3RtEXLdrQtTkFXQVRFIE1h
        c2FoaWtvIDxqdXN0aWNlQG1hZy5zaGltYW5lLXUuYWMuanA+iFkEExECABkFAkD2
        NPMECwcDAgMVAgMDFgIBAh4BAheAAAoJEC2jUT8poo/ybNcAnAhSlMF6PVGEj950
        xU1FHzfEPU7pAJ4kYQj5cXSjXOa4FrD3LXhwlsCpT7kBDQRA9jT0EAQAz96GhVGi
        Wvo3PR/NM0sUWGgA7wqQEMrbWPIZVxKr4yc7GM4pOyVRyIiafhejGiQyqj3Ygles
        Tqm6xvjpe4Z6QS8aO8Ut/WUiEXmdda3sgwekHfCcZzdwIebflzSQXnfzf6mI6Au5
        7F99KyewuTE8V/a6DlWRO81l9NdyXj+rE9cAAwcEAMj9qEH7fR2LrUwVddAjogO2
        W4V1pSVU/lEwmI2LfLd0GRGlTDTWJdbTRvz5r7NcCppni4tEYdZ+7fy0trkwxBaL
        nQzTrZD5BYx9tRvYirKgsfrAJNCpmN6qIPnlXmeXVo/HJ8+O+JD8Gy8VpK+C0nAs
        0DOwYn/Zo9fpLhuTEfkYiEYEGBECAAYFAkD2NPQACgkQLaNRPymij/LyRgCePXpg
        aW8UA0qfyr/q/EHJR0bHfdIAoLNZKUkXl4lESOnBhrUWrWjGoe3S
        =rxB9
        -----END PGP PUBLIC KEY BLOCK-----
        

        のようになることでしょう.

      • 相手の公開鍵登録

        実際にデータをやりとりするには,誰かの公開鍵を知らなければなりません.回 りの人間と鍵の交換を行って下さい.知合いの誰もいないさびしい人は,この機 会に誰かと知合いになって下さい.メールの添付などにより,テキストファイル そのものをやりとりしましょう.必要な範囲は

        -----BEGIN PGP PUBLIC KEY BLOCK-----

        から

        -----END PGP PUBLIC KEY BLOCK-----

        まで,その行を含む全ての部分です.テキストデータをもらったら,それを使う準備をします.コマンドで実行してく ださい.

        $ gpg --import dareka_key.txt

        最後の鍵の名前はもちろん公開してくれた人のファイル名を使用しましょう.う まく登録できたかどうかはコマンドで確認します.

        $ gpg --list-keys

      • データの暗号化

        適当なテキストファイルを作成します.中身は何でも構いませんし,日本語でも 大丈夫です.適当に名前もつけて保存します.例えば,b04**.txtのよ うなものでも良いでしょう.このファイルを暗号化します.

        $ gpg -ea -r s0440**@matsu.shimane-u.ac.jp b04**.txt

        公開鍵をもらった人のメールアドレスを使って上記のコマンドで暗号化します.

        gpg: EE8D7CAB: There is no indication that this key really belongs to the owner
        1024g/EE8D7CAB 2003-06-19 "Hoge Taro <s0440**@matsu.shimane-u.ac.jp>"
                            指紋: xxxx xxxx xxxx xxxx xxxx  xxxx xxxx xxxx xxxx
        
        この鍵は本人のものかどうか確信できま せん。
        今から行うことを *確実に* 理解していない場合には、
        次の質問にはnoと答えてください。
        
        それでもこの鍵を使いますか? 
        

        のように聞かれますので,キー入力で yes と入力します.これで暗号 化が完了しているはずです.新たに b04**.txt.asc というファイルが 作成されていることを確認してください.中身を見ると,暗号化されていること が分かります.この文書はもう自分でも復号できません.秘密鍵を持っている人, すなわち,先ほど登録した人だけが解読できます.では,そのひとにメールを出 して読んでもらいましょう.メールの本文に,暗号化された文章を張り付けて送 信します.

      • 受信メールの内容解読

        相手がうまく暗号化してくれたならば,あなたにメールが届きます.中身は暗号 化されていてそのままでは読めません.自分の秘密鍵を使って解読しましょう. もらったメールの

        -----BEGIN PGP MESSAGE-----

        から

        -----END PGP MESSAGE-----

        までの全ての範囲をなんらかのファイルに保存します.名前も適当で構いません. 例えば,encrypt.txtなどで構わないでしょう.次にコマンド操作です が,以前に学習した「リダイレクト」を使って次のようにします.

        $ gpg < encrypt.txt > encrypt.txt.asc

        次のようにメッセージが表示されます.

        次のユーザーの秘密鍵のロックを解除するには
        パスフレーズがいります: "Hoge Jiro <s0440**@matsu.shimane-u.ac.jp>"
        1024ビットELG-E鍵, ID EE8D7CAB作成日付は2003-06-19 (主鍵ID 9014F6DF)
        
        パスフレーズを入力: 
        

        鍵を作成するときに入力したパスフレーズをもう一度入力します.間違えたら Enterを押して下さい.再び入力画面になります.無事に入力ができたら,

        gpg: 1024-ビットELG-E鍵, ID EE8D7CABで暗号化2003-06-19にできました
              "Hoge Jiro <s0440**@matsu.shimane-u.ac.jp>"
        

        となり,ファイルが作成されています.復号できた文書を読んでみましょう.

  5. 小テスト

    授業の終了20分前くらいに小テストを実施します.アナウ ンスに注意してください.また,提出は電子メールにより行いますので,メール の送信準備は忘れないでいて下さい.

    Aクラス小テスト
    Bクラス小テスト

  6. 宿題

    補講などで講義日程がたて込んでいるので,本日は宿題はありません.


目次ページへ戻る