Skip to content
Latchkey

デジタル署名とは?解説

デジタル署名は秘密鍵を使ってデータに署名し、対応する公開鍵を持つ誰もがそのデータが本物で改変されていないことを検証できるようにします。

デジタル署名は、改ざんが分かる封印に検証済みの作者を加えたものの暗号学的な等価物です。署名者は自分だけが持つ秘密鍵を使い、誰もが対応する公開鍵で署名を検証できます。これはデータが変更されていないことと、鍵を持つ者から来たことの両方を証明します。署名済みコミット、署名済みリリース、そして CI におけるサプライチェーンセキュリティの基礎です。

デジタル署名とは何か

デジタル署名は、データをハッシュし、そのハッシュを署名者の秘密鍵で暗号化することで生成されます。検証者は公開鍵で署名を復号し、自分自身のデータのハッシュと比較します。一致すれば、データが無傷であり秘密鍵の保持者によって署名されたことが証明されます。

その背後にある公開鍵暗号

署名は鍵ペアに依存します。秘密に保たれる秘密鍵と、自由に共有される公開鍵です。秘密鍵が署名したものは公開鍵だけが検証でき、その逆も同様です。この非対称性こそが、ただ一者だけが署名を作成できる一方で全世界がそれを検証できるようにするものです。

署名と HMAC

HMAC は 1 つの共有秘密を使うため、検証できるすべての当事者が偽造もできます。デジタル署名は鍵ペアを使うため、検証者は(公開鍵を持っていても)署名できません。これにより署名は、広範な検証を望みつつ信頼できる署名者は 1 人にしたい公開 artifact に適したツールになります。

CI におけるデジタル署名

CI はソフトウェアサプライチェーンを強化するために署名を使います。コミットやタグへの署名、消費者がプロベナンスを検証できるようリリース artifact やコンテナイメージへの署名、そして attestation の記録です。鍵なし署名ツールは、パイプラインが長命な秘密鍵の代わりにその OIDC アイデンティティを使って署名できるようにします。

Signing an artifact in a pipeline
# Sign a container image in CI with cosign (keyless)
steps:
  - run: cosign sign --yes \
      ghcr.io/acme/app@sha256:abc123...def

Latchkey に関する注記

cosign による鍵なし署名は workflow の OIDC アイデンティティに依存し、これは Latchkey runner でも同じように機能します。そのため、署名用の秘密鍵を secret として保存することなく、プロベナンスのために artifact に署名できます。

重要なポイント

  • デジタル署名は秘密鍵でデータに署名し、公開鍵を持つ誰もがそれを検証できるようにします。
  • 単純なハッシュとは異なり整合性と真正性の両方を証明し、HMAC とは異なり鍵ペアを使います。
  • CI はサプライチェーンのプロベナンスのためにコミット、リリース、イメージに署名し、多くの場合 OIDC 経由で鍵なしに行います。

関連ガイド