Basicamente, uma função hash (como o SHA512) usa uma entrada de tamanho variável (que pode ser mais curta, mais ou o mesmo comprimento que o hash de saída, e que pode ou não ter um tamanho máximo ditado pela maneira como a função hash funciona), e através de uma variedade de etapas usa essa entrada para alterar o estado interno da função hash em um previsível (< em> determinística ). No outro extremo, quando não há mais entrada, a (ou alguma parte do) estado interno da função hash é lida, possivelmente processada de alguma forma, e entregue como saída da função hash. Essa saída é chamada de "hash" dos dados de entrada.
Uma função hash é projetada como uma função unidirecional , também conhecida como porta-armadilha Em outras palavras, ele é projetado de tal forma que é fácil calcular a saída dada a entrada, mas deve ser inviável calcular a entrada dada a saída, mesmo nos casos em que a entrada é menor que ou a mesmo tamanho da saída.
O hash de saída é de tamanho fixo basicamente porque o tamanho do estado interno da função hash (e o resultado do pós-processamento desse estado para saída) é conhecido. O tamanho exato do hash de saída é escolhido para ser um bom ajuste para os internos da função hash e para fornecer o nível desejado de segurança. Algumas funções hash, como MD5, RIPEMD160 ou SHA-1, possuem uma saída de tamanho fixo; outras, como SHA-2 ou SHA-3, podem fornecer saídas de comprimentos diferentes dependendo das necessidades específicas do sistema usando a função hash.
É possível (e até provável) que duas entradas diferentes para uma função hash produzam o mesmo hash de saída. Para um hash com n bits de saída e para duas entradas aleatórias, isso acontecerá em média depois de tentar duas combinações n / 2 , e é garantido que aconteça quando você tentar 2 n +1 entradas diferentes: no pior (ou melhor) caso, cada uma das entradas 2 n dará uma saída única de o conjunto de 2 n saídas possíveis, portanto, se você tentar mais uma entrada, ela deverá corresponder a uma das saídas já computadas. Isso é chamado de uma colisão de hash . O objetivo de uma função hash criptográfica, como a família de hashes SHA, não é tornar essas colisões impossíveis (sem expandir o hash para o tamanho total da entrada, o que nega o ponto do hash , isso é matematicamente impossível), mas sim fazer com que ache essas entradas extremamente difíceis.
Uma função hash que permite encontrar colisões significativamente mais rápidas que 2 n / 2 a 2 n operações (dependendo do método exato de ataque Primeiramente, procure o chamado preimage e aniversário ataques se você quiser saber mais sobre isso) é geralmente considerado quebrado para aplicativos criptográficos. É por isso que o SHA-1 começou sua busca por desaprovação em navegadores da web para certificados TLS em 2014, depois de um ataque teoricamente viável ficou conhecido em 2012 e por que O antigo MD5 é considerado horrivelmente quebrado para quase todas as aplicações criptográficas.
Também é importante ter em mente que a saída de uma função hash, como SHA512, não é a cadeia hexadecimal que você mostra na sua pergunta. Isso é uma representação do hash real, que é apenas um valor binário de 64 bytes (512 bits). Poderia também ser armazenado em formato binário, na forma codificada em Base64 ou em alguma outra representação.