第13講 情報セキュリティ  1講 2講 3講 4講 5講 6講 7講 8講 9講 10講 11講 12講  14講

コンピュータの基礎第13講
情報セキュリティ

【第13講のポイント】
 インターネットの発展にともない、われの生活は様々な面で便利にになったが、反面、負の側面も現れている。本講では、通信に関する基本的な概念を理解するとともに、情報セキュリティ、暗号通信の仕組みについて学ぶ。

【第13講の目標】学習後、以下のことが身についたかチェックしよう。
  1. 情報セキュリティの基本を理解し、自分のパソコンをウィルスから守れる
  2. インターネットにおける暗号通信の仕組みを理解する
  3. 次の言葉の意味がわかる
    コンピュータウィルス、公開鍵暗号、デジタル署名

【第13講の構成】
  1. 情報セキュリティ
  2. 公開鍵暗号


本書の見方
ページをめくる
左(右)ページの左(右)端クリックまたはドラッグする
左(右)矢印キーを押す
1ページ分の移動
左右上端にある[Next]、[Previous]タブをクリックする
章の頭に移動
右上の【章の移動】タブをクリックし、現れた章を選ぶ
ページのジャンプ
右上のページ番号表示タブをクリックし、現れたページを選ぶ
画像の拡大およびリンク先への移動
画像やリンク先をクリックすれば、別ウィンドウ(タブ)で表示される

この教科書はBookletを利用して作成しています。

第1節 情報セキュリティ

 情報セキュリティとは、情報(データ)に対して、許可されていない者のアクセスを拒否し(機密性)、その破壊・改ざんを防ぎ(完全性)、許可されている者が必要な時にアクセスできる(可用性)ようにすることを言う。さらに以下の特性・機能を含めることもある。
 真正性:情報とその提供者が真正である
 責任追跡性:情報に関する責任を追跡できる
 否認防止:情報の当事者であることの否認の防止
 信頼性:システムが意図通りに動くこと

問13.1. (ヒント)
情報セキュリティとは何か、説明せよ。

 IPA(独立行政法人情報処理推進 機構)は毎年10大脅威を発表している。

サイバー攻撃

 サイバー攻撃には、特定の組織や個人のサーバーやコンピュータを狙った攻撃と、不特定多数に対する無差別攻撃とがある。使われていないIPアドレスをダークネットというが、情報通信研究機構(NICTER)では、主に日本のダークネットに対するパケットをリアルタイムで表示するWebページを公開している。パケットの宛先が不使用アドレスであることは通常考えにくいので、これらは不特定多数へのサイバー攻撃であると考えられる。また、意図せずにこのようなパケットを送出しているコンピュータはマルウェアに感染して踏み台にされていると考えられる。

実習.不特定多数に対するサイバー攻撃の可視化
  1. nicterwebにアクセスして、サイバー攻撃の様子を確認せよ。
  2. nicter の取り組みについてはASCIIの記事がわかりやすい。
  3. その他のサイバー攻撃を含め世界的な状況について、サイバー攻撃可視化サイト(例えばこちら)から確認せよ。

第2節 コンピュータウィルス

 不正かつ有害に動作させる意図で作成されたソフトウェアを総称してマルウェアという。コンピュータウィルスはマルウェアの一種で、他のプログラムやシステムに自らをコピーし増殖・伝染する自己伝染機能、発病条件(時刻、経過時間、処理回数等)が満たされるまで潜伏する潜伏機能、ファイル破壊やデータの勝手送信、他システムの攻撃等を行う発病機能の1つ以上を有するものをいう。ウィルス疑似体験サイトを試してみよう。

*問13.2.次のマルウェアについて説明せよ (ヒント)
  1. ランサムウェア
  2. キーロガー
  3. スパイウェア
  4. トロイの木馬
  5. ボット

脅威に対する個人的対策

