Mengapa menghitung checksum dari file yang diunduh?

19

Saya sering melihat checksum yang diberikan di sebelah file yang tersedia untuk diunduh. Tujuan dari praktik ini tidak ada pada saya. Jelas untuk mendeteksi file yang korup, tetapi apa yang bisa menjadi penyebab korupsi ini dan apakah mungkin?

Tentunya file tidak akan rusak oleh kesalahan transmisi karena mereka terdeteksi oleh protokol jaringan. Dan tentunya penyerang yang dapat mengubah file untuk tujuan jahat juga dapat mengubah checksum yang diberikan. Apakah kita memeriksa kesalahan hard drive? Apakah itu lebih mungkin terjadi ketika menulis daripada saat membaca? Apakah saya melewatkan sesuatu yang penting?

Karolis Juodelė
sumber
2
Dan tentunya penyerang yang dapat mengubah file untuk tujuan jahat juga dapat mengubah checksum yang diberikan. - Setuju, sebuah checksum tidak menjamin keaslian jika tidak dilayani melalui HTTPS, atau Anda tidak yakin bahwa sertifikat SSL milik pencipta perangkat lunak.
Mihai
1
TCP checksum sebenarnya cukup buruk: hanya 16 bit. Jika Anda menyajikan file besar ke ribuan orang (pikirkan: penginstalan gambar DVD), hampir pasti bahwa sebagian dari unduhan tersebut akan rusak secara tidak terdeteksi.
Markus
@Mihai Tentu saja, itu mungkin memang sedikit mengurangi risiko. Misalnya, jika server Anda terinfeksi oleh virus yang secara otomatis mengubah semua respons biner (atau hanya mengganti semua file yang dapat dieksekusi yang Anda unduh). Ini tidak sempurna, tetapi dalam beberapa kasus dapat membantu.
Luaan

Jawaban:

9

Mendeteksi korupsi tidak sepenuhnya benar. Untuk memastikan integritas perangkat lunak akan menjadi penggunaan yang lebih benar. Biasanya suatu perangkat lunak tidak didistribusikan dari satu server. Perangkat lunak yang sama dapat didistribusikan dari banyak server. Jadi ketika Anda mengunduh perangkat lunak tertentu, server yang paling dekat dengan tujuan Anda dipilih sebagai sumber unduhan untuk meningkatkan kecepatan unduh. Namun, server 'tidak resmi' (pihak ketiga) ini tidak selalu dapat dipercaya. Mereka mungkin / dapat memasukkan trojan / virus / adware / backdoors ke dalam program yang tidak baik .

Jadi untuk memastikan bahwa perangkat lunak yang diunduh persis sama dengan perangkat lunak 'resmi' yang dirilis oleh organisasi terkait, checksum digunakan. Algoritma yang digunakan untuk menghasilkan checksum sedemikian rupa sehingga bahkan sedikit perubahan dalam hasil program dalam checksum yang sama sekali berbeda.

Contoh diambil dari Praktis Unix dan Keamanan Internet

MD5 (Ada $ 1500 di kotak biru.) = 05f8cfc03f4e58cbee731aa4a14b3f03

MD5 (Ada $ 1100 di kotak biru.) = D6dee11aae89661a45eb9d21e30d34cb

Pesan, yang berbeda hanya dengan satu karakter (dan, di dalam karakter itu, hanya dengan satu bit biner), memiliki intisari pesan yang sangat berbeda.

Jika file yang diunduh memiliki checksum yang sama dengan checksum yang diberikan di situs web 'resmi', maka perangkat lunak dapat diasumsikan tidak dimodifikasi.

Catatan Sisi: Secara teori, dua file yang berbeda BISA memiliki nilai hash yang sama. Agar algoritma Hash / checksum dianggap aman, komputer harus sangat mahal untuk menemukan file lain yang menghasilkan checksum yang sama.

Aswin PJ
sumber
1
Jadi jika file dan checksum disediakan oleh host yang sama, itu agak tidak berguna?
Karolis Juodelė
Mungkin. Checksum hanya sarana untuk memastikan integritas. Katakan dalam skenario tertentu, jika penyerang mendapatkan akses ke server FTP organisasi, ia mungkin mengubah perangkat lunak. Tetapi Anda masih dapat menggunakan checksum yang sama untuk memastikan integritas JIKA DAN HANYA JIKA penyerang tidak membobol server HTTP. Jadi, Jika keduanya berada di bawah kendali penyerang, ia dapat dengan mudah mengubah keduanya dan Anda tidak akan tahu bedanya.
Aswin PJ
1
Situasi lain di mana checksum mungkin relevan adalah untuk mendeteksi situasi di mana transfer file dilanjutkan setelah cegukan tetapi file telah diubah untuk sementara.
supercat
@ KarolisJuodelė Tautan unduhan mungkin ada di situs web / host yang sama. Tapi Di mana ia memutuskan untuk mungkin berbeda berdasarkan server mana yang terdekat. Juga perhatikan bahwa, halaman checksum harus https saat unduhan dapat berupa protokol http atau ftp
balki
10

