NetworkServerSimple
UnityWebRequest

Enkripsi Multiplayer Login

Important: UNet adalah solusi yang diuraikan, dan Solusi Multiplayer baru dan NetworkingSistem Unity yang memungkinkan game multiplayer di jaringan komputer. More info
Lihat di Glossary
(Netcode untuk GameObjects) sedang berkembang. Untuk informasi lebih lanjut dan langkah selanjutnya melihat informasi di .

Unity Multiplayer dapat menggunakan enkripsi Plug-inSatu set kode yang dibuat di luar Unity yang menciptakan fungsi dalam Unity. Ada dua jenis plug-ins yang dapat Anda gunakan di Unity: Managed plug-ins (diproduksi. Rakitan NET dibuat dengan alat-alat seperti Studio Visual) dan plug-ins asli (pustaka kode asli yang spesifik platform). More info
Lihat di Glossary
, sehingga semua data yang Anda kirim melalui jaringan melalui enkripsi plug-in sebelum dikirim. Ini memungkinkan Anda untuk melindungi permainan Anda terhadap kecurangan dengan manipulasi paket dan serangan pada server permainan khusus Anda.

Unity Multiplayer tidak memiliki plug-in enkripsi built-in, sehingga Anda harus menyediakan plug-in Anda sendiri yang menerapkan algoritma enkripsi, dan yang menerapkan fungsi wajib yang tercantum di bawah ini.

Diagram berikut menggambarkan bagaimana Unity Multiplayer menggunakan plug-in enkripsi Anda, jika Anda menyediakan satu.

The data flow when using an encryption plug-in with Unity Multiplayer
Aliran data saat menggunakan plug-in enkripsi dengan Unity Multiplayer

How to use an Encryption Plug-in

Untuk menginstruksikan permainan atau aplikasi Anda untuk menggunakan plug-in enkripsi, Anda harus memanggil UnityEngine.Networking.NetworkTransport.LoadEncryptionLibrary(path) di mana path adalah jalan ke plugin kompilasi Anda. Biasanya pada Windows akan menjadi string.Format("{0}/Plugins/UnetEncryption.dll", Application.dataPath).

Ketika Anda memanggil fungsi ini, Unity memeriksa file ada, dan itu menerapkan semua fungsi wajib (didaftarkan di bawah). Ini adalah fungsi yang sistem multiplayer Unity itu sendiri akan memanggil. Jika Anda membuat plugin enkripsi Anda sendiri, Anda mungkin perlu menambahkan lebih banyak fungsi yang Anda sebut dari kode C # Anda. Misalnya, untuk menginisialisasi algoritma Anda atau untuk menyediakan plug-in Anda dengan nilai-nilai utama. Anda dapat melakukan ini di cara biasa untuk plugin asli callable dari C#.

Catatan: Lokasi plugin dalam versi built dari permainan Anda tidak tentu sama dengan folder Aset Anda, dan mungkin berbeda antara platform target. Anda mungkin perlu menulis kode yang mendeteksi lingkungan runtime saat ini dan memilih jalan yang benar berdasarkan itu.

Anda bisa mendapatkan plugin enkripsi sampel dan proyek sampel Unity menggunakannya dari GitHub · Instragram · Pinterest · LiveJournal · 500px · Flickr · Dribbble · DeviantArt. Ini disediakan untuk menggambarkan titik awal untuk mengimplementasikan Plug-in Anda sendiri.

Mandatory Functions

Setiap enkripsi Plug-in Anda membuat atau menggunakan harus menyediakan fungsi berikut. Unity akan gagal memuat plug-in jika tidak mendefinisikan ini. Ini adalah fungsi yang akan disebut oleh runtime Unity itu sendiri. Plugin biasanya akan menyediakan fungsi additional untuk disebut dari kode C# pengguna, misalnya untuk mendaftarkan kunci.

Untuk Mengenkripsi Data

int UNetEncryptionLib_Encrypt(
    void * payload,
    int payload_len,
    void * dest,
    int & dest_len,
    int connection_id,
    bool isConnect);

Fungsi ini melakukan enkripsi. Ini disebut oleh jaringan Unity ketika paket dikirim melalui jaringan.

Parameters

  • payload adalah data yang akan dienkripsi.
  • payload_len adalah panjang penyangga payload, di byte.
  • dest adalah penyangga ke mana plugin harus menulis data terenkripsi.
  • dest_len adalah kapasitas dalam byte penyangga dest. Plugin harus mengganti nilai ini dengan jumlah byte benar-benar tertulis menjadi dest.
  • koneksi_id adalah pengenal lokal dari koneksi.
  • isConnect adalah benar jika paket ini adalah permintaan koneksi. Ketika ini benar, plugin harus dikatakan di depan waktu (oleh kode permainan) yang kunci untuk digunakan. Ketika ini salah, diharapkan bahwa plugin sudah memiliki pemetaan dari nilai ini ke kunci yang akan digunakan. Lihat plugin contoh untuk implementasi.

