Mekanisme Terbaik untuk Menghasilkan Kunci Lisensi [ditutup]

35

Metode / perpustakaan / alat apa yang akan disarankan orang untuk menghasilkan kunci lisensi (hal-hal AAAAA-AAAAA-AAAAA-AAAAA-AAAAA-AAAAA yang Anda masukkan ketika Anda mendaftar perangkat lunak)?

Adakah yang harus diwaspadai saat menerapkannya?

(Saat ini saya tertarik pada hal ini sebagai hal umum daripada spesifik bahasa, jadi sebutkan saja bahasa apa yang Anda gunakan jika solusi Anda spesifik bahasa).

Jon Hopkins
sumber

Jawaban:

23

Ini hampir sama dengan ketika menyimpan kata sandi. Anda harus memiliki kunci rahasia unik yang hanya diketahui oleh generator dan program Anda. Gunakan tombol ini untuk memanipulasi detail (nama pengguna, kata sandi, organisasi, dll) dan kemudian hash. Anda kemudian dapat melakukan sesuatu pengkodean transfer sepele di Base32 pada hash atau hanya memindahkannya ke string hex jika Anda tidak peduli tentang format.

Adakah yang harus diwaspadai saat menerapkannya?

Rahasiakan rahasia dan pisahkan. Jadikan implementasi Anda tidak dapat ditingkatkan. Jika seseorang merusaknya, dapatkah Anda dengan mudah mengubah implementasinya? Salah satu implementasi umum pada aplikasi desktop adalah menggunakan server jauh untuk memvalidasi lisensi. Ini menghilangkan kemungkinan seseorang dapat merekayasa balik hash atau algoritme dengan memeriksa aplikasi itu sendiri.

Josh K.
sumber
11
BASE32 untuk menyandikan adalah standar. Ini memungkinkan entri pengguna manusia yang mudah;) (Basis32: pemilihan huruf dan angka yang sangat berbeda. Misalnya, 0 dan O tidak dalam urutan)
1
@Pierre: Saya tidak tahu itu, informasi bagus!
Josh K
10

Pertanyaan yang sama diajukan pada SO dan jawaban yang diterima cukup bagus. Inti umum adalah:

  • Ambil nama pengguna
  • Menyatukan nama pengguna dan kunci rahasia dan hash dengan (misalnya) SHA1
  • Buka kemasan hash SHA1 sebagai string alfanumerik. Ini adalah "Kunci Produk" pengguna individu
  • Di dalam program, lakukan hash yang sama, dan bandingkan dengan kunci produk. Jika sama, OKE.
Walter
sumber
1

Metode pilihan saya adalah untuk menghasilkan 10.000 string lisensi acak, SHA1 (atau MD5) hash mereka atau HMAC mereka, dan termasuk semua atau sebagian dari hash SHA1 / MD5 dalam executable itu sendiri. Ketika string lisensi dimasukkan, Anda cukup menggunakan kode yang dikaburkan untuk menghasilkan hash dari string dan membandingkannya dengan yang ada di daftar. Jika cocok, itu adalah lisensi yang valid. Jika Anda kehabisan lisensi, lepaskan versi baru dengan lebih banyak string.

Menggunakan 96-bit pertama dari hash SHA1 sudah memadai. Jadi 10.000 lisensi akan memakan waktu di bawah 120KB. Pembuatan kunci algoritmik atau membuat generator kunci adalah hal yang mustahil. Satu-satunya kerentanan yang harus Anda khawatirkan adalah rekayasa balik atau memintas. (Atau seseorang yang membagikan kunci valid mereka.)

David Schwartz
sumber