11 暗号 2008年度 電子計算機及び実習 69
電子計算機及び実習 第 11 回 (12/22)
11 暗号
11.1 今日のテーマ
* Mathematicaを用いた暗号化と復号化
* PGP
**今日の課題
以下の2点を行うこと.
• PGPの公開鍵をホームページに公開する(課題11.3).
• PGPで暗号化したファイルを添付したメールを,s-suzuki宛に送ること (課題11.5).
11.2 Mathematica を用いた暗号化と復号化
次の暗号(「改」シーザー式暗号)を思い出そう.まず,次のようにアルファベットに数を対応させる.
a = 0, b = 1, c = 2, ..., x = 23, y = 24, z = 25
そして,例えば3を掛けて5を足すという変換(ただし,26以上になったときは,26未満になるまで繰り返し 26を引くことにする)を考える.この暗号でアルファベットは次のように変換された.
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
F I L O R U X A D G J M P S V Y B E H K N Q T W Z C
Mathematicaを用いて,この暗号を使ってみよう.Mathematicaを起動するにはデスクトップ上のMathematica アイコンをダブルクリックすればよかった.また,Mathematicaでは評価のために Shift⇑ + Enter ( Shift⇑
キーを押しながら Enter キーを押す)というキー操作を行うのであった.以下,Mathematicaのプロンプトは
In[%]=で表す.授業のページからMathematicaプログラムのファイルcaesar.mをダウンロードし,中身を見
てみなさい.Mathematica が起動している状態で次のようにすれば,caesar.mを読み込むことができる.
In[%]= << caesar.m
これで,caesar.mで定義されている関数が使えるようになる.例えば,次のようにすれば,meet at sixという
文字列を,鍵3,5 (3を掛けて5を足す)で暗号化できる.
In[%]= encipher["meet at six",3,5]
復号化するには次のようにする(%は直前の出力を表す). In[%]= decipher[%,3,5]
課題11.1 近くの人とメールを用いて暗号文をやり取りしてみなさい.
11.3 PGP
PGP は Pretty Good Privacyの略で,前述の通りジマーマンが開発した暗号用プログラムである.秘密鍵と 公開鍵の生成,暗号化,復号化,電子署名が簡単に行える.実は,快適に動くように,RSA暗号と従来の暗号を 併用しているのだが,そのような難しい原理を知らなくても使うことができる.
ジマーマンは,元は商業用に開発していたのだが,当局の圧力により,無償で配布してでもこのシステムを世 界に広めなければならないと考えた.その後,世界中の人々が改良を加えている.このような経緯により,少し 前まではアメリカ版のPGPをダウンロードすると,アメリカの法律に抵触する恐れがあった.
11 暗号 2008年度 電子計算機及び実習 70
11.3.1 鍵の生成と基本的な使用法
PGPを使うために,まず鍵を生成しよう.まず,ホームディレクトリのすぐ下に.pgpディレクトリを作成す る.以下,基本的にこのディレクトリ下で作業をするものとする.他人に見られないように,パーミッションを rwx---(700)に変更する.それから,コマンドpgpで鍵を生成する.
% cd
% mkdir .pgp
% chmod 700 .pgp
% pgp -kg
まず,いくつか質問をされる.全て英語であるが,簡単な英語なので,なるべく自分で読んで欲しい.最初の3
つの質問 (暗号の種類をどうするか,署名鍵を作るのか,鍵のサイズをどうするか)は全てdefault を選んで構わ
ない(1 Enter と入力する).
次に,ユーザIDを聞かれるので,例えば,次のように入力する(もちろん,各自自分のデータを入れること).
Taro UNGA <[email protected]>
それから,鍵の有効期間を設定するように言われる.これも defaultの0 (期限なし)を選んでよい.
次に,パスフレーズを入力するように指示される.これは,復号や電子署名のときに必要である.ログインパ スワードとは別個に作ること.少し長め(15から20文字くらい)で大文字,記号,スペースなどを含めるとよい.
もちろん,メモを取ったり,忘れたりしてはならない.
次に,暗号鍵を作るか聞かれるので,Yと答える.鍵のサイズは最大の3 にしておこう.また,有効期間は0
(期限なし)でよい.
最後に,鍵をランダムに生成するために,でたらめにキーボードの文字を入力するように言われる.これで
~/.pgpに公開鍵(pubring.pkr)と秘密鍵(secring.skr)が生成される.秘密鍵はパーミッションをrw---
(600)に設定して,他人に見られないように厳重に保管すること.また,繰り返しになるが,パスフレーズを忘れ
ないようにすること.
課題 11.2 以上の操作(鍵の生成)を行いなさい.
次に,公開鍵を公開するために,テキストファイルに変換する.
% pgp -kxa
すると,ユーザIDを問われるので,j6xxxxxxなどと答える.次に,ファイル名を問われるので,j6xxxxxx.asc などと答える.このファイルの中身をlessで見てみよう.訳の分からない文字列が並んでいるが,文字化けでは ない.これがあなたの公開鍵である.この公開鍵をウェブページで公開しよう.まず,jwww ディレクトリにファ イルをコピーし,パーミッションを公開用 rw-r--r--(644)に変更する.
% cp j6xxxxxx.asc ~/jwww/
% cd ~/jwww/
% chmod 644 j6xxxxxx.asc
それから,index.htmlの本文の先頭に次のように書き加えて保存する.
<a href="j6xxxxxx.asc">PGPの公開鍵</a>
これで,皆はここをクリックすることにより,公開鍵をダウンロードすることができる.
課題 11.3 実際に,自分のホームページにPGPの公開鍵を公開しなさい.
では,近くの人のページを訪れ,その人の公開鍵をダウンロードせよ.このファイルを~/.pgp/に移動し,次 のようにして公開鍵を登録する.ここに,ファイル名はその人の公開鍵の名前である(自分のではない).
% pgp -ka ~/.pgp/j6yyyyyy.asc
11 暗号 2008年度 電子計算機及び実習 71
どの程度その鍵を信用するか問われるので,そこは自分で判断しよう.それから,その公開鍵で何かのファイル を暗号化する.ここに,ユーザIDはその人のを入力すること(くどいようだが自分のではない).
% pgp -eat hfilenamei j6yyyyyy
成功すると,ファイル名に .asc と拡張子が付いたファイルができているだろう.これが暗号化されたファイル である.lessで中身を見ても読めないだろう.一度暗号化すると,暗号化した本人にも読むことはできない.読 めるのは秘密鍵を持っている者のみである.
では,その暗号化したファイルをメールで添付して送ろう.受け取ったら,単に
% pgp hfilenamei
で復号化できる.このとき,パスフレーズを聞かれる.
また,電子署名を付けるには,
% pgp -s hfilenamei
とする.登録した鍵一覧を表示するには
% pgp -kv
とする.これらを含めた,pgpのコマンドの使い方を調べるには
% pgp -h
とする.
課題 11.4 実際に,近くの人とメールを用いて暗号化したファイルをやりとりしてみなさい.
11.3.2 参考: Mew 上でメールを暗号化
Mew上でPGPを用い,暗号化,復号化,電子署名を行うことができる.暗号化や電子署名はメールを送る直 前に次のコマンドで行う.
暗号化: C-c C-e, 電子署名: C-c C-s, 電子署名+暗号化: C-c C-b
11.4 本日の課題
課題 11.5 次のウェブページからs-suzukiの公開鍵をダウンロードし,登録せよ.
http://jwww.ed.noda.tus.ac.jp/s-suzuki/sample.html
何か秘密のメッセージを作成し,s-suzukiの鍵で暗号化し,暗号化したファイルにs-suzuki.pgpと名前を付け よ.s-suzukiに s-suzuki.pgpを送ること.Subjectは「学籍番号+Dec22」とすること.
確認であるが,本日の課題は全部で以下の2点である.
• PGPの公開鍵をホームページに公開する(課題11.3).
• 以下の内容のメールをs-suzuki宛に送ること.課題11.5において,PGPで暗号化したファイルを添付する.
11.5 次回のテーマ
Cを用いた簡単なプログラム.