TL

サプライチェーンの完全性(SBOM・Sigstore・SLSA)

成果物が『誰がどのソースからどう作ったか』を機械検証できる体制を作れます。SBOM・Sigstore の keyless 署名・透明性ログ・SLSA の来歴を原理から押さえ、依存攻撃を多層で止められます。

応用サプライチェーンSBOMSigstoreSLSAin-toto署名最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.SBOM は成果物の構成部品表で、依存と推移的依存を機械可読に列挙する。脆弱性公表時に影響有無を秒で判定でき、SPDX・CycloneDX が二大フォーマット。SBOM 自体に署名と来歴を結びつけて初めて『信頼できる部品表』になる。
  • 2.Sigstore は keyless 署名。OIDC ID トークンで身元を確認し、Fulcio が有効期間数分の短命証明書を発行、署名と証明書を Rekor(追記専用 Merkle ログ)に記録する。鍵の長期保管が不要になり、署名は『誰が・いつ・何に』を透明性ログで後から監査できる。
  • 3.in-toto/SLSA はビルドの来歴(provenance)を保証する枠組み。SLSA レベルは出所記述からビルドの隔離・改ざん耐性まで段階化し、in-toto attestation でソース・ビルダー・成果物の対応を署名付き宣言として残す。SBOM・署名・来歴を束ねて検証ポリシーで強制するのが多層防御の核。

「出所を証明できる成果物」を組み立てる

サプライチェーン攻撃 の本質は、自社コードではなく「信頼して取り込む調達過程」が汚染源になる点にあります。だから防御の目標は、配布される成果物(バイナリ・コンテナイメージ・パッケージ)について「何で出来ているか・誰が・どのソースから・どう作ったか」を、受け取り側が機械的に検証できる状態にすることです。ここで噛み合う三つの部品が、構成を記す SBOM、改ざん不能に署名する Sigstore、ビルド経緯を保証する SLSA / in-toto です。これらは別々の規格ですが、最終的には「成果物 → 署名 → 来歴 → 構成部品」を一本の検証可能な鎖にまとめ、取り込み前にポリシーで強制するために組み合わされます。

SBOM:成果物の機械可読な部品表

SBOM(Software Bill of Materials) は、成果物に含まれる全コンポーネントを、名前・バージョン・一意識別子つきで列挙した部品表です。人間向けの一覧ではなく、ツールで突き合わせられる機械可読である点が要です。各コンポーネントは purl(package URL、例 pkg:npm/left-pad@1.3.0)CPE で識別され、脆弱性データベース(CVE/OSV)と照合できます。新しい脆弱性が公表された瞬間に「自分の成果物が影響を受けるか」を、棚卸しではなくクエリ一発で判定できるのが最大の利得です。

二大フォーマットが SPDX(ISO/IEC 5962、ライセンス管理由来)CycloneDX(OWASP、セキュリティ由来) です。重要なのは依存の深さで、直接依存だけでなく推移的依存まで列挙して初めて意味を持ちます。

SBOM は『正しい』だけでは足りない

SBOM はあくまで「この成果物はこの部品で出来ている」という主張にすぎません。誰が作ったか不明な SBOM、改ざんされた SBOM は、汚染を隠す道具になります。SBOM 単体ではなく、署名で発行元を固定し、後述の来歴(provenance)と結びつけて「このビルドが、このソースから、この部品表で生成した」と検証できて初めて信頼に足ります。SBOM・署名・来歴は三点セットで効く、という設計思想が前提です。

Sigstore:鍵を持たない keyless 署名

成果物への署名は完全性の土台ですが、従来方式の弱点は長期の秘密鍵管理でした。鍵が漏れれば全署名が危うく、失効・ローテーションも重い。Sigstore はこれを keyless 署名で解きます。発想は「長期鍵を持たず、その都度ごく短命の証明書を発行する」ことです。

keyless 署名のフロー(概念):

1. 署名者がローカルで一時鍵ペア(ephemeral key)を生成
2. OIDC で身元を証明する ID トークンを取得
   (CI なら GitHub Actions 等のワークロード ID、人なら Google/GitHub アカウント)
