Apa yang Anda gunakan untuk bundel / mengenkripsi data?


14

Semakin banyak gim yang menempuh rute yang didorong data yang berarti perlu ada lapisan keamanan di sekitar manipulasi yang mudah. Saya telah melihatnya di mana game benar-benar mengumpulkan aset mereka (audio, seni, data) dan saya bertanya-tanya bagaimana mereka mengelola itu? Apakah ada aplikasi / perpustakaan yang akan membundel dan membantu Anda mengelola aset di dalamnya? Jika tidak, adakah sumber daya bagus yang akan Anda tuju untuk pengemasan / pembongkaran / enkripsi?

Pertanyaan spesifik ini berkisar pada C ++, tetapi saya akan terbuka untuk mendengar bagaimana ini dikelola dalam C # / XNA juga.

Untuk lebih jelasnya - saya tidak merencanakan solusi untuk mencegah peretasan. Pada level fundamental kita semua memanipulasi 0 dan 1. Namun, kami ingin menjaga 99% orang yang memainkan game dari hanya memodifikasi file XML yang digunakan untuk membangun dunia game. Saya telah melihat banyak game menggabungkan semua sumber dayanya bersama. Saya hanya ingin tahu tentang metode yang mereka gunakan.


Pertanyaan bagus, sementara saya tidak percaya ada cara untuk melindungi 100%, saya percaya ada cara rapi untuk memadatkan dan mengaburkannya dan saya ingin tahu lebih banyak tentang itu ...
Prix

Perlu dipertanyakan apakah aset seni / audio Anda bahkan harus dianggap "sensitif". Banyak game yang secara sengaja memaparkan aset mereka kepada pemain, untuk mendukung komunitas mod yang sehat, yang pada gilirannya dapat menambah nilai lebih pada game (bahkan tanpa biaya bagi pengembang, bahkan).
Ian Schreiber

Saya terutama peduli dengan data sensitif yang menggerakkan game berbasis data (file xml, misalnya). Saya baru saja melihat game menggabungkan semuanya menjadi satu atau dua file.
David McGraw 3-10

4
Apa yang salah dengan para pemain yang bermain-main dengan data itu?
jsimmons

untuk mengalahkan drum saya sendiri .. CFL: iki.fi/sol/cfl
Jari Komppa

Jawaban:


8

Strategi yang baik adalah membuat format arsip Anda sendiri dari awal, dan menjadikannya format indeks dengan tabel yang menunjuk ke potongan data alih-alih menyimpan seluruh file berurutan dalam arsip Anda, kemudian mengenkripsi tabel indeks Anda dan mengkompres setiap potongan secara terpisah menggunakan LZMA / Bzip2.

Pendekatan lain adalah menggunakan bit generator data prosedural di sana-sini (Jika Anda ingin pergi sejauh itu Anda bahkan bisa mendapatkan 'parameter' untuk generator tersebut dari server on-line sebagai ukuran tambahan), Dan dengan membongkar beberapa pekerjaan ke GPU Anda juga dapat mencegah dump memori penuh dan menebus beberapa kinerja yang hilang.

Namun saya menemukan teknik seperti itu untuk secara umum menghambat kinerja dan membuang waktu pengembangan, sementara itu tidak menawarkan apa pun kepada pengguna akhir tetapi masalah potensial dan bug yang tidak dibutuhkan.

Namun demikian, tidak ada yang 100% aman.


+1 untuk ini. Kompresi memenuhi kebutuhan untuk mengaburkan, dan akan meningkatkan waktu pemuatan dan jejak aplikasi. Arsip / pengepakan data akan memerlukan lapisan abstraksi, jadi menggabungkannya dengan sesuatu yang dapat memuat / mendekompresi di tempat seharusnya tidak terlalu banyak rekayasa. Jika Anda menggunakan kompresi, saya akan memastikan untuk menjaga logika kompresi / dekompresi terpisah dari pemuatan / arsip. Dengan begitu Anda dapat bertukar dalam algoritma yang lebih baik di kemudian hari, infrastruktur yang dibutuhkan tidak berubah di antara algoritma.
MrCranky

@MrCranky: Jika Anda melihat cara EA melakukannya dengan format arsip .package (DBPF) mereka (digunakan dalam game SPORE dan The Sims), Anda sebenarnya akan melihat ini dalam aksi. Mesin mereka memiliki bidang tambahan dalam tabel indeks untuk "tipe kompresi", kode internal untuk algoritma apa yang digunakan. Mereka menggunakan algoritma kompresi berbeda berdasarkan pada tipe chunk (potongan teks menggunakan kompresi khusus misalnya) Sistem versi yang mereka gunakan juga memungkinkan untuk integrasi mod dan kompatibilitas mundur. Lebih lanjut tentang format DBPF di sini: simswiki.info/DatabasePackedFile
voodooattack

Hal-hal yang menarik: Saya hanya pernah melakukannya pada waktu kompilasi dengan #define, tetapi runtime membuka beberapa kemungkinan bagus (seperti bisa mengubah jenis kompresi Anda tanpa harus membangun kembali setiap file untuk game Anda).
MrCranky

