このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

*目次 [#qf7152b9]

#contents

*宣伝 [#jfa85d39]

 当サイトにおける暗号に関するページでは、説明が足りなかったり、誤った記述をしていたりするところがあります。今後、少しずつ修正する予定です。~

 暗号理論の『暗号技術のすべて』が発売されています。初心者向けの暗号本です。これまで暗号本に何度か挑戦しつつも挫折してしまった方、学校の課題で悩んでいる方、資格試験にて暗号の問題が苦手な方などにお勧めです。

[[&ref(http://s-akademeia.sakura.ne.jp/main/books/cipher/img/cover_mini.jpg,nolink,『暗号技術のすべて』宣伝サイト);>http://s-akademeia.sakura.ne.jp/main/books/cipher/]]

 興味がある方は[[宣伝サイト:http://s-akademeia.sakura.ne.jp/main/books/cipher/]]を参照してください。[[Amazon:https://www.amazon.co.jp/dp/4798148814/securityakade-22]]でも発売中です。


*鍵配送法 [#w2548211]

 共通鍵暗号系では送受信者は秘密鍵を共有している必要がある。アリスとボブが直接の知り合いなら秘密鍵を手渡しすればよいが、ネットワーク上での知り合ったならどうしたらよいだろうか。この問題を''鍵配送問題''という。

 この鍵配送問題を解決する方法はいくつか存在する。


**鍵の事前共有による鍵配送問題の解決 [#a2395e60]

 もっとも簡単な方法は「安全な方法で鍵を前もって渡しておく」というものである。当たり前だがこれには限界がある。隣のデスクにいる人に安全な方法で渡すことはできるが、インターネットのように遠隔地にいる人に安全に渡すことは困難である。郵送するという方法もあるが、本当に郵送途中で改竄や盗まれていないとも言い切れない。

 また、もし鍵の事前共有が可能だとしても、人数が多くなると通信のための鍵が膨大な数になってしまう。n人いたとして、彼らが一人一人自分以外のn-1人と通信する可能性があるとすると、通信用の鍵は一人当たりn-1個必要となる。よって、合計で次のようになる。

&mimetex("{}_n\mathrm{C}_2 = \frac{n\(n-1\)}{2\cdot1}=\frac{n\(n-1\)}{2}");

例:1,000人いたら、

&mimetex("{}_{1000}\mathrm{C}_2 = \frac{1000 \cdot 999}{2 \cdot 1}=499500");


**鍵配送センター利用による鍵配送問題の解決 [#idd8913d]

 鍵配送センター(KDC:Key Distribution Center)といった鍵を管理できる存在を活用する手段もある。

 欠点は次が考えられる。

+利用法が増えれば増えるほど、KDCの負荷が増える。
+アタッカーがKDCのDBを狙ったり、DoS/DDoSアタックでサービスを停止させる可能性がある。


**公開鍵暗号利用による鍵配送問題の解決 [#yd5a1e3f]

 この場合は、まず受信者のボブが公開鍵を公開する。

 また、送信者のアリスは共通鍵をランダムに選ぶ。次にアリスはボブの公開鍵を使って共通鍵を暗号化し、暗号文をボブに送る。

 ボブは受け取った暗号文を復号し、共通鍵を得る。

 これで2人は第三者に内容がばれないように、共通鍵を共有することができる。

#img(http://s-akademeia.sakura.ne.jp/main/image9/ke.jpg)
#img(,clear)


**DH鍵配送による鍵配送問題の解決 [#f63f2bad]

 DH鍵配送([[DH鍵共有プロトコル]])を使うと、共通鍵を暗号化して送るという予備通信をせずに、安全でないネットワークだけを用いて共通鍵を共有することができる。ただし、アリスとボブの双方が公開鍵を公開する必要がある。


*鍵共有プロトコルとは [#b1b04229]

 セッション鍵の共有のために使われる暗号プロトコルである。

 そのためには次のような条件が求められる。

+Key freshness:毎回違うセッション鍵を生成する。
+Key integrity:参加者が同じ鍵を共有できる。
+Key authentication:正当な参加者だけが、鍵を共有できる。