Mengapa praktik yang baik untuk membandingkan checksum saat mengunduh file?

16

Situs web yang menyediakan file ISO untuk diunduh sering akan memberikan checksum md5 dari file-file itu, yang dapat kita gunakan untuk mengonfirmasi bahwa file telah diunduh dengan benar, dan belum rusak.

Mengapa ini perlu? Tentunya sifat koreksi kesalahan TCP sudah cukup. Jika suatu paket tidak diterima dengan benar, itu akan dikirim ulang. Bukankah sifat koneksi TCP / IP menjamin integritas data?

Aditya K
sumber
10
Juga jangan lupa tentang kemungkinan bug dalam perangkat lunak dan perangkat keras yang melakukan transfer data, pada titik akhir juga di antara.
sebix
Pengunduhan mungkin telah dihentikan beberapa byte lebih awal. Anda tidak perlu memperhatikannya dengan ukuran file kecuali Anda memperhatikan, dan koreksi kesalahan TCP hanya akan memverifikasi bagian dari data yang benar-benar tiba.
Kevin Keane
Checksum mungkin berguna tetapi, dalam 20 tahun bekerja dengan komputer, saya tidak ingat pernah menggunakannya.
Pedro Lobito
2
MD5 adalah hash, bukan checksum. Sebuah checksum digunakan untuk memeriksa kesalahan, khususnya kesalahan bit selama transmisi. Hash kriptografi dimaksudkan untuk memastikan bahwa data persis sama. Dalam hal itu hash akan menjadi superset dari checksum, tetapi mereka tidak sama. Selain itu MD5 telah rusak selama 10 tahun sekarang (lihat artikel Wikipedia, bagian Keamanan ).
0xC0000022L

Jawaban:

20

Seperti yang telah dicatat oleh orang lain, ada banyak kemungkinan untuk korupsi data di mana checksum apa pun pada lapisan transport tidak dapat membantu, seperti korupsi yang sudah terjadi sebelum checksum dihitung di sisi pengirim, MITM menyadap dan memodifikasi aliran (data juga sebagai checksum), korupsi terjadi setelah memvalidasi checksum di ujung penerima, dll.

Jika kita mengabaikan semua kemungkinan lain ini dan fokus pada spesifikasi TCP checksum itu sendiri dan apa yang sebenarnya dilakukannya dalam memvalidasi integritas data, ternyata sifat-sifat checksum ini sama sekali tidak komprehensif dalam hal mendeteksi kesalahan. Cara algoritma checksum ini dipilih agak mencerminkan persyaratan untuk kecepatan dalam kombinasi dengan periode waktu (akhir 1970-an).

Ini adalah bagaimana TCP checksum dihitung:

Checksum: 16 bit

Bidang checksum adalah komplemen 16 bit seseorang dari jumlah komplemen seseorang dari semua 16 bit kata dalam header dan teks. Jika suatu segmen berisi jumlah ganjil tajuk dan oktet teks yang akan checksummed, oktet terakhir diisi di sebelah kanan dengan nol untuk membentuk kata 16 bit untuk keperluan checksum. Pad tidak ditransmisikan sebagai bagian dari segmen. Saat menghitung checksum, bidang checksum itu sendiri diganti dengan nol.

Ini berarti bahwa setiap korupsi yang menyeimbangkan saat menjumlahkan data dengan cara ini akan tidak terdeteksi. Ada sejumlah kategori korupsi pada data yang akan diizinkan tetapi hanya sebagai contoh sepele: mengubah urutan kata 16 bit akan selalu tidak terdeteksi.


Dalam praktiknya, ia menangkap banyak kesalahan umum tetapi sama sekali tidak menjamin integritas. Ini juga dibantu oleh bagaimana lapisan L2 juga melakukan pemeriksaan integritas (mis. CRC32 dari frame Ethernet), meskipun hanya untuk transmisi pada tautan lokal, dan banyak kasus data yang rusak bahkan tidak pernah diteruskan ke tumpukan TCP.

Memvalidasi data menggunakan hash yang kuat, atau lebih disukai tanda tangan kriptografi, berada pada tingkat yang berbeda dalam hal memastikan integritas data. Keduanya bahkan tidak bisa dibandingkan.

Håkan Lindqvist
sumber
Jawaban Terbaik! Saya benci bagaimana jawaban yang lain mencampur konsep hashes dan checksum kriptografi.
0xC0000022L
20

