Jak utworzyć klucz seryjny w celu ochrony aplikacji

Mam aplikację, która tworzy klucz seryjny w następujący sposób:

Take customername
Sign customername using privatekey and sha/dsa algorithm

Następnie licencję można sprawdzić dekodując kluczem publicznym i sprawdzając dopasowania cuastomername

To działa dobrze, z wyjątkiem tego, że wygenerowany serial jest dość długi. Nie jest więc praktyczne, aby klient wpisał klucz seryjny, ale musi dostarczyć szeregowy plik, który różni się raczej od sposobu, w jaki rozpylają aplikacje i działają, i jest mylący.

Wiele innych aplikacji po prostu dostarcza użytkownikowi Guid podczas dokonywania zakupu

tj. 5bd1060b-8608-4817-93ca-207f7c828e2f

a użytkownik musi wprowadzić swój adres e-mail i przewodnik, aby uzyskać licencję na ich aplikację.

Wygląda to na lepsze rozwiązanie dla użytkownika, ale nie rozumiem, w jaki sposób taka aplikacja weryfikuje prawidłowy przewodnik od nieprawidłowego guid, chyba że zostanie to zrobione w trybie online, sprawdzając adres e-mail / pary guid w bazie danych. Ale naprawdę chciałbym przeprowadzić weryfikację bez konieczności sprawdzania online w inny sposób:

a> Aplikacja nie będzie działać, jeśli połączenie internetowe / mój serwer jest wyłączone lub b> mogą obejść kontrolę, wyłączając dostęp do Internetu

EDYTOWAĆ:

Moje zrozumiałe rozwiązanie zaproponowane poniżej:

Użytkownik dokonuje zakupu
Weź emailaddress + sól
Szyfrowanie za pomocą SHA1 daje 160-bitowy skrót
Konwersja na notację heksadecymalną daje 20 wartości szesnastkowych, tj. 40 znaków
Lop 8 ostatnich postaci, aby dać Guid
Adres e-mail Gui i adres e-mail, które wprowadzają do programu, weryfikuje to powiązanie, pobierając adres e-mail, dodając sól, szyfrując ectera i sprawdzając, generując prawidłowy przewodnik.

Moim głównym problemem jest to, że gdzieś muszę przechowywać sól w programie, więc jeśli haker znajdzie sól i odkryje, co robię, może utworzyć prawidłowy generator kluczy licencyjnych dla dowolnego adresu e-mail.

Moja obecna metoda dla innego programu:

Wygenerowałem parę kluczy publicznych / kluczy prywatnych
Użytkownik dokonuje zakupu
Generuję licencję, podpisując adres e-mail
BaseEncode wygenerowanej licencji
Wyślij licencję do użytkownika
Program weryfikuje licencję na podstawie kodowania i deszyfrowania kluczem publicznym

Mój problem polegał na tym, że kiedy podpisuję adres e-mail, jest on zbyt długi, więc kończę go umieszczaniem w pliku, a nie wprowadzaniem go przez użytkownika do pola, ale być może problem polega na tym, że jestem kodowaniem base64en zamiast konwertowania na Hex.

Jak długo może być wyjście podpisu, czy zależy to od długości wejścia, czy jest zawsze takie samo?

Ponieważ odszyfrowuję klucz kluczem publicznym, nie mogę zgubić niektórych znaków klucza licencyjnego, ale jeśli kluczem generującym jest tylko 40 znaków, to chyba jest w porządku

Myślę, że zaletą tej metody jest to, że nawet jeśli haker odkryje, w jaki sposób działam, nie może utworzyć generatora licencji, ponieważ tego nie robi, i nie może uzyskać klucza prywatnego, ponieważ jest on przechowywany tylko na moim serwerze. Mogłyby generować licencje tylko wtedy, gdyby utworzyły nowe parowanie kluczy prywatnych / publicznych, a jeśli moja aplikacja miała zakodowany klucz publiczny, aplikacja i tak mogłaby odrzucić licencję.

Oczywiście mogą włamać się do aplikacji, ale jeśli aplikacja będzie regularnie aktualizowana, stanie się to dużym wysiłkiem.

Podsumowując: Czy zrozumiałem to poprawnie, która metoda jest najlepsza i ile danych jest generowanych dla drugiego podejścia.

questionAnswers(2)

yourAnswerToTheQuestion