Untuk menambah jawaban saya sebelumnya dari 2012 , sekarang ada (Februari 2017, lima tahun kemudian), contoh tabrakan SHA-1 aktual dengan shattered.io , di mana Anda dapat membuat dua file PDF bertabrakan: yaitu memperoleh SHA- 1 tanda tangan digital pada file PDF pertama yang juga dapat disalahgunakan sebagai tanda tangan yang valid pada file PDF kedua.
Lihat juga " Di ambang kematian selama bertahun-tahun, fungsi SHA1 yang banyak digunakan sekarang mati ", dan ilustrasi ini .
Pembaruan 26 Februari: Linus mengonfirmasi hal-hal berikut dalam pos Google+ :
(1) Pertama - langit tidak jatuh. Ada perbedaan besar antara menggunakan hash kriptografi untuk hal-hal seperti penandatanganan keamanan, dan menggunakan satu untuk menghasilkan "pengidentifikasi konten" untuk sistem konten-addressable seperti git.
(2) Kedua, sifat serangan SHA1 khusus ini berarti bahwa sebenarnya cukup mudah untuk dimitigasi, dan sudah ada dua set tambalan diposting untuk mitigasi itu.
(3) Dan akhirnya, sebenarnya ada transisi yang cukup mudah ke beberapa hash lain yang tidak akan menghancurkan dunia - atau bahkan repositori git lama.
Mengenai transisi itu, lihat Q1 2018 Git 2.16 menambahkan struktur yang mewakili algoritma hash. Implementasi transisi itu telah dimulai.
Mulai Git 2.19 (Q3 2018) , Git telah memilih SHA-256 sebagai NewHash , dan sedang dalam proses mengintegrasikannya ke kode (artinya SHA1 masih merupakan default (Q2 2019, Git 2.21), tetapi SHA2 akan menjadi penerusnya)
Jawaban asli (25 Februari) Tetapi:
- Hal ini memungkinkan untuk memalsukan gumpalan, namun SHA-1 dari pohon masih akan berubah karena ukuran gumpalan yang dipalsukan mungkin tidak sama dengan yang asli: lihat " Bagaimana perhitungan hasit git? "; a SHA1 gumpalan dihitung berdasarkan isi dan ukuran .
Memang ada beberapa masalah untuk git-svn
saat ini . Atau lebih tepatnya dengan svn itu sendiri , seperti yang terlihat di sini .
- Seperti yang saya sebutkan dalam jawaban asli saya , biaya upaya seperti itu masih mahal untuk saat ini (6.500 tahun CPU dan 100 tahun GPU) Lihat juga Valerie Anita Aurora dalam " Masa fungsi hash kriptografis ".
- Seperti dikomentari sebelumnya, ini bukan tentang keamanan atau kepercayaan, tetapi integritas data (de-duplikasi dan deteksi kesalahan) yang dapat dengan mudah dideteksi oleh a
git fsck
, seperti yang disebutkan oleh Linus Torvalds hari ini. git fsck
akan memperingatkan tentang pesan komit dengan data buram disembunyikan setelah NUL
(meskipun NUL
tidak selalu ada dalam file penipuan ).
Tidak semua orang menyalakan transfer.fsck
, tetapi GitHub melakukannya: setiap dorongan akan dibatalkan jika ada objek yang cacat atau tautan rusak. Meskipun ... ada alasannya ini tidak diaktifkan secara default .
- file pdf dapat memiliki data biner sewenang-wenang yang dapat Anda ubah untuk menghasilkan collision SHA-1, yang bertentangan dengan kode sumber yang dipalsukan.
Masalah aktual dalam membuat dua repositori Git dengan head yang sama melakukan hash dan konten yang berbeda. Dan bahkan kemudian, serangan itu tetap berbelit-belit .
- Linus menambahkan :
Seluruh titik dari SCM adalah bahwa hal itu bukan tentang peristiwa satu kali, tetapi tentang sejarah terus menerus. Itu juga secara fundamental berarti bahwa serangan yang berhasil perlu bekerja dari waktu ke waktu, dan tidak dapat dideteksi.
Jika Anda dapat menipu SCM satu kali, masukkan kode Anda, dan itu terdeteksi minggu depan, Anda sebenarnya tidak melakukan sesuatu yang berguna. Anda hanya membakar diri Anda sendiri.
Joey Hess mencoba pdf tersebut dalam repo Git dan dia menemukan :
Itu termasuk dua file dengan SHA dan ukuran yang sama, yang mendapatkan gumpalan yang berbeda berkat cara git menambahkan header ke konten.
joey@darkstar:~/tmp/supercollider>sha1sum bad.pdf good.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a bad.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a good.pdf
joey@darkstar:~/tmp/supercollider>git ls-tree HEAD
100644 blob ca44e9913faf08d625346205e228e2265dd12b65 bad.pdf
100644 blob 5f90b67523865ad5b1391cb4a1c010d541c816c1 good.pdf
Meskipun menambahkan data yang identik ke file yang bertabrakan ini menghasilkan tumbukan lain, data yang bertumpuk tidak.
Jadi vektor utama serangan (menempa komit) adalah :
- Hasilkan objek komit reguler;
- gunakan seluruh objek commit + NUL sebagai awalan yang dipilih, dan
- menggunakan serangan collision identik-awalan untuk menghasilkan objek bertabrakan baik / buruk.
- ... dan ini tidak berguna karena objek komit yang baik dan buruk masih menunjuk ke pohon yang sama!
Plus, Anda sudah bisa dan mendeteksi serangan tabrakan kriptanalitik terhadap SHA-1 yang ada di setiap file cr-marcstevens/sha1collisiondetection
Menambahkan cek serupa di Git itu sendiri akan memiliki beberapa biaya perhitungan .
Pada perubahan hash, komentar Linux :
Ukuran hash dan pilihan algoritma hash adalah masalah independen.
Apa yang mungkin Anda lakukan adalah beralih ke hash 256-bit, gunakan itu secara internal dan dalam database asli git, dan kemudian secara default hanya
menampilkan hash sebagai string hex 40-karakter (seperti bagaimana kita telah menyingkat hal-hal dalam banyak situasi).
Dengan cara itu alat di sekitar git bahkan tidak melihat perubahan kecuali melewati --full-hash
argumen " " khusus (atau " --abbrev=64
" atau apa pun - defaultnya adalah kita menyingkat menjadi 40).
Namun, rencana transisi (dari SHA1 ke fungsi hash lain) masih akan kompleks , tetapi dipelajari secara aktif.
Sebuah convert-to-object_id
kampanye adalah berlangsung :
Pembaruan 20 Maret: GitHub merinci kemungkinan serangan dan perlindungannya :
Nama SHA-1 dapat diberikan kepercayaan melalui berbagai mekanisme. Misalnya, Git memungkinkan Anda untuk secara kriptografis menandatangani komit atau tag. Melakukan hal itu hanya menandatangani objek komit atau tag itu sendiri, yang pada gilirannya menunjuk ke objek lain yang berisi data file aktual dengan menggunakan nama SHA-1 mereka. Tabrakan pada objek-objek itu dapat menghasilkan tanda tangan yang tampak valid, tetapi yang menunjuk ke data yang berbeda dari yang ditanda tangani. Dalam serangan semacam itu, penandatangan hanya melihat setengah tabrakan, dan korban melihat separuh lainnya.
Perlindungan:
Serangan terbaru menggunakan teknik khusus untuk mengeksploitasi kelemahan dalam algoritma SHA-1 yang menemukan tabrakan dalam waktu yang jauh lebih sedikit. Teknik-teknik ini meninggalkan pola dalam byte yang dapat dideteksi saat menghitung SHA-1 dari setengah dari pasangan yang bertabrakan.
GitHub.com sekarang melakukan deteksi ini untuk setiap SHA-1 yang dihitungnya, dan membatalkan operasi jika ada bukti bahwa objek tersebut adalah setengah dari pasangan yang bertabrakan. Itu mencegah penyerang menggunakan GitHub untuk meyakinkan sebuah proyek untuk menerima setengah "tidak bersalah" dari tabrakan mereka, serta mencegah mereka dari menampung setengah berbahaya.
Lihat " sha1collisiondetection
" oleh Marc Stevens
Sekali lagi, dengan Q1 2018 Git 2.16 menambahkan struktur yang mewakili algoritma hash, implementasi transisi ke hash baru telah dimulai.
Seperti disebutkan di atas, Hash yang didukung baru akan SHA-256 .