Mengapa Git menggunakan SHA-1 , fungsi hash kriptografi, daripada fungsi hash non-kriptografi yang lebih cepat?
Pertanyaan terkait:
Pertanyaan Stack Overflow Mengapa Git menggunakan SHA-1 sebagai nomor versi? menanyakan mengapa Git menggunakan SHA-1 sebagai lawan nomor urut untuk komit.
git
hash-function
Praxeolitik
sumber
sumber
Jawaban:
TLDR;
Anda dapat memeriksanya dari Linus Torvalds sendiri, ketika dia mempresentasikan Git ke Google pada tahun 2007 :
(penekanan dari saya)
Perbarui Desember 2017 dengan Git 2.16 (K1 2018): upaya untuk mendukung SHA alternatif ini sedang berlangsung: lihat " Mengapa Git tidak menggunakan SHA yang lebih modern? ".
Saya menyebutkan dalam " Bagaimana git menangani tabrakan SHA-1 pada blob? " Bahwa Anda dapat merekayasa komitmen dengan awalan SHA1 tertentu (masih merupakan upaya yang sangat mahal).
Tapi intinya tetap, seperti yang disebutkan Eric Sink dalam buku " Git: Cryptographic Hashes " ( Version Control by Example (2011) :
Lebih sulit untuk menemukan hash non-kriptografik yang bagus dengan tingkat tabrakan yang rendah, kecuali Anda mempertimbangkan penelitian seperti " Menemukan Hash Non-kriptografik yang Canggih dengan Pemrograman Genetik ".
Anda juga dapat membaca " Pertimbangkan penggunaan algoritme hash non-kriptografik untuk percepatan hashing ", yang menyebutkan misalnya " xxhash ", algoritme Hash non-kriptografik yang sangat cepat, bekerja pada kecepatan yang mendekati batas RAM.
Diskusi seputar mengubah hash di Git bukanlah hal baru:
(Linus Torvalds)
Dan Anda harus berhati-hati tentang cara mengukur perolehan pengoptimalan yang sebenarnya
(Linus Torvalds)
(misalnya ke SHA-3, tapi itu akan berlaku untuk hash lainnya):
(John Tapsell -
johnflux
)Singkatnya, beralih ke hash apa pun tidaklah mudah.
Perbarui Februari 2017: ya, secara teori mungkin untuk menghitung SHA1 yang bertabrakan: shattered.io
Tapi:
Jadi jangan panik dulu.
Lihat lebih lanjut di " Bagaimana Git menangani tabrakan SHA-1 pada blob? ".
sumber