Hashing
Quando precisamos que algo seja transformado em um valor de tamanho fixo e que seja impossível retornar para seu conteúdo original, utilizamos hashing
.
Os algs que costumamos ver são MD5
, SHA256
e BCRYPT
. Cada um com seu objetivo específico.
A característica principal do hashing é que ele gera um valor completamente diferente se um único byte mudar, veja:
echo "Teste123" | shasum
091cba669fa3f9068ea9c558739e98f38d826e55
echo "TestE123" | shasum
79d38f274b5fab8f5afd5faaa3dfa14df3fb6f3b
Os casos mais comuns que temos aqui são armazenamento de senhas
e digest para verificação de integridade
.
Explicando cada um deles:
Armazenamento de Senhas
Ao armazenar senhas no banco de dados, devemos utilizar algorítmos fortes de hashing.
O indicado é utilizar BCRYPT
ou ARGON2
.
Estes algs tem uma característica importante: você não precisa armazenar separadamente o SALT
.
const argon2 = require('argon2');
(async () => {
const password = "M1P@ssW0rd!";
const hash = await argon2.hash(password);
console.log('=== HASH ===')
console.log(hash);
const match = await argon2.verify(hash, password);
console.log('\n=== MATCH ===')
console.log(match);
})()
=== HASH ===
$argon2id$v=19$m=65536,t=3,p=4$ae/dgN/3ETmdxEIKMPiCyw$JMVpje5uNrovinHBi+JuyNc/AOA6N7KZDVXh0vZei7Q
=== MATCH ===
true
Digest para verificação de integridade
Quando baixamos algum software ou instalamos algum pacote, você já deve ter visto que eles tem um checksum
, não?
Como exemplo, vamos pegar as instruções de instalação do Passbolt:
wget "https://raw.githubusercontent.com/passbolt/passbolt_docker/master/docker-compose/docker-compose-ce.yaml"
[ "$(sha256sum docker-compose-ce.yaml | awk '{print $1}')" = "3ff1cb219ae028293ba29f808d0ed17695aeb69a3baa9399194c214881f6409e" ] && echo "Checksum OK" || (echo "Bad checksum. Aborting" && rm -f docker-compose-ce.yaml)
docker-compose -f docker-compose-ce.yaml up -d
Agora presta atenção em duas partes:
sha256sum docker-compose-ce.yaml
3ff1cb219ae028293ba29f808d0ed17695aeb69a3baa9399194c214881f6409e
O que está sendo feito aqui é gerar um hash usando sha256 do conteúdo do arquivo docker-compose-ce.yaml
e comparando com um valor fixo.
Mas qual o motivo disso ter sido feito?
Vou te responder isso com outra pergunta: como saber se o software que você está baixando ou executando é oficial e não uma versão maliciosa alterada?
O fabricante fornecerá o software e também o hash, assim você poderá garantir que é o mesmo ao baixar.
Last updated