Jak generowane są klucze licencyjne oprogramowania?

Klucze licencyjne są standardem defacto jako środek antypiracki. Szczerze mówiąc, wydaje mi się to (in)Security Through Obscurity, chociaż naprawdę nie mam pojęcia, jak generowane są klucze licencyjne. Jaki jest dobry (bezpieczny) przykład generowania klucza licencyjnego? Jakiego prymitywu kryptograficznego (jeśli w ogóle) używają? Czy to przegląd wiadomości? Jeśli tak, to jakie dane będą hashować? Jakie metody stosują Programiści, aby utrudnić crackerom zbudowanie własnych generatorów kluczy? Jak czy generatory kluczy są wykonane?

Author: Jarek, 2010-06-09

9 answers

Dla Old-school CD keys, to było tylko kwestia tworzenia algorytmu, dla którego klucze CD (które mogą być dowolny ciąg) są łatwe do wygenerowania i łatwe do zweryfikowania, ale stosunek valid-CD-keys do invalid-CD-keys jest tak mały, że losowo zgadywanie kluczy CD jest mało prawdopodobne, aby uzyskać poprawny jeden.

NIEPRAWIDŁOWY SPOSÓB WYKONANIA:

Starcraft i Half-life używały tej samej sumy kontrolnej, gdzie trzynasta cyfra weryfikowała pierwsze 12. W ten sposób można wprowadzić wszystko dla pierwsze 12 cyfr i odgadnij 13 (jest tylko 10 możliwości), co prowadzi do niesławnego 1234-56789-1234

Algorytm weryfikacji jest publiczny i wygląda mniej więcej tak:

x = 3;
for(int i = 0; i < 12; i++)
{
    x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;

POPRAWNY SPOSÓB NA ZROBIENIE TEGO

Windows XP pobiera sporo informacji, szyfruje je i umieszcza kodowanie litery/numeru na naklejce. Pozwoliło to MS zarówno zweryfikować Twój klucz , jak i uzyskać Typ produktu (Domowy, Profesjonalny itp.) w tym samym czasie. Dodatkowo, to wymaga aktywacji online.
Pełny algorytm jest dość złożony, ale ładnie opisany w to (całkowicie legalny!) referat, wydawany w Niemczech.

Oczywiście, bez względu na to, co robisz, chyba że oferujesz usługę online (jak World of Warcraft ), każdy rodzaj ochrony przed kopiowaniem jest tylko straganem: niestety, jeśli jest to jakaś gra warta wartości, ktoś złamie (lub przynajmniej obejdzie) {20]} algorytm CD-key i wszystkie inne prawa autorskie zabezpieczenia.

REAL POPRAWNY SPOSÓB:

W przypadku usług online życie jest nieco prostsze, ponieważ nawet z plikiem binarnym musisz uwierzytelnić się za pomocą ich serwerów, aby go wykorzystać (np. mieć konto WoW). Algorytm CD-key Dla World of Warcraft-używany na przykład przy zakupie kart do gry - wygląda prawdopodobnie mniej więcej tak: {]}

  1. Wygeneruj bardzo dużą, zabezpieczoną kryptograficznie liczbę losową.
  2. przechowuj go w naszym baza danych i wydrukuj ją na karcie.

    Następnie, gdy ktoś wprowadzi numer karty do gry, sprawdź, czy znajduje się on w bazie danych, a jeśli tak, połącz go z bieżącym użytkownikiem, aby nigdy nie mógł być ponownie użyty.

W przypadku usług online nie ma powodu , aby nie używać powyższego schematu; używanie czegokolwiek innego możeprowadzić do problemów .

 256
Author: BlueRaja - Danny Pflughoeft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-08 18:50:45

Kiedy pisałem tę odpowiedź, było to założenie, że pytanie dotyczyło walidacji kluczy licencyjnych "offline". Większość pozostałych odpowiedzi dotyczy weryfikacji online, która jest znacznie łatwiejsza w obsłudze (większość logiki można wykonać po stronie serwera).

Z weryfikacją offline najtrudniejszą rzeczą jest zapewnienie, że możesz wygenerować ogromną liczbę unikalnych kluczy licencyjnych i nadal utrzymywać silny algorytm, który nie jest łatwo zagrożony (np. prosta cyfra kontrolna)

