Najlepszy mechanizm generowania kluczy licencyjnych [zamknięty]

35

Jakie metody / biblioteki / narzędzia sugerowaliby ludzie do generowania kluczy licencyjnych (te piękne AAAAA-AAAAA-AAAAA-AAAAA-AAAAA rzeczy, które wkładasz podczas rejestracji oprogramowania)?

Jakieś problemy, na które trzeba zwrócić uwagę przy ich wdrażaniu?

(W tej chwili interesuje mnie to raczej jako ogólna rzecz niż język, więc po prostu określ, jakiego języka używasz, jeśli twoje rozwiązanie jest specyficzne dla danego języka).

Jon Hopkins
źródło

Odpowiedzi:

23

To mniej więcej tak samo, jak podczas przechowywania haseł. Powinieneś mieć unikalny tajny klucz znany tylko generatorowi i programowi. Użyj tego klucza, aby manipulować szczegółami (nazwa użytkownika, hasło, organizacja itp.), A następnie haszować. Możesz następnie zrobić trywialne kodowanie transferu w Base32 na haszu lub po prostu przenieść go do ciągu szesnastkowego, jeśli nie zależy ci na formacie.

Jakieś problemy, na które trzeba zwrócić uwagę przy ich wdrażaniu?

Zachowaj tajemnice w tajemnicy i osobno. Ulepsz swoją implementację. Jeśli ktoś się zepsuje, czy możesz łatwo zmienić implementację? Jedną z powszechnych implementacji w aplikacjach komputerowych jest użycie zdalnego serwera w celu sprawdzenia licencji. Eliminuje to możliwość, że ktoś mógłby odtworzyć skrót lub algorytm poprzez sprawdzenie samej aplikacji.

Josh K.
źródło
11
BASE32 do kodowania jest standardem. Umożliwia łatwe wprowadzanie użytkownika;) (Base32: wybór liter i cyfr, które są bardzo różne. Na przykład 0 i O nie są w sekwencji)
1
@Pierre: Nie wiedziałem o tym, dobra informacja!
Josh K
10

To samo pytanie zadano na SO, a zaakceptowana odpowiedź jest całkiem dobra. Ogólny cel to:

  • Weź nazwę użytkownika
  • Połącz nazwę użytkownika oraz tajny klucz i skrót z (na przykład) SHA1
  • Rozpakuj skrót SHA1 jako ciąg alfanumeryczny. To jest „klucz produktu” indywidualnego użytkownika
  • W ramach programu wykonaj ten sam skrót i porównaj z kluczem produktu. Jeśli jest równy, OK.
Walter
źródło
1

Moją preferowaną metodą jest wygenerowanie 10.000 losowych ciągów licencji, skrót SHA1 (lub MD5) lub HMAC i włączenie całości lub części skrótu SHA1 / MD5 do samego pliku wykonywalnego. Po wprowadzeniu ciągu licencji wystarczy użyć zaciemnionego kodu, aby wygenerować skrót ciągu i porównać go z tymi na liście. Jeśli pasuje, jest to ważna licencja. Jeśli zabraknie licencji, wypuść nową wersję z większą liczbą ciągów.

Zastosowanie tylko pierwszych 96 bitów skrótu SHA1 jest wystarczające. Tak więc 10 000 licencji zajmie mniej niż 120 KB. Algorytmiczne generowanie kluczy lub tworzenie generatora kluczy byłoby niemożliwe. Jedyną podatnością, na którą musisz się martwić, jest inżynieria wsteczna lub ominięcie. (Lub ktoś rozdający swój ważny klucz.)

David Schwartz
źródło