3. Fulcio(認証局)へ ID トークン + 公開鍵を提示
   → Fulcio は「この身元(メール/ワークロード)= この公開鍵」を束ねた
     有効期間 約20分 の短命 X.509 証明書を発行
4. その一時鍵で成果物に署名
5. 署名 + 証明書 + 公開鍵を Rekor(透明性ログ)へ記録
6. 一時鍵は破棄してよい(証明書はすぐ失効する)

肝は、秘密鍵を保管しない点です。鍵は署名直後に捨ててよく、証明書は十数分で失効するため、漏れても悪用余地がほとんどありません。「鍵そのもの」ではなく「OIDC で確認した身元」を信頼の起点に置き換えたわけです。証明書チェーンの検証は通常の X.509 チェーン検証 と同じ枠組みで、信頼の根は Fulcio のルート CA になります。

Rekor:署名を消せなくする透明性ログ

短命証明書には弱点があります。署名後すぐ証明書が失効するなら、検証時にはもう有効期間が切れている――これでは検証できません。これを解くのが Rekor(透明性ログ、transparency log) です。

Rekor は 追記専用(append-only)の Merkle 木 ログで、署名・証明書・成果物ハッシュのエントリを記録し、署名がその証明書の有効期間内に行われた事実をタイムスタンプ付きで固定します。検証側は「証明書が今有効か」ではなく「Rekor に載った時刻に有効だったか」を確認します。

検証ロジック(概念):
  Rekor のエントリ = { 成果物ハッシュ, 署名, Fulcio 証明書, 包含証明, 署名時刻 }
  ① 包含証明で「このエントリは確かに Rekor に存在する」を検証
  ② 署名時刻が Fulcio 証明書の有効期間内かを確認
  ③ 証明書の身元(OIDC identity)が期待する署名者かをポリシー照合
  ④ 署名が成果物ハッシュに対し正しいかを暗号検証

Merkle ログなので、運営者でも過去エントリの差し替えができず、一貫性証明で「人によって違う履歴を見せる split-view」も監査で検出できます。結果、「誰が・いつ・どの成果物に署名したか」が消去・改ざん不能な公開記録として残ります。

in-toto と SLSA:ビルドの来歴を保証する

署名は「配布物が改ざんされていない」を保証しますが、「そのビルド自体が正しく行われたか」は別問題です。汚染された CI が綺麗なソースから汚れた成果物を作り、正規署名を付けてしまえば素通りされます。ここを埋めるのが来歴(provenance) で、その枠組みが in-totoSLSA です。

in-toto attestation は、ビルドの各ステップについて「この入力(ソース/依存)から、このビルダーが、この成果物を生成した」という対応関係を、署名付きの宣言(statement) として残す仕組みです。predicate(述語)部分に来歴・SBOM・脆弱性スキャン結果などを差し込め、Sigstore で署名・Rekor 記録するのが典型構成です。

SLSA(Supply-chain Levels for Software Artifacts) は、来歴の厳密さを段階化したフレームワークです。「証明したいか」ではなく「どこまで改ざんしにくいビルドか」を基準にレベルを定めます。

SLSA レベル要求の核心防げる脅威の例
L1来歴(provenance)を生成・添付する出所が一切不明な成果物の混入
L2ホスト型ビルドサービスで来歴に署名するビルド後の成果物・来歴の改ざん
L3ビルドの隔離と来歴の改ざん耐性を確保ビルド環境への侵入・横展開、来歴の偽造

レベルが上がるほど、ビルダーは独立・隔離され(ステップ間で環境を共有しない)、来歴はビルダー自身が署名して人手で改ざんできなくなります。SLSA L3 ともなると、ソースの改ざん・ビルド経路の汚染・来歴の偽造をまとめて潰せます。

来歴が答える問い

