量子鍵 配送
このQiskit in Classroomsモジュールを実行するには、以下のパッケージがインストールされたPython環境が必要です。
qiskitv2.1.0 以上qiskit-ibm-runtimev0.40.1 以上qiskit-aerv0.17.0 以上qiskit.visualizationnumpypylatexenc
上記パッケージのセットアップとインストール方法については、Qiskitのインストールガイドをご参照ください。 実際の量子コンピューターでジョブを実行するには、IBM Cloudアカウントのセットアップガイドの手順に従って、IBM Quantum®のアカウントを作成する必要があります。
このモジュールはテスト済みで、QPU時間を5秒使用しました。これはあくまでも目安であり、実際の使用量は異なる場合があります。
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
以下のDr. Katie McCormickによるモジュール解説動画をご覧いただくか、こ ちらからYouTubeでご視聴ください。
はじめに:背景と動機
情報を暗号化・復号する方法は無数に存在し、数千もの手法が研究されています。ここでは、このプロトコルの量子的な部分に集中するため、「単純置換」と呼ばれる非常に初期かつ単純な暗号化手法に限定して説明します。量子部分は、比較的少ない変更で他の多くのプロトコルにも応用できます。
単純置換
単純置換暗号とは、ある文字や数字が別の文字や数字に置き換えられる暗号であり、メッセージ内の文字・数字と暗号化後の文字・数字の間に1対1の対応関係があります。ポップカルチャーにおける例としては、クリプトクォートやクリプトグラムパズルがあります。これらは引用文やフレーズが単純置換で暗号化されており、プレイヤーはそれを解読することが求められます。十分な長さがあれば比較的容易に解読できます。次の例を考えてみましょう。
R WVXRWVW GSZG R'W YVGGVI NZPV GSRH KIVGGB OLMT. GSZG DZB, KVLKOV DROO SZEV ZM VZHRVI GRNV HLOERMT RG. R SLKV R NZWV RG HRNKOV VMLFTS.
手作業でこれを解読する人は、主に元のメッセージの言語構造に関する知識を活用するトリックを用います。たとえば英語では、暗号化された「R」 のような1文字の単語は「a」か「I」のどちらかしかありません。「KIVGGB」に含まれる二重文字は特定の値しか取れません。また、「GSZG」のパターンに当てはまる最も一般的な単語が「that」であるなど、より微妙な手がかりもあります。コードを使って解読する場合は、英語の単語が見つかるまで可能性を順に走査し、その単語を保持しながら更新するといった、さらに多くの手段が利用できます。特にメッセージが英語の代表的なサンプルとなるほど十分に長い場合、文字頻度を用いる方法が単純ながら強力です。
確認問題
よろしければ解読に挑戦してみてください(モジュールの続きに必須ではありません)。以下の折り畳みをクリックすると答えが表示されます。
答え:
I decided that I'd better make this pretty long. That way, people will have an easier time solving it. I hope I made it simple enough.
上の例には「鍵」が関連付けられています。鍵とは、暗号化された文字と復号された文字の対応関係を示すものです。この場合、鍵は次のとおりです。
- A(未使用、Zとします)
- B->Y
- C(未使用、Xとします)
- D->W
- E->V
- F->U
- ...
以下同様です。控えめに言っても、これは優れた鍵とは言えません。暗号化された文字と復号された文字がアルファベットを単にシフトしただけの鍵(A->B、B->Cなど)は「シーザー暗号」と呼ばれます。
これらの暗号は、メッセージが短い場合には非常に解読困難です。実際、非常に短い場合は解が定まりません。次の例を考えてみましょう。
URYYP
異なる鍵を使うと多くの復号結果が考えられます:HELLO、PETTY、HAPPY、JIGGY、STOOLなど。他に思いつきますか?
しかし、このような暗号文を多数送れば、最終的に暗号は解読されてしまいます。したがって、同じ「鍵」を頻繁に使用すべきではありません。実際には、特定の置換は1回しか使わないのが最善です。1つのメッセージだけでなく、1文字に対して1回だけ使用するのです。つまり、メッセージ内で使用される各文字に対して、順番に暗号化スキームまたは鍵を持つということです。この方法で友人にメッセージを送りたい場合、あなたと友人は(昔ながらの方法では)この常に変化する鍵が書かれた紙のパッドを共有する必要があります。これは1度しか使用しません。これを「ワンタイムパッド」と呼びます。
ワンタイムパッド
例を使ってこの仕組みを見てみましょう。すべて文字だけで行うこともできますが、文字を数字に変換するのが一般的です。たとえばA=0、B=1、C=2…と割り当てます。 私たちが秘密の活動に関わる仲間で、パッドを共有しているとします。理想的にはパッドを多数共有すべきですが、今日のパ ッドは次のとおりです。
EDGRPOJNCUWQZVMK…
あるいは、アルファベット上の位置で数字に変換すると:
4,3,6,17,15, 14, 9, 13, 2, 20, 22, 16, 25, 21, 12, 10…
あなたに伝えたいメッセージが次のものだとします:
"I love quantum!"
あるいは同等の表現で:
8, 11, 14, 21, 4, 16, 20, 0, 13, 19, 20, 12
上記のコードをそのまま送ることは避けたいです。それは単純置換であり、まったく安全ではありません。これを鍵と何らかの方法で組み合わせる必要があります。一般的な方法は、26を法とした加算(modulo 26)です。メッセージの末尾に達するまで、メッセージの値に鍵の値を加え、mod 26を計算します。したがって、送信するのは次のとおりです。
8+4 (mod 26) = 12, 11+3 (mod 26) = 14, 14+6 (mod 26) = 20, 21+17 (mod 26) = 12…
= 12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
鍵を持っていない人がこれを傍受しても、解読はまったく不可能です!「quantum」の2つの「u」でさえ、同じ数字でエンコードされていません!最初の「u」は3、2番目は16です…同じ単語の中なのに!
これをあなたに送ると、あなたは私と同じ鍵を持っています。私が行ったmod 26の加算を元に戻します:
12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
=(4+x1) (mod 26), (3+x2) (mod 26), (6+x3) (mod 26), (17+x4) (mod 26),…
メッセージ x1, x2, x3, x4… は次のようになります。
8, 11, 14, 21…
最後に、これをテキストに変換すると:
"I love quantum"
これがワンタイムパッドです。
鍵がメッセージより短い場合、エンコードを繰り返し始めます。それでも解読は難しい問題ですが、十分に繰り返されると不可能ではありません。したがって、長い鍵(または「パッド」)が必要です。
多くの場合、学生はすでにこの暗号に慣れ親しんでおり、このアクティビティをスキップできます。ただし、比較的短時間で完了できる簡単な復習です。
ステップ1:パートナーと組み、鍵として使用する4文字のシーケンスを共有してください。クラスに適切な4文字のシーケンスであれば何でも構いません。
ステップ2:パートナーに送りたい4文字の秘密の単語を選んでください(両方のパートナーがこれを行い、互いに異なる秘密の単語を送ります)。
ステップ3:A = 1、B = 2 などを使用して、4文字の鍵/パッドと各4文字の秘密の単語を数字に変換してください。
ステップ4:modulo 26の加算を使用して、4文字の単語をワンタイムパッドと組み合わせてください。
ステップ5:秘密の単語をエンコードした数字のシーケンスをパートナーに渡し、パートナーもあなたに渡してください。
ステップ6:modulo 26の減算を使用 して互いの単語を解読してください。
ステップ7:確認してください。うまくいきましたか?
フォローアップ
ワンタイムパッドを持っていない別のグループと暗号化された単語を交換してください。解読できますか?なぜできる(またはできない)のかを説明してください。
上のアクティビティを通じて、ワンタイムパッドがいくつかの前提条件のもとで解読不可能な暗号化形式であることが明確になったと思います。前提条件とは以下のとおりです。
- 鍵は送信されるメッセージと同じ長さ以上である
- 鍵が真にランダムである
- 鍵は1度だけ使用され、その後破棄される
これは素晴らしいことです。解読不可能な暗号化ができました…誰かが鍵を入手しない限り。鍵を入手されると、すべてが解読されてしまいます。解読不可能な暗号化と秘密がすべて暴露される状態の間のこの差が、安全な鍵の共有を非常に重要なものにしています。量子鍵配送の目標は、自然が量子情報に課した制約を活用して、共有された鍵/ワンタイムパッドを保護することです。
量子状態を鍵として使用する
量子ビット(2つの固有状態を持つこ とを強調するためにQubitsと呼びます)を使って作業していると仮定しましょう。より多くの量子状態を持つ量子システムを使用することもできますが、IBM®の最先端の量子コンピューターはQubitsを使用しています。A、B、C…を0と1のシーケンスにエンコードすることは問題ありません。したがって、0と1の鍵を共有し、文字を格納する各ビットにmodulo 2の加算を行えば十分です。
理解度の確認
以下の問いを読み、答えを考えてから、三角形をクリックして解答を表示してください。
英語のアルファベットだけに関心がある場合、何ビット必要ですか?
答え:
アリスとボブという友人は、他の誰にも傍受されない方法で量子鍵を共有したいと考えています(少なくとも、気づかれずに傍受されることのないように)。そのためには、互いに量子状態を送受信する手段が必要です。これを高い忠実度でノイズや誤りなく行うことは簡単ではありません。しかし、現時点で理解できる2つのアプローチがあります:
- 光ファイバーケーブルは光を送ることができます…それは非常に量子力学的です。単一光子は、数キロメートルの光ファイバーケーブルを通じて高い忠実度で検出できます。これは完全で誤りのない量子チャネルではありませんが、非常に優れたものになり得ます。
- 前のモジュールで説明したように、量子テレポーテーションを使用することができます。つまり、アリスとボブはエンタングルしたQubitsを共有し、テレポーテーションプロトコルを使用してアリスからボブに状態を送ることができます。
このモジュールでは、光子を共有するための高忠実度の光学セットアップを必要としないため、2番目の方法を使用します。ただし、これが長距離での量子鍵共有に最も現実的な方法であるとは限りません。
ここでは、Charles BennettとGilles Brassardが1984年に発表したプロトコルを探ります。このプロトコルは、アリスからボブに異なる基底で測定された状態を共有するものです。巧みな測定方式を使って、後の暗号化に使用する鍵を構築していきます。つまり、通信を希望する2者間で量子鍵を配送することから、「量子鍵配送」(QKD)と呼ばれます。
QKDステップ1:アリスのランダムビットとランダム基底
アリスはまず、0と1のラ ンダムなシーケンスを生成します。次に、以下の表(ボブも持っている表)に基づいて、各ランダムビットに従って量子状態を準備する基底をランダムに選択します。
| 基底 | ビット = 0 | ビット = 1 |
|---|---|---|
| Z | ||
| X |
たとえば、アリスがランダムに0を生成し、X基底をランダムに選択したとします。すると彼女は量子状態 を準備します。量子乱数性を活用して、0と1のランダムなセットと基底選択をランダムに生成することは確かに可能です。今は、以下のようなランダムなセットが生成されたと仮定しましょう。
| アリスのビット | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| アリスの基底 | X | X | Z | Z | Z | X | Z | Z | X | ... |
| アリスの状態 | ... |
このランダムなビット、基底、および結果として得られる状態のセットは、十分な長さの鍵を提供するために長いシーケンスとして続きます。
QKDステップ2:ボブのランダム基底
ボブもランダムに基底を選択します。ただし、アリスが基底の選択を使って状態を準備したのとは異なり、ボブはこれらの基底で実際に測定を行います。ボブがアリスの状態準備と同じ基底で測定を行った場合、ボブの測定結果を予測することができます。ボブがアリスの準備時と異なる基底を選んだ場合、ボブの測定結果を知ることはできません。
| アリスのビット | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| アリスの基底 | X | X | Z | Z | Z | X | Z | Z | X | ... |
| アリスの状態 | ... | |||||||||
| ボブの基底 | X | Z | X | Z | X | X | Z | X | X | ... |
| ボブの状態(事前) | ? | ? | ? | ? | ... | |||||
| ボブの状態(測定後) | ... | |||||||||
| 以下の表の最初の列を考えてみましょう。アリスはXの固有状態である を準備しました。ボブもランダムにX基底で測定することを選択したので、ボブの測定状態は という1つの結果しかあり得ません。しかし2列目では、異なる基底を選択しています。アリスが送った状態は です。ボブがこれを 状態で測定する確率は50%、 で測定する確率も50%です。したがって、ボブの測定について事前に知ることができる行は、2列目を埋めることができません。しかしボブは測定を行い、(その列では)Zの固有状態を得ます。最 下行には、これらの測定で実際に得られた結果を記入します。 |
QKDステップ3:基底の公開議論
アリスとボブは、各ケースでどの基底を選んだかを互いに共有できます。同じ基底を選択した列すべてについて、それぞれが相手の状態を確実に知ることができます。ボブは両者が共有する規則に従って、状態と基底を0または1に変換できます。アリスとボブの基底が一致したケースのみを示すように上の表を書き直すと次のようになります。
| アリスのビット | 0 | 0 | 1 | 0 | 0 | ... |
|---|---|---|---|---|---|---|
| アリスの基底 | X | Z | X | Z | X | ... |
| アリスの状態 | ... | |||||
| ボブの基底 | X | Z | X | Z | X | X |
| ボブの状態(事前) | ... | |||||
| ボブの状態(測定後) | ... | |||||
| ボブのビット | 0 | 0 | 1 | 0 | 0 | ... |
アリスはビット列00100...をボブに正常に送信しました。友人たちがワンタイムパッドの数字として5ビット列を使うことを事前に決めていた場合、最初の5ビットにより数 が得られます。
QKDステップ4:検証と秘密の送信
アリスとボブが次に進む前に、古典ビットのサブセットを選んで比較すべきです。同じ基底で準備・測定されたQubitsの測定値のみを保持しているため、すべての測定値は一致するはずです。一致しないものが非常に少ない割合であれば、量子ノイズや誤りによるものと考えられます。しかし多くが一致しない場合、何か問題が生じています!
ここでは、鍵のどの割合を検証に使うべきかは取り上げません。今は、この確認がうまくいくと仮定します。盗聴に関する以下のセクションでこの点を再検討します。
友人たちは古典チャネルを介して暗号化されたメッセージを互いに送ります。その後、ワンタイムパッドの数字を使って秘密のメッセージを暗号化・復号します。ワンタイムパッド自体は一方の場所から他方へ送信されることは ありません。盗聴に関する次のセクションでは、鍵の共有はすべて、古典チャネルを介して暗号化された秘密が明かされる前に行われることを念頭においてください。
アリスとボブは選択した基底を古典チャネルで伝達しました。それは傍受されないのでしょうか?されるかもしれません!しかし、測定に使用した基底を知っても、送受信されたビットを知ることはできません。それが可能なのは、アリスの最初のビットも知っている場合だけです。しかしそれはアリスのコンピューターにアクセスしていることを意味し、秘密の秘密通信は意味をなさなくなります。したがって、古典的な通信の傍受では暗号を破ることはできません。では、量子チャネルの情報を傍受した場合はどうでしょうか?
QKDの盗聴への耐性
アリスとボブには、盗聴で悪名高い友人のイブがいます。イブはアリスとボブの量子鍵を傍受して、2人の間で送られるメッセージを解読しようとしています。これは必然的に、アリスの状態準備とボブの状態測定の間に行われる必要があります。測定が量子状態を崩壊させるからです。特に、この盗聴は基底の共有や比較が行われる前に行われなければなりません。
イブは各ビットのエンコードに使用された基底を推測しなければなりません。アリスのコンピューターにアクセスできない場合、この推測の根拠がなく、ランダムなものになります。アリスの初 期状態が以前と同じで、ボブの測定基底のランダムな選択も以前と同じであると仮定しましょう。イブが量子チャネルを測定した場合に何を得るかを記入してみましょう。前と同様に、イブがアリスと同じ基底を選んだ場合、何を得るかはわかります。そうでなければ、それぞれ50%の確率で2つの結果のいずれかを得る可能性があります。
| アリスのビット | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| アリスの基底 | X | X | Z | Z | Z | X | Z | Z | X | ... |
| アリスの状態 | ... | |||||||||
| イブの推測基底 | Z | X | X | Z | X | Z | Z | X | X | ... |
| イブの状態(事前) | ? |