IPAでは、個人的対策(設定)を購入直後、インターネット利用時、メール利用時にわけて解説している。また、ここからセキュリティでも、様々な脅威やその対策に関する情報を公開している。

問13.3. (ヒント)
  1. 10大脅威(IPA)の内、自分に関係すると思う脅威を3つあげて解説せよ
  2. 個人的対策(IPA)のうち、特に気を付けている対策を3つあげて解説せよ

パスワード探索実験

パスワードは、記号も混ぜて十分長くしなければいけない。それを体験的に理解しよう。フリーの圧縮・解凍ソフトLhaplusでは、パスワード付きのZIP圧縮と、(忘れたときのために)パスワードを探索する機能がある。また、メールのアカウントやパスワード、ブラウザに記憶させたサイトのアカウントやパスワードを表示させるソフトもある。言うまでもないが権限のないパスワードを探索することは犯罪である。

実験.LhaPlusを使って以下のパスワードの探索実験をしてみよう。
  1. 適当なファイル・フォルダに対し(Lhaplusを使って)パスワード圧縮を行え
  2. 1.で圧縮したファイルのパスワードを探索せよ
  3. いくつかのパスワードを試してその探索時間の体験的な比較をせよ

問13.4. (ヒント)
  1. 銀行のATMの暗証番号が数字4ケタでも安全だと考えられている理由を述べよ
  2. 英数字(大文字、小文字を含む)からなるパスワードの場合、1文字長くするとしらみつぶしの探索時間は何倍になるか。

第3節 インターネット上の暗号通信

 インターネットは、前章第4節でも述べたように、オープンなネットワークでありネットワークを流れるデータには常に盗聴・改ざんの危険が伴う。例えばクレジットカード番号のような大事な情報は、暗号化して送受信しなければならない。そのような暗号通信を保証するサイトして、https://で始まるサイトがある。
 しかし、httpsサーバと(不特定多数の)クライアントの間で、どうすれば暗号化通信を行うことができるのだろうか。

暗号の基本的枠組み

 最初に、いくつかの言葉を定義しておこう。暗号化通信において、送信者平文暗号化して暗号(文)を作成し、それを受信者送信する。受信者は受信した暗号文を復号して、平文に戻す。

送信者 通信路 受信者
平文=【暗号化】⇒暗号 ― 送信 →  暗号=【復号】⇒平文

共通鍵暗号

 従来の(共通鍵)暗号システムでは、暗号通信を行う当事者二人が、共通の鍵を(他人に知られず)秘密裏に共有し、暗号化と復号にその共通鍵を用いる。共通鍵暗号システムでは、共通鍵を他人に知られることが情報の盗聴・改ざんに直結するため、共通鍵をいかにして秘密裡に共有し守るか、が重要である。したがって、オープンなネットワークであるインターネットでは、共通鍵暗号をそのまま用いることはできず、次節で説明する公開鍵暗号を利用しなければならない。

公開鍵暗号

 公開鍵暗号は次の特徴を持つ鍵の対を利用する。(作成法は次ページ)
  1. どちらの鍵で暗号を作成しても、もう一方の鍵で復号できる
  2. 一方の鍵を知られて(公開して)も、他方の鍵の秘密が保てる
暗号を受信しようとする者は、鍵の対を作成し、その一方を公開し(公開鍵)、他方を秘匿する(秘密鍵)。受信者Aへの送信者はAの公開鍵で作った暗号をAに送り、Aは受信暗号を自分の秘密鍵で復号する。このとき通信者間の秘密情報(鍵)の共有は不要である。
 例えば A,B,C,D の 4人が互いに暗号通信を行うことを考えてみよう。共通鍵暗号では、送受信者のすべてのペア、A⇔B,A⇔C,A⇔D,B⇔C,B⇔D,C⇔D 用の異なる 6個の共通鍵が必要で、一般には多数の共通鍵が必要になる。一方、必要な公開鍵・秘密鍵の対は、Aへの送信(B⇒A,C⇒A,D⇒A)用、Bへの送信(A⇒B,C⇒B,D⇒B)用、Cへの送信(A⇒C,B⇒C,D⇒C)用、Dへの送信(A⇒D,B⇒D,C⇒D)用の 4対になる。したがって、一般に必要な公開鍵・秘密鍵の対は共通鍵に比べ少数ですむ。

