Serwer-klient, system licencji

0

Witam.

Muszę stworzyć system licencji, zależy mi na tym aby był jak najbardziej bezpieczny. Żeby zapobiec crackowaniu chcę najważniejszą cześć kodu szyfrować i klucz pobierać z serwera.
Tak to mniej więcej ma wyglądać:

  1. Klient łączy się z serwerem, wysyła username i checksumę pliku.
  2. Serwer sprawdza czy username istnieje i czy ma aktywną licencję, porównuję checksumę. Jeżeli wszystko jest ok wysyła zaszyfrowany kod.
  3. Klient odbiera kod, deszyfruje go i wykonuje.

Czy ma to jakiś sens (zakładając że sam klient jest zabezpieczony na tyle dobrze że jakakolwiek ingerencja w niego jest praktycznie niemożliwa)? Czy RSA się tu nada? A może napisanie aplikacji web i request POST się tu bardziej nada.

0

Może na poczatek Kolega się zdecyduje co chce zrobić. Pzdr.

0

Co stoi na przeszkodzie, by klient po jednokrotnym odebraniu i deszyfracji kodu korzystał już z tego, co otrzymał, nigdy więcej nie prosząc ponownie?

1

Może trochę Cię zaskoczę, ale moim zdaniem jesteś bez szans. Ostatnio widziałem system zabezpieczony donglem+przy każdym uruchomieniu łączył się z producentem i sprawdzał czy licencja jest aktywna. Chłopaki sfabrykowali dongla i postawili lipny serwer odpowiadający "licencja aktywna" :) Nie wiem ile ten Twój system kosztuje, ale jak widać od pewnego poziomu ceny nie ma dobrych zabezpieczeń

1
maniutek20 napisał(a):

Chłopaki sfabrykowali dongla i postawili lipny serwer odpowiadający "licencja aktywna" :)

No tak, dlatego apka powinna implementować MTLS'a . Dodatkowo apka powinna mieć zahardkodowany dodatkowy klucz publiczny a same binaria być odpowiednio zobfuskowane, żeby tego klucza łatwo nie wydobyć. Wtedy odpowiedź "licencja aktywna" powinna posiadać dodatkowy podpis a klient ten podpis weryfikuje swoim kluczem czy pochodzi od znanego sobie serwera. Adres serwera też powinien być wyryty w kamieniu czyli zahardkodowany i zobfuskowany. Dodatkowo klient powinien wysyłać periodycznego healtchecka z raportem ze swoim stanem tak, żeby serwer mógł zdeterminować czy stan klienta jest taki jaki powinien być (nie podmieniony klucz publiczny itp). Jeżeli klient nie wysyła healthchecków przez dłuższy czas to też już o czymś świadczy.

To wszystko też oczywiście da się obejść, ale jest tego kilka warstw (MTLS, obfuskacja, wersyfikacja podpisu, healtchecki) co sprawia, że staje się to czasochłonne a przez to mniej opłacalne. Jest jeszcze inna kwestia - trzeba to tak zrobić żeby klient, który uczciwie kupił nie czuł się jak przestępca i nie był ukarany za to, że dostawca internetu leci w kulki i postanowil nie świadczyć usługi przez pół dnia.

Generalnie temat nie jest prosty, samodzielne robienie takich rzeczy to orka na ugorze. Jeżeli to pierwsza próba zaimplementowania czegoś takiego, to oprócz dongle'a nie wychodziłbym poza MTLS'a i obfuskację.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0