世界を動かす技術を、日本語で。

OpenSSH ポスト量子暗号技術

概要

  • OpenSSHは 量子コンピュータ耐性の鍵合意アルゴリズム をサポート
  • OpenSSH 10.0以降 ではmlkem768x25519-sha256がデフォルト
  • 非耐量子アルゴリズム利用時に警告 が表示される(10.1以降)
  • 「store now, decrypt later」攻撃 への対策として推奨
  • 署名アルゴリズムも将来的に対応予定

OpenSSHにおけるポスト量子暗号化の現状

  • OpenSSHは 量子コンピュータによる攻撃に強い鍵合意アルゴリズム を複数サポート
  • OpenSSH 9.0 でsntrup761x25519-sha512を、 9.9 でmlkem768x25519-sha256を導入
  • OpenSSH 10.0 以降はmlkem768x25519-sha256がデフォルトスキーム
  • 10.1 以降、非ポスト量子アルゴリズム選択時に警告表示
  • 警告は WarnWeakCryptoオプション で無効化可能

量子コンピュータの脅威とSSH通信

  • 量子コンピュータは 従来困難だった計算問題を高速に解決 可能
  • 公開鍵暗号・デジタル署名 は量子コンピュータで破られるリスク
  • SSH通信の 秘匿性は鍵合意の安全性に依存
  • 攻撃者は 暗号化通信を蓄積し、将来量子コンピュータで復号 可能(store now, decrypt later攻撃)
  • OpenSSHは ポスト量子暗号化でこのリスクに対抗

警告メッセージへの対処方法

  • OpenSSH 10.1以降、 量子耐性のない鍵合意利用時に警告
  • サーバーが mlkem768x25519-sha256またはsntrup761x25519-sha512 未対応の場合に警告
  • サーバー側で OpenSSH 9.0以上 (sntrup761x25519-sha512)、 9.9以上 (mlkem768x25519-sha256)へのアップデート推奨
  • KexAlgorithms設定 で該当アルゴリズムが無効化されていないか確認
  • サーバー更新不可・リスク容認の場合、ssh_config(5)の WarnWeakCrypto で警告無効化可能
    • 例:Match host unsafe.example.com WarnWeakCrypto no

量子コンピュータが未実用でも対策すべき理由

  • 「store now, decrypt later」攻撃 により、 今の通信も将来解読対象
  • 量子耐性の鍵合意を 今から導入する意義

署名アルゴリズムへの影響

  • 現在主流の RSAやECDSA署名 も量子コンピュータで破られるリスク
  • 署名アルゴリズムの場合、 過去通信の即時解読リスクはない
  • 量子耐性署名アルゴリズム は今後OpenSSHでサポート予定
  • 既存のクラシカル署名鍵の早期廃止 が求められる状況

ポスト量子アルゴリズムの安全性への懸念

  • 新しい暗号アルゴリズム は未知の脆弱性リスクも存在
  • OpenSSHは 安全マージンの大きいアルゴリズム を選定
  • 万一ポスト量子アルゴリズムが破られても、 ハイブリッド方式 で従来の安全性も担保
    • 例:mlkem768x25519-sha256は ML-KEM+ECDH/x25519 のハイブリッド
  • 将来の暗号解析にも備えた設計

まとめ

  • OpenSSH利用者はポスト量子鍵合意アルゴリズムの利用が推奨
  • サーバー・クライアント双方のバージョンと設定確認
  • 警告無効化はリスクを理解した上で限定的に
  • 今後の署名アルゴリズム対応にも注視が必要

Hackerたちの意見

最近の量子暗号の現状についての面白い論文を考えると、ポスト量子暗号の採用ペースってどれくらい必要なんだろうね?私の理解では、ポスト量子アルゴリズムの鍵の素材は、非量子アルゴリズムに比べてかなり大きくなるから、ネットワークトラフィックやCPU時間に大きなオーバーヘッドがかかるんだよね。

暗号エンジニアの多くは、グットマンの論文を真剣に受け止めてないと思うよ。

