Kunci lisensi adalah standar de facto sebagai tindakan anti-pembajakan. Sejujurnya, ini mengejutkan saya sebagai (dalam) Keamanan Melalui Ketidakjelasan , meskipun saya benar-benar tidak tahu bagaimana kunci lisensi dihasilkan. Apa contoh yang baik (aman) dari pembuatan kunci lisensi? Apa primitif kriptografi (jika ada) yang mereka gunakan? Apakah ini pesan intisari? Jika demikian, data apa yang akan mereka hashing? Metode apa yang digunakan pengembang untuk membuat cracker kesulitan membangun generator utama mereka sendiri? Bagaimana generator utama dibuat?
security
cryptography
license-key
benteng
sumber
sumber
Jawaban:
Untuk kunci CD jadul, itu hanya masalah membuat algoritma untuk kunci CD mana (yang bisa berupa string apa saja) yang mudah dibuat dan mudah diverifikasi, tetapi rasio kunci CD yang valid terhadap CD yang tidak valid -keys sangat kecil sehingga menebak-nebak kunci CD tidak akan membuat Anda valid.
CARA YANG TIDAK BENAR UNTUK MELAKUKANNYA:
Starcraft dan Half-life keduanya menggunakan checksum yang sama, di mana digit ke-13 memverifikasi ke-12 pertama. Dengan demikian, Anda bisa memasukkan apa pun untuk 12 digit pertama, dan menebak ke-13 (hanya ada 10 kemungkinan), yang mengarah ke yang terkenal itu.
1234-56789-1234
Algoritma untuk memverifikasi bersifat publik, dan terlihat seperti ini:
CARA YANG BENAR UNTUK MELAKUKANNYA
Windows XP mengambil cukup banyak informasi, mengenkripsi, dan menempatkan pengkodean huruf / angka pada stiker. Ini memungkinkan MS untuk memverifikasi kunci Anda dan mendapatkan jenis produk (Rumah, Profesional, dll.) Secara bersamaan. Selain itu, memerlukan aktivasi online.
Algoritma lengkapnya agak rumit, tetapi diuraikan dengan baik dalam makalah ini (sepenuhnya legal!), Yang diterbitkan di Jerman.
Tentu saja, apa pun yang Anda lakukan, kecuali jika Anda menawarkan layanan online (seperti World of Warcraft ), semua jenis perlindungan salinan hanyalah sebuah kios: sayangnya, jika itu adalah nilai permainan apa pun, seseorang akan rusak (atau setidaknya mengelak ) algoritma CD-key, dan semua perlindungan hak cipta lainnya.
CARA NYATA YANG BENAR - BENAR MELAKUKANNYA:
Untuk layanan online, hidup sedikit lebih sederhana, karena bahkan dengan file biner Anda perlu mengautentikasi dengan server mereka untuk memanfaatkannya (mis. Punya akun WoW). Algoritma CD-key untuk World of Warcraft - digunakan, misalnya, ketika membeli kartu bermain - mungkin terlihat seperti ini:
Untuk layanan online, tidak ada alasan untuk tidak menggunakan skema di atas; menggunakan hal lain dapat menyebabkan masalah .
sumber
1234-56789-1234
kunci Starcraft, tetapi saya ingat bahwa hanya butuh sekitar lima menit untuk "memaksa" verifikasi dengan menekan tombol dan mencoba lagi.Ketika saya awalnya menulis jawaban ini, ada asumsi bahwa pertanyaan itu mengenai validasi kunci luring. Sebagian besar jawaban lain membahas verifikasi online, yang secara signifikan lebih mudah ditangani (sebagian besar logika dapat dilakukan di sisi server).
Dengan verifikasi offline, hal yang paling sulit adalah memastikan bahwa Anda dapat menghasilkan sejumlah besar kunci lisensi unik, dan tetap mempertahankan algoritma yang kuat yang tidak mudah dikompromikan (seperti angka cek sederhana)
Saya tidak terlalu berpengalaman dalam matematika, tetapi saya tersadar bahwa salah satu cara untuk melakukan ini adalah dengan menggunakan fungsi matematika yang memplot grafik
Garis yang diplot dapat memiliki (jika Anda menggunakan frekuensi yang cukup baik) ribuan titik unik, sehingga Anda dapat menghasilkan kunci dengan memilih titik-titik acak pada grafik itu dan menyandikan nilainya dengan beberapa cara
Sebagai contoh, kita akan memplot grafik ini, memilih empat poin dan mengkodekan ke dalam string sebagai "0, -500; 100, -300; 200, -100; 100.600"
Kami akan mengenkripsi string dengan kunci yang dikenal dan diperbaiki (sangat lemah, tetapi melayani tujuan), kemudian mengonversi byte yang dihasilkan melalui Base32 untuk menghasilkan kunci terakhir
Aplikasi kemudian dapat membalikkan proses ini (base32 ke bilangan real, mendekripsi, mendekodekan poin) dan kemudian memeriksa masing-masing poin tersebut pada grafik rahasia kami.
Ini adalah sejumlah kecil kode yang akan memungkinkan sejumlah besar kunci unik dan valid dihasilkan
Namun itu sangat aman dengan ketidakjelasan. Siapa pun yang meluangkan waktu untuk membongkar kode akan dapat menemukan fungsi grafik dan kunci enkripsi, kemudian membuat generator kunci, tetapi mungkin cukup berguna untuk memperlambat pembajakan kasual.
sumber
Periksa artikel ini tentang Verifikasi Kunci Sebagian yang mencakup persyaratan berikut:
Kunci lisensi harus cukup mudah untuk diketik.
Kita harus dapat memasukkan (mencabut) kunci lisensi ke dalam kasus tolak bayar atau pembelian dengan kartu kredit curian.
Tidak ada "telepon rumah" untuk menguji kunci. Meskipun praktik ini menjadi semakin lazim, saya masih tidak menghargainya sebagai pengguna, jadi tidak akan meminta pengguna saya untuk menggunakannya.
Seharusnya cracker tidak mungkin membongkar aplikasi yang dirilis dan menghasilkan "keygen" yang berfungsi dari itu. Ini berarti bahwa aplikasi kami tidak akan sepenuhnya menguji kunci untuk verifikasi. Hanya beberapa kunci yang akan diuji. Selanjutnya, setiap rilis aplikasi harus menguji bagian yang berbeda dari kunci, sehingga kunci palsu yang didasarkan pada rilis sebelumnya tidak akan berfungsi pada rilis selanjutnya dari perangkat lunak kami.
Penting: seharusnya tidak mungkin bagi pengguna yang sah untuk secara tidak sengaja mengetik kunci yang tidak valid yang akan berfungsi tetapi gagal pada versi yang akan datang karena kesalahan ketik.
sumber
Saya tidak punya pengalaman dengan apa yang sebenarnya orang lakukan untuk menghasilkan kunci CD, tetapi (dengan asumsi Anda tidak ingin pergi ke jalan aktivasi online) di sini adalah beberapa cara orang bisa membuat kunci:
Mengharuskan bahwa angka dapat dibagi oleh (katakanlah) 17. Sepele untuk ditebak, jika Anda memiliki akses ke banyak kunci, tetapi mayoritas string potensial akan tidak valid. Serupa akan membutuhkan bahwa checksum dari kunci cocok dengan nilai yang diketahui.
Mensyaratkan bahwa paruh pertama kunci, ketika digabungkan dengan nilai yang diketahui, hash turun ke bagian kedua kunci. Lebih baik, tetapi program masih berisi semua informasi yang diperlukan untuk menghasilkan kunci serta memvalidasi mereka.
Hasilkan kunci dengan mengenkripsi (dengan kunci pribadi) nilai yang diketahui + bukan. Ini dapat diverifikasi dengan mendekripsi menggunakan kunci publik yang sesuai dan memverifikasi nilai yang diketahui. Program sekarang memiliki informasi yang cukup untuk memverifikasi kunci tanpa dapat menghasilkan kunci.
Ini semua masih terbuka untuk diserang: programnya masih ada dan dapat ditambal untuk memotong cek. Cleverer mungkin mengenkripsi bagian dari program menggunakan nilai yang diketahui dari metode ketiga saya, daripada menyimpan nilai dalam program. Dengan begitu Anda harus menemukan salinan kunci sebelum Anda bisa mendekripsi program, tetapi masih rentan disalin setelah didekripsi dan meminta satu orang mengambil salinan resmi mereka dan menggunakannya untuk memungkinkan orang lain mengakses perangkat lunak.
sumber
CD-Keys tidak terlalu aman untuk hal-hal non-jaringan, jadi secara teknis mereka tidak perlu dibuat dengan aman. Jika Anda menggunakan .net, Anda hampir dapat menggunakan Guid.NewGuid ().
Penggunaan utama mereka saat ini adalah untuk komponen Multiplayer, di mana server dapat memverifikasi Kunci CD. Untuk itu, tidak penting seberapa aman itu dihasilkan saat bermuara pada "Cari apa saja yang dilewatkan dan periksa apakah orang lain sudah menggunakannya".
Yang sedang berkata, Anda mungkin ingin menggunakan algoritme untuk mencapai dua tujuan:
Yang sedang berkata, Anda masih ingin distribusi besar dan keacakan untuk menghindari bajak laut hanya menebak kunci yang valid (itu valid dalam database Anda tetapi masih dalam kotak di rak toko) dan mengacaukan pelanggan yang sah yang kebetulan membeli kotak itu .
sumber
Jika Anda tidak terlalu peduli dengan panjang kunci, metode yang cukup dicoba dan benar adalah penggunaan enkripsi kunci publik dan pribadi.
Pada dasarnya memiliki beberapa jenis tanda tangan dan tetap.
Misalnya: 0001-123456789
Di mana 0001 adalah milik Anda dan 123456789 adalah tanda tangan tetap Anda.
Kemudian mengenkripsi ini menggunakan kunci pribadi Anda untuk mendapatkan kunci CD Anda yang kira-kira seperti: ABCDEF9876543210
Kemudian sebarkan kunci publik dengan aplikasi Anda. Kunci publik dapat digunakan untuk mendekripsi kunci CD "ABCDEF9876543210", yang kemudian Anda verifikasi bagian tandatangan tetap.
Ini kemudian mencegah seseorang menebak-nebak apa kunci CD untuk nonce 0002 karena mereka tidak memiliki kunci pribadi.
Satu-satunya kelemahan utama adalah bahwa kunci CD Anda akan cukup panjang ketika menggunakan kunci pribadi / publik berukuran 1024-bit. Anda juga harus memilih waktu yang cukup lama sehingga Anda tidak mengenkripsi sejumlah informasi sepele.
Sisi baiknya adalah metode ini akan berfungsi tanpa "aktivasi" dan Anda dapat menggunakan hal-hal seperti alamat email atau nama pemegang lisensi sebagai yang pertama.
sumber
Sistem kunci harus memiliki beberapa properti:
Salah satu solusi yang akan memberi Anda ini adalah dengan menggunakan skema penandatanganan kunci publik . Mulailah dengan "hash sistem" (katakan ambil mac pada NIC, diurutkan, dan info CPU-ID, ditambah beberapa hal lain, gabungkan semuanya bersama-sama dan ambil MD5 dari hasilnya (Anda benar-benar tidak ingin menjadi menangani informasi yang dapat diidentifikasi secara pribadi jika Anda tidak harus)) menambahkan nomor seri CD dan menolak untuk mem-boot kecuali beberapa kunci registri (atau beberapa datafile) memiliki tanda tangan yang valid untuk gumpalan. Pengguna mengaktifkan program dengan mengirimkan gumpalan kepada Anda dan Anda mengirim kembali tanda tangan.
Masalah potensial termasuk bahwa Anda menawarkan untuk menandatangani hampir semua hal sehingga Anda perlu mengasumsikan seseorang akan menjalankan teks biasa yang dipilih dan / atau serangan ciphertext yang dipilih . Itu dapat dikurangi dengan memeriksa nomor seri yang disediakan dan menolak untuk menangani permintaan dari yang tidak valid serta menolak untuk menangani lebih dari jumlah kueri yang diberikan dari s / n yang diberikan dalam suatu interval (katakanlah 2 per tahun)
Saya harus menunjukkan beberapa hal: Pertama, penyerang yang terampil dan bertekad akan dapat mem-bypass setiap dan semua keamanan di bagian-bagian yang mereka memiliki akses tidak terbatas ke ( yaitu segala sesuatu di CD), yang terbaik yang dapat Anda lakukan pada akun itu adalah membuatnya lebih sulit untuk mendapatkan akses tidak sah daripada mendapatkan akses yang sah. Kedua, saya bukan ahli sehingga bisa ada kelemahan serius dalam skema yang diusulkan ini.
sumber
Ada juga perilaku DRM yang menggabungkan beberapa langkah ke proses. Salah satu contoh paling terkenal adalah salah satu metode Adobe untuk memverifikasi pemasangan Creative Suite mereka. Metode CD Key tradisional yang dibahas di sini digunakan, kemudian jalur dukungan Adobe disebut. Kunci CD diberikan kepada perwakilan Adobe dan mereka memberikan kembali nomor aktivasi untuk digunakan oleh pengguna.
Namun, meskipun telah dipecah menjadi beberapa langkah, ini menjadi mangsa metode cracking yang sama yang digunakan untuk proses normal. Proses yang digunakan untuk membuat kunci aktivasi yang diperiksa terhadap kunci CD asli dengan cepat ditemukan, dan generator yang menggabungkan kedua kunci dibuat.
Namun, metode ini masih ada sebagai cara bagi pengguna yang tidak memiliki koneksi internet untuk memverifikasi produk. Ke depan, mudah untuk melihat bagaimana metode ini akan dihilangkan karena akses internet menjadi di mana-mana.
sumber
Semua CD hanya menyalin algoritma perlindungan ketidaknyamanan pengguna jujur sambil tidak memberikan perlindungan terhadap pembajakan apa pun.
"Bajak laut" hanya perlu memiliki akses ke satu cd yang sah dan kode aksesnya, ia kemudian dapat membuat n salinan dan mendistribusikannya.
Tidak masalah seberapa aman Anda secara kriptografis membuat kode, Anda harus menyediakan ini dengan CD dalam teks biasa atau pengguna yang sah tidak dapat mengaktifkan perangkat lunak.
Skema yang paling aman melibatkan pengguna yang memberikan rincian peranti kepada pemasok perangkat lunak yang akan menjalankan peranti lunak tersebut (nomor seri cpu, alamat mac, alamat Ip, dll.), Atau, memerlukan akses online untuk mendaftarkan perangkat lunak di situs web pemasok dan sebagai imbalannya menerima token aktivasi. Opsi pertama membutuhkan banyak administrasi manual dan hanya layak untuk perangkat lunak bernilai sangat tinggi, opsi kedua dapat dipalsukan dan benar-benar menyebalkan jika Anda memiliki akses jaringan terbatas atau Anda terjebak di balik firewall.
Secara keseluruhan jauh lebih mudah untuk membangun hubungan saling percaya dengan pelanggan Anda!
sumber
Anda dapat menggunakan dan menerapkan API Lisensi Aman dari ( https://www.nuget.org/packages/SystemSoulLicense/ ) dengan sangat mudah di Proyek Perangkat Lunak Anda menggunakannya, (Anda perlu mengunduh aplikasi desktop untuk membuat lisensi aman dari https: / /www.systemsoulsoftwares.com/ ) 1. Membuat UID unik untuk perangkat lunak klien berdasarkan Sistem Perangkat Keras (CPU, Motherboard, Hard-drive) (UID bertindak sebagai Kunci Pribadi untuk sistem unik itu) 2. Memungkinkan untuk mengirim string lisensi Terenkripsi dengan sangat mudah ke sistem klien, Ia memverifikasi string lisensi dan hanya bekerja pada sistem tertentu 3. Metode ini memungkinkan pengembang perangkat lunak atau perusahaan untuk menyimpan lebih banyak informasi tentang perangkat lunak / pengembang / layanan distributor / fitur / klien 4. Metode ini memberikan kontrol untuk mengunci dan membuka kunci fitur perangkat lunak klien, menghemat waktu pengembang untuk membuat lebih banyak versi untuk perangkat lunak yang sama dengan fitur yang berubah-ubah. 5. Memperhatikan versi uji coba juga selama beberapa hari 6. Ini mengamankan garis waktu Lisensi dengan Memeriksa DateTime online saat pendaftaran 7. Ini membuka semua informasi perangkat keras kepada pengembang 8.Ia memiliki semua fungsi pra-bangun dan kustom yang dapat diakses pengembang di setiap proses perizinan untuk membuat kode aman yang lebih kompleks
sumber