keyless署名とは?鍵を管理せずに署名する
keyless署名は、あなたのアイデンティティに紐づいた短命の証明書を使って有効な署名を生成するため、保存・保護・紛失を気にする長期間有効な秘密鍵が存在しません。
「keyless」という言葉は少し誤解を招きます。鍵は依然として存在しますが、ほんの一瞬だけです。keyless署名は新しい署名鍵を生成し、認証されたアイデンティティに紐づいた証明書を取得し、署名し、鍵を破棄します。誰が署名したかの証拠は、永遠に保護しなければならない金庫ではなく、証明書と透明性ログの中に存在します。
長期間有効な鍵の問題
従来の署名鍵は、何年もの間、生成し、安全に保存し、バックアップし、決して漏らしてはなりません。もし漏洩すれば、それがこれまで行ったすべての署名が疑わしくなり、ローテーションは破壊的です。長期間有効な鍵は常に存在するリスクです。
keylessがそれを回避する方法
- 既存のアイデンティティ(OIDCトークン)で認証する。
- CAが数分間だけ有効な証明書を発行する。
- エフェメラルな鍵を生成し、署名し、破棄する。
- 署名と証明書を公開ログに記録する。
信頼の源
検証は保存された公開鍵を認識することに依存しません。証明書(どのアイデンティティが署名したかを証明する)と透明性ログ(署名が存在したことを証明する)に依存します。信頼は「この鍵を守れ」から「このアイデンティティとこのログを信頼せよ」へと移ります。
なぜCIが最も恩恵を受けるのか
CIはまさに長期間有効な鍵が最もリスクの高い場所です。多くのjob、多くの人、大量の自動化があります。keyless署名により、パイプラインはworkload identityを使って署名でき、漏洩する永続的なものが何もありません。だからこそSigstoreのようなプロジェクトがそれを中心に構築されたのです。
アイデンティティは信頼できるものでなければならない
keyless署名はその背後にあるアイデンティティと同じだけの強度しかありません。パイプラインが提示するOIDCトークンは、信頼された隔離されたbuild環境によって発行されなければなりません。そうでなければ、攻撃者がbuilderになりすまして悪意あるアーティファクトに署名する可能性があります。
重要なポイント
- keyless署名は保存された鍵の代わりに短命でアイデンティティに紐づいた証明書を使います。
- 信頼は鍵を守ることから、アイデンティティと透明性ログを検証することへ移ります。
- 自動化されたCIパイプラインで署名する際の最大のリスクを取り除きます。