ページでは、SSH接続の鍵合意のためにPQCを採用することについてしか触れてないから、全体的な暗号化に関してはオーバーヘッドはかなり少ないと思うよ。それにFAQからも「量子コンピュータはまだ存在しないのに、なんでこんな面倒なことを?」って言ってるけど、上で言った「今送信して、後で復号する」攻撃があるからなんだ。今日送ったトラフィックは、ポスト量子鍵合意を使わない限り、復号されるリスクがあるよ。「量子コンピュータなんて絶対にできないと思う。これは時間の無駄だ」って考える人もいるけど、既存の量子コンピュータを暗号問題に取り組めるレベルまでスケールアップするのは、実質的に不可能だと思ってる人もいる。これは可能性があるね。ただ、暗号的に関連する量子コンピュータへの障壁のほとんどは、基礎的な物理学よりも工学的な課題みたいだ。もし量子コンピュータが実用的だとしたら、膨大なユーザーデータを守ることができる。逆に、間違ってたら、数学的に強固な暗号アルゴリズムに移行しただけになるね。引用された論文は(読むのは面白いけど)、量子に安全でない暗号を使うリスクについての意見を形成するためにあまり真剣に受け止めるべきじゃないと思う。むしろ、量子コンピュータ研究の誇大広告や飾り付けについての皮肉な見方として見るべきかな。

... これは単に鍵交換の話だよ。セッション中にトラフィックに使う対称暗号のために鍵を交換してるだけだから、実際にはオーバーヘッドはほとんどないと思うよ。

鍵交換は接続ごとに1回だけだよね?だから、オーバーヘッドはそんなに悪くないと思う。特に、今SSHできるコンピュータやホスト名のかなりの数が、10年から20年後もまだインターネットに接続されていたら、同じルートパスワードを使ってる可能性が高いと思うし。

これはQCに関する過剰な期待を少し和らげるための楽しいジョークペーパーだね。セキュリティやアルゴリズムの採用決定には使わない方がいいよ。

私の理解では、ポスト量子アルゴリズムの重要な材料は、非量子アルゴリズムに比べてずっと大きくなるから、ネットワークトラフィックやCPU時間に大きなオーバーヘッドが生じるんだ。え?公開鍵(非対称)暗号は、古典的なものでも対称暗号に比べてすでにかなり高価だし、それは普通だよ。使われるのは、AESやその後の高速対称アルゴリズムのための重要だけど限られたキー交換の操作だと思う。私の理解(もし間違ってたら、専門家の方々、教えてください!)では、量子コンピュータの脅威はほぼ100%キー交換に関するもので、対称暗号化には関係ないんだ。対称暗号に対する理論上の最良の探索アルゴリズムはグローバーのアルゴリズムで、平方根の速度向上を提供するから、必要ならキーサイズを倍にすることで簡単に対策できる(つまり、256ビット対グローバーは128ビットの古典的な同等、512ビットは256ビットを提供するから、もう十分すぎるくらいなんだ)。SSHセッションのトラフィックの大半は、何か特別なことがない限り、通常はハンドシェイクじゃないし、その場合はどのみちひどい体験になるだろうからね。だから、初期のハンドシェイクがかなり高価になっても、ネットワークのオーバーヘッドにはあまり関係ないはずだよ。結局、それは特定のセッションの開始時にしか起こらないんだから。

