Português (Brasil)

Ferramentas para desenvolvedores · SHA calculadora de hash

Endereçamento de conteúdo: como Git, Docker e npm usam resumos SHA como nomes

· Fundo

sha-256 janela de encaixe criptografia fluxo de trabalho do desenvolvedor

Commits do Git, camadas do Docker e hashes de pacotes endereçados por seus resumos SHA-256
Ilustração vetorial original ToolAcre

Commits do Git, resumos de imagens de contêiner e strings de integridade de lockfile têm a mesma ideia: nomear dados por seu hash. Este post explica o endereçamento de conteúdo e o que cada ecossistema ganha com isso.

O sha256: no seu docker pull — o que é essa string e por que ela nunca muda para a mesma imagem

Sistemas de controle de versão, tempos de execução de contêineres e gerenciadores de pacotes usam a mesma ideia de nomenclatura: um arquivo ou uma coleção de bytes é nomeado por seu resumo SHA. No Git, o identificador 40-character SHA-1 de um commit (ou 64-character SHA-256 em repositórios modernos) é calculado a partir do conteúdo do commit - a árvore, autor, carimbo de data/hora e mensagem. Altere um único byte e SHA muda. No Docker, cada resumo da camada é um hash SHA-256 do conteúdo da camada, e o resumo da imagem é calculado a partir do manifesto. No npm e em outros gerenciadores de pacotes, os campos de integridade armazenam resumos SHA-512 de tarballs para verificar downloads. Endereçamento de conteúdo significa que o nome depende apenas dos bytes, não de um banco de dados central ou carimbo de data/hora.

O benefício é a imutabilidade dentro de cada sistema. Um git commit SHA-256:abc... sempre se referirá à mesma árvore e mensagem porque o hash determina a identidade. Se alguém afirma ter um commit diferente com o mesmo SHA, está alegando que os mesmos bytes produzem dois hashes diferentes, o que quebra a criptografia. A desduplicação torna-se automática: dois arquivos com bytes idênticos produzem o mesmo resumo, de modo que os sistemas de armazenamento podem armazenar os bytes uma vez e referenciá-los duas vezes. A verificação de integridade torna-se tão simples quanto recalcular o resumo e comparar: se os bytes foram modificados em trânsito ou em repouso, o resumo não corresponde mais.

Nomeando dados por seu hash – a ideia de endereçamento de conteúdo e por que ele torna a desduplicação e a integridade livres

O Git armazena objetos – commits, árvores, blobs e tags – codificados por seu resumo SHA. O comando `git cat-file` pega um ID de objeto e recupera os bytes. O armazenamento de objetos é endereçado ao conteúdo: você solicita por resumo, não por local ou nome. Quando você clona um repositório, o git verifica cada objeto recalculando seu resumo e verificando o resumo compactado na transferência. A transição de SHA-1 para SHA-256 é gradual; repositórios podem suportar ambos para compatibilidade. O formato em disco armazena tipo de objeto, tamanho e bytes compactados. O resumo é calculado na forma canônica não compactada.

Os repositórios Git modernos podem usar SHA-256, e a transição está em andamento porque as colisões SHA-1 agora são práticas (demonstradas em 2017 e refinadas em 2020). Um commit em um repositório usando SHA-256 tem um identificador hexadecimal de 64 caracteres em vez de 40. O comando `git hash-object` calcula o SHA de um blob (conteúdo do arquivo) sem armazená-lo; `git commit-tree` calcula o SHA de uma estrutura de árvore e mensagem. Ambas as operações são determinísticas: os mesmos bytes sempre produzem o mesmo resumo. É assim que o GitHub e outras forjas podem exibir SHAs de commit de forma consistente – eles calculam o mesmo resumo que o clone do autor calculou.

Git usa objetos endereçados a conteúdo e esta ferramenta pode reproduzir resumos de texto; detalhes da migração exigem fontes específicas do Git

As imagens Docker são construídas em camadas, onde cada camada é um delta do sistema de arquivos (alterações da camada anterior). A especificação de imagem OCI define como calcular o resumo de uma camada e o resumo do manifesto da imagem. O resumo da camada é o SHA-256 do arquivo tar compactado que contém os arquivos da camada. O manifesto é um documento JSON que lista camadas, seus resumos e metadados. O resumo da imagem é o SHA-256 do próprio manifesto JSON. Quando você extrai uma imagem usando uma tag como `latest`, o registro procura a tag e retorna o resumo do manifesto. Você pode então extrair o resumo diretamente, garantindo que você obtenha exatamente os mesmos bytes – todas as camadas e metadados – sempre.

O comando `docker inspect` em uma imagem local mostra seu resumo. Executar a mesma imagem a partir da mesma tag em duas máquinas produz o mesmo resumo se o registro ainda contiver essa tag apontando para o mesmo manifesto. O endereçamento de conteúdo torna as cadeias de fornecimento de imagens auditáveis: um pipeline CI/CD pode verificar se a imagem implantada corresponde ao resumo no log de construção, e um scanner de segurança pode relatar todas as imagens conhecidas por terem uma vulnerabilidade específica por seu resumo, em vez de por tag, que pode ser movida.

Contêineres — OCI manifestos e resumos de camadas e por que uma tag pode ser movida, mas um resumo não

