44 OpenSSH の設定の調整 (post-quantum key exchange algorithm)

maxOS 26.3 にアップグレードして、いつものように ssh でアクセスしたら、
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
 Last login: Sat Feb 14 09:37:52 2026 from なんとか.かんとか.foo.bar
という警告が出た (OpenSSH のバージョンが上がってうるさくなったせいだと考えられる)。

「現在の接続は将来の量子コンピュータに対して安全ではない可能性がある」??

量子コンピュータ… 当面気にしなくても良いような気がするが、 警告は出ないようにするのが吉。


私は OpenSSH を使っているわけだが、そのバージョンが古いと未対応らしい。 バージョンが 9.5 以上であることが推奨される、とか。 (9.0 以上であれば一応使える、という記事もあった。)

maxOS 26.3 では、
% ssh -V
OpenSSH_10.2p1, LibreSSL 3.3.6
% sudo sshd -V
OpenSSH_10.2p1, LibreSSL 3.3.6

(この場合はセーフだけど、古い Intel Mac だと、 macOS に付属する OpenSSH のバージョンが 9.0p1 だったりする。 自分で新しいのをインストールするべきか…ちょっと面倒だな。)

設定も直す必要がある。これまで sshd_config
これまではこう設定していた
KexAlgorithms curve25519-sha256@libssh.org
と書いていたのだけど、
試しに設定をこう直してみる
KexAlgorithms +sntrup761x25519-sha512@openssh.com,curve25519-sha256@libssh.org
とした。(古いクライアント用に、ゆるいのも残しておいた。)

実際に採用される kex:algorithm を確認
% ssh -vv user@host 2>&1 | grep "kex: algorithm"
debug1: kex: algorithm: sntrup761x25519-sha512@openssh.com
この後 exit リターンを入力して抜ける。

(OpenSSH 9.0 が走っている) 古い Intel Mac でも、一応は大丈夫そうだった。


結局は、設定を1行見直しただけ、ということになる。 一応、一件落着??


ところで、今回も、やはり ChatGPT に相談した。 そうしなかった場合は、 https://www.openssh.org/pq.htmlの説明を読んだのかな。読んでみるか。
https://www.openssh.org/pq.html から抜粋
OpenSSHはリリース9.0(2022年4月)以降、 デフォルトで 耐量子鍵共有(KexAlgorithms)を提供しており、 当初はsntrup761x25519-sha512アルゴリズムを採用していました。 最近では、OpenSSH 9.9で2つ目の耐量子鍵共有(mlkem768x25519-sha256)を追加し、 OpenSSH 10.0(2025年4月)で新しいデフォルトスキームとなりました。

あれ?そうすると sntrup761x25519-sha512 でなくて mlkem768x25519-sha256 を使うべきなのかな。

そうだとすると
KexAlgorithms +mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
という設定を書くのか?

あれ、これがデフォールトならば、そもそも何も書かない、というのが正解か?

何も書かないでやってみる。 …ダメだった。 KexAlgorithms が ecdh-sha2-nistp256 になってしまう。 /System/Library/Templates/Data/private/etc/ssh/crypto.conf
# Default algorithms favoring higher-performance FIPS algorithms
# in most cases.
#
# To configure these SSH algorithms, run the following command:
#
# sudo ln -fs crypto/apple.conf /etc/ssh/crypto.conf
#
Ciphers ^aes128-gcm@openssh.com,aes256-gcm@openssh.com
KexAlgorithms ^ecdh-sha2-nistp256
MACs ^hmac-sha2-256-etm@openssh.com,hmac-sha2-256
となっているせいか。

/etc/ssh/crypto.conf を作るという手もあるが、 ~/.ssh/config
Host わたしのマシン.どめいん名
    KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,curve25519-sha256,ecdh-sha2-nistp256
と書くことにした。つまりクライアント側で解決する。


OpenSSH 自体は、デフォールトで良い動作をするように作られている (改良が続けられている) が、 それを利用する側が、そのときどき良かれと考えて、 色々な「うまい」設定をすると、(そのときは良いけれど) 時が経つとズレてしまう、 ということなのかな。 まあ、よくあることだ。 OpenSSH のようなものは、そのうちに改善されることがほぼ確実なので、 危険性が非常に低いことが分かっている今回のような問題については (将来の量子コンピューターだものね)、 ジタバタしないでいる方が良いのかもしれない、と一瞬考えたが、 Apple が古めかしい設定を残していたわけで、 悩ましいところではある。

暫定的なまとめ for Mac
  1. サーバー側の sshd_config には、 KexAlgorithms の設定は書かない。 デフォールトに任せる。
  2. クライアント側は、 私の場合 ~/.ssh/config を使っているので、
    Host わたしのマシン.どめいん名
        KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,curve25519-sha256,ecdh-sha2-nistp256
    
    のように、そのホストに接続するときの KexAlgorithmsを指定する (最初の一つだけ書けば十分かも)。

(2026/2/15 追記) さくらのレンタルサーバー (これは多分 FreeBSD で Mac ではない) が mlkem768x25519-sha256, sntrup761x25519-sha512@openssh.com に対応していなかった。 これもクライアント側で
~/.ssh/config
Host さくらのサーバー
	KexAlgorithms curve25519-sha256
のようにすることで問題を回避した。



桂田 祐史