Dan tentunya penyerang yang dapat mengubah file untuk tujuan jahat juga dapat mengubah checksum yang diberikan.

Tidak selalu.

Anda dapat memiliki tautan konten bersama dengan checksum yang disajikan di HTTPS. Tautan dapat berupa tautan yang tidak dienkripsi - HTTP polos atau FTP, atau yang lainnya.

Pada sisi negatifnya, koneksi yang tidak terenkripsi dapat dengan mudah dilakukan oleh orang-orang tengah, di sisi atas, dapat lebih cepat atau lebih nyaman bagi webmaster (lebih sedikit sumber daya komputasi yang dibutuhkan dan peluang jaringan untuk menyimpan hal-hal seperti itu).

Jika checksum disajikan pada koneksi tepercaya yang tidak terputus dan payload cocok dengan checksum, Anda mendapatkan yang terbaik dari kedua dunia (asalkan checksum itu aman secara kriptografi).


Yang mengatakan, Anda telah mengingatkan saya bahwa ada distro di luar sana yang mengklaim sebagai "aman" dan situs web mereka hanya pada HTTP, seperti juga tautan ke gambar mereka.

Contoh:

Agak lucu karena Anda tidak mungkin mendapatkan lebih tidak aman daripada itu. Sekalipun mereka sendiri tidak jahat, ISP mana pun dapat dengan mudah mengganti situs web dan gambar dengan palsu, dan membuat seseorang memasang sistem operasi yang dicurangi sambil membuatnya seolah-olah mereka mendapatkan distro Linux "aman" adalah yang utama pwnage

PSkocik
sumber
1
Ada banyak hal yang kurang aman daripada HTTP tidak terauthentikasi, yang mengharuskan MITM aktif untuk menumbangkan.
user253751
4

Sejauh mengapa pengecekan kesalahan TCP / IP tidak menangkap semuanya: Dari /programming//a/17083365/2551539

Ada beberapa kesalahan yang dapat terjadi (yang akan dideteksi TCP) [ditunjukkan oleh Jacob Krall] :

  • Urutan paket tidak benar
  • Hilangnya paket
  • Merusak data di dalam paket
  • Paket Phantom (penerima mendapat paket yang belum pernah dikirim)

Edit dengan beberapa info tambahan:

Halaman 9 dari penelitian ini: http://paperhub.s3.amazonaws.com/8ff1e4414c070e900da8ab3885593085.pdf menunjukkan bahwa ada kesalahan yang bisa tidak terdeteksi oleh TCP. Pemahaman saya adalah bahwa hal itu terjadi ketika datagram yang salah (disebut "kembar buruk" dalam penelitian) memiliki checksum yang sama dengan datagram yang dimaksud (disebut "kembar baik" dalam penelitian).

Jesse Adam
sumber
2
Baca jawaban itu dengan lebih hati-hati - semua itu adalah kesalahan yang diperbaiki oleh TCP.
Jacob Krall
4

Kesalahan transmisi dapat terjadi. Protokol layer-link biasanya berisi checksum atau kode koreksi kesalahan untuk menghindarinya, tetapi mereka tidak sempurna: ada kemungkinan kecil bahwa kesalahan tidak akan diperbaiki. Paket TCP juga mengandung checksum, yang mengurangi kemungkinan kesalahan sebesar 2 ^ 16. Itu membuat probabilitas yang sangat kecil, tetapi bukan nol dari kesalahan transmisi. Ini adalah jenis hal yang kebanyakan orang tidak akan pernah temui secara tidak sadar dalam hidup mereka, tetapi itu bukan pada kisaran kemungkinan yang pernah ada dalam satu miliar tahun dari kriptografi kriptografi.

Kesalahan perangkat keras pada klien, seperti kerusakan disk, tidak mungkin terdeteksi dengan memeriksa segera setelah mengunduh, karena checksum akan dihitung dari salinan yang di-cache. Sebaliknya, memeriksa media booting jika gagal melakukan booting bermanfaat - Anda benar-benar menguji media, dan Anda memiliki anggapan bahwa perangkat kerasnya mungkin buruk.

