Klucze licencyjne są standardem defacto jako środek antypiracki. Szczerze mówiąc, uderza mnie to jako (in) Security Through Obscurity , chociaż tak naprawdę nie mam pojęcia, w jaki sposób generowane są klucze licencyjne. Jaki jest dobry (bezpieczny) przykład generowania klucza licencyjnego? Z jakich prymitywów kryptograficznych (jeśli w ogóle) korzystają? Czy to skrót wiadomości? Jeśli tak, jakie dane byłyby mieszane? Jakie metody stosują programiści, aby utrudnić crackerom zbudowanie własnych generatorów kluczy? Jak powstają generatory kluczy?
361
Odpowiedzi:
W przypadku old-schoolowych kluczy CD wystarczyło stworzyć algorytm, dla którego klucze CD (które mogą być dowolnym ciągiem) można łatwo wygenerować i zweryfikować, ale stosunek prawidłowych kluczy CD do nieprawidłowych płyt CD -klucze są tak małe, że losowe zgadywanie kluczy CD raczej nie zapewni prawidłowego klucza.
NIEPRAWIDŁOWY SPOSÓB TO ROBIĆ:
Zarówno Starcraft, jak i Half-life wykorzystały tę samą sumę kontrolną, gdzie 13 cyfra zweryfikowała pierwszą 12. W związku z tym możesz wprowadzić cokolwiek dla pierwszych 12 cyfr i odgadnąć 13 (istnieje tylko 10 możliwości), co prowadzi do niesławnego
1234-56789-1234
Algorytm weryfikacji jest publiczny i wygląda mniej więcej tak:
PRAWIDŁOWY SPOSÓB TO ZROBIĆ
Windows XP pobiera sporo informacji, szyfruje je i umieszcza kodowanie litery / cyfry na naklejce. Umożliwiło to MS zarówno zweryfikowanie twojego klucza, jak i uzyskanie typu produktu (Home, Professional itp.) W tym samym czasie. Dodatkowo wymaga aktywacji online.
Pełny algorytm jest dość złożony, ale ładnie zarysowany w tym (całkowicie legalnym!) Artykule opublikowanym w Niemczech.
Oczywiście, bez względu na to, co robisz, chyba że oferujesz usługę online (taką jak World of Warcraft ), każdy rodzaj ochrony przed kopiowaniem jest po prostu przeciągnięciem: niestety, jeśli jest to gra warta wartości, ktoś się zepsuje (lub przynajmniej obejdzie ) algorytm klucza CD i wszystkie inne zabezpieczenia praw autorskich.
PRAWDZIWY PRAWIDŁOWY SPOSÓB TO ROBIĆ:
W przypadku usług online życie jest nieco prostsze, ponieważ nawet w przypadku pliku binarnego musisz uwierzytelnić się na ich serwerach, aby móc z niego skorzystać (np. Mieć konto WoW). Algorytm klucza CD dla World of Warcraft - używany na przykład przy zakupie kart playtime - prawdopodobnie wygląda mniej więcej tak:
W przypadku usług online nie ma powodu, aby nie korzystać z powyższego schematu; używanie czegokolwiek innego może prowadzić do problemów .
źródło
1234-56789-1234
kluczu StarCrafta, ale pamiętam, że zajęło to tylko około pięciu minut, aby „brutalnie wymusić” weryfikatora przez zaciśnięcie na klawiaturze i ponowienie próby.Kiedy pierwotnie napisałem tę odpowiedź, zakładałem, że pytanie dotyczyło sprawdzania poprawności kluczy licencyjnych w trybie offline. Większość innych odpowiedzi dotyczy weryfikacji online, co jest znacznie łatwiejsze w obsłudze (większość logiki można wykonać po stronie serwera).
W przypadku weryfikacji offline najtrudniejszą rzeczą jest upewnienie się, że możesz wygenerować ogromną liczbę unikalnych kluczy licencyjnych i nadal utrzymywać silny algorytm, którego nie można łatwo złamać (np. Prosta cyfra kontrolna)
Nie jestem zbyt dobrze zaznajomiony z matematyką, ale uderzyło mnie, że jednym ze sposobów jest użycie funkcji matematycznej, która tworzy wykres
Narysowana linia może mieć (jeśli zastosujesz wystarczająco wysoką częstotliwość) tysiące unikalnych punktów, dzięki czemu możesz generować klucze, wybierając losowe punkty na tym wykresie i w pewien sposób kodując wartości
Jako przykład wykreślimy ten wykres, wybierzmy cztery punkty i zakodujemy w ciąg znaków jako „0, -500; 100, -300; 200, -100; 100,600”
Zaszyfrujemy ciąg znanym i stałym kluczem (okropnie słaby, ale służy to celowi), a następnie przekonwertujemy powstałe bajty przez Base32, aby wygenerować ostateczny klucz
Aplikacja może następnie odwrócić ten proces (base32 na liczbę rzeczywistą, odszyfrować, zdekodować punkty), a następnie sprawdzić, czy każdy z tych punktów znajduje się na naszym tajnym wykresie.
Jest to dość niewielka ilość kodu, który pozwoliłby wygenerować ogromną liczbę unikalnych i poprawnych kluczy
Jest to jednak bardzo duże bezpieczeństwo przez zaciemnienie. Każdy, kto poświęci czas na zdemontowanie kodu, będzie w stanie znaleźć funkcję graficzną i klucze szyfrujące, a następnie naszkicować generator kluczy, ale prawdopodobnie jest to całkiem przydatne do spowolnienia przypadkowego piractwa.
źródło
Przeczytaj ten artykuł na temat częściowej weryfikacji klucza, który obejmuje następujące wymagania:
Klucze licencyjne muszą być łatwe do wpisania.
Musimy mieć możliwość umieszczenia na czarnej liście (unieważnienia) klucza licencyjnego w przypadku obciążeń zwrotnych lub zakupów za pomocą skradzionych kart kredytowych.
Brak „dzwonienia do domu” w celu przetestowania kluczy. Chociaż ta praktyka staje się coraz bardziej powszechna, nadal nie doceniam jej jako użytkownika, więc nie będę prosić moich użytkowników, aby się z tym pogodzili.
Nie powinno być możliwe, aby cracker zdemontował naszą wydaną aplikację i stworzył z niej działający „keygen”. Oznacza to, że nasza aplikacja nie przetestuje w pełni klucza do weryfikacji. Tylko część klucza ma zostać przetestowana. Ponadto w każdej wersji aplikacji należy przetestować inną część klucza, aby fałszywy klucz oparty na wcześniejszej wersji nie działał w późniejszej wersji naszego oprogramowania.
Ważne: prawowity użytkownik nie powinien mieć możliwości przypadkowego wpisania nieprawidłowego klucza, który wydaje się działać, ale zawiedzie w przyszłej wersji z powodu błędu typograficznego.
źródło
Nie mam doświadczenia z tym, co ludzie robią, aby generować klucze CD, ale (zakładając, że nie chcesz iść drogą aktywacji online), oto kilka sposobów na zrobienie klucza:
Wymagaj, aby liczba była podzielna przez (powiedzmy) 17. Trywialne zgadywanie, jeśli masz dostęp do wielu kluczy, ale większość potencjalnych ciągów znaków będzie niepoprawna. Podobnie wymagałoby to, aby suma kontrolna klucza odpowiadała znanej wartości.
Wymagaj, aby pierwsza połowa klucza, po połączeniu ze znaną wartością, skróciła się do drugiej połowy klucza. Lepiej, ale program nadal zawiera wszystkie informacje potrzebne do generowania kluczy, a także do ich sprawdzania.
Generuj klucze, szyfrując (kluczem prywatnym) znaną wartość + nonce. Można to zweryfikować poprzez odszyfrowanie przy użyciu odpowiedniego klucza publicznego i sprawdzenie znanej wartości. Program ma teraz wystarczającą ilość informacji, aby zweryfikować klucz bez możliwości generowania kluczy.
Nadal wszystkie są otwarte na atak: program jest nadal dostępny i można go załatać, aby ominąć kontrolę. Bardziej sprytne może być szyfrowanie części programu przy użyciu znanej wartości z mojej trzeciej metody, zamiast zapisywania wartości w programie. W ten sposób musisz znaleźć kopię klucza, zanim będziesz mógł odszyfrować program, ale nadal jest podatny na kopiowanie po odszyfrowaniu oraz na to, aby jedna osoba wzięła swoją legalną kopię i wykorzystała go, aby umożliwić wszystkim innym dostęp do oprogramowania.
źródło
Klucze CD nie stanowią większego bezpieczeństwa dla żadnych nie podłączonych do sieci rzeczy, więc technicznie nie trzeba ich bezpiecznie generować. Jeśli korzystasz z .net, możesz prawie przejść z Guid.NewGuid ().
Obecnie ich głównym zastosowaniem jest komponent Multiplayer, w którym serwer może zweryfikować klucz CD. W związku z tym nie ma znaczenia, jak bezpiecznie został wygenerowany, ponieważ sprowadza się do „Wyszukaj, co zostało przekazane i sprawdź, czy ktoś już go używa”.
To powiedziawszy, możesz użyć algorytmu, aby osiągnąć dwa cele:
To powiedziawszy, nadal chcesz dużej dystrybucji i pewnej losowości, aby uniknąć pirata po prostu zgadywania ważnego klucza (który jest ważny w bazie danych, ale wciąż w pudełku na półce sklepowej) i przekręcania legalnego klienta, który akurat kupuje to pudełko .
źródło
Jeśli nie jesteś szczególnie zainteresowany długością klucza, całkiem 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 zaszyfruj to za pomocą klucza prywatnego, aby uzyskać klucz CD, który jest podobny do: ABCDEF9876543210
Następnie rozpowszechnij klucz publiczny w swojej aplikacji. Klucza publicznego można użyć do odszyfrowania klucza CD „ABCDEF9876543210”, który następnie weryfikuje się w części ze stałym podpisem.
Zapobiega to zgadywaniu, co to jest klucz CD dla nonce 0002, ponieważ nie ma klucza prywatnego.
Jedynym poważnym minusem jest to, że klucze CD będą dość długie przy użyciu kluczy prywatnych / publicznych o rozmiarze 1024-bit. Musisz także wybrać wartość jednorazową, aby nie szyfrować trywialnej ilości informacji.
Zaletą jest to, że ta metoda będzie działać bez „aktywacji” i możesz używać takich rzeczy jak adres e-mail lub nazwa licencjobiorcy jako nonce.
źródło
System kluczy musi mieć kilka właściwości:
Jednym z rozwiązań, które powinno to zapewnić, byłoby użycie schematu podpisywania klucza publicznego . Zacznij od „skrótu systemowego” (powiedz, chwyć Mac na dowolnych kartach sieciowych, posortuj i informacje o CPU-ID, a także kilka innych rzeczy, połącz to wszystko razem i weź MD5 wyniku (naprawdę nie chcesz być obsługa informacji umożliwiających identyfikację, jeśli nie musisz)) dołącz numer seryjny dysku CD i odmów rozruchu, chyba że jakiś klucz rejestru (lub jakiś plik danych) ma prawidłowy podpis dla obiektu blob. Użytkownik aktywuje program, wysyłając kroplę do Ciebie, a Ty wysyłasz podpis.
Potencjalne problemy obejmują to, że proponujesz podpisanie praktycznie wszystkiego, więc musisz założyć, że ktoś przeprowadzi wybrany atak tekstowy i / lub wybrane ataki zaszyfrowane . 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ęcej niż określonej liczby zapytań z danego numeru seryjnego w odstępie czasu (powiedzmy 2 na rok)
Powinienem zwrócić uwagę na kilka rzeczy: po pierwsze, wykwalifikowany i zdeterminowany atakujący będzie w stanie ominąć wszelkie zabezpieczenia w częściach, do których ma nieograniczony dostęp ( tj. Wszystko na płycie CD), najlepiej, co możesz zrobić na tym koncie, to utrudnić uzyskanie nielegalnego dostępu, niż uzyskać legalny dostęp. Po drugie, nie jestem ekspertem, więc w proponowanym programie mogą wystąpić poważne wady.
źródło
Istnieją również zachowania DRM, które obejmują wiele etapów procesu. Jednym z najbardziej znanych przykładów jest jedna z metod Adobe do weryfikacji instalacji pakietu Creative Suite. Stosowana jest tutaj tradycyjna metoda CD Key, a następnie wywoływana jest linia wsparcia Adobe. Klucz CD jest przekazywany przedstawicielowi Adobe, który przekazuje numer aktywacyjny, z którego może korzystać użytkownik.
Jednakże, pomimo rozbicia na etapy, padają ofiarą tych samych metod krakowania, które stosuje się w normalnym procesie. Proces użyty do utworzenia klucza aktywacyjnego, który jest porównywany z oryginalnym kluczem CD, został szybko wykryty i stworzono generatory zawierające oba klucze.
Jednak ta metoda wciąż istnieje jako sposób weryfikacji produktu przez użytkowników niemających połączenia z Internetem. Idąc dalej, łatwo jest zobaczyć, w jaki sposób metody te zostaną wyeliminowane, ponieważ dostęp do Internetu staje się wszechobecny.
źródło
Wszystkie algorytmy ochrony przed kopiowaniem tylko na dyskach CD są niewygodne dla uczciwych użytkowników, a jednocześnie nie zapewniają żadnej ochrony przed piractwem.
„Pirat” musi mieć dostęp tylko do jednej legalnej płyty CD i jej kodu dostępu, a następnie może wykonać n kopii i rozpowszechnić je.
Nie ma znaczenia, w jaki sposób kryptograficznie bezpieczny jest kod, należy go dostarczyć na płycie CD w postaci zwykłego tekstu lub prawowity użytkownik nie może aktywować oprogramowania.
Najbardziej bezpieczne schematy polegają na tym, że użytkownik przekazuje dostawcy oprogramowania niektóre szczegóły maszyny, która uruchomi oprogramowanie (numery seryjne procesora, adresy mac, adres IP itp.), Lub wymaga dostępu online, aby zarejestrować oprogramowanie na stronie internetowej dostawcy i w zamian otrzymasz token aktywacyjny. Pierwsza opcja wymaga dużo ręcznego administrowania i jest warta tylko w przypadku oprogramowania o bardzo wysokiej wartości, druga opcja może zostać sfałszowana i jest absolutnie irytująca, jeśli masz ograniczony dostęp do sieci lub utkniesz za zaporą ogniową.
Ogólnie rzecz biorąc, znacznie łatwiej jest ustanowić relacje zaufania z klientami!
źródło
Możesz używać i implementować API Secure Licensing API z ( https://www.nuget.org/packages/SystemSoulLicense/ ) bardzo łatwo w swoich projektach oprogramowania, używając go (musisz pobrać aplikację komputerową do tworzenia bezpiecznej licencji z https: / /www.systemsoulsoftwares.com/ ) 1. Tworzy unikalny UID dla oprogramowania klienckiego w oparciu o sprzęt systemowy (procesor, płyta główna, dysk twardy) (UID działa jako klucz prywatny dla tego unikalnego systemu) 2. Pozwala bardzo łatwo wysyłać zaszyfrowany ciąg licencji do systemu klienta, weryfikuje ciąg licencji i działa tylko na tym konkretnym systemie 3. Ta metoda pozwala twórcom oprogramowania lub firmie przechowywać więcej informacji o oprogramowaniu / programistach / usługach dystrybutorów / funkcjach / kliencie 4. Daje kontrolę nad blokowaniem i odblokowywaniem funkcji oprogramowania klienckiego, oszczędzając czas programistów na tworzenie większej wersji dla tego samego oprogramowania ze zmieniającymi się funkcjami 5. Dbanie o wersję próbną trwa również przez dowolną liczbę dni 6. Zabezpiecza oś czasu Licencji, sprawdzając DateTime online podczas rejestracji 7. Odblokowuje wszystkie informacje o sprzęcie dla programistów 8.Ma wszystkie funkcje przed kompilacją i niestandardowe, do których programista może uzyskać dostęp na każdym etapie licencjonowania, aby tworzyć bardziej złożony bezpieczny kod
źródło