Criptografia 01: Hash256 - Para que serve?
Entenda como funções de hash garantem a integridade dos dados na internet
Sem entender essas funções simples, você não entenderá muitas coisas relacionadas a segurança, criptografia e integridade de dados na internet. Só para dar alguns exemplos: Essa função é usada na formação do JWT (Json Web Token), é usada também nas assinaturas de pares de chaves asíncronas dentre outras. Neste post iremos entender como ela funciona e sua importância na comunicação em toda a internet.
HS256
Hash256 (HS256) é uma função (algorítmo) que transforma qualquer conteúdo, não importa o tamanho, em um código (hash) de 256bits. Essa propriedade é muito importante e útil em vários cenários da programação, como iremos ver a seguir.
Características
1. Determinístico
Funções de hash são determinísticas. Hashes (códigos) do mesmo contéudo geram sempre o mesmo resultado, ou seja, o mesmo hash independente de quantas vezes ela é executada.
Ex:
{"conteudo": "abc"}
gera:eyJjb250ZXVkbyI6ImFiYyJ9
{"conteudo": "abcdef"}
gera:eyJjb250ZXVkbyI6ImFiY2RlZiJ9
Os resultados [eyJjb250ZXVkbyI6ImFiYyJ9] e [eyJjb250ZXVkbyI6ImFiY2RlZiJ9] são únicos, ou seja, não se repetem, porém serão sempre iguais para o mesmo conteúdo. Essa caracteristica nos vai ser muito útil quando estivermos falando de assinaturas no JWT ou no processo de handshake do protocolo de comunicação segura https. Se quiser saber ou entender melhor como gerei esses hashes, acesse o site JSON Web Tokens e faça o teste você mesmo.
2. Facilmente testáveis
Funções de hash ou os tipos de algorítmo de hash, por serem determinísticos, podem ser facilmente verificadas, caso você queira saber/descobrir, se esta codificando com a função de hash correta. Para isso basta usar um vetor vazio. Mas o que é um vetor vazio? Um vetor vazio nada mais é do que uma string vazia, ou seja, isso aqui:
“ “
3. Reduzem tamanho e ofuscam conteúdo
Outra caracteristica legal, além de ofuscarem o conteúdo por transformarem os mesmos em uma salada de letras e números, é que elas reduzem o tamanho do payload (conteúdo ou mensagem a ser transmitido) o que permite uma transferência de dandos mais eficazes/rápidas por serem menores.
Para que serve?
Garantir a integridade. Funções de hash são usadas em assinaturas e certificados digitais para comprovar a integridade dos dados e ter certeza que eles não foram alterados no meio do caminho por nenhum hacker ou pessoa mal intencionada. Como essa integridade é garantida, iremos ver nos próximos posts desta série. No final deste post, você terá a oportunidade de se inscrever neste techblog, para não perder as próximas publicações. Continue lendo!
Onde precisarei usar?
Um exemplo prático e bem comum onde precisei entender e usar uma função de hash SHA512, foi quando precisei implementar um request para a API da bittrex, onde constava que eu teria que popular um campo do header (campo específico em quma requisição http) com o hash do body (conteúdo a ser transmitido) e que se não existisse body, deveriamos usar um hash de uma string vazia. A seguir o trecho da descrição da API:
Api-Content-Hash
Populate this header with a SHA512 hash of the request body, Hex-encoded. If there is no request body, populate this header with a SHA512 hash of an empty string. This is the correct value of the content hash for any request with no body: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
Outros casos de uso comuns
São usadas, como no exemplo acima, em requisições https, fazem parte integral do processo de envelopamento do JWT (Json Web Token) que veremos mais pra frente com mais detalhes e estão presentes no processo de assinatura de mensagens usando chaves públicas / privadas, que também veremos mais para frente. Sem esse entendimento, seria muito mais difícil entender como as mesmas funcionam.
Quer mais conteúdo assim?
Me siga, se você gosta desse tipo de conteúdo técnico didático e feito com muito carinho. ❤️
Você me encontra no 🐦twitter, 🦑 Github ou no 📺 Youtube onde tenho um curso gratuito “Do zero ao certificado Android”, outro chamado “Resoluções a problemas comuns Android” e Android Jetpack Compose disponíveis 0800 para você.
Para não perder nenhum conteúdo, inscreva-se nesse techblog clicando aqui:
Muito bom Ricardo, naquele 'padrão' de sempre, simples e objetivo.