2008-11-03 9 views
14

Chcę utworzyć klucz licencyjny, który algorytm kryptografii poleciłbyś?. Kryptografia .NET dla kluczy licencyjnych?

Zasadniczo wejścia byłoby:

nazwa firmy
główny numer wersji
data utworzenia
datę expirey
ma Feature1:
ma feature2:
ma feature3:

np. Acme Inc 5,0 20081102 20081102 0 1 0

pokrewne: Which built-in .NET cryptography algorithm is the most secure?

+0

Istnieją powiązane pytania na stronie: http://stackoverflow.com/questions/79064/cryptography-algorithm i http://stackoverflow.com/questions/179220/best-cryptography-algorithm i http: // stackoverflow. com/questions/258721/which-built-in-net-crypotgraphy-algorithm-is-the-most-secure –

+1

Dlaczego to było zamknięte? Inne pytania nie odpowiadają na to pytanie, a drugie pytanie ASDFdotASPX było znacznie bardziej ogólne. –

+0

Ponownie otwarte. Jest podobny do, ale nie jest duplikatem linków, które podałem. –

Odpowiedz

7

Jeśli robisz walidacji na klienta po stronie, chcesz użyj asymetrycznego szyfrowania. W ten sposób nie musisz rozdawać klucza prywatnego klientowi. Generowałbym podpis RSA przy użyciu SHA-256 i klucza 2048 bitowego. Jeśli to zrobisz, operacje kryptograficzne nie będą słabym ogniwem. Cracker mógłby oczywiście zmienić kod, aby pominąć krok weryfikacji, ale nie pomoże mu algorytm kryptograficzny.

Jeśli przeprowadzasz sprawdzanie poprawności serwera, wybrałbym HMAC oparty na SHA-256.

10

Polecam: Nie poświęcaj zbyt wiele czasu na zabezpieczanie kluczy. W przypadku języków skompilowanych z użyciem bajtów bardzo łatwo jest dokonać dekompilacji i po prostu sprawić, że aplikacja pominie krok weryfikacji. Bez względu na to, jak bezpieczne są twoje klucze, nie mają znaczenia, kiedy funkcja sprawdzania poprawności zawsze zwraca wartość true. Kluczowe klucze są po to, aby uczciwi uczciwi ludzie byli szczerzy.

+0

Ha, ha, ha, "*** bardzo łatwa ** do dekompilacji i po prostu spraw, aby aplikacja pominęła krok weryfikacji *". Ponieważ jest to bardzo proste, śmiało, złamaj nam najnowszą wersję HP Loadrunner lub najnowszą wersję [Burp Suite] (https://portswigger.net/burp/download.html) i pokaż nam, że to ** bardzo proste * * aby to zrobić. Jako wystarczający będzie wystarczający wpis na blogu, na przykład [tutaj jest jeden na (bardzo) starą wersję Burp Suite] (http://blog.nibblesec.org/2013/01/anti-debugging-techniques-and-burp-suite .html). ** Prawdziwe ** pytanie brzmi, ile cennych programów poddałeś inżynierii wstecznej? – Pacerier

+0

"* Klucze seryjne są po to, aby uczciwi ludzie byli uczciwi .. *" ** Wrong **. Szczerze mówiąc, ludzie nie potrzebują kluczy szeregowych, aby być szczerym, wystarczyłoby msgbox "nie używaj tej funkcji, chyba że zapłacisz mi pierwszy". ** Kluczowe klucze są po to, aby uczciwi ludzie byli nieuczciwi. ** Nieuczciwi, ale * tani *. [Bezpieczeństwo to problem ekonomiczny] (https://www.google.com/search?q=economics+of+security), a następnie problem technologiczny na drugim miejscu. – Pacerier

0

Jeśli chcesz zobaczyć przykład szyfrowania potrójnego DES, możesz spojrzeć na my blog post na szyfrowanie danych w bazie danych.

Wpis na blogu zawiera wideo i kod źródłowy.

Chociaż koncentruje się na szyfrowaniu kolumn ciągów w bazie danych, można go zdecydowanie zmodyfikować, aby działał z polami licencjonowania.

Kod źródłowy jest napisany w języku C# i wykorzystuje algorytmy Triple DES.

1

Trzeba zrobić 4 rzeczy:
nr 1: Checksum swoją aplikację (MD5, z kontekstu zwyczaj MD5)
- MD5 kontekst musi być encryptedly zainicjowany
- Porównaj Agains klucz/publiczny szyfrowane kontrolną prywatną
Segment tekst suma kontrolna swojej aplikacji uruchomionych w
nr 3:: No 2 klucz szyfrowanie Korzystanie 4096-bitowy RSA publiczno-prywatnego na licencji
nr 4: szyfrować żadnych istotnych ciągów, jak „zły klucz” lub „klawisz OK”

+0

MD5 to złamany algorytm mieszający i nie należy go używać – Nayef

3

Dla klucza licencyjnego nie interesuje Cię szyfrowanie go, ale podpisywanie go. Podpisując to, możesz potwierdzić, że data ważności i lista włączonych funkcji nie została zmieniona na pod numerem.Nie ma potrzeby ukrywania (szyfrowania) klucza licencyjnego, ponieważ nie ma zagrożenia, które chcesz złagodzić, ukrywając licencję od użytkownika końcowego.

Podpisy kryptograficzne są wykonywane przez hashowanie licencji, a następnie zaszyfrowanie skrótu za pomocą klucza prywatnego. Ponieważ każdy może odszyfrować ten skrót za pomocą odpowiedniego klucza publicznego, każdy może sprawdzić, czy licencja została naruszona.

Podstawową funkcją funkcji CryptoAPI do podpisania i weryfikacji są CryptSignHash i CryptVerifySignature, patrz: Example C Program: Signing a Hash and Verifying the Hash Signature.

Odpowiednikami .Net Framework są klasy RSAPKCS1SignatureFormatter i RSAPKCS1SignatureDeformatter.