問13.5. (ヒント)
  1. k 人が互いに暗号通信を行うのに必要な共通鍵の個数を求めよ。
  2. k 人が互いに公開鍵暗号通信を行うのに必要な公開鍵・秘密鍵の対の個数を求めよ。

 Aの公開鍵で作成した暗号を効率的に復号できるのは、対応する秘密鍵を知るAのみなので、通信の安全性が保たれる。ただし、公開鍵暗号では、暗号化の鍵(公開鍵)や手順は公開されておりだれでも平文から暗号を作れるので、前節の実習3で行ったパスワード探索のような、秘密(復号)鍵の総当り探索が可能である。しかし、それは効率的でなく、秘密鍵が十分な長さ(複雑さ)を持つように作れば安全(だろう?)というわけである。
 また、復号は暗号文をもとの平文に戻す操作であるから、暗号鍵を公開しても、その逆操作である復号鍵=秘密鍵の秘密が保たれるという都合のよいことが実際可能なのだろうか。これらは計算時間に関わる問題で、この後説明する。

インターネットでの暗号通信

 インターネットにおける暗号通信(SSL)では、サイト(サーバー)にアクセスしたパソコン(クライアント)は、まずサーバーのデジタル証明書(後述)と公開鍵を取得する。デジタル証明書に信頼がおければ、クライアントは、以後の暗号通信のみに用いる一時的な共通鍵を作成し、それをサーバーの公開鍵で暗号化して、サーバーに送信する。これによって、サーバーとクライアントの間で、安全に共通鍵を共有でき、以後、この共通鍵を使って、暗号通信が行われる。一般に、公開鍵より共通鍵の方が高速に暗号化と復号ができるので、このような方法がとられる。

RSA(公開鍵)暗号の実験

RSA暗号は、桁数の大きな2素数の積によるmod計算を利用した公開鍵暗号で、発明者(Ron Rivest、Adi Shamir、Len Adleman)の頭文字をつなげて名づけられた。

参考:3桁の素数
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997

実験.上のフォームでRSA公開鍵暗号の実験をしよう
  1. 2個の素数 p,q と適当な数(素数)eを決めておく(素数 p,q は本来大きくないと安全でないが、n=p×q≧65536で3桁程度にする)
  2. [鍵作成]ボタンを押し、秘密鍵(d,n)と公開鍵(e,n)を作成する
    (dがうまく求まらない場合はeの値を変えるとよい)
  3. 右の欄に平文を入れて[暗号化送信]ボタンを押す
  4. 送信された暗号文を戻すには[復号]ボタンを押す
ここでは、簡単のため1文字ずつ区切って暗号化しているが、そのような暗号(換字暗号)は、文字の出現頻度(や文字ごとの暗号化)を手掛かりに簡単に破られてしまう。実際には n を大きく取りもっと長い文字数で区切って暗号化する必要がある。

RSA暗号の原理

 公開鍵暗号の一つであるRSA暗号の原理を大まかに説明しよう。RSA暗号の基礎をなすのは、自然数 n を法とする演算である。x を n で割った余りを x mod n と書き、x mod n = y mod n のとき x≡ny と書く。例えば (3+4) mod 5 = 2、(3+4)≡52 である。n を法とする演算(加算、減算、乗算)では、0 以上 n-1 以下の整数同士の演算(加算、減算、乗算)を n で割った余りが演算結果になる。
 特に以下の実習で次の2点を確かめておこう。(証明は後述)
  ・pが素数のとき、x≡p/ 0 ⇒ xp-1p1
  ・p,qが素数のとき x1+k(p-1)(q-1)pqx(kは正整数)

