期末試験
試験の内容
試験の内容は次の通りです。
- IP アドレスの計算
- 講義で触れたプロトコル一つを詳しく説明すること
試験実施方法
準備
以下のソフトウェアを使用します。
- openssl(MacOSX や Linux などは標準で利用可能なはず)
Windowsは
バイナリ
配布サイトからWin64 OpenSSL v3.1.1 Lightの msi ファイルなどを
ダウンロード、インストールする
(なお、マイクロソフトにより安全と認められていないので、「詳細」などのメニューを何度も開かないとインストールできない)
- Microsoft Word
以下の事前準備をします。
- Windows なら OpenSSL Command Prompt を起動する。他のOSなら
ターミナルを起動します
- openssl genrsa > private.pem で秘密鍵を生成しま
す
- 作成した private.pem は大事なファイルですので、バックアップを取
り、失くさないようにして下さい
- 念の為、読み込み専用ファイルにするため、以下のコマンドを実行して
も良い
- Windows
- attrib +R private.pem
設定の確認は attrib でできる。
- UNIX系(MacOSXを含む)
- chmod a-w privvate.pem
設定の確認は ls -l private.pem でできる。
- openssl rsa -pubout < private.pem > 学籍番号pub.pem で公開鍵を生成します
- 公開鍵を試験実施より先
に
公開鍵提出甩アップローダーに提出しておきます。
試験前に提出してないと試験を受けられません。
公開鍵が指定したファイル名でなかったり、指定した形式でない場合、
提出された答案が合格であることを判定できません。
ファイル名に余計な文字列を付加したり、
指定したファイル形式(pem 形式)でない場合点数がつかない場合があります。
練習
練習用のpdfファイルを用意しておきます。
(test.pdfとしておきます)
電子署名の生成と検証
- openssl dgst -sign private.pem test.pdf > 学籍番号.sig
- 次のコマンドで公開鍵を使って正常に生成できたかを確認できる。
openssl dgst -verify 学籍番号pub.pem -signature 学籍番号.sig
test.pdf
タイムスタンプの取得のための準備
- https://www.freetsa.org/index_en.php
にアクセス
-
tsa.crt をダウンロード
-
cacert.pem をダウンロード
タイムスタンプの取得
- https://www.freetsa.org/index_en.php
にアクセス
- Online Signature で、stamp のファイルとして、 学籍番号.sig をアップ
ロードする。
- Download TimeStampRequest file をクリックして、 学籍番号_sig.tsq を
ダウンロードします。
- Download TimeStampResponse file をクリックして、 学籍番号_sig.tsr を
ダウンロードします。
タイムスタンプの検証
- リクエストの内容は次のコマンドで確認できます。
openssl ts -query -in 学籍番号_sig.tsq -text
- タイムスタンプの内容は次のコマンドで確認できます。
openssl ts -reply -in 学籍番号_sig.tsr -text
-
openssl ts -verify -in 学籍番号_sig.tsr -queryfile
学籍番号_sig.tsq -CAfile cacert.pem -untrusted tsa.crt
で正しいリクエストとタイムスタンプの対応のチェックができます。
-
openssl ts -verify -data 学籍番号.sig -in 学籍番号_sig.tsr -CAfile cacert.pem -untrusted tsa.crt
で署名したファイルへのタイムスタンプであることがチェックできます。
試験実施要領
-
7月19日23:59までに、公開鍵「学籍番号pub.pem」をBOX
の公開鍵提出用アップローダーに
アップロードして下さい。
- 7月20日 13:40 から 15:20 の授業時間内に実施します
- 試験問題は以下のとおりとします
- 問題1 50点(試験開始後に発表)
- IPアドレスの計算問題
- 問題2 50点(事前準備推奨)
- 講義で取り上げたプロトコルを一つ選び、(1)選んだ理由(10点)
と(2)要約(40点)を解答用紙の範囲内(全体で3ページ以内)で説明し
なさい。
選んだ理由の文章は他人の文章と一致しないように工夫すること。
- 事前説明の後で、
試験問題と解答用のファイル
を公開します
- 解答ファイルを完成させ、「学籍番号.pdf」というファイル名の PDF とし
て下さい
- 解答ファイルに対して、秘密鍵で電子署名をして下さい。
電子署名のファイル名を「学籍番号.sig」として下さい。
- 電子署名ファイルのタイムスタンプを 15:20 までに作成して下さい。
タイムスタンプファイルを「学籍番号_sig.tsr」とします。
- 7月21日23:59までに、これらの3つのファイルをBOXの試験用アップローダーに
アップロードして下さい。1つのファイルにしてしまったら減点の対象とする。
- 学籍番号.pdf
- 学籍番号.sig
- 学籍番号_sig.tsr
注意
本試験について、事前に解説し、手順の練習の時間をとり、直接質問の時
間をとり、説明の動画を提供している。
したがって、試験直前や試験中に、
個別に回答する必要がある質問については回答しない。
なお、試験に関して全体に関する質問については妨げないので、特にサー
バエラーなど、試験運用上に重要な支障が生じている場合などは、
坂本<[email protected]>
まで連絡をして欲しい。
採点基準
-
公開鍵のファイル(学籍番号pub.pem)が 7月19日までにアップロードされていること。
解答ファイル、電子署名、タイムスタンプの各ファイル(.pdf, .sig,
.tsr) が 7月20日中にアップロードされていること。
なお、公開鍵の提出遅れについては、減点扱いとする。
7/20 0:00-13:39 までにアップロードした場合は -10点、
7/20 13:40-15:20 は -20 点の減点とする。
7/20 15:21 以降の提出は、試験を受けていないものとする。
.pdf, .sig, .tsr の各ファイルに関しては7/20中の提出とし、それ以降
は科目放棄とするが、ネットワークのトラブルを考慮する場合はある(個
人の都合は考慮しない)。
- 電子署名、タイムスタンプが正しくされていること。
電子署名が正常でない場合、または、7/20 15:20
(20230720062000Z) までのタイムスタンプが押されてない答案は 0
点とする。
つまり、上記のチェックのうち、下記のチェックを採点者は行う
- openssl dgst -verify...
-
openssl ts -verify -data...
-
openssl ts -reply -in 学籍番号_sig.tsr -text
の出力のタイムスタンプが 2023/07/20 06:20:00 GMT より若いこと
-
問題 1 のIPアドレスの計算においては不要なサブネットマスクなどの情
報は無視する。
アドレスの値については 1 違っていても0点とし、部分点は与えない。
-
問題2については、記述量、内容の正確さ、読み易さで評価します。
但し、完全に同一な答案が複数提出された場合は抽選で一通のみ採点し、残り
は0点とします。
技術的な内容を記載するので、要約の部分は他人と一致する可能性はあります。
そのため、選んだ理由が他人と一致しないように工夫して記述して下さい。
注意
-
公開鍵は 7月20日までにアップロードするものとし、それ以降の変更は認め
ません。
特に、試験中に間違って上書きとかしないように。
ただし、アップロード後に秘密鍵を壊してしまった場合などは、減点を前提
にアップロードをする必要があります。
-
署名した後、元のファイルを変更すると、作成した電子署名は無効になるの
で、署名とタイムスタンプをやり直す必要があります。
-
試験中の各ファイルのチェックは義務ではないが、チェックを通らないと不合格になる恐れがあるので、余裕がある場合はチェックすることを推奨します。
試験の内容
講義で触れたプロトコル
以下の中から一つを選んで、試験中に解答用紙の範囲内で分かりやすく解説し
て下さい。
なお、読みやすさが重要なので、あらかじめ解答を書く練習をしておいて下さい。
- IPv4
- IPv6
- RIP
- OSPF
- TCP
- Ethernet
- 無線LAN
IP アドレスの計算問題
付録
提出用のファイルを検査して結果を 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
坂本直志 <[email protected]>
東京電機大学工学部情報通信工学科