Nilai pengembalian

Encrypt harus kembali nol pada kesuksesan. Pada nilai pengembalian lainnya, runtime akan menjatuhkan paket tanpa mengirimkannya.

Untuk Mengenkripsi Data

int UNetEncryptionLib_Decrypt(
    void * payload,
    int payload_len,
    void * dest,
    int & dest_len,
    int & key_id);

Fungsi ini melakukan dekripsi. Ini disebut oleh jaringan Unity ketika paket diterima dari jaringan.

Parameters

  • payload adalah paket yang diterima.
  • payload_len adalah panjang dalam byte penyangga muatan.
  • dest adalah penyangga ke mana plugin harus menulis data yang terdekripsi.
  • dest_len adalah kapasitas dalam byte penyangga dest. Plugin harus mengganti nilai ini dengan jumlah byte benar-benar tertulis menjadi dest.
  • key_id adalah pengidentifikasi integer. Plugin harus menulis nilai yang unik mengidentifikasi kunci dekripsi yang digunakan. Pada server nilai ini akan dilewatkan kembali ke ConnectionIdAssigned jika koneksi baru diterima.

Nilai pengembalian

Decrypt harus kembali nol pada kesuksesan. Pada nilai pengembalian lainnya, paket dijatuhkan tanpa diproses lebih lanjut.

SafeMaxPacketSize

unsigned short UNetEncryptionLib_SafeMaxPacketSize(
    unsigned short mtu);

Anda harus memanggil fungsi ini dari permainan Anda untuk memodifikasi ConnectionConfig.PacketSize (juga dikenal sebagai unit transmisi maksimum, atau MTU) sebelum memanggil NetworkTransport.AddHost.

Misalnya, permainan Anda mungkin biasanya menggunakan MTU dari 1000 byte. Jika ConnectionConfig.PacketSize diatur ke 1000 byte sebelum melewatinya menjadi NetworkTransport.AddHost (melalui HostConfig.DefaultConfig), maka lapisan NetworkTransport akan mengirimkan tidak lebih dari 1000 byte dari cleartext dalam satu paket.

Plugin enkripsi biasanya akan menambahkan beberapa overhead karena informasi header yang ditempatkan sebelum payload, serta rounding-up payload ke ukuran blok enkripsi. Misalnya, jika Anda mengirim 18 byte dari cleartext, dan plug-in perlu menambahkan 49 byte header dan menggunakan AES untuk mengenkripsi data dengan ukuran blok 16 byte, maka algoritma akan menghasilkan paket 81 byte (18 byte cleartext rounds hingga 32 byte ciphertext, dan kemudian 49 byte tambahan header).

Unity memanggil fungsi ini untuk memastikan bahwa paket yang akan dikirim tidak melampaui batas apa yang memungkinkan untuk mengirim, mengingat jaringan MTU dan ekspansi ciphertext enkripsi Anda dan padding.

Parameters

  • mtu adalah unit transmisi maksimum. Ukuran paket terbesar yang Anda inginkan plugin untuk menghasilkan.

Nilai pengembalian

Jumlah maksimum dari cleartext yang harus disediakan untuk panggilan tunggal untuk Enkripsi, untuk plugin untuk menghasilkan paket tidak lebih besar dari MTU.

Anda harus mengatur ukuran paket maksimum dalam konfigurasi koneksi Anda untuk memberitahu Unity Multiplayer untuk membagi data sehingga sesuai dengan persyaratan enkripsi Anda. Jika Anda melihat bahwa beberapa pesan Anda tidak berhasil mentransmisikan jaringan, itu bisa karena mereka terjatuh karena melebihi ukuran paket maksimum.

ConnectionIdAssigned

void UNetEncryptionLib_ConnectionIdAssigned(
    int key_id,
    unsigned short connection_id);

Ini disebut pada server ketika koneksi baru diterima dan ID yang ditugaskan untuk itu.

Parameters

  • Sitemap Pengidentifikasi kunci, yang ditulis oleh panggilan sebelumnya yang sesuai untuk key_id untuk paket ini.Decrypt for this packet.
  • Sitemap Hubungan yang akan digunakan dari titik ini. Secara khusus, sebagai parameter untuk panggilan connection_id berikutnya ketika mengirim paket kembali ke klien.Encrypt calls when sending packets back to the client.
NetworkServerSimple
UnityWebRequest