11

Jangan kirimkan data sensitif.

Tidak ada cara untuk mengirimkan data terenkripsi sehingga hanya game yang dapat mengaksesnya. Anda dapat berusaha sangat keras tetapi Anda dengan cepat masuk ke masalah DRM.

Jika Anda ingin menjaga aset gim Anda jauh dari mencongkel mata.

  1. zip itu
  2. xor berkas
  3. ubah ekstensi menjadi sesuatu yang membosankan (mis. tidak my_level.zip.xor, gunakan my_level.map).

Itu akan menghentikan 95% pengguna nakal. 5% lainnya akan mendapatkannya tidak peduli apa yang Anda lakukan.
Anda tidak perlu benar-benar membuka zip dan xor. Anda bisa menggunakan lzma dan menggunakan AES dengan kunci yang dikenal. Intinya adalah untuk tidak menghabiskan banyak waktu untuk itu.


Itulah yang biasanya saya lihat di sekitar dari sebagian besar game ... cookie untuk Anda.
Prix

2
Benar-benar hanya zip + rename mungkin sudah cukup.
coderanger

1
Saya tidak berpikir begitu, saya suka That will stop 95% of mischeivieous users.keluar dari menerobos masuk, sementara saya percaya masih ada orang yang benar-benar akan mendapatkannya saya akan menghargai jika tidak semua dan masing-masing mampu. Saat ini sebagian besar anak-anak berusia 10 tahu cara membuka file di notepad dan mengganti nama ...
Prix

1
Tahu caranya, ya. Akan peduli, tidak.
coderanger

zip + rename tidak cukup. Linux jarang menggunakan ekstensi file untuk menentukan jenis file. Sebaliknya ia melihat beberapa byte pertama dan menggunakannya untuk menentukan tipenya. Zip yang diganti namanya masih muncul sebagai zip di Linux. Windows XP tidak melakukan ini, ia masih menggunakan ekstensi. Saya tidak tahu bagaimana Windows7 melakukannya, tetapi saya berharap bahwa di masa depan Windows akan menggunakan teknik yang sama.
deft_code

4

Menghabiskan banyak waktu untuk hal ini mungkin bodoh. Ada alat untuk mengambil tekstur dan memodelkan data langsung dari GPU, dan suara dapat dengan mudah diarahkan ke perangkat loopback virtual. Apa pun yang perlu benar-benar aman harus hidup di server dan hanya berfungsi melalui tantangan / respons. Melakukan validasi data klien adalah cerita lain, sesuatu yang lebih seperti Valve's -verify_all. Itu masih sulit, karena Anda tidak bisa mempercayai executable lokal untuk menegakkannya (atau setidaknya Anda tidak bisa mempercayainya lebih dari Anda mempercayai sistem anti-cheat titik akhir Anda, yang juga merupakan ide konyol).


4

Pekerjaan saya adalah perangkat lunak antitamper. Saya kenal seseorang yang seorang cracker game jadul. Dia memecahkan game seperti bernafas. Anda tidak dapat menghentikan orang seperti dia. Jika game Anda cukup populer, beberapa versi cracked game Anda akan mengenai situs torrent hanya beberapa hari setelah rilis, apa pun yang Anda lakukan. Saran saya adalah lakukan saja seminimal mungkin untuk mencegah rata-rata joe yang berpikir dia mungkin ingin memberikan teknik menusuk terbalik ini.


1
Itulah tujuannya. Saya sama sekali tidak punya keinginan untuk melawan peretas.
David McGraw

1

Pertanyaan yang bagus tapi ini masih jauh dari pertanyaan mudah untuk dijawab.
Dari pengalaman saya dengan keamanan data, Anda harus memikirkan hal-hal berikut:

1) Apa yang Anda amankan, dari siapa dan apa dampaknya jika data tersebut tidak aman - keamanan jauh lebih banyak tentang penilaian risiko daripada solusi teknis sistematis
2) Saya menganggap platform Anda adalah desktop (misalnya Windows / OSX) dalam hal ini Anda memiliki ruang masalah yang berbeda dari perangkat keras berpemilik seperti PS3 / Xenon yang memiliki upaya sendiri pada tingkat keamanan kernel (apakah ini merupakan solusi yang valid terbuka untuk diperdebatkan)
3) Enkripsi! = keamanan. Enkripsi hanya menjamin bahwa data Anda tidak dapat dibaca , itu tidak menjamin bahwa data Anda tidak dapat ditulis atau diputar ulang / diproksikan.

Jika persyaratan Anda adalah untuk membuat bukti kerusakan data Anda, maka Anda perlu memikirkan hashing data Anda (lebih disukai dengan SHA-256 atau SHA-512) sistem.
Perlu juga diketahui bahwa menambahkan teknologi enkripsi ke produk Anda mungkin memiliki implikasi hukum karena pembatasan ekspor (teknologi enkripsi digolongkan sebagai teknologi kelas senjata terbatas, percaya atau tidak) jadi disarankan untuk menggunakan perpustakaan yang telah mengatasi masalah hukum ini.
Terakhir - tidak pernah menggulung teknologi enkripsi Anda sendiri - gunakan algoritma yang terkenal, terdokumentasi, diteliti seperti AES, Blowfish, RSA, dll.