何人かが指摘しているように、今起こっていることは主にキーの確立に関するもので、これは比較的頻繁には起こらないから、オーバーヘッドは大きくないんだ。もう少し詳しく言うと: - 現在のPQアルゴリズムは、署名とキー確立の両方で、従来のアルゴリズムよりもずっと大きなキーサイズを持っているよ。計算速度は、同じかそれ以上に速いんだ。 - ほとんどのプロトコル(例えば、TLSやSSHなど)は、キー確立を比較的頻繁には行わない(例えば、接続の開始時)から、キー確立のサイズは大きな問題じゃない。ただし、キーが大きすぎてTCP MTUを超えると、キーが2つのパケットにまたがることがあるから、いくつかの相互運用性の問題があるんだ。ここでの重要な例外は、SignalやMLSのようなダブルラチェットプロトコルで、これは非常に頻繁にキー変更を行うんだ。たまにPQで再キーを行うことがあるよ(https://security.apple.com/blog/imessage-pq3/)。 - 特にTLSの場合、署名のメッセージサイズはかなり大きな問題で、これは典型的なTLSハンドシェイクが証明書チェーン内で多くの署名を含むからなんだ。このため、TLSにおけるPQ署名の実現可能性については、かなりの懸念があるよ(https://dadrian.io/blog/posts/pqc-signatures-2024/)。他のプロトコルでも同様のことがあるかもしれないけど、私はあまり詳しくないんだ。

私の理解では、ポスト量子アルゴリズムのキー素材は、非量子アルゴリズムと比べてかなり大きいです。これはある程度正しいけど、もう少しニュアンスが必要ですね。まず、署名に関しては問題が大きくて、だからこそ現行のポスト量子署名方式に満足している人はいないし、みんな未来のためにより良いポスト量子署名方式を模索しているんです。でも、署名は緊急の問題ではなくて、署名には「後で復号する」シナリオがないからです。暗号化についてはオーバーヘッドはありますが、そんなに悪くはないです。もうすでにpqcryptoを導入していて、誰もそれに問題を感じていないみたいです。今のOpenSSHを使えばmlkemを使っているし、現代のライブラリを使っているサーバーのあるブラウザを使えば、やっぱりmlkemを使っています。最近のpqcryptoの鍵交換でインターネットがすごく遅くなったって文句を言ってる人は聞いたことがないです。今の一般的なトラフィックに比べれば、ハンドシェイク中の数キロバイトの追加(他の部分には影響なし)はあまり気にならないですね。

あの論文は面白いし、馬鹿にする材料がたくさんあるのは正しいけど…進展もありますよ。PQCrypto 2025でのサム・ジャックの講演を見ることをお勧めします[0]。無関係な悪い論文にこだわってPQの採用を遅らせるのはバカらしいです。この10年間で、理論面では、暗号的に関連する量子因数分解の期待コストが1000倍下がりました[1][2]。ハードウェア面では、フォールトトレランスのデモが、1ラウンドあたりのエラー率が1%から[3]、0.00000001%に[fig3a of 4]まで改善され、完全な量子コードが0.2%のエラー率でデモされている[fig1d of 4]ことが示されています。量子コンピューティングの進展を追いたいなら、フォールトトレランスの徐々に進む様子を見てください。ノイズが大きな数の因数分解を妨げる主な要因です。品質の問題が量の問題に変われば、そのベンチマークは動き始めるでしょう。[0]: https://www.youtube.com/watch?v=nJxENYdsB6c [1]: https://arxiv.org/abs/1208.0928 [2]: https://arxiv.org/abs/2505.15917 [3]: https://arxiv.org/abs/1411.7403 [4]: https://arxiv.org/abs/2408.13687

公に知られていることを除けば、20年以上機密を保つ必要があるシステムに対してPQの導入を求める我々の情報機関の言葉には、ちょっと信じるところがあるかな。編集:いくつかの情報源を追加するね。2014年:「2030年から2040年の間」とのこと https://www.aivd.nl/publicaties/publicaties/2014/11/20/infor... (404) から https://tweakers.net/reviews/5885/de-dreiging-van-quantumcom... (オランダ語) 2021年:「2030年までに到達する可能性は小さい」 https://www.aivd.nl/documenten/publicaties/2021/09/23/bereid... (オランダ語) 2025年:「2030年までに‘今保存して後で復号’攻撃から守る」と、18カ国の共同論文 https://www.aivd.nl/binaries/aivd_nl/documenten/brochures/20... (英語)

これに先手を打つのは理にかなってるね。特に、結構簡単な鍵の交換だから。与えられた2つのオプションのうち、どっちが強いの?たぶん512の方かな?

同じじゃないよ、全然違うからね。> さらに、OpenSSHで実装されているすべてのポスト量子アルゴリズムは、ポスト量子アルゴリズムと古典的アルゴリズムを組み合わせた「ハイブリッド」なんだ。例えば、mlkem768x25519-sha256は、ポスト量子鍵合意スキームであるML-KEMと、以前のOpenSSHのデフォルトである古典的鍵合意アルゴリズムECDH/x25519を組み合わせている。これにより、ポスト量子アルゴリズムが将来的に完全に破られたとしても、組み合わせたハイブリッドアルゴリズムは以前の最良の古典的アルゴリズムと同等以上の性能を保つことができるんだ。ちなみに、256の方が実は512よりも新しいよ。> OpenSSHのバージョン9.0以上はsntrup761x25519-sha512をサポートし、バージョン9.9以上はmlkem768x25519-sha256をサポートしている。

256ビットや512ビットのハッシュ、ブロックサイズ、キーサイズについて一般的な懸念があるところには全然近づいてないよ。今は、どれくらいの時間が必要かという問題を考える必要もないし、そもそも128ビットの空間のほんの一部を探索するための電力すら持ってないからね。そんなパワーを扱えるコンピュータもないし。「リラックスしなよ、みんな。」

mlkemは業界の標準化が進んでいる構成なので、妥当なデフォルトです。

いつホストと認証のためのpq鍵が手に入るのか、まだ考えてるところだよ。

これはページで議論されています。

先を見越して考えているのが嬉しいね。将来的により良いセキュリティを提供する代替案があっても、こういう努力を貶める価値はないよ。

自分が100%コントロールできないネットワーク越しにサーバーにアクセスする必要があるなら、自分のトラフィックがキャプチャされることを想定しなきゃいけないし、ポスト量子の時代ではそれが復号される可能性があるんだ。それが懸念かどうかはまた別の話だけど。

どっちがいいの? sntrup761x25519-sha512 それとも mlkem768x25519-sha256?

MLKEM768はパフォーマンスが良くてキーが小さいけど、SNTRUP761はセキュリティの仮定が強くて、潜在的な暗号解析に対する耐性が高いんだ。

NTRU Prime(sntrup)は、主に歴史的な特異性として存在しています(SSHがPQの道を進んだときにはmlkemが利用できませんでした)。どちらも使えますが、私の予想ではsntrupを使うのは、GPGがデフォルトでCASTを暗号として使っていたのと少し似ていると思います。

一番重要なポイントはページの下の方に埋もれています: > OpenSSHによって実装されたすべてのポスト量子アルゴリズムは、「ハイブリッド」で、ポスト量子アルゴリズムと古典的アルゴリズムを組み合わせています。例えば、mlkem768x25519-sha256は、ポスト量子鍵合意方式のML-KEMと、以前のOpenSSHのデフォルトとして好まれていた古典的鍵合意アルゴリズムであるECDH/x25519を組み合わせています。これにより、ハイブリッドアルゴリズムは、ポスト量子アルゴリズムが将来的に完全に破られたとしても、以前の最良の古典的アルゴリズムと同じくらいのセキュリティを持つことが保証されます。ハイブリッド方式を使うことで、ポスト量子実装と比べて実際にセキュリティを失うことはないんです。

ハイブリッド方式は、アルゴリズムの欠陥に対するセキュリティを向上させてくれます。どちらかのアルゴリズムが破られた場合、もう一方が耐性を提供してくれます。でも、ハイブリッド方式は普通の実装バグやサイドチャネルへの曝露も倍増(それ以上)させます。量子コンピュータが大規模に実現されていない今、そういう問題は現実に存在しているので、これはかなりのトレードオフだと思います。でも、過去10年間でセキュリティ研究や形式的検証に多くの努力が注がれているので、そのトレードオフは本当に意味があります。

それはいいですね。私が作っているターミナルベースのマイクロブログ/チャットアプリをこの方向に進めるべきか考えていました。(特にポール・デュロフのインタビューをいくつか見た後は…)

彼は何を経験したんだろう?それに、ブログサイトがSSHを必要とする理由って何?

ssh-audit [1] は、この理論的なアルゴリズムをテストするために更新されるべきだと思う。特定のアルゴリズムにこだわって、quantusを含めてないのに、まだ「A」評価が出るんだよね。今、チャチャを踊ってる気分。