Menggunakan protokol DTLS untuk game multi-pemain

8

Saya sedang mempertimbangkan untuk menggunakan protokol DTLS untuk game multiplayer online saya. Bagi mereka yang tidak tahu, ini pada dasarnya adalah port TLS ke datagram UDP.

Menurut makalah ini , overhead utama dari protokol berada pada fase jabat tangan, yang mengambil 950 ms dalam pengujian mereka. Namun, penelitian ini (tautan terputus; lihat salinan di archive.org ) menunjukkan bahwa selama transportasi terenkripsi yang sebenarnya, sering ada kurang dari 1 milidetik penundaan.

Ini terdengar seperti anugerah untuk permainan waktu nyata. Ini adalah saluran terenkripsi latensi rendah, sangat aman yang beroperasi melalui UDP. Ini memberikan keandalan dan perlindungan untuk fase jabat tangan, kemudian melangkah keluar dari jalan. Namun, saya belum pernah mendengar tentang itu digunakan dalam permainan sebelumnya, meskipun spesifikasi RFC ditulis pada tahun 2006 dan itu diterapkan di OpenSSL.

Mengapa setiap game tidak menggunakannya?

Kai
sumber
1
Saya tidak tahu, kedengarannya hebat ... Mungkin tidak didukung dalam banyak bahasa populer? Apakah ada perpustakaan yang bagus dan berfungsi untuk itu? Saya tidak menggunakannya hanya karena saya belum pernah mendengarnya dan saya ragu node.js mendukungnya ...
jcora
gamedev.stackexchange.com/faq#dontask "Mengapa tidak semua game menggunakannya" tidak menyentuh masalah: apakah ini berguna atau tidak untuk tujuan Anda .
Tetrad
1
@Tetrad Masalahnya adalah kedengarannya bagus tapi tidak banyak digunakan. Itu adalah misteri terakhir dalam menentukan apakah itu berguna untuk tujuan saya.
Kai
1
@Tetrad saya setuju. Namun, mengetahui sejarah perpustakaan yang saya pilih penting bagi saya. Tentu saja, jika itu populer, itu membuat pengembangan lebih mudah.
Kai
1
Karena penasaran, bagaimana Anda tahu bahwa game tidak menggunakannya?
Trevor Powell

Jawaban:

4

Mengapa setiap game tidak menggunakannya? Pertama, saya ragu sebagian besar orang bahkan pernah mendengar protokol ini. Keamanan jaringan tidak dikenal di kalangan pengembang game dan ini adalah varian yang cukup tidak jelas. Kedua, tidak semua game menggunakan UDP. Ketiga, kinerja menjadi perhatian. Seperlima dari penundaan milidetik pada setiap paket 200 byte jelas berarti Anda hanya dapat menangani 5.000 paket per detik walaupun sistem Anda sama sekali tidak melakukan hal lain (yang tidak mungkin). Dan ada perbandingan kinerja penulisan - enkripsi bisa lebih mahal daripada dekripsi.

Kylotan
sumber
2

Apa manfaatnya?

Jangan salah mengaburkan kebingungan sebagai metode keamanan dalam game multi-pemain. Mampu mencegat / menyuntikkan lalu lintas biasanya tidak menjadi masalah, karena klien seharusnya tidak dapat memodifikasi gamestate di luar parameter normal (alias curang). Jika Anda mengenkripsi lalu lintas sebagai cara untuk menghindari hal ini, maka Anda mungkin salah menuliskan netcode Anda, dan perlu memindahkan lebih banyak sisi server simulasi.

Jadi .. sebagai jawaban atas pertanyaan Anda - keamanan semacam ini biasanya tidak penting di game.

Maaf jika saya mungkin salah paham. Mungkin Anda bisa menjelaskan mengapa menurut Anda game harus menggunakan ini. Anda kemudian dapat menemukan jawaban untuk pertanyaan Anda (jika ini bukan itu)

ProPuke
sumber
5
Enkripsi seperti ini menguntungkan pemain seperti halnya TLS di situs web - artinya tidak ada orang selain operator game, yang Anda percayai, yang mengirimkan permintaan kepada Anda atau mengintip apa yang Anda lakukan. Misalnya, tidak ada yang memotong paket Anda dan membuat Anda memperdagangkan barang. Tidak ada yang memalsukan log obrolan atas nama Anda.
1
Yang penting, ini dapat digunakan untuk transaksi yang aman, seperti membeli barang dari toko. Selain itu, itu mencegah paket sniffing dan serangan man-in-the-middle. Ini bukan pengganti terminal bisu tetapi sepertinya cara yang mudah dan murah untuk sepenuhnya menghilangkan vektor serangan.
Kai
2
Keduanya poin yang valid. Permintaan maaf karena melewatkan itu: S Namun, pertanyaannya memang mengatakan "setiap pertandingan", dan berfokus pada permainan real-time latensi rendah, di mana 2 kasus di atas tampaknya terbatas pada mmorpg. Jadi, sebagai jawaban untuk "setiap pertandingan" saya masih akan mengatakan bahwa dalam kebanyakan kasus itu tidak perlu. (Saya tidak berpikir 2 di atas akan berguna dalam permainan crysis, misalnya)
ProPuke
1
Untuk hal-hal seperti membeli barang atau mengirim obrolan, cukup gunakan HTTPS API biasa. Tidak ada alasan sama sekali bahwa seluruh permainan harus menjalankan beberapa protokol UDP yang dioptimalkan aksi-fokus, kecuali jika Anda memiliki masalah bandwidth gila (yang DTLS akan gagal, Anda perlu membungkus paket untuk menghindari ukuran pesan- serangan berbasis).
Sean Middleditch