Nie jestem zbyt dobrze obeznany z matematyką, ale uderzyło mnie, że jednym ze sposobów na to jest użycie funkcji matematycznej , która wykreśla wykres

Linia wykreślona może mieć (jeśli używasz odpowiedniej częstotliwości) tysiące unikalnych punktów, więc możesz generować klucze, wybierając losowe punkty na tym wykresie i kodując wartości w jakiś sposób

Tutaj wpisz opis obrazka

Jako przykład wykreślimy ten wykres, wybierzemy cztery punkty i zakodujemy w ciąg znaków jako "0,-500;100,-300;200,-100;100,600"

Zaszyfrujemy łańcuch ze znanym i stałym kluczem( strasznie słabym, ale służy celowi), a następnie przekonwertujemy bajty wynikowe przez Base32, aby wygenerować klucz końcowy

Aplikacja może następnie odwrócić ten proces (base32 do liczby rzeczywistej, odszyfrować, odszyfrować punkty), a następnie sprawdzić, czy każdy z tych punktów znajduje się na naszym tajnym wykresie.

To dość mała ilość kodu, która pozwoliłaby na ogromną liczbę unikalnych i ważnych Klucze do wygenerowania

Jest to jednak bardzo bezpieczeństwo przez zaciemnienie. Każdy, kto poświęci czas na demontaż kodu, będzie w stanie znaleźć funkcję wykresu i klucze szyfrowania, a następnie makietę generatora kluczy, ale jego prawdopodobnie bardzo przydatne do spowolnienia przypadkowego piractwa.

 49
Author: PaulG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-16 11:40:35

Sprawdź artykuł dotyczącyczęściowej weryfikacji klucza, który obejmuje następujące wymagania:

  • Klucze licencyjne muszą być wystarczająco łatwe do wpisania.

  • Musimy mieć możliwość czarnej listy (odwołania) klucza licencyjnego w przypadku obciążenia zwrotnego lub zakupów skradzionymi kartami kredytowymi.

  • Żadnego "dzwonienia do domu", żeby przetestować klucze. Chociaż praktyka ta staje się coraz bardziej rozpowszechniona, nadal nie doceniam jej jako użytkownika, więc nie poproszę moich użytkowników, aby wystawili z nim.

  • Nie powinno być możliwe, aby cracker zdemontować naszą wydaną aplikację i wyprodukować działający "keygen" z niego. Oznacza to, że nasza aplikacja nie przetestuje w pełni klucza do weryfikacji. Tylko część klucza jest do przetestowania. Co więcej, każde wydanie aplikacji powinno testować inną część klucza, aby fałszywy klucz oparty na wcześniejszej wersji nie działał na późniejszej wersji naszego oprogramowania.

  • Ważne: nie powinno być istnieje możliwość przypadkowego wpisania przez uprawnionego użytkownika nieprawidłowego klucza, który wydaje się działać, ale nie działa w przyszłej wersji z powodu błędu typograficznego.

 30
Author: The Surrican,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-31 14:33:17

Nie mam żadnego doświadczenia z tym, co ludzie faktycznie robią, aby wygenerować klucze CD, ale (zakładając, że nie chcesz iść w dół drogi aktywacji online) Oto kilka sposobów, które można zrobić klucz:

  • Wymagaj, aby liczba była podzielna przez (powiedzmy) 17. Trywialne do odgadnięcia, jeśli masz dostęp do wielu klawiszy, ale większość potencjalnych ciągów będzie nieważna. Podobne byłoby wymaganie, aby suma kontrolna klucza odpowiadała znanej wartości.

  • Wymagają, aby pierwsza połowa klucza, po połączeniu ze znaną wartością, zostaje skrócona do drugiej połowy klucza. Lepiej, ale program nadal zawiera wszystkie informacje potrzebne do generowania kluczy, jak również do ich walidacji.

  • Generowanie kluczy przez zaszyfrowanie (kluczem prywatnym) znanej wartości + nonce. Można to sprawdzić poprzez odszyfrowanie przy użyciu odpowiedniego klucza publicznego i sprawdzenie znanej wartości. Program ma teraz wystarczająco dużo informacji, aby zweryfikować klucz bez możliwości Generuj klucze.

