provenance とは? - artifact がどこから来たかを証明する
provenance とは、artifact がどう build されたか、つまりどのソースから、どのプロセスで、どのプラットフォーム上で、いつ build されたかを記録する、改ざんが検出可能なメタデータです。
build artifact をダウンロードするとき、それが本当に信頼するソースから来たもので、途中ですり替えられていないと、どうやって分かるでしょうか。provenance がそれに答えます。それは build の署名済み記録です。入力、builder、commit、ステップ。provenance があれば、artifact の出所を鵜呑みにするのではなく検証できます。
provenance が記録するもの
- build が使用したソースリポジトリと正確な commit。
- build プラットフォームと builder の識別情報。
- 実行された build ステップまたはレシピ。
- タイムスタンプと、生成された artifact への参照。
なぜ署名される必要があるのか
署名されていないメタデータは、攻撃者が偽造できる単なる主張にすぎません。provenance は build プラットフォームによって署名されるため、消費者はそれが改変されていないこと、そしてそれが名指しする builder から本当に来たことを検証できます。
in-toto 標準
provenance は一般に in-toto attestation 形式を用いて表現されます。これは「この builder が、これらの入力から、この artifact を生成した」という標準的な構造です。形式を標準化することで、検証ツールは準拠したどのプラットフォームからでも provenance を取り込めます。
provenance を検証する
消費者(またはデプロイの gate)は、artifact が provenance を持つこと、署名が有効であること、記録されたソースと builder が期待どおりであることを確認します。不一致、または provenance の欠如は、その artifact を拒否する理由になります。
CI で生成する
build プラットフォームは、artifact が生成されるにつれて provenance を生成し、主張されたレシピではなく実際の入力を捕捉します。強化され分離された builder が、その provenance を信頼できるものにします。攻撃者には、それが記述する build を改ざんする機会がなかったからです。
重要なポイント
- provenance は、artifact がどう build されたかを正確に記述する署名済みメタデータである。
- ソース、commit、builder、ステップを記録し、出所を検証できるようにする。
- in-toto 形式がそれを標準化し、署名がそれを改ざん検出可能にする。