テクノロジー

Go 1.27、ポスト量子暗号化とサーバーメモリコスト30%削減を実現

Adrian Kessler

Go 1.27 には、ユーザ画面に映る前にインフラ層に直撃する2つの変更が搭載された。言語本体が TLS に耐量子暗号を統合し、さらに小規模メモリ割り当てのコストを最大30%削減。スケールしたときに確実に経費を節約できるアップデートだが、同じ週に発表された AI フレームワークに話題をさらわれている。

耐量子関連の追加は、FIPS 204 で標準化された署名方式 ML-DSA を実装する新パッケージ crypto/mldsa。Go の TLS 1.3 は3種類の ML-DSA バリアント(MLDSA44、MLDSA65、MLDSA87)を使って接続を認証できるようになり、crypto/x509 ライブラリはそれらを保持する証明書を解析・検証可能になった。これらの防御が想定する脅威——RSA や楕円曲線暗号を破れる実用的な量子コンピュータ——は現時点では存在しない。しかし移行には年単位の時間がかかるため、金融・医療・政府機関など長期保存が必要な記録を扱う組織はすでにこれを積極的な計画課題として捉えている。

メモリ関連の変更は目立たないが、即座に価値を生む。Go のランタイムは80バイト未満のオブジェクト——数千の同時リクエストを捌く典型的なサーバで割り当ての大半を占めるクラス——に特化したサイズ別割り当てルーチンを生成するようになった。結果としてそのクラスの割り当てコストは30%削減され、ベンチマーク上ではサーバワークロード全体で3〜5%の高速化に相当する。Go はクラウド API、決済処理、内部プラットフォームサービスを大規模に支えており、その差は実際のインフラ支出に直結する。

Go 1.27 はさらに、ジェネリクスが導入された Go 1.18 以来続いていたギャップ——ジェネリックメソッド——を埋める。従来はメソッドが独自の型パラメータを持てなかったため、型をまたがる操作を型の名前空間外にあるパッケージレベルの関数に押し込む必要があった。標準ライブラリでその修正が確認できる。math/rand/v2.Rand は3つの個別整数型メソッドを単一のジェネリックメソッド N() に統合した。この変更を回避してきたコードベースにとっては、新しいパターンを導入するのではなく、既存の回避パターンを解消する意味合いを持つ。

ただし注意点が2つある。耐量子対応はオプトインであり、既存の TLS 設定はそのまま動作し続けるため、エコシステム全体への浸透は徐々に進むだろう。30%のメモリ改善も80バイト未満の割り当てクラスに限られており、エンジニアは想定される改善率を期待する前に、実際のワークロードをプロファイリングする必要がある。

その他の追加要素としては、ほぼ必須だったサードパーティ依存関係を排除するネイティブの uuid パッケージ、本番環境で永久ブロックされた goroutine を捕捉するために一般利用可能となった goroutine リークプロファイラ、そして既存の encoding/json パッケージの API を変えずにバックエンドで動作する新しい encoding/json/v2 実装が含まれる。Go 1.27 は8月19日にリリースされ、go.dev から入手可能。macOS 対応には macOS 13 Ventura 以降が必要となる。

タグ: , , , , ,

ディスカッション

0件のコメントがあります。