基礎暗号通論
■暗号とは?(特別講座<暗号編>も参照せよ)
暗号は正当な受信者だけが理解できるようにメッセージを偽装する技法です。不当な受信者が仮にメッセージを盗み見ることができたとしても、内容を理解できないようにします。また、それだけではなく、正当な受信者がメッセージを受け取ったとき、メッセージが本当に正当な送信者から送られてきたものなのか(というより正当な送信者が書いたものなのか)判断できるようになっています。このように、暗号には2つの側面を持っています。
■暗号の歴史
そもそも、暗号はこの2側面をはじめから持っていたわけではありません。暗号は人類の歴史から見ると結構昔から存在します。1970年以前は軍事・外交のために暗号は使われていました。それ以後は一般社会において通信ネットワークが拡大普及したのでそこで暗号は使われています。
〜1970年代半ば (近代暗号)
|
1、暗号の作り方も鍵も秘密にする。 2、暗号の安全性を言語の統計的特徴を基に議論する。 3、暗号を使用するのが主に軍事または外交である。
|
1970年代後半〜現在 (現在暗号)
|
1、暗号の作り方は公開するが、鍵のみを秘密にする。 2、暗号の安全性は計算量理論を基に議論する。 3、暗号を使用する場所が民間にまで普及。 4、公開鍵暗号が利用される。
|
現在〜未来
|
専門でないので分かりません・・・。
|
|
|
例1:古代エジプトでは、権力者が死ぬと、労働者がその遺体をミイラ化し、『死の書』からの祈祷を施した巻物と一緒に遺体を埋葬した。このときの巻物の中に、神官(ボコール)たちは、死者を天国へ導くための秘密のパスワードを示した。このようなパスワードの大部分は、暗号化されてなかった。神官たちは、進行を運命に委ね、それが発見される前に死者が天国に辿り着くことを祈った。
例22:戦争において敵に内容を知られないようにするためや、宝の隠し場所などを一部の人だけしか分からないようにするために利用されてきました。暗号を英語で書くと「crypto」(または「code」)となります。元々、は「秘密の」「画された」という意味を持つギリシャ語の「cryptos」に由来します。
この意味からも分かるように、最初の暗号は前者の隠語文という意味しか持ちませんでした。この隠語文は実際古くから使われています。例えば、太平洋戦争の際に「トラトラトラ」(「攻撃成功」という意味)、「ニイタカヤマノボレ1208」(「12月8日午後0時以降、戦闘状態に入る。各部隊は予定のごとく行動せよ」という意味)が使われました。これが暗号化にあたるわけです。
例3:インターネット上で暗号が利用される場
・電子商取引←クレジットカード番号の伝達も含め決済までの品物の配達以外は全てネットワーク上で行われるので、そこで利用される。
・認証←人物・金などの真正性を確認する手段
・秘匿←重要な情報の秘密を守る
例4:最近になって、後者の合言葉という意味をも持ち合わせるようになりました。例えば、「山」に対して「川」と答えて身元を証明することが当てはまります。これは認証に当たるわけです。ゼロ知識証明によって実現できることが数学的証明されています。
現在の暗号はこの2つの側面を持ち、コンピュータの世界で広く利用されています。例えば、パスワードの暗号化はシステム侵入した者への平文パスワードの副次的な盗用を防ぎ、Web電子商取引での暗号化はパケット不正を防ぎます。
■暗号化・復元化
暗号化された情報を暗号文、元の通信文を平文【ヒラブン】と言います。
平文を暗号文にすることを暗号化、暗号文を平文に戻すことを復元化と言います。
■暗号解析
暗号には暗号解析と呼ばれる双子の姉妹がいます。この暗号解析とは暗号を破る技法のことです。この暗号解析は暗号を破るという意味を持ちます。厳密に言えば、復号鍵を持たずして暗号文を復号化する方法を見つける技術のことです。
私が初めて暗号解析に触れたのは、アドガー・アラン・ポーの『黄金虫』(1843年)に出てくるキャプテンキッドの暗号文を解読するところです。次に、コナン・ドイルの『シャーロック・ホームズ』シリーズに登場する「踊る人形」も印象的でした。これらのお話は特別講座<単換字暗号編>で紹介します。
頻度解読は暗号解読だけに利用されるわけではありません。その応用の一つとして古代の碑文の解読があります。このお話も特別講座<単換字暗号編>で紹介します。
■起源となるような暗号学者
アンリ4世・・・フランソワ・ヴィエト
|
・フランス。 ・16世紀。 ・秘密諜報機関の長 ・各国政府の暗号の解読をした。 ・「ヴィエトの頭脳は5万人の兵より怖い」と言われた。
|
アントワール・ロシニョール(ルイ13世・14世)
|
|
数学者ジョン・ウィリス
|
・イギリス
|
ハーバード・ヤードレー
|
・アメリカ ・日本の暗号解読 ・「アメリカのブラックチェインバー(機関室)」と言われた。
|
暗号解析者ウィリアム・F・フリードマン
|
・アメリカ ・米国陸軍通信隊で米国の解読技術を世界第一級のレベルに引き上げた。 ・紫暗号を解読していた(ゆえに真珠湾攻撃をあらかじめ知っていた)。
|
ロシュフォート大佐
|
・アメリカ ・日本のAF作戦の暗号を解読。 ・1986年(戦争後44年後)になってからこの功績により勲章を受けた。
|
アラン・チューリング
|
・1930年代:チューリングマシン(コンピュータの数学的モデル) ・1940年代:ナチス・ドイツのエニグマ暗号をコロッサス(真空管が1800本以上搭載)で解読。
|
フォン・ノイマン
|
・1940年ごろ:ノイマン型コンピュータの方式を提案。
|
C・E・シャノン
|
・日米海戦の頃、ベル研究所。 ・暗号について確率論的立場から研究を始めた。 ・情報に関する意味の側面を捨象し、確率論的側面に注目してエントロピーと名付ける情報量の概念を提案。 ・情報源符号化に関する理論:通信回線に誤りを生じても再生時に自動的に訂正するための指導原理
|
|
|
■各国の代表的暗号
ドイツ
|
・エニグマ暗号
|
日本
|
・紫暗号(アメリカでは「パープル」と呼ばれていた)
|
|
|
■秘密鍵とは?
秘密鍵暗号では暗号化と複号化に同じ鍵を用います。これは,昔から使われてきた通常の鍵と同じ原理ですので,慣用暗号とも呼ばれてます。秘密鍵暗号では,非常に多くの鍵が必要になるが,公開鍵暗号に比べて処理速度が速いのが特長である。短所として,安全な手段で鍵を受信人に届ける必要があり,異なる相手ごとに鍵を準備する必要があります。
秘密鍵暗号はメッセージを1バイトごとに暗号化するストリーム暗号と,メッセージを複数ビットでブロック化して暗号化するブロック暗号に分類することができます。このブロック暗号の主なものに,米国商務省標準局(NIST)の募集に応じて米国IBM社が開発したDES(Data
Encription Standard)や,スイス工科大学で開発されたIDEA(International Data Encryption
Algirithm),NTTが開発したFEAL(Fast data Encipherment ALgorithm)などがある。
■秘密鍵を取り出す(Attcker側)
秘密鍵はメモリに記録されているので、これを取り出してみよう。
1、ルーターを分解する。
2、回路プローブのようなもので秘密鍵を取り出す。
3、秘密鍵を入手したら何でもやりたい放題!
■秘密鍵暗号
詳細は特別講座<秘密鍵編>を参照せよ。
■共通鍵暗号
詳細は特別講座<共通鍵暗号化方式編>を参照せよ。
■公開鍵暗号
公開鍵暗号では暗号化と複号化に異なる鍵を用います。これは,メールの発信者と受信者とで同じ鍵を分け合う必要が無くなることを意味しています。つまり,自分の公開鍵で暗号化されたメールは,自分の秘密鍵でしか複号できないので,自分は複号用の秘密鍵さえ保持していればよいわけです。
秘密鍵暗号のように,鍵を秘密裏に交換する必要がありません。暗号化に使う鍵は公開するので公開鍵(Public
key),複号化に使う鍵は秘密鍵(Secret
key)と呼びます。ちなみに,解読とは鍵を持っていない第三者が暗号文を解読することを指し,複号化と区別します。公開鍵暗号には米国マサチューセッツ工科大学のRivest,Shamir,Adlemanの3氏が開発したRSAなどがあります。
理解するには、合同式(高校の整数論で出てきます)の知識が必要。
詳細は特別講座<公開鍵暗号化方式編>を参照せよ。
■電子署名
電子署名(ディジタル署名)は、紙ベースの社会における印鑑や署名に相当し、情報ネットワーク上で本人であることを認証するための方法です。印鑑は全く同じ印影を持った印鑑を偽造することが困難であるという性質を利用しています。また,署名は他人と同じ筆跡で署名することが困難であるという性質を利用しています。しかし電子署名の場合は,印影でも筆跡でも容易に複製できます。このため,電子署名では承認を与えるべき元データの内容などに応じて,毎回異なる署名データが生成されるのです。
例;メールの場合,送信者が自分の秘密鍵でメール本文に電子署名を付けて受信者に送信する。受信者は,送信者の公開鍵を使ってメールを複合化すると同時に,電子署名を確認することができます。または,メール本文は暗号化せず平文のままで,電子署名のみを複号化して本人確認をすることも可能です。万一,メールの配送経路で第三者がデータの書き換えを行った場合は,チェックサムの検査などで電子署名の確認が不可能となり,データが改ざんされていることがわかるのです。
欠点;公開鍵の信頼性←送信者の公開鍵を使って,電子署名を確認し,メッセージを信頼しているわけだが,間違いなく正しい送信者からのメッセージかどうかは,実際にはわからないということです。もしかしたら、受信者が持っている公開鍵は,第三者が送信者になりすまして,受信者に送ってきた鍵かもしれないという点です。最も確実な方法は,直接会って公開鍵を手渡して貰うことですが,このネットワーク社会においては非常に不便です。これを解決する方法のひとつとして,信頼できる認証局(Certificate
Authority:公開鍵証明書発行局)を使う方法があります。認証局で公開鍵を登録し証明書を発行することにより,なりすましを防ぐことができます。役所などで,印鑑を認証してもらうために印鑑証明を発行してもらうのと同じ方法です。
ソフト;暗号化メールのフリーソフトとしては,PGP(Pretty Good Privacy)やPEM(Privacy
Enhanced Mail),S-MIME(Secure Multipurpose Internet Mail
Extension)などが使われています。また,PGPを容易に使えるようにしたメーラとしてMew(Message interface to Emacs
Window)がある。
詳細は特別講座<電子署名編>を参照せよ。
■電子すかし
特別講座<電子すかし編>を参照してください。
■メールの暗号化
●暗号化を使ったメールの防衛
皆さんはもちろんメールを利用していますね? プライベートまたはビジネスなど手軽にメールを利用していると思います。実はメールは葉書のようなものでメールサーバーの管理人(普通はプロバイダ)が見ようと思えば見えるのです。また会社内ならば会社のサーバーの管理人が悪意ある人だった場合あなたのメールを覗いているかもしれません。また最近は盗聴法ができてしまったので公的機関に堂々と盗聴されるかもしれません。そのようなことはどう考えても良い気持ちはしませんね。それを防ぐ方法としてメールの暗号化が考えられます。先ほどメールを葉書に例えましたが暗号化を施すことによって葉書を封書(中身を見られない)に変えるようなものです。現在インターネットではメールの暗号化として一般的にPGPまたはS/MIMEが利用されているので、この2つを以下で解説します。
●代表的暗号
●PGPとS/MIMEの違い
前項でPGPとS/MIMEについて紹介しましたが結局どちらを使えばよいのかどうか気になるところですね。結論からいえばPGPとS/MIMEの違いは証明機関の違いです。PGPの場合相手に自分の公開鍵に対して署名してもらうことで公開鍵の証明を行います。よって相手の信用度によって公開鍵の信頼度が依存してしまいます。例えば自分が相手を信用している場合は公開鍵の信頼度が高くなり、自分が相手を信用していない場合は公開鍵の信頼度が低くなります。またS/MIMEの場合はVeriSign社(http://www.verisign.com/)やFreeCA社(http://freeca.digion.com/)などの証明機関で自分の公開鍵が本物かどうかを証明してもらうのです。
●まとめ
PGP、S/MIMEどちらを使う場合にしてもメールを送る相手がそれぞれを導入していなければなりません。他に暗号メールをやる方法としてCGIの暗号君(注1)を利用する方法やフリーウェアの暗号ソフトウェア(注2)を利用するなどが存在します。いずれにしてもそれぞれのメリットとデメリットを天秤にかけ利用するとよいでしょう。個人的にS/MIMEの導入は非常に楽でした。
(注1)暗号君とは某スーパーハッカーが作成したCGIスクリプトです。メールの内容をフォームに貼り付けてキー(このキーは自分と相手であらかじめ取り決めておかなければならない数字です。即ち秘密鍵ですね)を設定して暗号化します。その暗号化された内容をメール本文に貼り付けて相手に送信します。そして相手側はその暗号化された内容をフォームに貼り付けてキーを設定して復元化することにより内容を読むことができる仕組みです。
(注2)フリーウェアの暗号ソフトウェアとしてTNMailなどが存在します。このTNMailはメール本文を暗号化して添付ファイルとして相手に送信されます。そして相手のTNMailで復元化するわけです。しかしアタッカー側もTNMailを利用すれば簡単に復元化されてしまいますのでPGPやS/MIMEよりも一段階低いセキュリティとなる。
■楕円曲線暗号
楕円曲線暗号については、ここを参照しください。
■公式サイトのプログラムは本当に信用できるのか?
タイトルを見て、公式サイトのプログラムが信用できなかったら何を信用すればいいんだ? と反論したい方もいらっしゃると思います。ここでいう信用できるプログラムとはプログラム作成者が想定していた動きのみを行うプログラムのことです。
実は公式サイトで配布されているプログラムであっても、何らかの原因で信用できないプログラムである可能性もあります。例えば、公式サイト自体がアタッカーに侵入され、プログラムを勝手に改竄(カイザンと読む。他のものに置き換えること)するといった場合も想定できるし、またプログラム作成者がコンピュータウイルスに感染していて配布するプログラムにも感染していたといった場合も想定できます。
実際、よく起きる事件は前者の場合です。
2002年10月の実話です。メールサーバーで利用されるSendmailという有名なプログラムがあります。このSendmailにトロイの木馬が含まれたまま、プログラムが出回ってしまいました。信用できないと報告されているSendmailのファイルはsendmail.8.12.6.tar.Zまたはsendmail.8.12.6.tar.gzです。詳細はCERT/CC(http://www.cert.org/)のおいて、CA-2002-28(http://www.cert.org/advisories/CA-2002-28.html)として報告されています。
そこで、プログラムが信用できるのか信用できないのかを判断する手段を知っておく必要があります。プログラムが改竄されたものかどうかをチェックする方法は、PGPの署名(signature:シグネチャ)またはMD5というハッシュ関数値を比較するというのが代表的です。どちらの方法も、プログラム作成者が配布前に信用できるプログラムのPGPの署名やMD5の値を調べておき、配布と同時に公開しておき、そのプログラムをダウンロードしたユーザーは各自ダウンロードしたプログラムと公開されている値が一致するかどうかをチェックすることで、改竄されていないことを確認できるわけです。
PGPの署名やMD5の概念自体を解説してしまうと本書の敷居を高くなってしまうので、ここではチェックの仕方だけを紹介します。
PGPの署名のチェックは他のコラムで述べているのでそちらを読んでもらうとして、次にMD5の値をWindows上で表示する方法を述べます。概念の話が気になる方はRFC1321を読んでみてください。
1:http://www.fourmilab.ch/md5/にmd5.zipがあるので、ダウンロードします。
2:md5.zipを解凍すると、md5というディレクトリができます。
その中に幾つかファイルが存在しますが、ここで利用するのは「md5.exe」ファイルのみです。
(図1)md5_1.JPG
3:MD5の値をチェックしたいプログラムがあるディレクトリ内に「md5.exe」ファイルをコピーします。即ち、両方のプログラムが同一ディレクトリ内にあることになります。
この例では「C:\DOS」ディレクトリに両方のプログラムを置いたことにします。
4:DOS窓を起動して、ステップ3のディレクトリに移動します。
そして、次のような書式を入力します。
> md5 [調べたいプログラム名]
すると、MD5のハッシュ値が表示されます。
この例では調べたいプログラム名として、「sendmail.8.12.6.tar.gz」ファイルを指定しました。
(図2)md5_2.JPG
5:表示された値「73E18EA78B2386B774963C8472CBD309」と公開されている値「73e18ea78b2386b774963c8472cbd309」を比較して、大文字小文字の違いはありますが、他に違う箇所がないので、調べた「sendmail.8.12.6.tar.gz」ファイルは信用できるプログラムだと判断できます。
一応、文章の流れとして、sendmail.8.12.6.tar.Zまたはsendmail.8.12.6.tar.gzのPGPの署名とMD5の値を次に示します。
○PGP signature
pub 1024R/678C0A03 2001-12-18 Sendmail Signing Key/2002
<sendmail@Sendmail.ORG>
Key fingerprint = 7B 02 F4 AA FC C0 22 DA 47 3E 2A 9A 9B 35 22
45
○MD5
73e18ea78b2386b774963c8472cbd309
sendmail.8.12.6.tar.gz
cebe3fa43731b315908f44889d9d2137
sendmail.8.12.6.tar.Z
8b9c78122044f4e4744fc447eeafef34
sendmail.8.12.6.tar.sig
以上のように、MD5の値を使ってプログラムが信用できるかどうかチェックする方法を見てきましたが、これにも弱点があります。それはMD5の値を公開しているWebページさえも改竄されたとき、MD5.exeファイル自体が改竄されたとき、MD5をすり抜けるようにプログラム自体を修正していたときなどが考えられます。この弱点を補うために、PGPの署名も併用するわけです。
インターネットに公開されているプログラムをダウンロードして利用するのは勝手ですが、それに伴う被害(例えばウイルスやトロイの木馬の感染など)はあくまで自己責任というのが心構えが必要だと思います。
■数学からのアプローチ
●文字列を数字で表してみよう
この章ではMathematicaを利用します。
最初に通信文(平文)に用いる文字を決めておきます。ここでは空白を表す文字_とアルファベットA,B,・・・,Zとの27文字のみを用いることにします。次のalphabetはこの27文字を並べた文字列である。
次に各文字_,A,B,・・・,Zに対して順々に0,1,・・・,26(0から数えるので27文字)と数のラベルで割り当てて、文字を数で表すことにする。与えられた文字列sの各文字のラベルのリストを返す関数toLabels[s]とその逆関数である与えられたラベルのリストlが表す文字列を返す関数fromLabels[l]を作ります。
toLabels[s_String]:=Map[(StringPosition[alphabet,#][[1,1]]-1)&,Characters[s]]
情報源 セキュリティアカデメイア
|