ps Kunci Publik / Privat tidak cocok atau praktis untuk mengenkripsi data dalam jumlah besar maka DRM / PGP dll. menggunakan sistem RSA + simetris hybrid yaitu mengamankan kunci simetris dengan RSA kemudian melakukan enkripsi simetris standar menggunakan kunci itu

Ini adalah subjek kompleks yang sangat besar dan saya pasti tidak melakukannya dengan adil

Semoga itu bisa membantu


1

Jika Anda menginginkan contoh format yang dirancang dan dibuat (mungkin overengineered) karena ukurannya kecil (dapat dikompres), sangat aman dan fleksibel, Anda harus melihat ke format MPQ Blizzard.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

Tata letak arsip umum adalah sebagai berikut:

Arsip File File Data File - File Khusus Tabel Hash Tabel Blok Extended Tabel Blok Kuat Tanda tangan digital

Format ini memiliki SEMUA. Blocktable, extended blocktable, data dipecah menjadi beberapa sektor (untuk streaming mudah), dukungan untuk 7 (!) Algoritma kompresi (jika Anda menghitung kompresi suara) yang dapat dikombinasikan secara sewenang-wenang, tanda tangan digital yang lemah, tanda tangan digital yang kuat dan sebagainya.

Jika Anda membeli API dari Blizzard yang berkaitan dengan arsitektur file, Anda akan mendapatkan semua yang Anda butuhkan dan banyak lagi.


Terima kasih atas tautannya, saya tidak pernah berpikir untuk melihat lebih dalam tentang detail MPQ (dan umumnya menganggap mereka tidak akan tersedia)
Bill

Jika begitu aman, mengapa itu direkayasa balik sedemikian rupa dan bahkan memiliki perpustakaan pihak ke-3 untuk berinteraksi dengannya? ;-)
coderanger

Sebagian besar (baca: semua) alat untuk berinteraksi dengan file * .mpq bergantung pada Stormlib, yang ditulis dan dikelola oleh satu orang.

Sejauh yang saya tahu, Stormlib mengharuskan Anda untuk memiliki game asli yang berasal dari arsip, karena kunci untuk dekripsi disimpan dalam executable. Namun, alasan terbesar mengapa begitu aman bukan karena tidak mungkin untuk dibobol. Tetapi untuk data on-the-fly yang dikirim melalui internet, tidak ada duanya. Data ini sangat terenkripsi sehingga akan sia-sia bagi pihak ketiga untuk mendekripsi dengan cepat.

Dan faktanya dengan 'World of Warcraft', Blizzard telah memelopori teknologi streaming, memungkinkan Anda untuk bermain game dengan hanya beberapa persen dari seluruh data yang diunduh ke hard drive Anda. Format * .mpq unggul dalam jenis pekerjaan ini. Belum lagi ketika installer Starcraft 2 dirilis oleh Blizzard beberapa hari sebelum rilis resmi game, arsipnya sangat dienkripsi sehingga mereka tidak dapat dibuka sampai setelah game dirilis. : P

0

Karena ini baru-baru ini dibangkitkan, pertanyaan Anda (dan oleh karena itu semua jawaban sejauh ini) tampaknya hanya berurusan dengan memuat file, yang hanya seaman dieksekusi yang ingin memuatnya. Pada PC tidak ada yang benar-benar aman (Anda hanya menunda orang), Anda dapat memeriksa hal-hal di server, tetapi bahkan pemeriksaan itu dapat dihapus sehingga exe modded dapat dijalankan tidak peduli apa. Konsol masih "cukup" aman sehingga dalam kebanyakan kasus di sana saya menghasilkan hash file penting, kemudian menandatangani hash dengan kunci pribadi, embed kunci publik dalam kode dan memverifikasi hash aman terhadap file.

Saya pikir saya akan melemparkan serangan lain ke dalam percakapan, sesuatu yang hanya saya temui tahun lalu karena saya tidak cenderung mengirim banyak pada PC. Cheat Engine adalah program kecil yang sangat rapi yang hampir secara otomatis membuat peretasan Anda sendiri (yang berarti siapa pun dapat menggunakannya). Cukup canggih dalam apa yang bisa dilakukannya, banyak hacks / cheat yang saya lihat orang jual dibuat oleh ini atau sesuatu yang sangat menyukainya dari apa yang saya lihat (semua yang pasar massal). Dengan beberapa pekerjaan Anda dapat melindungi terhadap hal-hal seperti ini lagi, saya kira itu semua tergantung pada seberapa populer permainan itu dan jika seseorang cukup peduli untuk mengganggu.

Opps, lupa menyebutkan lib yang baik untuk enkripsi (dalam C ++) adalah LibTomCrypt .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.