Eu li sobre que o Git usa o resumo SHA-1 como um ID para uma revisão. Por que não usa uma versão mais moderna do SHA?
git
cryptography
sha
qazwsx
fonte
fonte
Respostas:
Dezembro de 2017: Vai. E o Git 2.16 (primeiro trimestre de 2018) é o primeiro lançamento para ilustrar e implementar essa intenção.
Nota: veja Git 2.19 abaixo: será SHA-256 .
O Git 2.16 irá propor uma infraestrutura para definir qual função hash é usada no Git e iniciará um esforço para sondar isso em vários codepaths.
Consulte commit c250e02 (28 de novembro de 2017) por Ramsay Jones (``) .
Consulte commit eb0ccfd , commit 78a6766 , commit f50e766 , commit abade65 (12 nov 2017) por brian m. Carlson (
bk2204
) .(Fundido por Junio C Hamano -
gitster
- no commit 721cc43 , 13 de dezembro de 2017)Atualização de agosto de 2018, para Git 2.19 (terceiro trimestre de 2018), Git parece escolher SHA-256 como NewHash.
Veja o commit 0ed8d8d (04 de agosto de 2018) de Jonathan Nieder (
artagnon
) .Veja o commit 13f5e09 (25 de julho de 2018) de Ævar Arnfjörð Bjarmason (
avar
) .(Incorporado por Junio C Hamano -
gitster
- no commit 34f2297 , 20 de agosto de 2018)Você pode ver esta transição para SHA 256 em andamento com Git 2.20 (quarto trimestre de 2018):
Ver cometer 0d7c419 , cometer dda6346 , cometer eccb5a5 , cometer 93eb00f , cometer d8a3a69 , cometer fbd0e37 , cometer f690b6b , cometer 49d1660 , cometer 268babd , cometer fa13080 , cometer 7b5e614 , cometer 58ce21b , cometer 2f0c9e9 , cometer 825544a (15 out 2018) por Brian M . Carlson (
bk2204
) .Ver commit 6afedba (15 out 2018) de SZEDER Gábor (
szeder
) .(Fundido porJunio C Hamano -
gitster
- no commit d829d49 , 30 de outubro de 2018)GIT_SHA1_HEXSZ
é posteriormente removido / substituído pelo Git 2.22 (Q2 2019) e commit d4e568b .Essa transição continua com o Git 2.21 (primeiro trimestre de 2019), que adiciona o hash sha-256 e o conecta por meio do código para permitir a construção do Git com o "NewHash".
Ver cometer 4b4e291 , cometer 27dc04c , cometer 13eeedb , cometer c166599 , cometer 37649b7 , cometer a2ce0a7 , cometer 50c817e , cometer 9a3a0ff , cometer 0dab712 , cometer 47edb64 (14 novembro de 2018), e cometer 2f90b9d , cometer 1ccf07c (22 de outubro de 2018) por Brian M . Carlson (
bk2204
) .(Incorporado por Junio C Hamano -
gitster
- no commit 33e4ae9 , 29 de janeiro de 2019)O esforço de atualização continua com o Git 2.24 (quarto trimestre de 2019)
Veja commit aaa95df , commit be8e172 , commit 3f34d70 , commit fc06be3 , commit 69fa337 , commit 3a4d7aa , commit e0cb7cd , commit 8d4d86b , cometer f6ca67d , cometer dd336a5 , cometer 894c0f6 , cometer 4439c7a , cometer 95518fa , cometer e84f357 , cometer fe9fec4 , cometer 976ff7e , cometer 703d2d4 , cometer 9d958cc , cometer 7962e04 , cometer taxa 4930(18 de agosto de 2019) por brian m. Carlson (
bk2204
) .(Incorporado por Junio C Hamano -
gitster
- no commit 676278f , 11 de outubro de 2019)Com o Git 2.26 (Q1 2020), os scripts de teste estão prontos para o dia em que os nomes dos objetos usarão SHA-256.
Ver commit 277eb5a , commit 44b6c05 , commit 7a868c5 , commit 1b8f39f , commit a8c17e3 , commit 8320722 , commit 74ad99b , commit ba1be1a , commit cba472d , commit 82d5aeb , commit 3c5e65c , cometer 235d3cd , cometer 1d86c8f , cometer 525a7f1 , cometer 7a1bcb2 , cometer cb78f4f , cometer 717c939 , commit 08a9dd8 , commit 215b60b , commit 194264c(21 de dezembro de 2019) por brian m. Carlson (
bk2204
) .(Fundido por Junio C Hamano -
gitster
- no commit f52ab33 , 05 de fevereiro de 2020)Exemplo:
Então, em vez de usar:
Os testes estão usando
E
OID_REGEX
vem de commit bdee9cd (13 de maio de 2018) por brian m. Carlson (bk2204
) .(Incorporado por Junio C Hamano -
gitster
- no commit 9472b13 , 30 de maio de 2018, Git v2.18.0-rc0)E, ainda para testes:
Ver commit f303765 , commit edf0424 , commit 5db24dc , commit d341e08 , commit 88ed241 , commit 48c10cc , commit f7ae8e6 , commit e70649b , commit a30f93b , commit a79eec2 , commit 796d138 , commit 417e45e , brian m. Carlson ( cometer dfa5f53 , cometer f743e8f , cometer 72f936b , cometer 5df0f11 , cometer 07877f3 , commit 6025e89 , commit 7b1a182 , commit 94db7e3 ,commit db12505 (07 Fev 2020) por
bk2204
) .(Fundido por Junio C Hamano -
gitster
- no commit 5af345a , 17 de fevereiro de 2020)Alguns codepaths receberam uma instância de repositório como parâmetro para trabalhar no repositório, mas passaram
the_repository
instância para seus callees, que foram limpos (um pouco) com Git 2.26 (Q1 2020).Veja commit b98d188 , commit 2dcde20 , commit 7ad5c44 , commit c8123e7 , commit 5ec9b8a , commit a651946 , commit eb999b3 (30 Jan 2020) por Matheus Tavares (
matheustavares
) .(Fundido por Junio C Hamano -
gitster
- no commit 78e67cd , 14 de fevereiro de 2020)Baseado em:
fonte
git rev-parse
agora pode imprimir o hash que será usado: stackoverflow.com/a/58862319/6309 . E a árvore vazia tem um novo idATUALIZAÇÃO : a pergunta acima e esta resposta são de 2015. Desde então, o Google anunciou a primeira colisão SHA-1: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Obviamente, só posso especular de fora sobre o motivo pelo qual o Git continua a usar SHA-1, mas esses podem estar entre os motivos:
unsigned char[20]
buffers codificados por todo o lugar ;-), é muito mais fácil programar para agilidade criptográfica no início, em vez de adaptá-la mais tarde.Alguns links:
Minha opinião pessoal seria que, embora os ataques práticos provavelmente demorem algum tempo, e mesmo quando eles ocorrerem, as pessoas provavelmente irão inicialmente mitigá-los com outros meios além de alterar o próprio algoritmo de hash, que se você se preocupa com a segurança, estará errando do lado da cautela com suas escolhas de algoritmos e continuamente revisando para cima seus pontos fortes de segurança, porque as capacidades dos invasores também estão indo apenas em uma direção, então não seria sábio tomar o Git como um modelo, especialmente como seu propósito em o uso de SHA-1 não pretende ser uma segurança criptográfica.
fonte
Esta é uma discussão sobre a urgência de migrar do SHA1 para o Mercurial, mas se aplica ao Git também: https://www.mercurial-scm.org/wiki/mpm/SHA1
Resumindo: se você não for extremamente diligente hoje, terá vulnerabilidades muito piores do que sha1. Mas, apesar disso, o Mercurial começou há mais de 10 anos para se preparar para migrar para longe do sha1.
Se o git não migrar de sha1 antes do Mercurial, você sempre poderá adicionar outro nível de segurança mantendo um espelho local do Mercurial com hg-git .
fonte
Agora há um plano de transição para um hash mais forte, então parece que no futuro ele usará um hash mais moderno do que SHA-1. Do plano de transição atual :
fonte