O cálculo de um hash MD5 exige menos da CPU do que o SHA-1 ou SHA-2 no hardware de laptop x86 "padrão"? Estou interessado em informações gerais, não específicas de um determinado chip.
ATUALIZAÇÃO: No meu caso, estou interessado em calcular o hash de um arquivo. Se o tamanho do arquivo for importante, vamos supor que sejam 300 K.
Respostas:
Sim, o MD5 consome menos CPU. No meu Intel x86 (Core2 Quad Q6600, 2,4 GHz, usando um núcleo), recebo isso no modo de 32 bits:
e isso no modo de 64 bits:
Os números estão em megabytes por segundo, para uma mensagem "longa" (isso é o que você obtém para mensagens com mais de 8 kB). Isto é com sphlib , uma biblioteca de implementações de função hash em C (e Java). Todas as implementações são do mesmo autor (eu) e foram feitas com esforços comparáveis de otimizações; assim, as diferenças de velocidade podem ser consideradas realmente intrínsecas às funções.
Como um ponto de comparação, considere que um disco rígido recente funcionará a cerca de 100 MB / s, e qualquer coisa através de USB vai chegar a menos de 60 MB / s. Embora o SHA-256 pareça "lento" aqui, é rápido o suficiente para a maioria das finalidades.
Observe que OpenSSL inclui uma implementação de 32 bits de SHA-512 que é bastante mais rápida do que meu código (mas não tão rápida quanto o SHA-512 de 64 bits), porque a implementação de OpenSSL está em montagem e usa registros SSE2, algo que não pode ser feito em C. SHA-512 é a única função entre aquelas quatro que se beneficia de uma implementação SSE2.
Edit: em esta página ( arquivo ), pode-se encontrar um relatório sobre a velocidade de muitas funções hash (clique no link "Téléchargez maintenant"). O relatório está em francês, mas está quase todo cheio de tabelas e números, e os números são internacionais. As funções hash implementadas não incluem os candidatos SHA-3 (exceto SHABAL), mas estou trabalhando nisso.
fonte
No meu MacBook Air de 2012 (Intel Core i5-3427U, 2x 1,8 GHz, 2,8 GHz Turbo), SHA-1 é ligeiramente mais rápido do que MD5 (usando OpenSSL no modo de 64 bits):
Atualização: 10 meses depois com OS X 10.9, SHA-1 ficou mais lento na mesma máquina:
Segunda atualização: no OS X 10.10, a velocidade SHA-1 voltou ao nível 10.8:
Terceira atualização: OS X 10.14 com LibreSSL é muito mais rápido (ainda na mesma máquina). SHA-1 ainda sai por cima:
fonte
A verdadeira resposta é: depende
Há alguns fatores a serem considerados, os mais óbvios são: a cpu na qual você está executando esses algoritmos e a implementação dos algoritmos.
Por exemplo, eu e meu amigo executamos exatamente a mesma versão do openssl e obtemos resultados ligeiramente diferentes com processadores Intel Core i7 diferentes.
Meu teste no trabalho com uma CPU Intel (R) Core (TM) i7-2600 @ 3,40 GHz
E o dele com uma CPU Intel (R) Core (TM) i7 920 @ 2,67 GHz
Ambos estamos executando exatamente os mesmos binários do OpenSSL 1.0.1j 15 de outubro de 2014 do pacote oficial do ArchLinux.
Minha opinião sobre isso é que, com a segurança adicional de sha1, os designers de cpu são mais propensos a melhorar a velocidade de sha1 e mais programadores estarão trabalhando na otimização do algoritmo do que md5sum.
Acho que o md5 não será mais usado algum dia, pois parece que ele não tem nenhuma vantagem sobre o sha1. Também testei alguns casos em arquivos reais e os resultados foram sempre os mesmos em ambos os casos (provavelmente limitados por E / S de disco).
md5sum de um arquivo grande de 4,6 GB demorou exatamente o mesmo tempo que sha1sum do mesmo arquivo, o mesmo acontece com muitos arquivos pequenos (488 no mesmo diretório). Eu executei os testes uma dúzia de vezes e eles estavam obtendo os mesmos resultados consistentemente.
-
Seria muito interessante investigar isso mais profundamente. Acho que há alguns especialistas que podem fornecer uma resposta sólida sobre por que o sha1 está ficando mais rápido do que o md5 nos processadores mais novos.
fonte
openssl speed
faz, que é o primeiro e mais significativo benchmark.O MD5 também se beneficia do uso do SSE2, verifique BarsWF e diga que não. Basta um pouco de conhecimento em assembler para criar sua (s) própria (s) rotina (s) MD5 SSE2. Para grandes quantidades de taxa de transferência, no entanto, há uma compensação da velocidade durante o hashing em oposição ao tempo gasto reorganizando os dados de entrada para serem compatíveis com as instruções SIMD usadas.
fonte
sha1sum é um pouco mais rápido no Power9 do que md5sum
fonte