量子暗号通信

BB84 プロトコル

量子力学を利用して暗号鍵の盗聴を検出する

暗号の話を始める前に、登場人物を紹介しましょう。同じ小学校に通うアリスとボブ、イブの 3 人です暗号技術の解説記事や論文では、説明のためによくこの架空の 3 人が登場します。 たいていはアリス (Alice) がボブ (Bob) にメッセージを送り、悪いハッカーのイブ (Eve) が盗聴を企てます。複雑な暗号の例になるとさらに、チャーリー (Charlie)、デイヴ (Dave)、というように頭文字に A, B, C, D,... を持つキャラクター達が続々と登場します。。 アリスは自宅ガレージで作った量子ドローンのファームウェアをボブに送ろうとしています。 イブは意地悪な天才ハッカーで、アリスの通信を盗聴し、ファームウェアにバックドアを仕掛けてドローンを乗っ取ってやろうともくろんでいます。

イブの盗聴をアリスは知っているので、ボブとの通信には絶対に破られない量子暗号通信を使います。 量子暗号通信は、アリスとボブが暗号鍵を安全に共有することを可能にします。

暗号鍵の共有

暗号鍵は通常、乱数で生成します。アリスが 0 と 1 をランダムに並べた長い文字列を作りボブに送ります。 ただし、もし普通のコンピュータでランダム文字列を生成してしまうと、イブがアリスの乱数生成アルゴリズムを突き止めることで暗号鍵を完璧に再現できてしまいます。 そこで、量子乱数ジェネレータMEASUREMENT 命令を参照を使って、原理的にまったく予測できない完璧な乱数を生成します。 今回、アリスは 4,000 文字の暗号鍵を量子乱数で生成したこととします。

今度は、生成した暗号鍵を盗聴されないようにボブへと送る必要があります。 しかしイブはアリスの通信をいつでも盗聴できる上、暗号解読が可能な最新の量子コンピュータまで持っています。 アリスが暗号鍵に普通の暗号をかけてボブにメールしようものなら、イブはたちどころに解除してしまうでしょう。 そこで BB84 プロトコルの出番です。

BB84 プロトコル

BB84 では、盗聴を検知するために量子チャンネルを使って暗号鍵データを送ります。 量子チャンネルとは量子ビットを送受信できる通信路で、現在の技術では光ファイバを通じて光子を量子ビットとして送ることで、これを実現できます。 アリスは量子チャンネルを通じて、0 と 1 からなる 4,000 文字の暗号鍵を、\(|0\rangle\) または \(|1\rangle\) の状態をもつ 4,000 個の量子ビットとしてボブに送ります。

量子ビットを送る際に、アリスはイブの盗聴を検出するための仕掛けを量子ビットに仕込んでおきますこの仕掛けの効果については、後半で説明します。 アリスは、送信する 1 量子ビットごとにランダムに を適用します。 適用するかしないかは、送信する 1 量子ビットごとに量子乱数 0 または 1 を作って決めます。 これがもし 1 だったら、量子ビットに を適用してからボブに送ります。 そして、 を適用した量子ビットの通し番号 (382 番目など) をメモしておきます。 4,000 量子ビットをボブに送信し終った後、アリスの手元には を適用した量子ビット番号のリストが残ることになります。

このときアリスの送る量子ビットは、次の 4 パターンのうちいずれか 1 つの状態になっています。

ボブに \(|0\rangle\) を送る場合
( なし/あり)
NOP

ボブに \(|1\rangle\) を送る場合
( なし/あり)
NOP

ボブはアリスがランダムに をかけた \(|0\rangle\) または \(|1\rangle\) を正しく読み出す必要があります。 このために、ボブも 1 量子ビットを受信するごとに量子乱数でランダムに を適用します。 そしてボブも を適用した量子ビットの通し番号を手元にメモしておきます。 アリスとボブは独立してランダムに を適用したので、お互いに異なる通し番号リストを持っていることに注意しましょう。

