Skip to content
Latchkey

O Que É uma Assinatura Digital? Explicado

Uma assinatura digital usa uma chave privada para assinar dados de modo que qualquer um com a chave pública correspondente possa verificar que os dados são autênticos e inalterados.

Uma assinatura digital é o equivalente criptográfico de um selo à prova de adulteração mais um autor verificado. O signatário usa uma chave privada que só ele possui; qualquer um pode verificar a assinatura com a chave pública correspondente. Isso prova tanto que os dados não foram alterados quanto que vieram de quem possui a chave - o alicerce de commits assinados, releases assinados e segurança da cadeia de suprimentos no CI.

O que é uma assinatura digital

Uma assinatura digital é produzida fazendo hash dos dados e criptografando esse hash com a chave privada do signatário. Verificadores descriptografam a assinatura com a chave pública e a comparam com o próprio hash dos dados. Uma correspondência prova que os dados estão íntegros e foram assinados por quem possui a chave privada.

A criptografia de chave pública por trás disso

Assinaturas dependem de pares de chaves: uma chave privada mantida em segredo e uma chave pública compartilhada livremente. O que a chave privada assina, apenas a chave pública pode verificar, e vice-versa. É essa assimetria que permite que o mundo inteiro verifique uma assinatura enquanto apenas uma parte pode criá-la.

Assinaturas versus HMAC

Um HMAC usa um único segredo compartilhado, então toda parte que pode verificar também pode forjar. Uma assinatura digital usa um par de chaves, então verificadores (com a chave pública) não podem assinar. Isso torna as assinaturas a ferramenta certa para artifacts públicos onde você quer verificação ampla mas um único signatário confiável.

Assinaturas digitais no CI

O CI usa assinaturas para fortalecer a cadeia de suprimentos de software: assinar commits e tags, assinar artifacts de release e imagens de container para que consumidores possam verificar a proveniência, e registrar atestações. Ferramentas de assinatura sem chave permitem que um pipeline assine usando sua identidade OIDC em vez de uma chave privada de longa duração.

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

Nota Latchkey

A assinatura sem chave com cosign se baseia na identidade OIDC do workflow, que funciona igual nos runners Latchkey - então você pode assinar artifacts para proveniência sem armazenar uma chave privada de assinatura como secret.

Principais conclusões

  • Uma assinatura digital assina dados com uma chave privada para que qualquer um com a chave pública possa verificá-la.
  • Ela prova tanto integridade quanto autenticidade, ao contrário de um hash simples, e ao contrário do HMAC usa um par de chaves.
  • O CI assina commits, releases e imagens para proveniência da cadeia de suprimentos, muitas vezes sem chave via OIDC.

Guias relacionados