Os gerenciadores de pacotes usam resumos para verificar os downloads contra adulteração ou corrupção. No npm, o arquivo `package-lock.json` inclui um campo `integrity` para cada dependência, contendo um hash (geralmente SHA-512) e a codificação (geralmente base64). Quando o npm baixa um tarball, ele recalcula o hash e compara. Se os hashes não corresponderem, a instalação falhará. Go usa um arquivo `go.sum` com estrutura semelhante: caminho do módulo, versão e SHA-256 da origem do módulo. Cargo usa somas de verificação em `Cargo.lock`. O princípio é idêntico: o resumo é calculado uma vez quando a dependência é resolvida pela primeira vez e verificado em cada instalação subsequente.

A verificação de integridade não requer o upload do pacote para uma autoridade de assinatura ou o armazenamento de assinaturas separadamente. O resumo É a verificação de integridade. Para garantia máxima, os projetos usam `go.sum` que é assinado pelo sistema de transparência do projeto Go, ou integridade npm combinada com outras verificações, mas o caso base é simples: o editor calcula o resumo uma vez, registra-o no arquivo de bloqueio e as ferramentas do lado do consumidor verificam se os bytes baixados correspondem.

As codificações de integridade do pacote variam; apenas as saídas SHA suportadas por esta calculadora são declaradas aqui

Os mesmos bytes através do mesmo algoritmo sempre produzem o mesmo resumo, independentemente de onde os bytes vêm. A construção local de um commit por um desenvolvedor produz o mesmo SHA-256 que um sistema CI/CD verificando a mesma revisão do mesmo repositório. Essa reprodutibilidade é a razão pela qual o endereçamento de conteúdo funciona: você pode verificar um artefato sem confiar no mecanismo de entrega. O resumo se torna um compromisso criptográfico: alterar apenas um byte o invalida.

Distribuir o resumo separadamente (antes de distribuir o artefato) protege contra modificações em andamento. Uma página da web publicada antes do lançamento pode exibir "expect SHA-256:abc..." e então os usuários podem verificar os downloads nela. Um commit git publicado em um repositório público é um compromisso com os bytes; o resumo prova isso.

Exemplo resolvido - seguindo um blob de bytes para digerir até o nome que uma ferramenta usa para ele

Diferentes sistemas codificam seus resumos de maneira diferente. O Git usa hexadecimal minúsculo por padrão (40 ou 64 caracteres hexadecimais). Docker usa o formato `sha256:` seguido de hexadecimal. npm e Go usam base64 em campos de integridade. Os bytes são iguais; apenas a representação difere. Um resumo SHA-256 sobre "abc" é sempre o mesmo 256 bits, mas você pode vê-lo como uma string hexadecimal de 64 caracteres, uma string base64 de 44 caracteres ou um rótulo como `sha256:` seguido por qualquer um deles. A conversão entre codificações é sem perdas; o resumo tem o mesmo valor em todas as representações.

Compreender a codificação é importante ao comparar resumos entre ferramentas. Se o Git imprimir um resumo hexadecimal e uma ferramenta mostrar base64, você deverá converter uma representação na outra para verificar se elas correspondem. A calculadora de hash SHA de ToolAcre exibe hexadecimal e base64 para cada resumo, facilitando a conversão ou referência cruzada com outros sistemas.

O que isso não cobre — as codificações específicas que cada ferramenta usa (hex versus base64), abordadas em uma postagem separada

O endereçamento de conteúdo não é específico da criptografia, embora os hashes criptográficos o tornem seguro. Uma soma de verificação CRC32 também endereça dados de conteúdo, mas colisões CRC32 são comuns e podem ser fabricadas; este repositório não marca SHA-256 como quebrado, enquanto CRC32 não é oferecido como uma primitiva de integridade adversária. A escolha do algoritmo hash é importante para a segurança: SHA-256 é o padrão moderno para sistemas que precisam de proteção de integridade contra adversários. SHA-1 é apenas legado (Git e outros estão migrando). Escolher o algoritmo certo é uma decisão separada da escolha do endereçamento de conteúdo como esquema de nomenclatura.

O endereçamento de conteúdo combinado com hashes criptográficos é a base da integridade da cadeia de suprimentos em software moderno. Cada pacote que você instala, cada contêiner que você executa e cada commit que você verifica podem ser verificados como sendo os bytes pretendidos pelo editor original, sem depender de transferência segura (embora a transferência segura ainda seja uma boa prática).

Conclusão: o hash é a identidade - a calculadora de hash ToolAcre SHA permite calcular os mesmos resumos dos quais esses sistemas dependem

O endereçamento do conteúdo é independente da codificação, do local de armazenamento ou do mecanismo de transferência. Os mesmos bytes produzem o mesmo resumo, seja armazenado localmente, em um CDN, em um registro ou transmitido por HTTP ou HTTPS seguro. O resumo é um compromisso criptográfico com os bytes, e sua verificação requer apenas os bytes e o algoritmo, e não qualquer serviço externo. É por isso que o endereçamento de conteúdo permite a verificação offline: você pode baixar um arquivo por meio de um canal não confiável, verificar o resumo e saber se os bytes são autênticos.

A calculadora de hash ToolAcre SHA permite calcular os mesmos resumos dos quais esses sistemas dependem. Cole uma string ou observe um arquivo, execute a calculadora e veja os resumos SHA-256, SHA-384 e SHA-512 que Docker, Git, npm e outras ferramentas usam internamente. Compare seu resumo computado com o da fonte original para verificar se os bytes não foram modificados. A calculadora faz hash do texto UTF-8 que você cola; ele não faz hash de arquivos ou material de chave, portanto, o limite entre o que pode ser hash (entrada de texto) e o que não pode (arquivos binários, chaves criptográficas em suas formas codificadas) é claro e documentado.