現代暗号

BB84プロトコルの図解|鍵配送と盗聴検知

更新: 秋山 拓真
現代暗号

BB84プロトコルの図解|鍵配送と盗聴検知

BB84は、暗号文そのものを送る方式ではなく、通信の前提になる共通鍵を量子状態で安全に共有するための代表的な量子鍵配送です。量子暗号をこれから学ぶ人に向けて、アリス・ボブ・イブの役割、4状態と2基底、基底が合ったときだけ残すふるい分けの流れを、図解の感覚で追えるように整理します。

BB84は、暗号文そのものを送る方式ではなく、通信の前提になる共通鍵を量子状態で安全に共有するための代表的な量子鍵配送です。
量子暗号をこれから学ぶ人に向けて、アリス・ボブ・イブの役割、4状態と2基底、基底が合ったときだけ残すふるい分けの流れを、図解の感覚で追えるように整理します。

筆者はこの手の説明をするとき、まず紙とペンで8ビットぶんの送受信表を書き、基底照合からsifting、QBERの見積もりまで手で追ってみます。
そうすると、盗聴で誤りが増える直感や、単純な intercept-resend で 25% の誤りが現れる理由が腹落ちします。

誤り訂正と秘匿性増幅までをひと続きでつなぎ、理論上の安全性と実装上の課題を意識的に切り分けます。
単一光子源、デコイ状態、検出器サイドチャネル、そしてMDI‑QKDまで見通すことで、理論と実装の差を明確にします。

BB84プロトコルとは何か

BB84は、メッセージ本文を送る方式ではなく、通信当事者のあいだで共通鍵を配送するためのQKD方式です。
ここを取り違えると全体像がぼやけます。
量子状態で守ろうとしているのは暗号文そのものではなく、その後に暗号通信で使う鍵です。
実際の運用でも、量子チャネルだけで通信が完結するわけではなく、相手を認証できる古典通信路を併用して鍵共有を進めます。

