O Que É uma Função de Hash? Explicado
Uma função de hash mapeia entrada de qualquer tamanho para um valor de tamanho fixo, produzindo deterministicamente a mesma saída para a mesma entrada toda vez.
Uma função de hash é uma máquina de fingerprint de mão única: alimente-a com quaisquer dados e ela retorna um valor curto e de tamanho fixo que representa unicamente esses dados. A mesma entrada sempre gera o mesmo hash, mas você não consegue rodá-la de trás para frente para recuperar a entrada. Funções de hash estão por baixo de checksums, caches, assinaturas e da maior parte da maquinaria de integridade no CI.
O que é uma função de hash
Uma função de hash recebe entrada de tamanho arbitrário e produz uma saída de tamanho fixo chamada digest. É determinística, então entradas idênticas sempre mapeiam para o mesmo digest. Um bom hash distribui as saídas uniformemente, então mesmo uma mudança de um byte na entrada produz um digest radicalmente diferente.
Propriedades dos hashes criptográficos
Funções de hash criptográficas adicionam garantias: são de mão única (você não consegue derivar a entrada a partir do digest), resistentes a colisões (você não consegue encontrar duas entradas com o mesmo digest) e propensas ao efeito avalanche (pequenas mudanças na entrada embaralham totalmente a saída). Essas propriedades as tornam seguras para usos de segurança.
Hashing versus criptografia
Hashing não é criptografia. Criptografia é reversível com uma chave; hashing é deliberadamente de mão única e sem chave. Você faz hash para fazer fingerprint e verificar, não para esconder dados que pretende recuperar. Confundir os dois leva a erros como tentar "descriptografar" um hash, o que é impossível por design.
Funções de hash no CI
O CI usa hashes para chaves de cache (fazer hash do lockfile para que o cache invalide quando as dependências mudarem), endereçamento por conteúdo (identificar artifacts e imagens pelo seu hash) e verificação de integridade (comparar o hash de um download com um valor conhecido). Eles tornam os pipelines mais rápidos e mais confiáveis.
# Hash inputs to build a precise cache key
steps:
- uses: actions/cache@v4
with:
path: .cache
key: build-${{ hashFiles('**/*.lock') }}Nota Latchkey
O caching do Latchkey é endereçado por conteúdo: entradas de cache são chaveadas e validadas fazendo hash de suas entradas, então um cache hit significa que as entradas de fato correspondem - o mesmo princípio de função de hash que mantém builds em cache corretos.
Principais conclusões
- Uma função de hash mapeia deterministicamente qualquer entrada para um digest de tamanho fixo.
- Hashes criptográficos são de mão única, resistentes a colisões e propensos ao efeito avalanche, o que os torna seguros.
- O CI usa hashing para chaves de cache, endereçamento por conteúdo e verificação de integridade.