Alasan sebenarnya untuk menghitung checksum sebenarnya adalah untuk mendeteksi kesalahan tingkat perangkat lunak. Ini memang terjadi. Kemungkinan kesalahan termasuk:

  • File diunduh sebagian. Server dan peramban web cenderung buruk dalam mendeteksi koneksi yang terputus dan membersihkan sebagian file. Kesalahan itu bisa terjadi selama unduhan Anda, atau bisa juga selama unggahan, itu menambah.
  • Ada beberapa korupsi di sepanjang jalan. Misalnya, beberapa simpul perantara dalam distribusi file memutuskan untuk menerapkan konversi pengodean teks ke file biner. Atau beberapa server yang tidak terkonfigurasi melayani pesan kesalahan alih-alih konten.
  • Varian: file yang salah diunggah.
  • Jarang, tetapi bisa bermanfaat untuk melindungi terhadap: musuh mengubah file tetapi tidak dapat mengubah checksum referensi. Infrastruktur keamanan cenderung mempersulit penyerang untuk menyebarkan checksum yang tidak valid daripada file yang tidak valid. Sebagai contoh, file besar sering didistribusikan melalui mirror, sedangkan checksum dilayani oleh situs pusat dengan lebih sedikit peluang untuk gangguan (akses server hanya ke pemimpin proyek, distribusi melalui HTTPS).

Dalam praktiknya, memeriksa ukuran file yang diunduh menangkap kesalahan yang paling umum, yang terpotong atau file yang dikonversi secara tidak sah. Checksum memiliki keuntungan karena mereka mendeteksi lebih banyak masalah.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2

Secara teori, jaringan akan mengirimkan setiap segmen dengan benar dan mereka akan dipasang dengan benar pada disk dan tidak ada yang salah.

Pada kenyataannya, komputer adalah mesin dan perangkat lunak, yang keduanya dirancang dan dibangun oleh manusia yang bisa keliru. Dalam hal suatu unduhan entah bagaimana tidak turun tepat karena satu dan lain alasan, seperti unduhan yang melalui beberapa perangkat perantara apakah tidak berbahaya atau jahat yang merusak data, ada baiknya memiliki cara untuk memeriksa apakah file tersebut hampir pasti adalah diunduh sebagai replika akurat file di pihak penyedia.

Sebuah checksum berkualitas tinggi adalah metode yang dapat diandalkan untuk memvalidasi integritas data.

Jason
sumber
0

Tidak ada checksum yang dapat diandalkan 100% karena banyak file memetakan ke checksum yang sama.

Ketika kita menambahkan checksum lain ke dalam kereta, kita mengalikan probabilitas mendeteksi kesalahan.

Ada begitu banyak lalu lintas di internet sehingga kesalahan sebenarnya cukup umum.

chasly dari Inggris
sumber
Ada juga sedikit busuk.
Deer Hunter
Yang harus dideteksi oleh perangkat keras penyimpanan itu sendiri, tetapi karena dianggap sebagai fitur utama ZFS dan btrfs, saya ragu itu berfungsi dengan baik.
Max Ried
0

Checksum juga akan membantu mencegah unduhan yang rusak karena situasi berikut:

Server memiliki kesalahan internal saat melayani unduhan sehingga unduhan dihentikan.

Ketika itu terjadi, ada beberapa kemungkinan hasil:

  • Baik Server - implementasi server dari Chunked Transfer encoding adalah tidak kereta:
    • Klien yang baik (seperti cURL, wget) akan dapat memberi tahu Anda bahwa ini unduhan yang buruk karena potongan terminating tidak pernah dikirim dari server.
    • Klien yang buruk akan berpikir unduhan telah selesai karena tidak ada lagi data yang diterima dari server.
  • Server buruk - implementasi server dari pengkodean transfer chunked adalah buggy sehingga ia mengirim potongan terminating untuk unduhan yang buruk ini:
    • Klien mana pun akan menganggap unduhan ini berhasil diselesaikan.

Saya telah melihat perilaku ini di antara alat klien dan kerangka kerja server yang populer, jadi ketika Anda tidak menggunakan checksum, maka dalam kasus "server yang baik + klien yang buruk" atau "server yang buruk + klien apa pun", unduhan Anda yang rusak akan tidak diperhatikan .


sumber