É fácil projetar um algoritmo de hash escalonável em vários núcleos, mas os algoritmos de hash mais conhecidos tendem a ser projetados especificamente para evitar isso, para que tarefas como encontrar colisões de hash sejam feitas o mais lentas possível. / p>
As funções de hashing que não forçam o processamento em série podem ser adequadas para você, mas isso depende das propriedades que você espera de sua função hash. Como tal, não acho que você tenha dado informações suficientes para uma boa recomendação a ser feita.
Como outros sugeriram, você pode construir uma função hash como o hash dos hashes concatenados de cada um dos blocos de um determinado tamanho no original. Contanto que o tamanho do bloco seja grande o suficiente para dificultar a reversão dos hashes de blocos individuais, é provável que isso funcione bem o suficiente para a maioria dos propósitos. Quão grande isso deve ser depende de quão previsível é o conteúdo desses blocos. Se você puder estimar a entropia e escolher um tamanho de bloco de modo que obtenha 128+ bits de entropia por bloco, isso deve ser suficiente para a maioria dos propósitos (e um exagero para muitos, onde a segurança não é a principal preocupação).
Do ponto de vista da segurança, você está preocupado com o grau de entropia no nível do bloco, pois encontrar uma colisão para um único bloco é suficiente para permitir que um ator mal-intencionado substitua parte do conteúdo e obtenha a mesma final. hash.
Talvez seja interessante notar que ter um tamanho de bloco fixo significa que a principal fraqueza dos MD5s é irrelevante - o hacker não pode anexar dados extras ao bloco.
Se as suas necessidades são sobre a prevenção de colisões de hash ocorrendo naturalmente em vez de colisões maliciosas, você pode, sem dúvida, usar uma função de soma de verificação muito mais rápida. Os hashes criptograficamente seguros geralmente são projetados para serem lentos para calcular.
Uma função do grupo de funções skein usando o modo de árvore hash opcional pode ser adequada para você. Então, novamente, CRC32 pode ser tudo que você precisa.