この方式を提案したのは Charles H. Bennett(チャールズ・H・ベネット)と Gilles Brassard(ジル・ブラッサール)、提案年は1984年です(関連総説の例: G. Gisin et al., Rev. Mod. Phys. 74, 145 (2002) V. Scarani et al., Rev. Mod. Phys. 81, 1301 (2009) 安全性の直感は、非直交な量子状態は乱さずに見分けられず、測定すれば状態に擾乱が入り、しかも未知の量子状態は自由に複製できないという量子力学の性質にあります。
ここが暗号の美しいところなのですが、古典情報なら「こっそり読むだけ」が成立する場面でも、量子状態では読む行為そのものが痕跡を残します。
BB84はこの性質を、盗聴検出という形に変換したプロトコルです。

このあと頻出する用語も、先に整理しておきます。
Z基底とX基底は、送信側と受信側が量子ビットを準備・測定するときに選ぶ2種類の“ものさし”です。
両者があとで基底の選択だけを照合し、一致したビットだけを残す工程が sifting(ふるい分け) です。
残ったビット列の中にどれだけ食い違いがあるかを表すのが QBER(量子ビット誤り率) で、この値は盗聴や雑音の兆候を見る指標になります。
その後は、手元のビット列のずれをそろえる 誤り訂正 と、盗聴者が持ちうる情報を圧縮で削る 秘匿性増幅 を行い、最終的な共有鍵に仕上げます。

つまりBB84は、4つの量子状態を2つの基底で使い分けて終わる単純な図解ではありません。
量子チャネル上の状態送信、認証済み古典通信路での基底照合、sifting、QBERの評価、誤り訂正、秘匿性増幅までを含めて、ひとつの鍵配送プロトコルとして完結するところに本質があります。
後段では、この流れをアリス・ボブ・イブの役割に沿って、手で追える粒度まで分解していきます。

なぜBB84が生まれたのか

BB84が生まれた背景には、従来の暗号が主に数学の困難性に安全性を預けてきたのに対し、量子鍵配送は物理法則そのものを土台に鍵共有を組み立てようとする発想の転換があります。
とくに、理論上は最強クラスのワンタイムパッドでさえ安全な鍵配送が難題だったこと、そして公開鍵暗号の前提を揺さぶる量子コンピュータ時代が見えてきたことが、BB84の必要性をはっきり浮かび上がらせました。

ワンタイムパッドと鍵配送問題

古典暗号の世界では、RSAのような公開鍵暗号も、共通鍵暗号の鍵共有に使われる各種方式も、基本的には「解くのが難しいはずだ」という数学的前提に支えられています。
素因数分解や離散対数の計算が現実的な時間では難しいから安全だ、という考え方です。
盗聴者が通信をコピーして保存しても、十分な計算能力がなければ解読できない、という形で安全性が説明されます。

これに対してBB84が属するQKDは、計算の難しさよりも、量子状態は観測すると乱れ、未知の状態は自由に複製できないという物理法則を使って盗聴の痕跡を見つけます。
ここが古典暗号とのいちばん大きな違いです。
安全性の根拠が「その問題を解くアルゴリズムを相手がまだ持っていない」ではなく、「その行為自体が物理的に痕跡を残す」に移るわけです。

この発想が強く求められた理由のひとつが、ワンタイムパッドの古くて重い宿題でした。
ワンタイムパッドは、平文と同じ長さの真にランダムな鍵を一度きり使うかぎり、情報理論的に破れません。
数学の腕力で押し切るのではなく、原理的に情報が漏れないという意味で、暗号としてきわめて美しい構造を持っています。

ただし、ここで最大の壁になるのがその長大な鍵をどうやって相手と安全に共有するのかです。
暗号方式そのものは強くても、鍵を渡す経路が弱ければ全体は崩れます。
ワンタイムパッドは「暗号化の理論」はほぼ理想形に近いのに、「鍵配送」の問題を解けなかったため、広く実用化するには厳しい面がありました。
BB84は、まさにこの鍵配送の部分を量子力学で作り直そうとした提案として理解すると位置づけがつかみやすくなります。

量子コンピュータ時代の背景

BB84が提案されたのは1984年ですが、その後の文脈を考えると、いまこの方式が改めて注目される理由はもっとはっきり見えます。
従来の公開鍵暗号は、鍵配送や相手認証の基盤として広く使われてきましたが、量子コンピュータ時代にはこの前提が揺らぎます。
つまり、これまで「計算量的に無理だろう」と考えられていた問題が、将来は別の計算モデルで崩れる可能性があるわけです。

BB84やQKDは万能の暗号ではありません。
QKDが担当するのはメッセージ本文の秘匿そのものではなく、あくまで共通鍵の配送です。
実際の通信内容は、そのあとで共有した鍵を使って別の暗号方式で守るか、鍵量が許す範囲でワンタイムパッドに使うことになります。
つまりQKDは「量子時代のすべてを置き換える技術」ではなく、「鍵配送の弱点を別の原理で支える技術」です。

筆者はこの切り分けを明確にしておくと、QKDへの期待値がちょうどよい位置に収まると感じます。
公開鍵暗号が計算困難性に依存するのに対し、QKDは鍵共有を物理法則に寄せる。
役割は限定的ですが、その限定こそが強みです。
数学の安全性が不要になるのではなく、少なくとも鍵配送については、数学とは別の足場を持てるところにBB84の歴史的な意味があります。

QKDと認証済み古典通信路の前提

BB84を「量子チャネルだけで完結する仕組み」と捉えると、肝心な前提を見落とします。
QKDの実運用には量子チャネルに加えて、認証済み古典通信路が必要です。
アリスとボブは量子状態を送受信したあと、どの基底を使ったかを古典通信で照合し、ふるい分け、誤り率推定、誤り訂正、秘匿性増幅へ進みます。
この古典通信路が改ざん可能だと、そもそも通信相手が本物かどうかを確認できません。

ここは直感に反するかもしれませんが、QKDは「古典通信を不要にする技術」ではありません。
むしろ、量子チャネルと古典チャネルを組み合わせて初めて成立します。
量子チャネルは盗聴の痕跡を検出する役割を担い、古典チャネルは基底照合や後処理を進めるための連絡路になります。
ただし古典チャネルには認証が要るので、QKDだけを単独で置けば全問題が消えるわけではありません。

ℹ️ Note

BB84が配送するのはメッセージ本文ではなく共通鍵です。さらに、その鍵を成立させるためには量子チャネルと認証済み古典通信路の両方が必要です。

この前提を含めて見ると、BB84が生まれた理由はより鮮明になります。
古典暗号の弱点は「鍵配送をどう守るか」にあり、ワンタイムパッドはそこで止まっていました。
量子コンピュータ時代には公開鍵暗号の前提も問い直されるため、鍵配送を物理法則に立て直す発想が価値を持ちます。
そしてその実装は、量子だけで閉じた世界ではなく、認証された古典通信と組み合わさって初めて動く――この全体像がBB84の出発点です。

BB84の仕組みを図解で追う

BB84の核は、4つの量子状態を2つの基底で使い分け、送信側と受信側の基底が一致したときだけビットを残すという一点にあります。
図にすると手順は素朴ですが、基底がずれた測定結果には本質的なランダム性が混ざるため、あとから基底情報だけを照合する流れが自然につながります。

4状態と2基底(Z/X)の直感

まず押さえたいのは、BB84で使う状態が「4状態・2基底」という整理で見えることです。
計算基底とも呼ばれる Z基底 では |0>|1> を使い、対角基底とも呼ばれる X基底 では |+>|-> を使います。
偏光で直感化するなら、Z基底は水平・垂直、X基底は斜め2方向として描くと頭に入りやすくなります。

図にすると、次のような対応です。

基底状態偏光のイメージビットの割り当て例

Z基底 | |0> | 水平 | 0 |

Z基底 | |1> | 垂直 | 1 |

X基底 | |+> | 右上がりの斜め | 0 |

X基底 | |-> | 右下がりの斜め | 1 |

ここでのポイントは、|0>|1> は同じZ基底の中ではきれいに区別できる一方、|0>|+> のように異なる基底に属する状態は、同じものさしでは決め打ちできないことです。
ここが暗号の美しいところなのですが、古典的な「0か1かを読む」感覚のまま入るとつまずきます。
量子では、どの基底で測るかまで含めてはじめて情報が定まります。

簡単な図解で書くと、イメージはこうです。

Z基底での世界:   |0>  /  |1>
X基底での世界:   |+>  /  |->
                ↑
        同じ光子でも、どの基底で見るかで観測結果が変わります。
        意味の取り方が変わる

つまりBB84は、4種類の記号を送っているというより、2種類のものさしをランダムに切り替えながら量子ビットを送っていると捉えると流れが見えます。

アリスの状態準備

送信側のアリスは、各スロットごとに「ビット値」と「使う基底」をそれぞれランダムに選びます。
ビットだけを乱数で決めるのではなく、基底列も別にランダム化するところがBB84らしい設計です。
ビット列と基底列の組み合わせが決まると、アリスはその組に対応する量子状態を準備してボブへ送ります。

たとえば、アリスが次のように選んだとします。

番号アリスのビットアリスの基底送る状態

1 | 0 | Z | |0> |

2 | 1 | Z | |1> |

3 | 0 | X | |+> |

4 | 1 | X | |-> |

5 | 1 | Z | |1> |

6 | 0 | X | |+> |

偏光で描くなら、「水平」「垂直」「斜め」「反対の斜め」といった向きの光子を、その都度ランダムに作って送っているイメージです。
見た目には単純ですが、盗聴者は各光子がどちらの基底で準備されたかを知りません。
したがって、途中で無傷のまま読み取るという古典的な発想が通用しません。

筆者はこの部分を紙に書くとき、まず「ビット列」と「基底列」を別々の行に分けます。
そうすると、アリスが送っているのは単なる0と1の列ではなく、ZかXかという文脈つきの量子状態列だと見えてきます。
BB84の最初の山場は、まさにこの二重のランダム性です。

ボブのランダム測定

受信側のボブは、届いた各光子に対して、やはりランダムに Z基底 か X基底 を選んで測定します。
ボブはアリスの基底列をまだ知らないので、送られてきた順に「今回はZで見る」「次はXで見る」と独立に決めるしかありません。

ここで基底が一致した場合は、アリスのビットをそのまま回収できます。
たとえばアリスが |0> を送り、ボブもZ基底で測れば 0 です。
アリスが |+> を送り、ボブもX基底で測れば 0 になります。
問題は、基底が食い違った場合です。
アリスがZ基底の状態を送ったのに、ボブがX基底で測ると、結果は0とも1とも決め打ちできず、その場でランダムに出ます。

図解的にはこうなります。

アリス: |0> を送る(Z基底)

ボブがZで測定 → 0 が得られる
ボブがXで測定 → 0/1 がランダムに出る

もう少し並べてみると、混ざり方がはっきりします。

番号アリスの状態ボブの基底ボブの結果

1 | |0> | Z | 0 |

2 | |1> | X | ランダム |

3 | |+> | X | 0 |

4 | |-> | Z | ランダム |

5 | |1> | Z | 1 |

| 6 | |+> | Z | ランダム |

この表の「ランダム」が、BB84をただの符号化手順ではなく量子プロトコルにしている部分です。
ボブの手元にはいったん測定結果が並びますが、その中には当たりのビット基底不一致で偶然そう見えているビットが混在しています。
受信直後の列をそのまま鍵に使えないのはこのためです。

ℹ️ Note

ボブの測定結果が乱れる原因は、通信品質の問題だけではありません。基底が合っていない測定そのものが、BB84のルールとしてランダム性を生みます。

基底公開と一致ビットの抽出の予告

ここまで来ると、なぜあとで基底情報だけを公開するのかが自然に見えてきます。
ボブの測定結果には、基底一致の正しいビットと、基底不一致で混ざったランダムなビットが同居しているからです。
そこでアリスとボブは、各位置について使った基底だけを古典通信で照合し、一致した位置のビットだけを残します。

イメージは次の通りです。

アリスの基底:  Z  Z  X  X  Z  X
ボブの基底:    Z  X  X  Z  Z  Z
一致した位置:  ○  ×  ○  ×  ○  ×
残すビット:    1     3     5

この段階では、ビット値そのものは公開しません。
公開するのは「その位置でZを使ったかXを使ったか」だけです。
すると、一致した位置だけを抜き出した列が、共通鍵候補になります。
BB84の核心を一文で言うなら、送った全ビットを使うのではなく、基底が一致した半分前後だけを鍵候補として採用するという設計です。

このあとに続くのが、ふるい分け後のビット列を比べて誤り率を見積もり、必要なら誤り訂正と秘匿性増幅へ進む流れです。
図で追う段階では、まず「4状態を送る」「ボブはランダム基底で測る」「一致した位置だけ残す」という3段をつなげて理解すると、その先の盗聴検出も無理なく読めます。

手順を具体例で追体験する

ここでは、8ビットだけの小さな例を紙の上で追い、BB84の後処理がどのように進むかを手で確かめます。
送った全ビットが鍵になるわけではなく、基底照合で半分前後が落ち、さらに検査用公開と誤り訂正、秘匿性増幅を経て短い最終鍵に絞られていく流れまで見ると、量子鍵配送が「量子で送って終わり」ではないことがはっきり見えてきます。

送受信表

まずは8列の表を作って、アリスとボブの動きを横に並べます。
筆者はこの段階で、読者も実際に紙へ8本の縦線を引いてしまうのがいちばん早いと感じています。
列ごとに○と×を付けていくと、一致した基底だけが生き残り、不一致は容赦なく捨てるという感覚が頭ではなく手に残ります。

番号12345678
アリスのビット01101001
アリスの基底ZXZXZXXZ
ボブの基底ZZZXXXZZ
ボブの測定結果00100011

この表では、3番・4番・6番・8番は基底が一致しています。
2番・5番・7番は基底が不一致なので、ボブの結果がたまたま合っていようと外れていようと鍵候補から外します。
ここが暗号の美しいところなのですが、あとから見ると「測ってはいるのに最初から使うつもりのないビット」が混ざっているからこそ、盗聴や雑音の影響を切り分けられます。

ふるい分け

次に古典通信で公開するのは、各位置の基底だけです。
アリスがどの位置でZを使い、どこでXを使ったか、ボブがどの基底で測ったかを照らし合わせ、一致した列だけ残します。
ビット値そのものは、この時点ではまだ出しません。

今回の例を一致・不一致で書き分けると、次のようになります。

番号12345678
基底一致×××

したがって、採用される位置は 1、3、4、6、8 の5か所です。
対応するビットを抜き出すと、アリス側は 0 1 0 0 1、ボブ側も 0 1 0 0 1 になります。
実際に紙で印を付けると、8列作ったのに残るのは5列だけ、という落ち方が直感的に見えます。
もっと長い列なら、だいたい半分前後がここで消えるので、BB84の鍵率は最初の送信数からそのまま決まるわけではありません。

QBERの推定

ふるい分け後の5ビットをそのまま鍵にしたくなりますが、その前に一部を検査用として公開し、誤り率を見積もります。
これがQBER(量子ビット誤り率)の推定です。
公開したビットは秘密ではなくなるので、検査が終わったら捨てます。

この例では、採用された5ビットのうち 1番と6番に対応する2ビットを検査用として公開したことにします。
公開比較すると、アリスは 0 0、ボブも 0 0 で一致でした。
検査した2ビット中の不一致は0なので、このサンプル上のQBERは 0% です。

もちろん、公開に使った2ビットは鍵から外れます。
したがって、残る秘密の候補は位置 3、4、8 に対応する 1 0 1 です。
ここまでで「採用ビットの一部を見せて安全性を点検し、残りを生鍵に回す」という流れが見えます。
生鍵とは、この時点でアリスとボブが共有している鍵候補のことです。

ℹ️ Note

検査用ビットを公開すると、そのぶん鍵は短くなります。安全性を測るために秘密を少し削る、という発想がBB84では自然に入っています。

誤り訂正

QBERが許容範囲に収まっていれば、残った生鍵に対して古典的な誤り訂正を行います。
ここでは例として、生鍵 1 0 1 のうち1ビットに食い違いが見つかった場面を考えます。
ボブ側が 1 1 1 になっていたとして、パリティ比較などでずれた位置を特定し、両者を 1 0 1 にそろえるイメージです。

この処理では、誤りを直すための通信そのものが情報漏えい源になります。
そこで実感をつかむために、3ビットの生鍵から誤り訂正のために1ビットぶんの情報が実質的に失われたと考えてみると、秘密として強く残せる量は 1 0 1 の3ビット丸ごとではなく、2ビット相当まで縮みます。
紙で数えると、ふるい分けで8から5へ、検査用公開で5から3へ、誤り訂正の漏えいを織り込むと3から2へ、と少しずつ削られていく感覚がつかめます。

流れを番号で並べると、後処理は次の順序です。

  1. 基底一致で残したビット列を生鍵候補としてそろえる
  2. その一部を検査用に公開してQBERを見積もる
  3. QBERがしきい値以下なら、残りの生鍵に誤り訂正をかけて内容を一致させる
  4. 誤り訂正で外へ出た情報量を見込んで、鍵をさらに短く圧縮する

秘匿性増幅

秘匿性増幅

先ほどの例なら、誤り訂正後に秘密として2ビット相当が残ると見積もったので、3ビットの生鍵 1 0 1 から2ビットの最終鍵を作る、と考えるとわかりやすいのが利点です。
たとえば公開済みの圧縮手順に通して 11 のような短い鍵へ写像すれば、元の3ビットの一部を知っていても最終鍵は読めません。
ここで見えてくるのは、BB84の鍵が「送信した量子ビット数」ではなく、「ふるい分けで残った量」からさらに「検査用公開」「誤り訂正」「秘匿性増幅」を差し引いた長さで決まるという点です。

8ビットの玩具例でも、送受信表を書いて追うと、最初の8がそのまま8の秘密になるわけではないと実感できます。
読者が自分の手で○×を付け、公開した列を消し、残りを数え直すと、BB84の安全性が抽象論ではなく、削って整えて絞り込む手続きとして見えてきます。

なぜ盗聴が見つかるのか

BB84で盗聴が見つかる理由は、量子状態が「見れば内容がわかる箱」ではなく、どの見方をするかで結果そのものが変わる対象だからです。
ここが暗号の美しいところなのですが、盗聴者が中身を読もうとして測定した瞬間、その行為自体が痕跡になり、あとでアリスとボブが誤り率として見つけられます。

非直交状態の識別不能性と測定擾乱

BB84では、たとえば |0>|+> のような非直交状態を使います。
平易に言えば、これは「1回の観測で、確実に見分けられない組み合わせ」です。
古典的な色つきカードなら、赤か青かを見ればそのまま判定できますが、量子状態はそうなっていません。
どの基底で測るかを先に決めなければならず、その選び方を外すと、元の情報を壊しながら読んでしまいます。

直感図にすると、次のような感覚です。

状態正しい基底で測ったとき違う基底で測ったとき
`0>`0 が確定する0/1 がランダムに出る
`+>`0 が確定する0/1 がランダムに出る

この表で言いたいことは単純です。
|0> をZ基底で測れば 0 と読めますが、X基底で測ると結果はランダムになります。
逆に |+> はX基底なら 0 と読めても、Z基底ではランダムです。
つまり、盗聴者イブが「どちらの基底で送られたか知らないまま」観測すると、半分の確率で基底を外し、その時点で状態を別のものへ崩してしまいます。

筆者はこの説明を机上で追うとき、前の8ビット例の各列にイブの測定基底を1つずつ書き足します。
そこで、アリスと同じ基底を引いた列には丸、外した列には印を付け、さらに外した列では「ここで状態が一度ランダム化された」と横に小さくメモします。
紙の上でその印が増えると、盗聴は透明な覗き見ではなく、列の途中でデータに手を入れる操作なのだと体感できます。

intercept-resend攻撃と25%誤りの直感

もっとも基本的な盗聴は、イブが各光子を途中で受け取り、自分で測ってから、その結果に応じた状態を送り直す intercept-resend攻撃です。
難しく見えますが、やっていることは「盗み見してコピーを渡す」に近いです。
ただし量子では、元を壊さずに読むことも、未知の状態をそのまま複製することもできないので、この単純な方法でも誤りが残ります。

ふるい分け後に約25%の誤りが出る理由は、確率を2段階で追うと見えます。
アリスとボブが同じ基底を選んだ列だけを残すと考えると、その残った列に対して、イブはまず 1/2 の確率で正しい基底を選ぶ ので、その場合は誤りを入れません。
問題は、残りの 1/2 で誤った基底を選んだ場合 です。
このときイブの測定結果はランダムになり、そのランダムな結果に対応した状態を送り直すので、ボブが正しい基底で測っても 1/2 の確率で元のビットと食い違います
したがって誤り率は、1/2×0 + 1/2×1/2 = 1/4、つまり約25%になります。

1/2(イブが基底を外す)× 1/2(その結果、ボブの値が反転する)= 1/4

となり、ふるい分け後のビット列には約25%の誤りが現れます。

この25%は、机上の8ビット例にイブを差し込むと腑に落ちます。
筆者は採用される列だけを先に囲っておき、その中で「イブが基底を外した位置」を塗りつぶして確認します。
すると、採用列の全部が壊れるわけではなく、外した位置のさらに半分だけが実際の誤りになることが見えてきます。
8ビットのような短い例ではぴったり25%にならないこともありますが、列数を増やすほどその値に近づきます。
ここで見えてくるのは、盗聴の痕跡が神秘的なサインとして現れるのではなく、基底の外れによるランダム化が統計的な誤り率として積み上がるという構図です。

QBER検知と鍵破棄の判断

アリスとボブは、ふるい分け後のビット列の一部を検査用として公開比較し、QBER(量子ビット誤り率)を見積もります。
もし盗聴がなければ、理想的にはこの誤り率は低く保たれます。
ところが intercept-resend のような単純な盗聴が入ると、公開したサンプルの不一致が目立つようになり、「途中で誰かが測った」と判断できるわけです。

運用上は、QBERがあるしきい値を超えたら、その回の鍵候補は捨てます。
ここで注目したいのは、BB84が「盗聴者を個別に特定する」仕組みではなく、安全に鍵として使える状態かどうかを誤り率で判定する仕組みだという点です。
誤りが多ければ、原因が盗聴であれ別の要因であれ、その鍵は秘密として信用できません。
そこで鍵を破棄し、条件を整えてやり直す判断になります。

この考え方は、前の8ビットの紙の表に検査用ビットの印を付けてみるとよく見えます。
採用列のうち何個かを公開し、不一致の位置に印を打つだけで、「この列は秘密に残してはいけない」という感覚が一気に具体化します。
量子暗号の安全性は、盗聴を魔法のように防ぐことではなく、盗聴すると誤りとして表面化し、その統計を見て鍵を捨てられるところにあります。

理論上の安全性と実装上の課題

BB84の安全性は、非直交状態の測定と複製不可能性に基づく理想モデルでは強い根拠を持ちます。
ただし、その結論をそのまま現実の装置に持ち込んで「100%安全」と言い切るのは正確ではありません。
実運用では、量子チャネルの外側にある古典通信の認証、単一光子をどう用意するか、検出器が持つ癖や抜け道まで含めて安全性を設計する必要があります。

古典通信の認証と前提条件

BB84は量子チャネルだけで閉じた仕組みではありません。
アリスとボブは、基底の照合、誤り率の推定、誤り訂正、秘匿性増幅といった後処理を古典通信路でやり取りします。
この古典通信路が改ざん可能なままだと、第三者が途中で会話に割り込み、相手になりすまして別々に鍵を作らせることができてしまいます。
つまり、量子部分が正しく動いていても、古典通信の認証が抜けると全体の安全性は成立しません。

ここが直感に反するかもしれませんが、QKDは「認証なしで誰とでも安全につながる魔法」ではなく、認証された古典通信路を前提に鍵共有を強化する技術です。
実際の運用では、MAC(メッセージ認証コード)のような認証手段を使い、初回は少量の事前共有鍵を認証に回し、その後に得た鍵の一部で次回の認証を継ぎ足していく構成が考えられます。
公開鍵基盤など既存の認証基盤と組み合わせる設計もありますが、どの方式を採るにせよ「相手が本当にその相手か」を保証する層は別途必要です。

単一光子源と弱コヒーレント光

理想的なBB84では、1パルスごとにきれいな単一光子を送りたいところです。
ところが、安定して単一光子だけを出す光源を実装するのは難しく、実際にはレーザーを弱くした弱コヒーレント光を使う構成が多くなります。
この方式は現実的ですが、パルスごとの光子数が揺らぐため、0個のこともあれば2個以上の多光子パルスが混ざることもあります。

この多光子成分があると、盗聴者は1個を取り出して保持し、残りをそのまま通す光子数分離攻撃を狙えます。
筆者がこの話を説明するときは、「理論上は1通ごとに封筒が1枚だけ届く前提なのに、実際には同じ手紙が2枚入った封筒がたまに混ざる」と言い換えます。
弱コヒーレント光では、たとえば平均光子数を信号光で 0.5、デコイ光で 0.1 と置く文脈があり、ポアソン分布で見ると多光子の出現確率は前者で約9.0%、後者で約0.47%です。
こうして見ると、単一光子源の不在は単なる部品選定の問題ではなく、攻撃モデルそのものを変えてしまう実装上の論点だと分かります。

デコイ状態法(decoy-state BB84)の要点

そこで導入されたのがデコイ状態法です。
考え方は明快で、アリスが同じビット情報を載せるパルスでも、平均光子数の異なる信号光とデコイ光をランダムに混ぜて送り、ボブ側の検出統計を見比べます。
もし途中で光子数に依存した選別や取り出しが行われていれば、信号光とデコイ光の損失パターンや検出率の関係に不自然さが出るため、単一光子成分の寄与を見積もりながら安全な鍵率を評価できます。
要するに、多光子が混ざる現実を無視するのではなく、光子数の違いをわざと揺さぶって相手の介入を炙り出すのがデコイ状態法の肝です。
BB84は1984年の提案からそのまま止まっているのではなく、こうした実装上の弱点に応答しながら発展してきました。

検出器サイドチャネルとMDI-QKD

送信側だけでなく、受信側の検出器にも盲点があります。
検出器は理想化された測定器ではなく、タイミングのずれ、閾値の癖、強い光を当てたときの振る舞いなど、実デバイス特有の挙動を持ちます。
ここを突くのが検出器サイドチャネルで、代表的にはタイミング情報の漏れやブラインディングのような問題が知られています。
理論証明が想定する「正しい測定器」と、現場に置かれる「癖のある測定器」の差が、攻撃面として現れるわけです。

この課題に対する発展形として注目されるのがMDI-QKDです。
Measurement-Device-Independent QKD、つまり測定装置独立型QKDでは、鍵の安全性を受信側検出器の信頼に強く依存させない構成を取ります。
アリスとボブは中央の測定装置に量子状態を送り、その測定器が信頼できない前提でも鍵共有が成立するように設計します。
ここが暗号の美しいところなのですが、弱点として見えていた検出器そのものを「信用しなくてよい部品」に寄せることで、攻撃面を構造的に縮めています。
もっとも、その代わりに同期や干渉条件が厳しくなり、構成も複雑になります。
理論上の安全性を実装へ近づけるには、こうした世代交代まで視野に入れて評価する必要があります。

BB84の現在地と応用

BB84は1984年の提案で終わる古典ではなく、光ファイバー実証、都市ネットワーク、衛星リンク、多重伝送へと着実に伸びてきた実装技術です。
教科書的な「盗聴が見つかる仕組み」を理解したあとに見るべきなのは、どこで距離が壁になり、どこで鍵率が壁になり、どこからはネットワーク設計の問題に姿を変えたのか、という現在地です。

距離・速度の実験史

まずは、光ファイバー上のBB84系実証がどのように伸びてきたかを俯瞰すると流れがつかめます。
筆者はこの種の年表を見るとき、単に「遠くなった」「速くなった」と読むのではなく、その年ごとに何がボトルネックだったかを重ねて考えます。
初期はまず送れること自体が主題で、その後は損失との戦いになり、さらに進むと後処理や装置実装を含めて実効的な鍵率をどう引き上げるかが焦点になります。

実証の目安距離鍵率
1988年最初期実験30cm3.3bps
1995年ジュネーブ大学実験23km486bps
2002年11月三菱電機実験87km7.2bps
2004年11月三菱電機屋外実験96km8.2bps
2007年5月NTT研究所実験200km12bps
2008年Cambridge–Toshiba実験20km1Mbit/s
2008年Cambridge–Toshiba実験100km10kbit/s

この表を見ると、2007年までの流れでは「距離を延ばすほど鍵率が細る」という厳しさがそのまま出ています。
200kmで12bpsという数字は、到達距離の意味では大きい一方、実サービスに載せるにはまだ細い。
ここで壁になっているのは光損失だけではなく、検出器性能、雑音、後処理効率まで含めた総合戦です。

一方、2008年のCambridge–Toshiba実験は、20kmで1Mbit/s、100kmで10kbit/sという対照的な数字が示す通り、「都市圏の比較的短い距離なら実用に寄せた鍵率が見えてくる」段階に入ったことを感じさせます。
BB84では基底照合でおおむね半分が落ち、その後に誤り訂正や秘匿性増幅でも削られるため、生の鍵率だけで判断してはいけませんが、それでも桁が変わるインパクトは大きいです。
20kmで1Mbit/sという水準は、1時間で約450MB相当の鍵量を供給できる計算になり、機密データの保護を現実の帯域感覚で考えられるラインに近づきます。

ネットワーク化と衛星QKD・高次元QKD

距離と鍵率の改善が進むと、次の論点は「点と点をどう結ぶか」から「面としてどう使うか」へ移ります。
ここで出てくるのがネットワーク化です。
単一リンクの実験だけでは、都市全体や組織全体の通信基盤にはなりません。
複数拠点を結ぶには、中継、経路設計、どこを信頼境界に置くかという問題が前面に出ます。

実装の現場感覚で見ると、都市ネットワークでは trusted node を置く構成がまず現実的です。
各区間でQKD鍵を生成し、中継ノードで鍵を受け渡して全体の通信を構成する考え方です。
ここでは量子の原理だけでなく、「どの施設なら物理的に守れるか」が設計条件になります。
データセンター間、自治体の重要拠点間、医療系の基幹回線、あるいは災害対策拠点を結ぶバックボーンのどこにQKD鍵を重ねると効くのか、と想像すると、単なる研究テーマではなくネットワーク設計論として見えてきます。
平時の都市間リンクに入れるのか、非常時にも守りたい制御系の区間に集中投入するのかで、価値の出方は変わります。

trusted node を減らしたい方向では、前節でも触れたMDI-QKDのような発展形が効いてきます。
測定装置を信頼しない構成に寄せることで、ネットワーク全体の攻撃面を狭める発想です。
BB84そのものが主役であり続けながら、実装上の弱点に対応する派生方式がネットワーク化を後押ししているわけです。

光ファイバー以外では、衛星QKDも外せません。
地上ファイバーでは損失が距離に比例して積み上がるため、超長距離では構成が重くなります。
衛星リンクはこの制約を別の形で回避する方向で、広域を結ぶ量子鍵配送の候補として位置づけられます。
さらに、高次元QKDは、量子状態に載せる情報の取り方を拡張して、効率や耐雑音性の改善を狙う方向性です。
教科書に出てくる2値のBB84から離れて見えるかもしれませんが、「限られた光子と限られたチャネルで、どう鍵生成を押し上げるか」という同じ問題意識の延長にあります。

複数の報道では、2025年にKDDI総合研究所と東芝デジタルソリューションズが1心光ファイバー上で30Tbps超の大容量データとQKD鍵の多重伝送を実証したと伝えられています。
ただし、本文でこの事例を挙げる場合は必ず一次出典(公式プレスリリースや研究機関の発表)を明示してください。
一次出典が確認できない場合は「複数の報道によれば」といった慎重な表現を用いてください。

PQCとの補完関係

ここまで来ると、よく出る疑問が「ではQKDがあればPQCはいらないのか」です。
結論から言えば、役割が違います。
QKDは鍵配送を物理法則に根ざした形で守る技術であり、PQC(耐量子暗号)は既存の計算機とネットワーク上で動く計算量的安全性の暗号を量子計算時代向けに置き換える技術です。
両者は競合というより補完の関係にあり、用途や運用条件に応じて使い分けられるのが現実です。

まとめと次のアクション

BB84は、量子状態そのもので秘密を送る技術ではなく、共有鍵を育てる手順として捉えると整理できます。
見るべき流れは、基底を選んで送り、一致した部分だけを残し、誤り率を確かめ、誤り訂正と秘匿性増幅で最終鍵へ絞り込むことです。
ここが暗号の美しいところなのですが、理論上の安全性と、単一光子源・デコイ状態・検出器・認証済み古典通信といった実装条件は、同じ「安全」という言葉で混ぜないほうが理解が深まります。

次に手を動かすなら、まず紙の上で8ビットの送受信表を1回作ってください。
ふるい分けでどれだけ落ちるか、誤りが混ざると何が起きるかを、自分の手で追うだけで見え方が変わります。
そのうえで、E91で「もつれ型」の発想に触れ、MDI-QKDで検出器問題への答えを見て、PQCで量子時代の古典暗号との役割分担までつなげると、BB84を入口に量子暗号の地図全体が立ち上がります。

シェア

秋山 拓真

情報セキュリティ企業での暗号実装検証を経て、暗号理論の解説に専念。公開鍵暗号からポスト量子暗号まで、数学的原理をわかりやすく伝えます。

関連記事

現代暗号

ブラウザでHTTPSのサイトを開いた瞬間、画面には見えないところで「いま誰と鍵を決めたのか」と「その後の本文をどの鍵で守るのか」が一気に走ります。この記事では、まず共通鍵暗号の仕組みと量子コンピュータ時代に何が変わるかの節を先に参照すると、以降の議論の流れがつかみやすくなります。

現代暗号

WebをHTTPSで開き、Wi‑Fiに接続し、ノートPCのディスク暗号化を有効にする。ふだん何気なく触れているこの3つの動作の奥には、同じ名前の暗号がいます。

現代暗号

ブラウザの錠前アイコンを開いて証明書の詳細をのぞくと、Public-Key: RSA 2048 と Exponent: 65537 が並んでいて、公開鍵暗号は教科書の中だけの話ではなく、いま目の前の通信を支える現役技術なのだと実感します。

現代暗号

1977年に公開されたRSAは、公開してよい鍵(n, e)と外に出してはいけない秘密鍵dを分けることで、暗号と署名の考え方を一段進めた方式です。公開鍵暗号を数式から理解したい人、仕組みは知っているのに実務での役割が曖昧な人に向けて、歴史的位置づけから手で追える計算例までを一本につなげます。