Wszystkie są nadal otwarte do ataku: program nadal istnieje i może zostać poprawiony, aby ominąć kontrolę. Sprytniejszym rozwiązaniem może być zaszyfrowanie części programu przy użyciu znanej wartości z mojej trzeciej metody, zamiast przechowywania wartości w programie. W ten sposób musisz znaleźć kopię klucza, zanim będziesz mógł odszyfrować program, ale nadal jest on podatny na skopiowanie po odszyfrowaniu i na to, aby jedna osoba wzięła swoją legalną kopię i użyła jej, aby umożliwić wszystkim inne, aby uzyskać dostęp do oprogramowania.

 21
Author: Andrew Aylett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-21 21:31:15

CD-Keys nie są zbyt dużym zabezpieczeniem dla żadnych Nie - sieciowych rzeczy, więc technicznie nie muszą być bezpiecznie generowane. Jeśli jesteś na. Net, możesz prawie przejść z Guid.NewGuid ().

Ich głównym zastosowaniem jest obecnie komponent Multiplayer, gdzie serwer może zweryfikować klucz CD. W tym celu nie ma znaczenia, jak bezpiecznie został wygenerowany, ponieważ sprowadza się to do "przeszukania tego, co zostało przekazane i sprawdzenia, czy ktoś inny już go używa".

To powiedziawszy, możesz użyć aby osiągnąć dwa cele:

  • mieć jakąś sumę kontrolną. To pozwala instalatorowi wyświetlać komunikat" klucz nie wydaje się prawidłowy", wyłącznie w celu wykrycia literówek (dodanie takiego sprawdzenia w instalatorze faktycznie oznacza, że pisanie Generator kluczy jest trywialne, jak haker ma cały kod, którego potrzebuje. Brak kontroli i poleganie wyłącznie na walidacji po stronie serwera wyłącza tę kontrolę, ryzykując denerwowanie klientów prawnych, którzy nie rozumieją, dlaczego serwer nie akceptuje ich CD Key, ponieważ nie są świadomi literówki)
  • Praca z ograniczonym podzbiorem znaków. Próba wpisania klucza CD i zgadywanie " czy to jest 8 Czy B? 1 Czy I? Q czy O czy 0?"- używając podzbioru znaków/cyfr bezobjawowych eliminujesz to zamieszanie.

To powiedziawszy, nadal chcesz dużą dystrybucję i pewną przypadkowość, aby uniknąć pirata po prostu zgadywanie poprawnego klucza (który jest ważny w Twojej bazie danych, ale nadal w pudełku na półce sklepowej) i pieprzenie nad legalny klient, który kupuje to pudełko.

 17
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-10 00:45:19

Jeśli nie jesteś szczególnie zainteresowany długością klucza, wypróbowaną i prawdziwą metodą jest użycie szyfrowania klucza publicznego i prywatnego.

Zasadniczo mają jakiś nonce i stały podpis.

Na przykład: 0001-123456789

Gdzie 0001 to Twój nonce, a 123456789 to twój stały podpis.

Następnie zaszyfrować to za pomocą klucza prywatnego, aby uzyskać klucz CD, który jest czymś w rodzaju: ABCDEF9876543210

Następnie rozpowszechnij klucz publiczny z Twoje podanie. Klucz publiczny może być użyty do odszyfrowania klucza CD "ABCDEF9876543210", który następnie weryfikuje część podpisów stałych.

To uniemożliwia komuś odgadnięcie, jaki jest klucz CD dla nonce 0002, ponieważ nie ma klucza prywatnego.

Jedyną główną stroną jest to, że klucze CD będą dość długie, gdy używasz kluczy prywatnych / publicznych o rozmiarze 1024-bit. Musisz również wybrać nonce wystarczająco długo, aby nie zaszyfrować trywialnej ilości informacje.

Up side jest to, że ta metoda będzie działać bez "aktywacji" i możesz użyć rzeczy takich jak adres e-mail lub nazwa Licencjobiorcy jako nonce.

 10
Author: userx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 23:35:52

System kluczy musi mieć kilka właściwości:

  • bardzo niewiele kluczy musi być ważnych
  • poprawne klucze nie mogą być wyprowadzalne, nawet biorąc pod uwagę wszystko, co posiada użytkownik.
  • poprawny klucz w jednym systemie nie jest poprawnym kluczem w innym.
  • inne

