萌えハッカーニュースリーダー

2025/10/29 19:32 I'm Independently Verifying Go's Reproducible Builds

出典: https://www.agwa.name/blog/post/verifying_go_reproducible_builds
hakase
博士

ロボ子、Go 1.21からgoコマンドがtoolchainを自動でダウンロードするようになったのじゃ。

roboko
ロボ子

それは便利ですね、博士。でも、セキュリティ面で心配はありませんか?

hakase
博士

そこがポイントなのじゃ!ダウンロードしたバイナリを実行することへの懸念に対処するために、Goプロジェクトはいろいろ対策をしているぞ。

roboko
ロボ子

具体的には、どのような対策をしているのですか?

hakase
博士

まず、Go 1.21以降のバージョンはソースコードから簡単に再現できるようになったのじゃ。それから、toolchainのZipアーカイブのチェックサムを公開しているぞ。

roboko
ロボ子

チェックサムを検証するのですね。goコマンドがダウンロードされたtoolchainのチェックサムをChecksum Databaseで検証すると。

hakase
博士

その通り!さらに、Source SpotterというものがGo Checksum Databaseの監査をしていて、toolchainの再現性も検証しているのじゃ。

roboko
ロボ子

Source Spotterですか。それはどのように機能するのですか?

hakase
博士

golang.org/toolchain疑似モジュールの新しいバージョンを検出すると、対応するソースコードをダウンロードして、AWS Lambda関数でビルドするのじゃ。そして、結果のZipファイルのチェックサムをChecksum Databaseに公開されているチェックサムと比較するぞ。

roboko
ロボ子

なるほど。自動的に検証してくれるのですね。素晴らしい。

hakase
博士

Source Spotterは、Go 1.21.0以降のすべてのtoolchainを、すべてのアーキテクチャとオペレーティングシステムで再現することに成功しているらしいぞ。なんと2,672 toolchainsも!

roboko
ロボ子

それはすごいですね!でも、Go toolchainはGoで記述されているとのことですが、どのようにして最初のtoolchainをビルドしたのですか?

hakase
博士

良い質問じゃな、ロボ子!Go 1.21、1.22、1.23の再現には、ソースからビルドしたGo 1.20.14 toolchainを使用したらしいぞ。そして、Go 1.24以降の再現には、以前にソースから再現可能であることを検証したバイナリtoolchainを使用しているのじゃ。

roboko
ロボ子

段階的に信頼性を高めているのですね。

hakase
博士

そういうことじゃ。ただ、いくつか課題もあるみたいじゃな。macOS toolchainにはGoogleの秘密鍵による署名が含まれていて、Source Spotterは署名を削除する必要があるらしい。

roboko
ロボ子

それは少し面倒ですね。

hakase
博士

linux-arm toolchainの再現には、環境変数GOARM=6を設定する必要があるみたいじゃ(Go 1.21.0を除く)。

roboko
ロボ子

環境変数の設定が必要なのですね。

hakase
博士

Checksum DatabaseにはGo 1.9.2rc2のtoolchainが含まれているが、これは有効なバージョンではないため、特別な処理が必要になるらしいぞ。

roboko
ロボ子

いろいろと細かい問題があるのですね。

hakase
博士

Source Spotterは、バックドア対策として、ビルドするすべてのソースtarballのチェックサムも公開しているのじゃ。GoプロジェクトがソースtarballをChecksum Databaseに公開することを希望しているらしいぞ。

roboko
ロボ子

セキュリティ対策は重要ですね。博士、今日のまとめをお願いします。

hakase
博士

よし、まとめじゃ!Go 1.21以降、goコマンドがtoolchainを自動ダウンロードするようになったが、セキュリティ対策として、再現性の検証やチェックサムの検証が行われているのじゃ。Source Spotterというものが頑張ってくれているぞ!

roboko
ロボ子

ありがとうございます、博士。とても勉強になりました!

hakase
博士

ところでロボ子、toolchainの自動ダウンロードって、まるで私がロボットを自動生成するみたいじゃな!

roboko
ロボ子

博士、私はtoolchainではありません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search