これによってボブはどんなデータを受け取ることができるか、詳しく見てみましょう。

  • アリスとボブのどちらも を適用しなかった場合

    アリスが送った \(|0\rangle\) または \(|1\rangle\) をボブがそのまま受信するだけなので、測定すると正しいビットが得られます。

  • アリスとボブの両者が を適用した場合

    アリスが適用した はボブの適用する によって打ち消されます。 よって、アリスが送った \(|0\rangle\) または \(|1\rangle\) をそのまま受信でき、測定すると正しいビットが得られます。

  • アリスまたはボブの一方が を適用した場合

    ボブの量子ビットは等しい重ね合わせ状態になるため、測定すると \(|0\rangle\) または \(|1\rangle\) が 50% ずつの確率で得られます。 つまりアリスが \(|0\rangle\) または \(|1\rangle\) のどちらを送ったかは分かりません。

ボブがアリスの送ったビット列を正しく読み出せるのは、 を適用した/しないがお互いに一致した場合のみです。 そこで一致した量子ビットだけを得るために、アリスとボブはそれぞれの通し番号リストをインターネット上で交換し、一致した通し番号のリストを得ます。 ランダムな 0 と 1 が一致するのは確率的に大体 50% ですから、二人の手元にはもともと送った 4,000 量子ビットの半分、2,000 量子ビット分のリストが残ります。 この量子ビットをボブが測定すれば、アリスの送った \(|0\rangle\) または \(|1\rangle\) を正しく読み出すことができます。

最後に、イブによる盗聴がないことを確認するために答あわせをします。 アリスとボブは得られた 2,000 文字のうち最初の半分 1,000 文字をインターネット経由で交換し、完全に一致していることをお互いにチェックします。 もし一致していれば、アリスとボブは完全に一致する 2,000 文字を共有していることが保証されます。 そのうちインターネットに流していない残り 1,000 文字は、二人以外にはまだ見られていません。 そこで、これを秘密の暗号鍵として使うことができます。

イブの盗聴を検出する

もしイブがアリスとボブの中間で量子ビットを盗聴していたら、結果はどう変わるでしょうか? アリスの送った量子ビットをイブが で読み出そうとすると、アリスの送った量子ビットは \(|0\rangle\) または \(|1\rangle\) になってしまいます。 つまり、量子ビットの状態を壊さずに通信を覗き見ることはできません。また、 クローン禁止定理CLONE 命令!?を参照により、イブはアリスの送った量子ビットをそっくりそのまま複製しておいて後で解析するといったことも不可能です。

イブが唯一できることは、アリスの送った量子ビットを 50% の確率で当てることです。 イブはアリスの量子ビットを横取りし で測定することで、\(|0\rangle\) または \(|1\rangle\) を得ます。 ただしアリスは をランダムに適用しているので、アリスが \(|0\rangle\) と \(|1\rangle\) のどちらを送ったかは 50% の確率でしか当たりません。 また盗聴がバレないようにするために、適当に作りあげたニセ量子ビットをアリスのふりをしてボブへと送る必要があります。

このように間にイブがはさまることで、ボブが受け取る量子ビットの測定結果に影響が出ます。 これは、アリスとボブが最終チェックで 1,000 文字の値を突き合わせる時に発覚します。 イブがでたらめに送った量子ビットのせいで、最後の答えあわせの際に 1,000 文字の約半分 500 文字が一致しなくなってしまうのです。 こうなるとアリスとボブは別の通信方法を採るしかありませんが、イブによる暗号鍵ハッキングは未然に防げることになります。

まとめ

BB84 は量子乱数の完全なランダム性や、 がそれ自身の逆演算であるという性質、 による量子ビット状態の破壊やクローン禁止定理から来る制約を組合わせた、巧妙な量子暗号通信プロトコルです。 数種類の基本的な QPU 命令だけで量子暗号を実現できるので、汎用の量子コンピュータよりも早く商業化できることが期待されています。