期末試験

試験の内容

試験の内容は次の通りです。

  1. IP アドレスの計算
  2. 講義で触れたプロトコル一つを詳しく説明すること

試験実施方法

準備

以下のソフトウェアを使用します。

  1. openssl(MacOSX や Linux などは標準で利用可能なはず)
    Windowsは バイナリ 配布サイトからWin64 OpenSSL v3.3.1 Lightの msi ファイルなどを ダウンロード、インストールする (なお、マイクロソフトにより安全と認められていないので、「詳細」などのメニューを何度も開かないとインストールできない)
  2. Microsoft Word

以下の事前準備をします。

  1. Windows なら OpenSSL Command Prompt を起動する。他のOSなら ターミナルを起動します
  2. openssl genrsa > private.pem で秘密鍵を生成しま す
  3. 作成した private.pem は大事なファイルですので、バックアップを取 り、失くさないようにして下さい
  4. 念の為、読み込み専用ファイルにするため、以下のコマンドを実行して も良い
    Windows
    attrib +R private.pem
    設定の確認は attrib でできる。
    UNIX系(MacOSXを含む)
    chmod a-w privvate.pem
    設定の確認は ls -l private.pem でできる。
  5. openssl rsa -pubout < private.pem > 学籍番号pub.pem で公開鍵を生成します
  6. 公開鍵を試験実施より先 に 公開鍵提出甩アップローダーに提出しておきます。 試験前に提出してないと試験を受けられません。 公開鍵が指定したファイル名でなかったり、指定した形式でない場合、 提出された答案が合格であることを判定できません。 ファイル名に余計な文字列を付加したり、 指定したファイル形式(pem 形式)でない場合点数がつかない場合があります。

練習

練習用のpdfファイルを用意しておきます。 (test.pdfとしておきます)

電子署名の生成と検証

  1. openssl dgst -sign private.pem test.pdf > 学籍番号.sig
  2. 次のコマンドで公開鍵を使って正常に生成できたかを確認できる。
    openssl dgst -verify 学籍番号pub.pem -signature 学籍番号.sig test.pdf

タイムスタンプの取得のための準備

  1. https://www.freetsa.org/index_en.php にアクセス
  2. tsa.crt をダウンロード
  3. cacert.pem をダウンロード

タイムスタンプの取得

  1. https://www.freetsa.org/index_en.php にアクセス
  2. Online Signature で、stamp のファイルとして、 学籍番号.sig をアップ ロードする。
  3. Download TimeStampRequest file をクリックして、 学籍番号_sig.tsq を ダウンロードします。
  4. Download TimeStampResponse file をクリックして、 学籍番号_sig.tsr を ダウンロードします。

タイムスタンプの検証

  1. リクエストの内容は次のコマンドで確認できます。 openssl ts -query -in 学籍番号_sig.tsq -text
  2. タイムスタンプの内容は次のコマンドで確認できます。 openssl ts -reply -in 学籍番号_sig.tsr -text
  3. openssl ts -verify -in 学籍番号_sig.tsr -queryfile 学籍番号_sig.tsq -CAfile cacert.pem -untrusted tsa.crt で正しいリクエストとタイムスタンプの対応のチェックができます。
  4. openssl ts -verify -data 学籍番号.sig -in 学籍番号_sig.tsr -CAfile cacert.pem -untrusted tsa.crt で署名したファイルへのタイムスタンプであることがチェックできます。

試験実施要領

  1. 7月10日23:59までに、公開鍵「学籍番号pub.pem」をBOX の公開鍵提出用アップローダーに アップロードして下さい。
  2. 7月11日 13:40 から 15:20 の授業時間内に実施します
  3. 試験問題は以下のとおりとします
    問題1 50点(試験開始後に発表)
    IPアドレスの計算問題
    問題2 50点(事前準備推奨)
    講義で取り上げたプロトコルを一つ選び、(1)選んだ理由(10点) と(2)要約(40点)を解答用紙の範囲内(全体で3ページ以内)で説明し なさい。 選んだ理由の文章は他人の文章と一致しないように工夫すること。
  4. 事前説明の後で、 試験問題と解答用のファイル を公開します
  5. 解答ファイルを完成させ、「学籍番号.pdf」というファイル名の PDF とし て下さい
  6. 解答ファイルに対して、秘密鍵で電子署名をして下さい。 電子署名のファイル名を「学籍番号.sig」として下さい。
  7. 電子署名ファイルのタイムスタンプを 15:20 までに作成して下さい。 タイムスタンプファイルを「学籍番号_sig.tsr」とします。
  8. 7月11日23:59までに、これらの3つのファイルをBOXの試験用アップローダーに アップロードして下さい。1つのファイルにしてしまったら減点の対象とする。
    1. 学籍番号.pdf
    2. 学籍番号.sig
    3. 学籍番号_sig.tsr

注意

本試験について、事前に解説し、手順の練習の時間をとり、直接質問の時 間をとり、説明の動画を提供している。 したがって、試験直前や試験中に、 個別に回答する必要がある質問については回答しない。

なお、試験に関して全体に関する質問については妨げないので、特にサー バエラーなど、試験運用上に重要な支障が生じている場合などは、 坂本<sakamoto@c.dendai.ac.jp> まで連絡をして欲しい。