Mungkin ada jutaan alasan mengapa seseorang harus memeriksa md5sum tetapi beberapa memang muncul di pikiran saya:

  • Aktivitas berbahaya - ISO Anda mungkin telah dirusak dalam perjalanan dari server
  • Halaman itu sendiri palsu (yang terbaik untuk menandatangani md5sums juga :))
  • Rusak unduhan (meskipun koreksi kesalahan TCP) (lihat ini )
  • ISO terbakar secara tidak benar

Dan itu hanya membutuhkan beberapa detik saja.

Konrad Gajewski
sumber
21
Ini juga berarti bahwa cukup aman untuk mengunduh ISO dari situs mirror acak, asalkan Anda mendapatkan checksum dari tempat yang tepercaya; misalnya posting ditandatangani PGP ke milis foo-announce.
richardb
2
Sebenarnya tidak ada hubungannya dengan melindungi terhadap aktivitas jahat. Jika ISO bisa diganti dengan yang jahat, begitu juga dengan nilai checksum MD5. Menandatangani mereka adalah masalah yang berbeda tetapi bukan apa yang ditanyakan OP. Jadi, alih-alih "aktivitas jahat" menjadi yang pertama dalam daftar Anda (itu kedengarannya bagus), sebenarnya tidak seharusnya ada dalam daftar Anda. Anda memberi orang rasa aman palsu, yang berbahaya. superuser.com/questions/849845/…
Austin '' Bahaya '' Powers
1
@ Austin '' Bahaya '' Kekuatan Umm, tidak, Konrad benar. Untuk satu, cermin-download biasanya adalah berbeda dari situs yang menampilkan checksum, dan kedua, ada cukup banyak ISP di dunia yang memanipulasi lalu lintas - TCP checksum akan baik-baik saja, tapi Anda men-download file yang berbeda. Dan tentu saja, dia juga kehilangan poin lain - file mungkin rusak di server, setelah checksum dibuat. Ini terjadi setiap saat, terutama untuk server yang lebih "hobi" (tanpa pengaturan RAID yang tepat, dll.).
Luaan
2
Sebuah jawaban dari 2015 harus memberi saran terhadap hash MD5 . Algoritma itu telah rusak selama sepuluh tahun terakhir (tidak berlebihan!). Juga, Anda mencampur checksum dan hash. Mereka adalah dua hal yang berbeda dengan niat berbeda di belakang mereka.
0xC0000022L
1
Untuk menambahkan untuk menambahkan komentar oleh @ 0xC0000022L SHA1 sebaiknya dihindari jika keamanan sudah menjadi perhatian utama juga, meskipun baik itu dan MD5 sangat memadai untuk mempertahankan terhadap korupsi yang tidak disengaja.
David Spillett
6

TCP / IP menjamin integritas data *. Tetapi itu tidak menjamin bahwa 100% file telah diunduh. Mungkin ada banyak alasan mengapa ini bisa terjadi. Misalnya: Ada kemungkinan bahwa Anda dapat memasang ISO yang melewatkan satu atau dua byte di suatu tempat di tengah. Anda tidak akan memiliki masalah dengan itu sampai Anda memerlukan satu atau dua file tertentu yang rusak. Membandingkan checksum memastikan bahwa Anda benar-benar mengunduh seluruh file.

* lihat komentar

Daniel
sumber
8
Saya pikir "tidak menjamin integritas data" benar - benar menjual berlebihan apa yang sebenarnya dilakukannya. Itu membuat upaya untuk memeriksa integritas data dengan pendekatan yang sangat ramping, yang tidak terlalu kuat.
Håkan Lindqvist
6

TCP checksum hanya 16 bit. Ini berarti bahwa, dengan tidak adanya checksum lain, satu dari setiap 65536 paket yang rusak akan diterima sebagai tidak rusak. Jika, misalnya, Anda mengunduh gambar DVD 8GB melalui tautan berisik dengan tingkat korupsi 1%, Anda akan mengharapkan 81 paket yang rusak tidak terdeteksi.

MD5 adalah checksum yang jauh lebih besar, pada 128 bit. Peluang 81 paket itu menghasilkan sesuatu dengan checksum yang sama seperti aslinya adalah sekitar 1 dalam 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.

Menandai
sumber
6

