TLDR;
Anda dapat memeriksanya dari Linus Torvalds sendiri, ketika dia mempresentasikan Git ke Google pada tahun 2007 :
(penekanan dari saya)
Kami memeriksa checksum yang dianggap aman secara kriptografis. Tidak ada yang bisa merusak SHA-1, tapi intinya, SHA-1 sejauh menyangkut git, bahkan bukan fitur keamanan. Ini murni pemeriksaan konsistensi .
Bagian keamanan ada di tempat lain. Banyak orang beranggapan karena git menggunakan SHA-1 dan SHA-1 digunakan untuk hal-hal yang aman secara kriptografis, mereka berpikir bahwa ini adalah fitur keamanan yang sangat besar. Ini sama sekali tidak ada hubungannya dengan keamanan, itu hanya hash terbaik yang bisa Anda dapatkan.
Memiliki hash yang baik itu baik untuk dapat mempercayai data Anda , kebetulan memiliki beberapa fitur bagus lainnya juga, itu berarti ketika kita melakukan hash objek, kita tahu hash tersebut terdistribusi dengan baik dan kita tidak perlu khawatir tentang masalah distribusi tertentu .
Secara internal artinya dari sudut pandang implementasi, kita dapat percaya bahwa hash sangat bagus sehingga kita dapat menggunakan algoritma hashing dan mengetahui tidak ada kasus yang buruk.
Jadi, ada beberapa alasan untuk menyukai sisi kriptografik juga, tetapi ini benar-benar tentang kemampuan mempercayai data Anda.
Saya jamin, jika Anda memasukkan data Anda ke dalam git, Anda dapat mempercayai fakta bahwa lima tahun kemudian, setelah diubah dari harddisk Anda ke DVD ke teknologi baru apa pun dan Anda menyalinnya, lima tahun kemudian Anda dapat memverifikasi data Anda. get back out adalah data yang sama persis dengan yang Anda masukkan. Dan itu adalah sesuatu yang harus Anda cari dalam sistem manajemen kode sumber .
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) :
Sangatlah penting bahwa DVCS tidak pernah menemukan dua bagian data berbeda yang memiliki intisari yang sama. Untungnya, fungsi hash kriptografi yang baik dirancang untuk membuat tabrakan seperti itu sangat tidak mungkin.
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)
Sebenarnya tidak ada yang tersisa dari kode mozilla, tapi hei, saya mulai dari itu. Dalam retrospeksi saya mungkin harus mulai dari kode asm PPC yang sudah melakukan pemblokiran secara wajar - tapi itu adalah semacam "20/20 tinjauan ke belakang".
Plus, hei, kode mozilla menjadi tumpukan minyak mentah yang mengerikan adalah mengapa saya begitu yakin bahwa saya bisa memperbaiki banyak hal. Jadi itu semacam sumber untuk itu, meskipun itu lebih tentang sisi motivasi daripada kode yang tersisa;)
Dan Anda harus berhati-hati tentang cara mengukur perolehan pengoptimalan yang sebenarnya
(Linus Torvalds)
Saya cukup banyak dapat menjamin Anda bahwa itu meningkatkan banyak hal hanya karena itu membuat gcc menghasilkan kode sampah, yang kemudian menyembunyikan beberapa masalah P4.
(John Tapsell - johnflux
)
Biaya teknik untuk mengupgrade git dari SHA-1 ke algoritme baru jauh lebih tinggi . Saya tidak yakin bagaimana itu bisa dilakukan dengan baik.
Pertama-tama kita mungkin perlu menerapkan versi git (sebut saja versi 2 untuk percakapan ini) yang memungkinkan ada slot untuk nilai hash baru meskipun tidak membaca atau menggunakan ruang itu - hanya menggunakan nilai hash SHA-1 yang ada di slot lainnya.
Dengan begitu, setelah kami akhirnya menerapkan versi git yang lebih baru, sebut saja versi 3, yang menghasilkan hash SHA-3 selain hash SHA-1, orang yang menggunakan git versi 2 akan dapat terus beroperasi.
(Meskipun, berdasarkan diskusi ini, mereka mungkin rentan dan orang yang mengandalkan patch khusus SHA-1 mereka mungkin rentan.)
Singkatnya, beralih ke hash apa pun tidaklah mudah.
Perbarui Februari 2017: ya, secara teori mungkin untuk menghitung SHA1 yang bertabrakan: shattered.io
Bagaimana GIT terpengaruh?
GIT sangat bergantung pada SHA-1 untuk identifikasi dan pemeriksaan integritas semua objek dan komit file.
Pada dasarnya adalah mungkin untuk membuat dua repositori GIT dengan hash komit kepala yang sama dan konten yang berbeda, katakanlah kode sumber jinak dan yang backdoor.
Penyerang berpotensi menyajikan repositori secara selektif kepada pengguna yang ditargetkan. Ini akan membutuhkan penyerang untuk menghitung tabrakan mereka sendiri.
Tapi:
Serangan ini membutuhkan lebih dari 9.223.372.036.854.775.808 perhitungan SHA1. Ini membutuhkan daya pemrosesan yang setara dengan 6.500 tahun komputasi CPU tunggal dan 110 tahun komputasi GPU tunggal.
Jadi jangan panik dulu.
Lihat lebih lanjut di " Bagaimana Git menangani tabrakan SHA-1 pada blob? ".