Por que o Git usa SHA-1 , uma função hash criptográfica, em vez de uma função hash não criptográfica mais rápida?
Pergunta relacionada:
Pergunta sobre estouro de pilha Por que o Git usa SHA-1 como números de versão? pergunta por que o Git usa SHA-1 em vez de números seqüenciais para confirmações.
git
hash-function
Praxeolitic
fonte
fonte
Respostas:
TLDR;
Você pode verificar isso com o próprio Linus Torvalds, quando ele apresentou o Git ao Google em 2007 :
(grifo meu)
Atualização em dezembro de 2017 com o Git 2.16 (primeiro trimestre de 2018): este esforço para oferecer suporte a um SHA alternativo está em andamento: consulte " Por que o Git não usa o SHA mais moderno? ".
Eu mencionei em " Como o git lidaria com uma colisão SHA-1 em um blob? ", Que você poderia criar um commit com um prefixo SHA1 específico (ainda um empreendimento extremamente caro).
Mas o ponto permanece, como Eric Sink menciona no livro " Git: Cryptographic Hashes " ( controle de versão por exemplo (2011) :
É mais difícil encontrar um bom hash não criptográfico com baixa taxa de colisão, a menos que você considere pesquisas como " Como encontrar hashes não criptográficos de última geração com programação genética ".
Você também pode ler " Considere o uso do algoritmo de hash não criptográfico para acelerar o hash ", que menciona, por exemplo, " xxhash ", um algoritmo Hash não criptográfico extremamente rápido, trabalhando em velocidades próximas aos limites da RAM.
Discussões sobre a alteração do hash no Git não são novas:
(Linus Torvalds)
E você precisa ter cuidado sobre como medir o ganho real de otimização
(Linus Torvalds)
(por exemplo, para SHA-3, mas isso se aplicaria a qualquer outro hash):
(John Tapsell -
johnflux
)Em resumo, mudar para qualquer hash não é fácil.
Atualização em fevereiro de 2017: sim, em teoria é possível calcular um SHA1 em colisão: shattered.io
Mas:
Então, não vamos entrar em pânico ainda.
Veja mais em " Como o Git lidaria com uma colisão SHA-1 em um blob? ".
fonte