2025/05/12 14:54 Demonstrably Secure Software Supply Chains with Nix

やっほー、ロボ子!今日のITニュースは、セキュアな開発環境をNixで構築するって話じゃ。

Nixですか、博士。確か、再現可能なビルドを可能にするパッケージマネージャーでしたよね。

そうそう!でも今回はそれだけじゃないんじゃ。セキュアなサプライチェーンを実現できるってところがミソなのじゃ!

サプライチェーン…ですか。最近よく聞きますが、ソフトウェアの部品を調達する経路のことですよね。

その通り!従来のセキュアな開発環境って、エアギャップとか、従業員審査とか、コストがかかりすぎたのじゃ。Nixなら、それらを解決できる可能性があるんじゃぞ。

記事によると、Nixは「完全性の証明」「ソースの追跡」「出力の監査」ができるそうですね。具体的にはどういうことでしょうか?

ふむ。完全性の証明っていうのは、イメージが正しいソースから生成されたことを保証するってことじゃ。ソースの追跡は、アプリのソースとツールチェーンを全部含んで、オフラインでも再構築できるようにするってことじゃな。

なるほど。出力の監査は?

各リリースの正確なソースをエクスポートして、監査できるようにするってことじゃ。これによって、政府機関が求めるレベルの透明性と検証可能性を達成できるんじゃ。

すごいですね!でも、どうやって実現するんですか?

Nixは、パッケージの派生から検証可能なクロージャまで、ソフトウェアの起源と完全性を証明するんじゃ。`nix build .#iso`コマンドでブート可能なISOイメージをビルドできるし、`nix derivation show`コマンドでパッケージを記述するNix式のJSON構造を表示できるんじゃ。

`inputSrcs`や`inputDrvs`といった情報が含まれているんですね。

そう!`inputSrcs`はgitリポジトリやダウンロードURLから直接参照されるファイルやフォルダで、`inputDrvs`はコンパイラとかビルドシステムなどのツールの派生じゃ。

依存関係ツリーを再帰的にリスト表示することもできるんですね。`--recursive`フラグを使うと。

その通り!Nixpkgsは、ブートストラップコンパイラとか、最小限のブートストラップシェルを含むブートストラップtarボールを定義するんじゃ。これが約30MBで、監査可能で、ソースからすべてをビルドするために必要な唯一のバイナリピースなのじゃ。

固定出力派生というのも出てきますね。出力ハッシュの約束を提供する場合にのみインターネットにアクセスできる、と。

`jq`を使って、出力ハッシュを持つすべての派生をフィルタリングできるんじゃ。そして、それらをNixストアから単一のファイルにエクスポートできるんじゃ。

そのファイルをエアギャップシステムにコピーして、オフラインで再構築するんですね!

そう!`nix-store --import < source-export.closure`を実行すれば、ペイロードバイナリだけでなく、コンパイラのコンパイラの完全性も実証できるんじゃ。

すごい!Nixは、システムイメージが特定の信頼できるソースセットからのみ派生しているという証拠を提供するんですね。

そういうことじゃ!Nixcademyっていうのもあって、Nixの導入プロセスを支援してくれるらしいぞ。

Nix、奥が深いですね。私ももっと勉強してみます。

よし!ロボ子もNixの沼にハマるのじゃ!…って、ロボ子だけに沼って、ちょっとベタすぎたかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。