Skip to content
Latchkey

署名キーとは何か?真正性と完全性を証明する

署名キーとは、デジタル署名を生成するために使われる秘密鍵であり、これによって他者はデータが本物であり、改ざんされていないことを検証できます。

署名キーは、非対称鍵ペアの秘密側であり、暗号化のためではなく署名のために使われます。秘密鍵で作成された署名は、公開鍵を持つ誰もが検証でき、データが鍵の保有者から来たものであり、改変されていないことを証明します。CI/CDでは、署名キーはartifact、コンテナイメージ、commitを保護し、サプライチェーンの信頼を支えます。

署名の仕組み

保有者はデータをハッシュ化し、そのハッシュを自身の秘密の署名キーで暗号化して署名を生成します。検証者はハッシュを再計算し、公開鍵を使って署名と照合します。一致すれば、真正性と完全性が同時に証明されます。

署名が証明すること

  • 真正性:データは秘密鍵の保有者から来たものである。
  • 完全性:データは署名以降に変更されていない。
  • 否認防止:署名者は署名したことをもっともらしく否認できない。

CI/CDにおける署名キー

パイプラインはリリースartifact、コンテナイメージ、buildの来歴に署名し、下流の利用者が受け取ったものを検証できるようにします。署名されたcommitとtagにより、レビュアーは変更が信頼できる貢献者から来たことを確認でき、ソフトウェアサプライチェーンを強化します。

秘密鍵の保護

署名キーは、あなたが保持する最も機密性の高いsecretの一つです。それを持つ者は誰でも信頼されたartifactを偽造できます。ハードウェアセキュリティモジュールまたはマネージドキーサービスに保管すべきであり、repoに平文で置いてはならず、スケジュールに沿ってローテーションすべきです。

keyless署名

より新しいアプローチは、長命の秘密鍵に依存するのではなく、workload identity(OIDCを介して)に紐づいた短命の署名証明書を発行します。これにより、OIDCが常設のクラウド認証情報を取り除くのと同じように、常設のキーをパイプラインから取り除きます。

runner上での署名

署名操作はrunner上で実行されます。キーをマネージドサービスに保管し、隔離されたエフェメラルなrunner(Latchkeyのマネージドrunnerなど)を使うことで、ジョブ中の署名材料の露出を制限します。

重要なポイント

  • 署名キーとは、検証可能なデジタル署名を作成するために使われる秘密鍵です。
  • 署名は、artifactの真正性、完全性、否認防止を証明します。
  • 署名キーはハードウェアまたはマネージドサービスで保護するか、keylessなOIDC署名を使いましょう。

関連ガイド