Ada beberapa alasan untuk memverifikasi checksum file yang diunduh melalui HTTP:

  • Memastikan Anda menerima seluruh file
    • Beberapa klien, seperti Firefox , mungkin memperlakukan koneksi terputus sebagai unduhan yang berhasil, membuat Anda dengan file terpotong tetapi mengklaim itu diunduh OK
  • Memastikan Anda menerima file yang benar
    • mis. server yang buggy, berkompromi, atau jahat mungkin mengirimkan sesuatu kepada Anda
    • seseorang dapat mengutak-atik transfer (serangan orang di tengah) - bahkan HTTPS tidak aman dari ini jika sistem Anda dikompromikan oleh misalnya Superfish, atau metode enkripsi yang digunakan lemah
    • Mereka mungkin juga hanya memberi Anda halaman unduhan palsu, sehingga Anda bahkan tidak terhubung ke server asli (tetapi dalam hal ini checksum tidak akan banyak membantu jika Anda mendapatkannya dari server palsu yang sama)
    • Sejumlah ISP telah tertangkap menyuntikkan Javascript ke halaman dalam transmisi karena berbagai alasan 1 ; tergantung seberapa baik ini diterapkan, itu mungkin memotong-motong beberapa unduhan file juga
    • Mirror mungkin menjadi hosting versi file yang kedaluwarsa, atau admin mungkin mengunggah file yang salah
  • Memastikan file tidak rusak oleh sesuatu yang tidak dapat dideteksi TCP
    • misal file tersebut bisa rusak di server, jadi TCP hanya akan memastikan bahwa file yang sudah rusak tidak mendapatkan lagi transmisi yang berantakan
    • atau bisa rusak setelah sampai di ujung Anda, oleh memori / disk yang rusak, driver sistem file kereta, dll
    • Checksum TCP hanya 16-bit, sehingga kemungkinannya tidak astronomis (1 dalam 65536) bahwa paket yang rusak tidak akan terdeteksi
  • Dengan ISO, memastikan bahwa disk terbakar dengan benar

1 sumber dalam komentar karena lol rep

Rena
sumber
2
Sumber: * security.stackexchange.com/questions/70970/… * adblockplus.org/forum/viewtopic.php?t=8156 "ISP agresif menyuntikkan / skrip tertanam / iklan dapat diblokir " * iamsrijit.wordpress.com/2012/09/ 14 /… * lebih banyak dapat ditemukan dengan mudah di Google, tetapi tidak benar-benar on-topic di sini
Rena
2

Daniel, Bergantung pada alat yang Anda gunakan untuk Unduhan ISO per katakan. Jika itu Say Firefox. Ini mungkin menunjukkan unduhan file. Namun Anda mungkin tidak memiliki ISO lengkap. Jika Anda membakarnya lalu mencoba menggunakannya, informasi mungkin hilang. Ini terjadi dari waktu ke waktu pada file hosting server yang berbeda.

Ini adalah praktik yang baik untuk setidaknya membandingkan ukuran file (total byte atau bit) memastikan mereka cocok. Windows akan menunjukkan jumlah byte file yang berbeda kemudian mengatakan Linux. Pemeriksaan jumlah MD5 akan menunjukkan nilai yang sama dengan OS mana yang digunakan. Semoga ini bisa membantu sedikit. Bersulang...

David Thomson
sumber
2
Windows menunjukkan jumlah byte berbeda dari cara Linux menunjukkannya? Betulkah? Saya pikir abdominasi keluar dengan sistem file size-as-blocks-count CP / M. (Sekarang, jika Anda melihat sesuatu selain hitungan byte - katakanlah, tampilan ukuran file di Explorer - mungkin berbeda. Tetapi tidak ada sysadmin yang waras yang seharusnya memeriksa integritas file yang diunduh dengan cara itu, jadi itu bukan masalah.) Bytes adalah byte. Melihatnya dalam hal bit tidak masuk akal, meskipun; kapan terakhir kali Anda mengunduh dan menyimpan setengah byte?
CVn
2

Saya melihat banyak jawaban menarik tetapi ada hal terakhir yang perlu dipertimbangkan: Masalah Dua Jenderal

Masalah dua jenderal dan masalah Jenderal Bizantium mempertimbangkan secara khusus implikasi dari mentransfer informasi secara andal melalui saluran yang tidak dapat diandalkan.

Checksums hanyalah lapisan lain dari "peningkatan keandalan", dan lapisan dengan peluang kegagalan yang sangat kecil. Ini adalah alasan mengapa sangat populer.

Fernando Cordeiro
sumber