*問13.6.右下のMOD電卓を使い、以下の式の値を求めよ。 (ヒント)
変数 yを含む式では様々な yに対し、結果がどうなるかを報告せよ。
①y10 mod 11
②y1+(7-1)(11-1) mod 7・11
③y1+2(7-1)(11-1) mod 7・11
④1÷31 mod (331-1)(457-1)
⑤(y31)24271 mod 331×457

 RSA暗号では上の実習で確かめた、素数 p, q の積 n = p×q を法とする演算で x ≡n x1+k(p-1)(q-1) が成り立つことを利用する。
 d・e≡(p-1)(q-1)1なら(xd)e=(xe)d=xdenxであるから、n を法とした d 乗と e 乗が互いに逆関数の関係にあり、一方で暗号化すれば他方で復号できる。

公開鍵暗号の安全性

RSA暗号を破るには、素朴には、次のような方法が考えられる。
  1. 公開鍵を使って作成した暗号(の値)を、n を法として 1乗、2乗、3乗、…して元に戻るか否かを調べる。当然、d 乗まで調べた時点で元に戻るから、秘密鍵 d をいつかは知ることができる。これは秘密鍵 d を虱潰しに探すことを意味し、d に比例する時間( d の桁数の指数時間) がかかる。これは言い換えると、y=xe mod n(e, n は公開されているので y は誰でも計算できる)に対し、x, y から x=yd mod n を満たす d を求めることに相当する。
  2. n を素因数分解して、p, q を求め、(p-1)(q-1)を法とする (1÷e) を計算して d を求める。素因数分解を求める素朴な方法は、小さい方の素数から順に虱潰しに割ってみる方法で、これも、p あるいは q (までの素数の個数)に比例する時間がかかる。
 これらは共に虱潰しの方法であり、パスワードの実験や10.1節のべき乗計算アルゴリズムでみたように、秘密鍵 d や素数 p, q を十分おおきくとれば、安全と考えてよい。
 ところで、xd の計算は復号計算でもあるから、その計算に x を (d-1) 回掛ける素朴な方法しかなければ、復号にとんでもない時間がかかってしまうことになり、RSA暗号は機能しない。幸い10.1節でみたように d の値がわかっていれば、d 乗を d の桁数に比例する時間で高速に行える。(Binary法)
 このことは、例えて言えば、n 桁の数字をパスワードにした場合、パスワードを知っている人は n 回のキー操作で入力できるのに対し、パスワードを知らなければ、10n 通りのパスワードを虱潰しにあたるしかない、ということに相当する。
 以上のことから、復号は、秘密鍵 d を知っている本人は高速実行できるが、秘密鍵を知らない第三者が可能な素朴な方法(虱潰し)では、現実的な時間内に実行できないことがわかる。
 現在のところRSA暗号を現実的な時間内に破る方法は知られていない。1.について言えば、与えられた x,y,n,に対し、x=yd mod n を満たすdを求める効率的な方法は知られていないし、2.についていえば、nからp, q を求める効率的な因数分解の方法は知られていない。しかし、何か巧妙な方法が、まだ見つかっていないだけで今後見つかる可能性があるのかは、実は分かっていない。そのような方法は存在せず、それゆえRSA暗号は安全であると広く信じられてはいるが、そのことの数学的に厳密な証明は得られていない。このことは、P≠NP問題というクレイ数学研究所から100万ドルの賞金がかけられている有名な未解決問題の一つに関わる問題である。

参考:式の証明