来歴(provenance)が証明するのは主に三点です。(1) どのソース(リポジトリ・コミットハッシュ)から、(2) どのビルダー(ビルドプラットフォームの身元)が、(3) どの手順・入力でこの成果物を作ったか。検証側はこれを使い「期待するリポジトリの、信頼するビルダーが作ったものだけを通す」というポリシーを書けます。署名が『すり替えられていない』を、来歴が『正しく作られた』を担保する、という役割分担です。

多層防御として束ねる

各部品は単独でも有効ですが、防御として効くのは鎖としてポリシーで強制したときです。攻撃面ごとに、どの部品が効くかを対応づけます。

攻撃面脅威効く防御
依存の取り込み汚染ライブラリ・typosquatting・既知脆弱性SBOM + OSV 照合、ロックファイルでハッシュ固定
配布経路成果物のすり替えSigstore 署名と Rekor 検証
ビルド環境CI 侵害でビルド時に混入SLSA L3 の隔離ビルド、in-toto 来歴
署名鍵長期鍵の漏洩・悪用keyless 署名(短命証明書 + 透明性ログ)

実務では取り込み(admission)時にこれらを検証ポリシーで強制します。例えば「Rekor に署名があり、来歴のリポジトリが許可リストに入り、SLSA L3 以上で、SBOM に既知 Critical 脆弱性がない成果物だけをデプロイ可」といった具合です。ビルダーの権限を 最小権限 に絞り、シークレット管理 を固めることが、来歴の信頼の前提になります。

検証されない来歴は飾り

SBOM を生成し、署名し、来歴を残す――これらは検証して拒否する側があって初めて意味を持ちます。来歴を作るが誰も照合しない、署名するが検証しない、では攻撃者に「正しく見える書類」を渡すだけです。CI 出口でのポリシー強制(policy enforcement)と、取り込み口での admission 検証をセットにして、初めて『出所を保証する』が運用として成立します。

押さえどころ
  • SBOM = 機械可読な部品表。purl/CPE で識別し OSV/CVE と照合。SPDX と CycloneDX が二大形式。署名・来歴と結んで信頼できる。
  • Sigstore = keyless 署名。OIDC 身元 → Fulcio が短命証明書発行 → 一時鍵で署名 → Rekor に記録。長期鍵を保管しない。
  • Rekor = 追記専用 Merkle 透明性ログ。「署名時刻に証明書が有効だった」を固定し、split-view を監査で検出。
  • in-toto = 署名付き来歴宣言。SLSA = ビルドの改ざん耐性をレベル化(L1 来歴生成 / L2 署名 / L3 隔離・改ざん耐性)。
  • 多層防御の核は、SBOM・署名・来歴を束ねて admission ポリシーで強制すること。検証しない来歴は無意味。

サプライチェーンの完全性を「署名すれば安心」で止めず、SBOM が答える問い・keyless 署名がなぜ鍵を捨てられるのか・透明性ログが何を不能にするか・来歴がビルドの何を保証するかまで分解できると、汚染がどの層で止まるか、なぜ単独の対策では素通りされるかが一本の線でつながります。

セキュリティ Article

サプライチェーンの完全性(SBOM・Sigstore・SLSA)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

サプライチェーン

比較で見る軸

難易度: advanced / カテゴリ: セキュリティ / タグ数: 6

導入後に効く点

Sigstore は keyless 署名。OIDC ID トークンで身元を確認し、Fulcio が有効期間数分の短命証明書を発行、署名と証明書を Rekor(追記専用 Merkle ログ)に記録する。鍵の長期保管が不要になり、署名は『誰が・いつ・何に』を透明性ログで後から監査できる。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
セキュリティ
タグ数
6

判断チェックリスト

  • 自社の用途が「サプライチェーン / SBOM」に近いか確認する。
  • 強みである「SBOM は成果物の構成部品表で、依存と推移的依存を機械可読に列挙する。脆弱性公表時に影響有無を秒で判定でき、SPDX・CycloneDX が二大フォーマット。SBOM 自体に署名と来歴を結びつけて初めて『信頼できる部品表』になる。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

サプライチェーンSBOMSigstoreSLSAin-totoサプライチェーンSBOMSigstore
参考: 公式情報