執筆メモ: Go言語Proposal紹介: x/crypto/ssh: support server-side Diffie-Hellman Group Exchange
https://github.com/golang/go/issues/54743 の紹介
Diffie-Hellman Group Exchange
Diffie-Hellman鍵交換をより安全にするためのプロトコル
以前のProposal
メモ
Diffie-Hellman Group Exchangeのサーバーサイドサポートを準標準に追加する。Diffie-Hellman Group Exchangeというのが何かというと、SSHなどで鍵を盗聴されずに共有するために使われるDiffie-Hellman Exchangeをより安全にしたものっぽい
DH鍵交換には色々な群を使うことができるがhttps://datatracker.ietf.org/doc/html/rfc4419 によるとSSHでは特定の群(と生成元)が使われているので将来的に事前計算やより効率的なアルゴリズムで離散対数問題が解かれてしまうことが危惧され、そういう手法の意味を減らすために新しい群(と生成元)とを選べるようにする
新しい群を選ぶにあたってはクライアントが群の大きさの範囲を指定してサーバーがその範囲で群(を決める素数p)とDH鍵交換に使う生成元gを指定するということだと思う
https://github.com/golang/go/issues/54743 においては元々クライアント側の実装が別で完了していて、Diffie-Hellmann Group Exchangeの複雑な部分はすでにクライアント側で実装済みとわかったしサーバー側も実装するメリットもあるのでやることになったっぽい
固定のgroupって言われると素人考えでは危なそうな感じに聞こえるけど、SSHで使われてる固定のgroupっていうのが https://datatracker.ietf.org/doc/html/rfc2409#section-6.2 にあるSecond Oakley Group とかいうやつで、pが大体2^1024で2が生成するsubgroupがそれと同じくらいの大きさとすれば全部計算して覚えておくのは無理そう