Hello world!

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!

カテゴリー: Uncategorized | 1件のコメント

暗号化 – シーザー暗号(1) – Excelの関数を使ってシーザー暗号の暗号化と復号を行う

1.実習課題

(1)利用するもの

Microsoft Excel(たぶんどのバージョンでも可能。この説明ではExcel 2003を使っている)

(2)実習課題の作成

i.アルファベットの平文から暗号文を作る仕組みを作る

・Excelを起動する。
・列A~Zを選択し、列の幅を24ピクセルにする。
・B1にタイトル「暗号化~シーザー暗号(英語)」と書く。
・B3に「平文を暗号文にする(アルファベット大文字)」、B5に「平文」、O5に「暗号文」と書く。
・B6~M9を選択してセルの色を「薄い緑」に、O6~Z9を選択してセルの色を「薄い黄」に変える。セルの「薄い緑」の部分に平文の文字を入力し、セルの「薄い黄」には暗号文が表示される、と使い分ける。
・B11に「暗号化の鍵」と書く。
・B12とD12のセルの色を「薄い緑」に変え、太い罫線を付ける。
・C12に「へ」と書く。
・O12からZ12までのセルを選択して「セルを結合」し、色を「薄い黄」にして太い罫線を付ける。
・O6に次の式を入力する。

=IF(B6<>"",IF($B$12="前",IF(CODE(B6)-($D$12)<65,CHAR(CODE(B6)-$D$12+26),CHAR(CODE(B6)-$D$12)),IF(CODE(B6)+($D$12)>90,CHAR(CODE(B6)+$D$12-26),CHAR(CODE(B6)+$D$12))),"")

・O6を選択したまま右下のアンカーポイントをZ6までドラッグし、次にZ9までドラッグして式をO6からZ9までコピーする。
・O6からZ9までを選択し、全体を太い罫線で囲み、横線を細い線にする。
・O12に次の式を入力する。

="複合化の鍵は「"&IF(B12="前","後","前")&"へ"&TEXT(D12,0)&"」"

ii.アルファベットの暗号文を平文に戻す仕組みを作る

・B14に「暗号文を平文に戻す(アルファベット大文字)」、B16に「暗号文」、O16に「平文」と書く。
・B17~M20を選択してセルの色を「薄い緑」に、O17~Z20を選択してセルの色を「薄い黄」に変える。セルの「薄い緑」の部分に暗号文の文字を入力し、セルの「薄い黄」には平分が表示される、と使い分ける。
・B22に「復号の鍵」と書く。
・B23とD23のセルの色を「薄い緑」に変え、太い罫線を付ける。
・C23に「へ」と書く。
・O17に次の式を入力する。

=IF(B17<>"",IF($B$23="前",IF(CODE(B17)-($D$23)<65,CHAR(CODE(B17)-$D$23+26),CHAR(CODE(B17)-$D$23)),IF(CODE(B17)+($D$23)>90,CHAR(CODE(B17)+$D$23-26),CHAR(CODE(B17)+$D$23))),"")

・O17を選択したまま右下のアンカーポイントをZ17までドラッグし、次にZ20までドラッグして式をO17からZ20までコピーする。
・O17からZ20までを選択し、全体を太い罫線で囲み、横線を細い線にする。

<図1 完成した実習教材>

(3)実習課題の利用

i.暗号文の作成

・B6からM9にアルファベットの大文字で、ひとつのセルに一文字ずつ入力する。例えば「A」、「P」、「P」、「L」、「E」と入力する。すると暗号文のところに同じようにA、P、P、L、Eと表示される。このとき入力する文字は直接入力で行う。
・暗号化のキーを決めてB12とD12に入力する。例えばB12に「後」、D12に「3」と入力する。
・暗号文のところが変わる。APPLEの場合はDSSOHになるはず。

ii.暗号文の復号