Jednym z rozwiązań, które powinno ci je dać, byłoby użycie schematu podpisywania kluczy publicznych. Zacznij od "system hash" (powiedzmy chwycić Mac na żadnych nic, posortowane, i informacje o CPU-ID, plus kilka innych rzeczy, concatenate to wszystko razem i wziąć MD5 wyniku (naprawdę nie chcesz być Obsługi dane osobowe Jeśli nie trzeba)) dołączyć numer seryjny płyty CD i odmówić rozruchu, chyba że jakiś klucz rejestru (lub jakiś datafile) ma poprawny podpis dla blob. Użytkownik aktywuje program wysyłając blob do ciebie, a Ty wysyłasz podpis z powrotem.

Potencjalne problemy obejmują to, że oferujesz podpisanie praktycznie wszystkiego, więc musisz założyć, że ktoś będzie Uruchom wybrany zwykły tekst i/lub wybrany zaszyfrowany tekst. Można to złagodzić, sprawdzając podany numer seryjny i odmawiając obsługi żądania od nieprawidłowych, a także odmawiając obsługi większej niż określona liczba zapytań z danego s / n w przedziale (powiedzmy 2 na rok)

Powinienem zwrócić uwagę na kilka rzeczy: po pierwsze, wykwalifikowany i zdeterminowany napastnik będzie w stanie ominąć wszelkie zabezpieczenia w częściach, do których ma nieograniczony dostęp (tj. wszystko na płycie CD), najlepsze co możesz zrobić na tym koncie, to utrudnić uzyskanie nielegalnego dostępu niż uzyskanie legalnego dostępu. Po drugie, nie jestem ekspertem, więc w proponowanym schemacie mogą być poważne wady.

 9
Author: BCS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-21 23:26:42

Istnieją również zachowania DRM, które zawierają wiele kroków do procesu. Jednym z najbardziej znanych przykładów jest jedna z metod weryfikacji instalacji pakietu Creative Suite firmy Adobe. Tradycyjna metoda CD Key omówiona tutaj jest używany, a następnie linia wsparcia Adobe jest nazywany. Klucz CD jest podawany przedstawicielowi Adobe i dają z powrotem numer aktywacji do wykorzystania przez użytkownika.

Jednak, pomimo rozbicia na etapy, pada ofiarą tych samych metod krakingu stosowanego w normalnym procesie. Proces używany do tworzenia klucza aktywacyjnego, który jest sprawdzany w stosunku do oryginalnego klucza CD został szybko odkryty, i generatory, które zawierają oba klucze zostały wykonane.

Jednak ta metoda nadal istnieje jako sposób dla użytkowników bez połączenia z Internetem, aby zweryfikować produkt. Idąc dalej, łatwo zobaczyć, jak te metody zostaną wyeliminowane, ponieważ dostęp do Internetu staje się wszechobecny.

 1
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-21 19:44:57

All of the CD only copy protection algorithms inconvience honest users while providing no protection against piractwo cokolwiek.

"pirat" musi mieć tylko dostęp do jednej legalnej płyty cd i jej kodu dostępu, może następnie wykonać n kopii i rozpowszechniać je.

Nie ma znaczenia, jak kryptograficznie Bezpieczny zrobisz kod, musisz dostarczyć go z płytą CD w postaci zwykłego tekstu lub uprawniony użytkownik nie może aktywować oprogramowania.

Najbezpieczniejsze programy obejmują albo użytkownik dostarcza dostawcy oprogramowania pewne dane maszyny, na której będzie uruchamiane oprogramowanie (numery seryjne procesora, adresy mac, Adres Ip itp.), lub zażądać dostępu online, aby zarejestrować oprogramowanie na stronie internetowej dostawców i w zamian otrzymać token aktywacji. Pierwsza opcja wymaga dużo ręcznego administrowania i jest warta tylko dla bardzo wartościowego oprogramowania, druga opcja może być fałszowana i jest absolutnie irytująca, jeśli masz ograniczony dostęp do sieci lub jesteś utknąłem za firewallem.

Ogólnie rzecz biorąc, o wiele łatwiej jest nawiązać relacje zaufania z klientami!

 1
Author: James Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-22 04:33:58