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.
# Sign a container image in CI with cosign (keyless)
steps:
- run: cosign sign --yes \
ghcr.io/acme/app@sha256:abc123...defNota 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.