・B17からM20にアルファベットの大文字で、ひとつのセルに一文字ずつ暗号文を入力する。例えば上の例を使うと、「D」、「S」、「S」、「O」、「H」と入力する。すると暗号文のところに同じようにD、S、S、O、Hと表示される。このとき入力する文字は直接入力で行う。
・暗号化のキーをB23とD23に入力する。例えば上の例ではB23に「前」、D23に「3」と入力する。
・平文のところに復号された元の平文が表示される。上の例ではAPPLEとなるはず。

<図2 暗号化と復号の実習例>

iii.暗号の解読

・あらかじめ作られた暗号文を用意する。例えばUJFHMという暗号を用意する。
・暗号文を平文に戻すところに暗号を入力する。
・暗号化のキーを試す。例えばB23に「前」、D23に「1」を入力する。するとTIEGLとなる。これでは意味がわからない。
・キーであるD23を「2」、「3」と変えていき、意味のある単語になるまで試す。すると「5」にしたときPEACHとなるので、キーは「前へ5」だったとわかる。

<図3 暗号解読の実習例>

(4)実習課題の解説

この実習ではExcelの関数だけを利用してシーザー暗号を自動的に暗号化と復号ができるものを作る。関数は基本的なものだけを使っているので、類似の表計算ソフトでも実行可能だと思う。

i.O6に入力する平文を暗号化する式

