--- layout: page title: BB84 プロトコル description: 量子力学で暗号鍵の盗聴を検出 ---

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

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

暗号鍵の共有

暗号鍵を共有するには、アリスが 0 と 1 をランダムに並べた長い文字列を作り、それを盗聴されないようにボブに送る必要があります。 普通のコンピュータでランダム文字列を生成してしまうと、イブがアリスの乱数アルゴリズムを突き止めることで暗号鍵を盗んでしまう可能性があります。 そこで、量子乱数ジェネレータを使って、原理的にまったく予測できない完璧な乱数を生成します。 アリスは長めに 4,000 文字の暗号鍵を量子乱数で生成しました。

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

BB84 プロトコル

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

量子ビットを送る際に、アリスはイブの盗聴を検出するための仕掛けを量子ビットに入れます (この仕掛けの効果については後半で説明します)。 アリスは、送信する 1 量子ビットごとにランダムに H ゲートを適用します。1 量子ビット送るごとに量子乱数で 0 (H ゲートを適用しない) または 1 (H ゲートを適用する) を生成し、もし 1 (H ゲートを適用する) だったら現在の量子ビットの通し番号をメモし (382 番目など)、量子ビットに H ゲートを適用してからボブに送ります。 このときアリスの送る量子ビットは、次の 4 パターンのうちいずれか 1 つの状態になっています。

ボブに {% include ket.html label="0" %} を送る場合 (H なし/あり)
{% include minus.svg class="h-6 w-6 fill-current text-gray-400" %}
NOP
{% include arrow_right.svg class="h-6 w-6 fill-current text-gray-400" %}
{% include minus.svg class="h-6 w-6 fill-current text-gray-400" %} {% include arrow_right.svg class="h-6 w-6 fill-current text-gray-400" %}

ボブに {% include ket.html label="1" %} を送る場合 (H なし/あり)
{% include minus.svg class="h-6 w-6 fill-current text-gray-400" %}
NOP
{% include arrow_right.svg class="h-6 w-6 fill-current text-gray-400" %}
{% include minus.svg class="h-6 w-6 fill-current text-gray-400" %} {% include arrow_right.svg class="h-6 w-6 fill-current text-gray-400" %}

受け取る側のボブも、1 量子ビットごとに量子乱数でランダムに H ゲートを適用してから受け取ります。 この時ボブもまた、H ゲートを適用した量子ビットの通し番号をメモしておきます。 ここで、アリスもボブの手元には H ゲートを適用した量子ビットの番号リストが残っていますが、それぞれ完全にランダムに選んだので、異なる番号リストを持っていることに注意しましょう。

暗号鍵の送信が終わると、アリスとボブはそれぞれのリストをインターネット上で交換し、H ゲートを適用した/しないが一致する量子ビットの番号一覧を得ます。 一致するのは大体 1/2 ですから、手元にはもともと送った 4,000 量子ビットの半分、2,000 量子ビットのリストが残ります。 このリストの量子ビットをボブが測定すると、アリスとボブのどちらも H ゲートを適用しなかった量子ビットについては、アリスがセットした {% include ket.html label="0" %} または {% include ket.html label="1" %} がそのまま得られます。 アリスとボブ両者のが H ゲートを適用した量子ビットについても、H ゲートを 2 回適用することで元通りになるので (H ゲートはそれ自身を打ち消す効果があるのでした)、やはりボブはアリスのセットした値を得ます。

アリスとボブはさらに、得られた 2,000 文字のうち最初の半分 1,000 文字をインターネット経由で交換し、確かに一致していることをお互いにチェックします。 もし一致していれば、インターネットに流していない残り 1,000 文字を秘密の暗号鍵として使うことができます。

イブの盗聴を検出する

もしイブがアリスとボブの中間で量子ビットを盗聴していたら、結果はどう変わるでしょうか? クローン禁止定理により、イブはアリスの送った量子ビットをそっくりそのまま複製することはできません。 このため、盗聴するにはアリスの送った量子ビットをこっそり測定し、別の量子ビットをボブに送る必要があります。

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

まとめ

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