除算定理 eとmが互いに素のとき
(1) ae≡mbe ⇔ a≡mb   (2) de≡m1 となるd(即ち1÷e)が存在する
証明 (1) ae≡mbe ⇔ ae-be=(a-b)e はmの倍数 ⇔(eとmは互いに素より)(a-b)はmの倍数 ⇔ a≡mb。 (2) (1)より 0e,1e,2e,…,(m-1)e は≡mですべて異なるから、この中に≡m1 となるものが存在する。
フェルマーの小定理 pが素数で x≡p/ 0 ならば xp-1p1
証明 xとpは互いに素だから除算定理より、1x,2x,…,(p-1)x は≡pですべて異なり 1,2,…,(p-1) のどれかと合同≡pである。よって 1x⋅2x⋅…⋅(p-1)x=xp-1(p-1)!≡p(p-1)!。素数pと(p-1)!は互いに素だから除算定理より xp-1p1
RSA暗号の定理 p,q が素数ならば x1+k(p-1)(q-1)pqx(kは正整数)
証明 x≡p0 ならば、x1+k(p-1)(q-1)p0≡px。x≡p/ 0 ならば、xp-1p1 より x1+k(p-1)(q-1)=x⋅(xp-1)k(q-1)px。よって y:=x1+k(p-1)(q-1)-x はpの倍数。同様にyはqの倍数。よってyはpqの倍数で、x1+k(p-1)(q-1)pqx。

実習.下のアプリで演算表を作成し定理内容を確認しよう
  1. 除算定理:mod 10 の乗算と除算。10と互いに素な数による乗算では0~9がすべて現れ、除算可能。
  2. フェルマーの小定理:mod 7 のべき乗。6乗の行に1が並ぶ。
  3. RSA暗号の定理:mod 10=2⋅5 のべき乗。(2-1)(5-1)行毎にxと等しくなる
他の値でも実験しよう

第4節 デジタル署名とデジタル証明書

 暗号化通信では、公開鍵を使って暗号化し、秘密鍵使って復号した。秘密鍵を知るのは本人のみなので、通信の安全が保たれるというわけである。
 しかし、公開鍵暗号では、暗号化と復号が互いに逆関数の関係なので、秘密鍵で暗号化された文書は公開鍵で復号できる!それを利用して、ここでは、文書に対して電子的に署名・捺印するデジタル署名の仕組みと、デジタル署名を機能させるための公開鍵基盤について説明する。

デジタル署名

 最初に、デジタル署名の基本的な仕組みを見てゆこう。署名者は自分の秘密鍵で文書を暗号化したものを署名として文書に付ける。文書+署名の受領者は、署名者の公開鍵を使って署名を復号し、文書との一致を確認する。
署名者[署名付送信]通信路受信者[署名検証]
文書―[秘密鍵暗号化]→署名
文書+署名
―送信→ 署名―[公開鍵復号]→文書
同送の文書との一致をチェック

このとき、署名の復号結果と同送の文書が一致すれば、
  • 情報の真正性:公開鍵で復号できるような暗号(署名)を作成できるのは、秘密鍵を持つ署名者だけであるから、その文書を作成した人は、対応する秘密鍵をもつ(公開鍵を公開している)人しかありえない。
  • 情報の完全性:途中で文書や署名(またはその両方)を改ざんされれば、もとの文書と署名の復号結果が一致することはありえない。
が成り立つ。

ハッシュ関数ジェネレータ

 実際の文書サイズは大きいので、上の説明のようにまるごと(秘密鍵で)暗号化しして署名とすることはなく、ハッシュ関数を用いて文書から(短い一定長の)ハッシュ値を作り、ハッシュ値に署名を付けることになる。一般的にハッシュ関数(値)は、①データファイルの直接編成、②パスワードの保存、③文書の要約、④改竄検出等に使われ、次の条件を可能な限り満たすように作られる。
  1. 入力が(どの部分でも少しでも)異なればハッシュ値は大きく異なる
  2. ハッシュ値からそのハッシュ値を持つ入力が求められない
  3. 高速に計算できる
 