a.全体構造
この式は条件文のネストになっている。全体構造は次のとおり。
=IF([式1],[式2],[式3])
全体構造では、セルO6に文字が何も入っていない場合の処理をしている。式1には「B6<>""」という条件式が入っており、これは「セルB6が空白でなければ」の意味で、空白でなければ式2が行われ、空白なら式3が行われる。式2には暗号化する式が入っており、式3は「””」で空白を表示することになっている。
b.式2の構造
式2の構造は次のようになっている。
IF([式4],[式5],[式6])
式4は「$B$12="前"」で暗号化のキーが「前」なのか「後」なのかを判断している。暗号化のキーが「前」なら式5で文字コードを前にずらす処理をし、「前」でなければ「後」であると判断して式6を行い後ろにずらす処理をする。
c.式5の構造
式5の構造は次のようになっている。
IF([式7],[式8],[式9])
式7は「IF(CODE(B6)-($D$12)<65)」であり、これはCODE(B6)でB6に入力された文字を文字コードに変換し、その数値からD12に入力された数字を引き算し、それが65より小さくないかを判断している。65はアルファベット大文字の「A」の文字コードである。つまり求めた値が65より小さければ、求める暗号化された文字はアルファベットの文字コードから外れるので、アルファベットの最後「Z」から遡らなければならない。その処理を式8で行う。65より小さくなければアルファベットの文字コードの範囲に収まっているので式9で単に文字コードを引き算するだけの処理を行う。ここでD12のセル指定に$が付いているが、これはセルの絶対指定で、作った式を他のセルにコピーしたとき、D12のセル指定だけは変わらないようにするためのものである。
d.式8の解説
式8は次のものである。
CHAR(CODE(B6)-$D$12+26)
CHAR関数は文字コードを文字に変換する関数である。求める文字コードは、CODE(B6)でセルB6の文字をコードにし、その数値からセルD12の数値を引き算し、さらに26を加えている。アルファベットのAからZまでが26文字であるので、26を加えるとZから遡ることができるのだ。
e.式9の解説
式9は次のものである。
CHAR(CODE(B6)-$D$12
式9は式8とほぼ同じ意味で、Zから遡る必要がないために26を引いていない。
f.式6の構造
式6の構造は次のようになっている。
IF([式10],[式11],[式12])
式6は式5と似た構造で、式5が文字を前にずらす処理であるのに対して、式6は文字を後ろにずらす処理である違いがある。まず式10は「IF(CODE(B6)+($D$12)>90」であり、これはCODE(B6)でB6に入力された文字を文字コードに変換し、その数値からD12に入力された数字を引き算し、それが90より大きくないかを判断している。90はアルファベット大文字の「Z」の文字コードである。つまり求めた値が90より大きければ、求める暗号化された文字はアルファベットの文字コードから外れるので、アルファベットの最初に戻って「A」から降りなければならない。その処理を式11で行う。90より大きくなければアルファベットの文字コードの範囲に収まっているので式12で単に文字コードを足し算するだけの処理を行う。
g.式11の解説
式11は次のものである。
CHAR(CODE(B6)+$D$12-26)
CODE(B6)でセルB6の文字をコードにし、その数値からセルD12の数値を足し算し、さらにアルファベットをAに戻って降りるために26を引いている。そしてCHAR関数で文字に戻している。
h.式12の解説

式12は次のものである。
CHAR(CODE(B6)+$D$12)
式12は式11とほぼ同じ意味で、Aに戻って降りる必要がないために26を足していない。

ii.作った式をコピーするときの挙動

O6に入力した式をドラッグすると、列、行むけて式がコピーされる。このときExcelの挙動として、セル指定がドラッグしたセルに対して自動的にずれていく挙動をとる。そのため同じ式をコピーしても、参照する元の文字のセル位置が自動的に適切なセル位置になる。ただし、暗号化のキーを入力するセルB12とD12だけは移動すると困るので、$をつけて$B$12、$D$12として動かないようにしている。これを「セルの絶対指定」という。

(5)実習計画

学校の実情、授業の目的、生徒の実態、興味関心などに応じて実習はアレンジする。実習の前にはシーザー暗号の考え方や歴史を教科書などで学習させる。そしていきなりコンピュータで実習するのではなく、まず簡単な例題をプリントで作って紙と鉛筆で手作業で体験させたい。実習ではExcelの操作に慣れているなら生徒に一から関数を入力させてもいいが、操作に時間がかかるなら完成したものを渡して暗号化と復号だけを確認させてもいい。入力に手間がかかり、間違うと修正に時間がかかる関数の部分だけをテキストファイルなどで渡す工夫も良いかもしれない。課題を作成するのに時間をかけすぎて、実習が授業の目標から外れないように考えたい。

2.授業展開

シーザー暗号は古代ローマ帝国のジュリアス・シーザー、本来のラテン語の読みではユリウス・カエサルと呼ばれた皇帝が使ったと言われている。シーザーは紀元前100年頃から紀元前44年まで生きたと言われるので、暗号の理論は今から2000年以上前に考案されたということになる。

シーザー暗号は換字式暗号に分類されるが、他にも転置式暗号があり、主として軍事上の必要から発展した歴史がある。より複雑な暗号を簡単に間違いなく暗号化し復号するために、棒や円盤などの道具を使うものから次第に複雑な機械式のものが考案されていった。第二次世界大戦で使われたドイツ軍のエニグマは有名で、映画のテーマとしても取り上げられた。

シーザー暗号の理論は難しいものではなく、紙と鉛筆でも実習できるだろう。しかし実際に長文を暗号化して復号するのは手間がかかる。機械化された暗号も、結局のところ紙などに記録された文字情報を元にしたものである。だがディジタル化された文字情報はディジタル処理することができ、このような簡単な表計算シートでも自動的に処理することができる。このシートを広げれば、何百、何千字の情報でも一瞬のうちに処理することができる。つまり情報がディジタル化されコンピュータで処理できるようになった今日、暗号の可能性は大きく広がり、その役割や意味は大きく変わったのである。

3.実習ファイル

実習ファイルはSkyDriveの公開フォルダーに置いている。なおこのエクセルファイルには、文字と文字コードの対応表も別シートで作ってあるので指導の参考にして欲しい。

http://cid-65ec136e6b368df2.skydrive.live.com/browse.aspx/.Public

4.参考にしたもの

Wikipedia,http://ja.wikipedia.org,2009/07/03

5.著作権

このページの著作権は松本吉生にありますが、高等学校の授業で利用すること、授業研究で利用することなどでは自由に使ってください。ただし研究会で発表するなど第三者へ伝えるときは、このページを参考にしたことを付け加えていただくと嬉しいです。

Copyright© 2009 Yoshio Matsumoto.

カテゴリー: 暗号 | コメントをどうぞ