Tópicos
Preâmbulo
A segurança de técnicas criptográficas, em alguns casos, depende do bom funcionamento e garantia de funções que operam apenas num sentido.
Definição de uma função One-Way
A function is one-way when, given some element , it is easy to compute , but giving any in the range of , is very difficult to find some such that (a pseudo-inverse of ).
A existência de funções One-Way depende, também, da “não resolução” do problema 1.
Funções de Hash
São um exemplo mais concreto de funções One-Way. Estas, transformam um número arbitrário de bits num range de tamanho fixo. No entanto, colisões podem ocorrer, com uma certa probabilidade, que depende do espaço amostral do contradomínio.
Exemplos de funções de hash
- MD5 - broken
- SHA-1 - broken
- SHA-2 - SHA-1 com segurança acrescida
- SHA-3 - design um pouco diferente do SHA-2
- …
Aplicações de funções de hash
- Message Authentication Codes (MAC)
- Key-Derivation Functions (KDF)
- Geradores pseudo-aleatórios seguros
- Block Ciphers
- …
Message Authentication Codes (MAC)
Pretendem resolver o problema da não-garantia de integridade por parte das funções de hash. O código gerado é baseado num segredo secreto que apenas as partes legítimas (remetente e destinatário) conhecem.
Exemplos de algoritmos
HMAC
Construção de um MAC a partir de uma função de hash. Neste caso, até são performadas duas passagens pela função, de forma a evitar ataques de length extension2.
Nota sobre a utilização conjunta com o SHA-3
By design, o SHA-3 não é vulnerável a ataques de length extension. Ou seja, a utilização de HMAC nesse caso é redundante.
Key-Derivation Functions (KDF)
Permitem a derivação de chaves a partir de material criptográfico secreto. Por exemplo, derivar uma chave a partir de uma password ou passphrase ou até mesmo de um master secret acordado a partir de um protocolo de handshaking.
É ainda interessante pensar em KDFs como uma forma de derivar várias chaves diferentes a partir de um mesmo segredo criptográfico. Cumprindo assim o princípio de que uma chave só deve ser usada para um e um só princípio.
Password-Based
Derivação a partir de passwords.
Problemas
- Baixa entropia
- Vulnerável a ataques de enumeração
Para minimizar os tais problemas, deve ser utilizado um salt. Um número aleatório que randomiza o output da função One-Way.
Exemplos
Proteção de passwords
Passwords não devem ser guardadas em plaintext numa base de dados. Devem, para isso, ser utilizados algoritmos de hashing criptográfico. Por exemplo, argon2 ou bcrypt.
Referências
Hashing Algorithms and Security - Computerphile Securing Stream Ciphers (HMAC) - Computerphile
Footnotes
-
Consultar P versus NP problem - Wikipedia. ↩
-
Consultar Length extension attack. ↩