実習.公開鍵アプリで、署名とその検証実験をしよう
  1. [鍵作成]ボタンを押し、秘密鍵(d,n)と公開鍵(e,n)を作成する
  2. 左の欄に文書を入力し[署名付送信]ボタンを押す
  3. 送信された署名付文書に対し[署名検証]ボタンを押す
  4. 送信された署名付文書の署名、文書のどちら(両方)を改ざんしても[署名検証]が成功しない事を確認する

デジタル証明書

 デジタル署名は、文書の
  1. 真正性:秘密鍵の持ち主が作成したことと
  2. 完全性:改ざんがされていないこと
を保証する、いわばハンコのようなものである。しかし、公開(秘密)鍵は誰でも作れるので、その公開鍵の持ち主に信用が置けるか否かは不明である。また、誰かが特定のAという人・組織になりすまして公開鍵を作成・公開し、Aを騙って暗号文を受け取ったり、署名をしたりすることも防止できない。
 これを防止して、例えばインターネット上の商取引を可能にするためには、実印に対する印鑑登録・印鑑証明のような仕組みが必要である。このような、公開鍵を特定の個人・組織と結び付け、公開鍵の信用や正しさを証明するものをデジタル(公開鍵)証明書といい、それを発行する機関(システム)を認証局という。
 認証局には、公に認められているパブリック認証局と個人や組織が自前で作るプライベート認証局とがある。ブラウザは、Webサイトと暗号通信を行う時には、サイトのデジタル証明書を要求してチェックする。それが(あらかじめリストアップされている)公的に信頼のおけるパブリック認証局が発行したものでなければ、「接続の安全性を確認できません」等のメッセージを表示して、注意を喚起する。
*問13.7. (ヒント)
  1. デジタル署名の仕組みを説明せよ
  2. デジタル署名が保証する内容を説明せよ
  3. デジタル証明書は何を証明するのか、説明せよ
  4. 認証局の役割を説明せよ

ゼロ知識証明

 デジタル署名では、署名者は秘密鍵の持ち主であることを、秘密鍵を明かすことなく、文書の受領者に納得させている。このように、ある機密を保持していることを、その機密に関する知識をまったく与えることなく(ゼロ知識で)、相手に納得させる(証明してみせる)ことをゼロ知識証明という。デジタル署名の場合、秘密鍵で作成した暗号を相手に与えているが、与えている情報(手がかり)は秘密鍵そのものの探索にはほとんど役に立たず、実質的にゼロ知識である。

 また、公開鍵暗号を使うと次のようなマジックも可能になる。

コラム.インターネット上でのコイントス
 遠く離れたAとBが、通信回線を介して信頼できる第三者なしにコイントスを行うことを考えよう。Aがコインを投げ、それを隠してBにコインの裏表を当てさせ、当たればBの勝ち、外れればAの勝ちという「賭け」である。
 A、Bが共に信頼する公正な第三者Cがいれば、Aがコインを投げた結果(裏表)をCに預け、Bはその予想をCに伝えればよい。CはAから伝えられたコインの裏表とBの予想をともに発表すれば、A、B共に納得できるだろう。
 しかしCへの信頼なしには、AはCとBが結託して自分の結果(裏表)を知ってからBが予想しているのではないかという疑念を、BもCがAと結託して自分の予想を知ってからAがコインの裏表を変えているのではないかという疑念を、拭うことはできない。では、信頼できる第三者がいない状況で、コイントスが可能だろうか。Aの公開鍵を使えば、次の手順で可能になる。
  1. Aによるコイン投げ:Aは、乱数 r を発生させてBに送り、r に対するAの署名(rをAの秘密鍵で暗号化した値) s が偶数か否か尋ねる。
  2. Bによる予想:Bは、s が偶数か否かを予想して答える。BはAの秘密鍵を知らないので、s の値を r から知ることができない。
  3. 結果の確認:Aは、Bの予想の正否と s をBに教える。Bは、s をAの公開鍵で復号し、それが r と一致するか否かで、Aの不正(改竄)の有無を検証できる。