電気通信大学 情報理工学部 情報通信工学科
情報通信システム実験第二B / 電子情報システム実験第二B

実験課題「情報通信(情報セキュリティ)」

課題 1 のプログラムを作成するためのアプローチ例

以下に,課題 1 のRSA暗号のプログラムを作成するための方針例を示すので, 説明を順に読み進め,練習プログラムを作成してみよう.
cedにおいて,次の手順で以下に示すファイルを入手できる.
ただし,下記の手順において入手するファイルは, 「参考プログラム」 のページで入手したものと同じです.
  1. 作業用のディレクトリを作成する:
  2. >mkdir ~/jikkenRSA
  3. 作業用のディレクトリに移動する:
  4. >cd ~/jikkenRSA/
  5. ファイルをコピーする:
  6. >cp /ced-home/staff/kurihara/prog/* .
以上.
  1. 練習プログラム(コンパイル方法とデータの入出力)
    1. 「Hello! という文字を表示させるプログラムを作成せよ」 ( ヒント prg1.c )
    2. 「整数 a と b を入力すると,和 a+b を計算し,出力するプログラムを作成せよ」 ( ヒント prg2.c )
  2. 練習プログラム( n を法としたべき乗計算)
    1. 「整数 M, e, n を入力すると,べき乗 M^e (mod n) を計算し,出力するプログラムを作成せよ」 (ヒント : 上記の prg2.c を改良し作成してみよ)
      例えば,(M,e,n)=(288,29,323) のとき,(288)^(29)=67 (mod 323)となることを確認せよ.注意:べき乗を計算する pow関数を用いたのでは,正しく計算できない.
      (上記仕様のプログラムの例: 実行ファイル prg3.out )
    2. 上記のべき乗を計算するプログラムにおいて、 乗算回数をカウントし、その値を出力する機能を付加したプログラムを作成せよ。
      (上記仕様のプログラムの例: 実行ファイル prg3cnt.out )
  3. 練習プログラム(課題 2 に関連したプログラム(べき乗の高速計算))
    1. テキストの 例4.3 に示した二進展開法を採用した場合の次のプログラムを作成せよ.
      「整数 M, e, n を入力すると,べき乗 M^e (mod n) を計算し,出力するプログラムを作成せよ」
      (上記仕様のプログラムの例: 実行ファイル prg3bin.out )
    2. 上記のべき乗を計算するプログラムにおいて、 乗算回数をカウントし、その値を出力する機能を付加したプログラムを作成せよ。
      (上記仕様のプログラムの例: 実行ファイル prg3bincnt.out )
  4. 参考プログラム (ファイルデータの入出力と1バイトデータの処理)
    1. 次のプログラムを説明する前に, ファイルデータの入出力と 1バイトデータの取り扱いの理解を補助する プログラム a2av4.c を示す. このプログラムは,ファイルコピーを実行する プログラム a2a.c を改編したものである.
      プログラム a2av4.c をコンパイルし,実行してみよ. そして,プログラムソースと実行結果を比較し, ファイルデータの入出力と 1バイトデータがどのように処理されているか確認せよ。
  5. 練習プログラム(シフト暗号)
    1. 課題テキストにて説明したシフト暗号では,メッセージと暗号文の 文字はいずれも26種類で,以下のように設定した.
       メッセージ集合 {A,B,...,Z}={65,67,...,90}
       暗号文集合 {A,B,...,Z}={65,67,...,90}
       鍵集合 {0,1,...,25}
      このような仕様の参考プログラムの例として shift.c を示す.

      上記のプログラムを1バイトのデータを扱えるプログラムに改良し, 以下の仕様を満たすシフト暗号のプログラムを作成せよ. つまり, メッセージと暗号文の文字はいずれも256種類とする.
       メッセージ集合 {0,1,...,255}
       暗号文集合 {0,1,...,255}
       鍵集合 {0,1,...,255}

      具体的に, 暗号化,復元の操作を行い,正しく動作するか確認せよ.
      また, メッセージファイルfoo, 暗号化ファイルgoo, 復元ファイルhoo の3種類のファイルサイズを比較せよ.
      (上記仕様のプログラムの例: 実行ファイル shift-1byte.out )
  6. 練習プログラム(RSA暗号)
    1. 以下の仕様を満たすRSA暗号のプログラムを作成せよ. メッセージの文字は128種類(7ビット), 暗号文の文字は n 種類( 128 <= n <=255 ) となるように,以下のように設定する. 暗号文の文字は1バイトで表現できるサイズとする.
       メッセージ集合 {0,1,...,127}
       暗号文集合 {0,1,...,n-1}

      具体的に, 公開鍵(e,n)=(59,187), 秘密鍵(d,n)=(19,187) で正しく動作するか確認せよ.
      また, メッセージファイルfoo, 暗号化ファイルgoo, 復元ファイルhoo の3種類のファイルサイズを比較せよ.
      (上記仕様のプログラムの例: 実行ファイル rsa128.out )
    2. 上記のプログラムにおいて,メッセージの文字として 1バイトのデータを扱えるプログラムに改良し, 以下の仕様を満たすRSA暗号のプログラムを作成せよ(課題 1 ).
       メッセージ集合 {0,1,...,255}
       暗号文集合 {0,1,...,n-1}

      具体的には,メッセージの文字は256種類(1バイト=8ビット), 暗号文の文字は n 種類( 2^8 = 256 <= n <= 2^(15)-1 ) となるようにする. 暗号文の文字は2バイトで表現できるサイズとする.

      (上記の仕様を満たすプログラムの例: 実行ファイル rsa.out )
      (さらに,上記の仕様を満たすRSA暗号で,途中結果を表示するプログラムの例: 実行ファイル prg5RSA.out )

(2014/09/01 up) ~drop/class/jikken/jikken2013