採点基準

  1. 公開鍵のファイル(学籍番号pub.pem)が 7月10日までにアップロードされていること。 なお、公開鍵の提出遅れについては、減点扱いとする。 7/11 0:00-13:39 までにアップロードした場合は -10点、 7/11 13:40-15:20 は -20 点の減点とする。 7/11 15:21 以降の提出は、試験を受けていないものとする。 複数提出されている場合は、解答ファイルのタイムスタンプより古い中で、最 も新しいものを有効とする。
  2. 解答ファイル、電子署名、タイムスタンプの各ファイル(.pdf, .sig, .tsr) が 7月11日中にアップロードされていること。 .pdf, .sig, .tsr の各ファイルに関しては7/11中の提出とし、それ以降 は科目放棄とするが、ネットワークのトラブルを考慮する場合はある(個 人の都合は考慮しない)。
  3. 電子署名、タイムスタンプが正しくされていること。 電子署名が正常でない場合、または、7/11 15:20 (20240711062000Z) までのタイムスタンプが押されてない答案は 0 点とする。 つまり、上記のチェックのうち、下記のチェックを採点者は行う
    1. openssl dgst -verify...
    2. openssl ts -verify -data...
    3. openssl ts -reply -in 学籍番号_sig.tsr -text の出力のタイムスタンプが 2024/07/11 06:20:00 GMT より若いこと
  4. 問題 1 のIPアドレスの計算においては不要なサブネットマスクなどの情 報は無視する。 アドレスの値については 1 違っていても0点とし、部分点は与えない。
  5. 問題2については、記述量、内容の正確さ、読み易さで評価します。 但し、完全に同一な答案が複数提出された場合は抽選で一通のみ採点し、残り は0点とします。 技術的な内容を記載するので、要約の部分は他人と一致する可能性はあります。 そのため、選んだ理由が他人と一致しないように工夫して記述して下さい。

注意

  1. 公開鍵は 7月10日までにアップロードするものとし、それ以降の変更は認め ません。 特に、試験中に間違って上書きとかしないように。 ただし、アップロード後に秘密鍵を壊してしまった場合などは、減点を前提 にアップロードをする必要があります。
  2. 署名した後、元のファイルを変更すると、作成した電子署名は無効になるの で、署名とタイムスタンプをやり直す必要があります。
  3. 試験中の各ファイルのチェックは義務ではないが、チェックを通らないと不合格になる恐れがあるので、余裕がある場合はチェックすることを推奨します。

試験の内容

講義で触れたプロトコル

以下の中から一つを選んで、試験中に解答用紙の範囲内で分かりやすく解説し て下さい。 なお、読みやすさが重要なので、あらかじめ解答を書く練習をしておいて下さい。

  1. IPv4
  2. IPv6
  3. RIP
  4. OSPF
  5. TCP
  6. Ethernet
  7. 無線LAN

IP アドレスの計算問題

範囲は IPv4 のみです。 次のような問題を出しますので計算方法などをよく覚えて下さい。

  1. IP v4 のクラス A のネットワークアドレスの個数は 個(但し、 0 と 127 は特別な用途)、 クラス B のネットワークアドレスの個数は 個、 クラス C のネットワークアドレスの個数は 個あります。
  2. 126.0.0.0 のネットワークはクラス です。
  3. 126.0.0.0 のネットワークを 16 bit のサブネットと 8bit のホスト番号に分割する時、サブネットマスクは になります。
  4. 126.0.0.0 のネットワークを 16 bit のサブネットと 8bit のホスト番号に分割する時、サブネッ ト番号 1 のネットワークアドレスは で、 ホストアドレスは から で、 ブロードキャストアドレスは になります。
  5. クラス A のプライベートアドレスは 個、 クラス B のプライベートアドレスは 個、 クラス C のプライベートアドレスは 個です。
  6. 192.168.1.1 と 192.168.2.1 は同じネットワーク内 。 一方、 172.16.1.1 と 172.16.2.1 は同じネットワーク内

付録

提出用のファイルを検査して結果を result.txt に書き出すプログラム

Windows用 verify.bat

以下を verify.bat というファイル名で、提出するファイルすべてのある フォルダに保存する。 .\verify.bat 学籍番号 と打つと、検査結果が result.txt に入る。


@echo off
if 0 == 1 (
set keydir=..\
set pubdir=..\pub\
) else (
set keydir=
set pubdir=
)
echo %1 > result.txt
date /T >> result.txt
time /T >> result.txt
openssl dgst -verify %pubdir%%1pub.pem -signature %1.sig %1.pdf
if %ERRORLEVEL%==0 (
echo signature:OK >> result.txt
) else (
echo signature:NG >> result.txt
)
openssl ts -verify -data %1.sig -in %1_sig.tsr -CAfile %keydir%cacert.pem -untrusted %keydir%tsa.crt
if %ERRORLEVEL%==0 (
echo time stamp:OK >> result.txt
) else (
echo time stamp:NG >> result.txt
)
openssl ts -reply -in %1_sig.tsr -text | findstr "^Time stamp:" >> result.txt

Mac, Linux など bash用 verify.sh

以下を verify.sh というファイル名で、提出するファイルすべてのある フォルダに保存する。 ./verify.sh 学籍番号 と打つと、検査結果が result.txt に入る。


#!/bin/sh
if [ 0 -eq 1 ]
then
keydir=../
pubdir=../pub/
else
keydir=
pubdir=
fi
echo $1 > result.txt
date +%y/%m/%d >> result.txt
date +%H:%M >> result.txt
openssl dgst -verify ${pubdir}$1pub.pem -signature $1.sig $1.pdf
if  [ "$?" -eq 0 ]
   then
echo signature:OK >> result.txt
else
echo signature:NG >> result.txt
fi
openssl ts -verify -data $1.sig -in $1_sig.tsr -CAfile ${keydir}cacert.pem -untrusted ${keydir}tsa.crt
if  [ "$?" -eq 0 ]
then
echo time stamp:OK >> result.txt
else
echo time stamp:NG >> result.txt
fi
openssl ts -reply -in $1_sig.tsr -text | grep "^Time stamp:" >> result.txt

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科