量子暗号実演

JavaScriptで量子暗号の挙動を実演。

量子暗号とは?

量子力学を用いた暗号システム。正確には量子力学の原則を使って暗号鍵を安全に共有するシステムのこと。今回は最も一般的な方式をシミュレートする。

量子暗号の流れ

今回の実演ではJavaScriptで量子暗号の挙動を再現し暗号鍵を共有する動作を行わせる。

本物の量子暗号では光子の偏光(光の波の角度)を用いてデータを送る。送り出す偏光は4種類で、2種類ずつが2進数の1か0に相当する。0度の偏光持つ光と90度の偏光を持つ光がそれぞれ0と1、マイナス45度の偏光を持つ光と45度の偏光を持つ光がそれぞれ0と1に相当する。これら4つの光の発信は自由に制御できるが、検出するには0度・90度を検出する専用の装置と、マイナス45度・45度を検出する専用を装置を用いる。0度の偏光を持つ光を前者の装置で検出すれば100%その偏光を知ることができるが、後者の装置で行うと偏光はランダムに決まってしまう。送信される光は最小単位の光子であるため検出は一発勝負で、間違った方法で検出するとでたらめな結果が返ってしまう。もう同じ光子を検出することはできない。

つまり、発信者は0と1の信号を2種類の方法で送信できるが、受信者は片方の方法でしか計測できない。以上の知識を踏まえて量子暗号を使った鍵の共有方法を説明する。

データの送信

発信者は共有したい暗号鍵(乱数でいい)を、光子の偏光として受信者に送信する。偏光は0度・90度方式と-45度・45度方式の2種類があり、送信者は2つの方式をランダムに選んでデータを送る。

データの受信

受信者は送られてくるデータを2種類の検出装置を使って検出する。送られてくるデータの媒体である光子は、それ自体が粒子の最小単位なために、検出は一発勝負。0度・90度用の装置で検出すると0度・90度の偏光を持つ光子は100%正確に捉えられるが、これを-45度・45度用の装置で検出すると結果はでたらめになってしまう。送信者がどの方法で送ってくるかは分からないため、受信者は2種類の検出方法をランダムに切り替えて受信を行う。

データの共有

受信が終わったら、受信者は検出した値ではなく検出に使った方法を送信者に伝える。送信者はそれを受け取って、自分が送った方法と一致する検出方法を使ったデータの番号を教える。同じ方式で送受信したデータは送信者・受信者共に共通している。これを暗号鍵に使う。

通信を盗聴できるのか?

ハッカーが通信経路中に盗聴器を仕込んだとしよう。ハッカー自身も送信者がどのような方法でデータを送ってくるか分からないため、2つの方式をランダムに選択して傍受する。正確に受信できるデータは全体の50%で、どれが正しいのかは分からない。これをやっただけでは盗聴は成功しない。送られてくるのは光子であるため、検出してしまえば消滅してしまう。傍受したデータを再び光子として再送信しなければいけない。しかし、ハッカーが受信したデータのうち合っている値は50%。半分はでたらめに送信することになる。結果、送受信方法が同じはすなのに共有した鍵が違うという事態に陥ってしまう。これは物理学的な原理であって、如何なる物理的手段を用いて盗聴したとしても変わらない。故に量子暗号は物理学的に安全性が保障されていると言える。

送信者と受信者は共有が終わったら両者適当に共有した鍵の値を取り出して比較する。異なればハッカーがいるはずだ。

※実際には揺らぎが生じて共有した鍵の値は異なっているが、それでもハッカーが介入した場合よりはわずかな誤差である。ハッカーが介入した場合どう頑張っても20%〜30%の誤差が出てしまう。

量子暗号実演デモ

関数間でデータをやり取りし、ハッカーがいる場合といない場合でのシミュレーションを行える。共有率は送信された全データのうち送信者側・受信者側で共有できたデータ。誤差は共有したデータの違い率だ。誤差が大きいほど鍵の共有は上手くいかない。

量子暗号実演
送信するデータ長
bit
ハッカーの有無

結果
Result
Debug

デモを走らせると、受信者と全く同じ方法でハッカーがデータを盗聴しようとするだけで揺らぎが一気に増して誤差が20%以上になってしまう。これでハッカーの存在を検出できる。debug出力はシミュレーション時に送受信された具体的な2進数データである。ハッカーをOFFにした場合とONにした場合とで両者が共有しているデータを見て欲しい。ハッカーがいる場合、そもそも鍵の共有自体が失敗する。

ページ情報

作成日時
2005/09/03
最終更新日時
2005/09/03
HTML4.01版
index.html
XHTML1.1版
index.xhtml
XML原本
index.xml