Untuk perusahaan tempat saya bekerja, saya harus mengimplementasikan penerima soket yang sebagian besar mengambil data dalam bentuk UDP melalui koneksi lokal dari beberapa perangkat keras sensor khusus. Data yang dimaksud adalah paket UDP yang dibentuk dengan baik, tetapi yang menarik, data payload selalu berakhir dengan sebuah CRC16 checksum yang dibentuk menggunakan sisa data.
Saya menerapkan cek pada akhir saya, sesuai spesifikasi, tapi saya selalu bertanya-tanya apakah ini perlu. Lagi pula, bukankah protokol UDP itu sendiri membawa CRC 16-bit? Oleh karena itu, meskipun paket UDP dapat hilang atau rusak, saya mendapat kesan bahwa mereka tidak dapat rusak tanpa dibuang oleh perangkat keras jaringan sebelum mereka mencapai proses OS. Atau ada beberapa kasus penggunaan khusus yang saya lewatkan?
Perlu ditambahkan bahwa saya bekerja di industri pertahanan, yang saya yakin Anda bisa bayangkan, suka bersikap sangat eksplisit tentang hal-hal seperti ini, jadi saya bertanya-tanya apakah itu hanya kasus "OCD keamanan". ..
sumber
Jawaban:
Protokol UDP tidak menjamin bahwa pesan yang disampaikan dalam rangka atau disampaikan sama sekali, tapi itu tidak menjamin bahwa pesan-pesan yang tidak bisa dikirim secara lengkap dan tidak berubah dengan secara otomatis termasuk checksum 16-bit. Itu berarti menambahkan checksum 16-bit lain pada lapisan aplikasi biasanya berlebihan.
...biasanya....
Pertama, dengan IPv4 (bukan IPv6), checksum adalah opsional . Itu berarti Anda mungkin menggunakan konfigurasi eksotis yang tidak melakukan pembuatan dan validasi checksum (tetapi dalam hal ini Anda harus memperbaiki tumpukan jaringan Anda alih-alih juri-mencurangi ini pada lapisan aplikasi).
Kedua, dengan checksum 16bit, ada peluang 65536 bahwa ada pesan acak yang kebetulan memiliki checksum yang valid. Ketika margin kesalahan ini terlalu besar untuk kasus penggunaan Anda (dan dalam industri pertahanan saya bisa membayangkan beberapa di mana itu berada), menambahkan checksum CRC-16 lain akan semakin menguranginya. Tetapi dalam hal ini Anda mungkin mempertimbangkan untuk menggunakan intisari pesan yang tepat seperti SHA-256, bukan CRC-16. Atau lanjutkan dan gunakan tanda tangan kriptografi nyata. Ini melindungi tidak hanya terhadap korupsi acak tetapi juga korupsi yang disengaja oleh penyerang.
Ketiga, tergantung dari mana data berasal dan ke mana data itu pergi, mungkin rusak sebelum atau setelah dikirim melalui jaringan. Dalam hal itu checksum tambahan di dalam pesan mungkin melindungi integritas pesan lebih dari sekadar antara dua host jaringan.
sumber
Namun, UDP memang menyediakan checksum.
Jadi saya dapat melihat alasan yang sah untuk tidak mempercayai checksum UDP tetapi sama-sama tidak mempercayai checksum UDP dan kemudian mengimplementasikan checksum yang sama lemahnya pada level aplikasi tampaknya aneh.
Ada kemungkinan bahwa orang yang memilih protokol itu tidak tahu bahwa UDP menyediakan checksum atau bahwa protokol tersebut sebenarnya merupakan varian sedikit dari yang dirancang untuk dijalankan pada media yang tidak menyediakan checksum.
PS karena pos ini ditandai keamanan, ketahuilah bahwa checksum yang dimaksud dirancang untuk melindungi terhadap perubahan yang tidak disengaja. Melindungi dari modifikasi atau spoofing yang disengaja membutuhkan penggunaan fungsi hash kriptografi yang tahan terhadap tabrakan / preimage yang disengaja dan penggunaan beberapa mekanisme (misalnya tanda tangan yang dibuat menggunakan kunci publik) untuk memverifikasi hash itu sendiri belum dimodifikasi.
sumber