Zabezpieczanie aplikacji poprzez cyfrowy podpis

0

Hej,

Trafił na bardzo ciekawy artykuł:
http://www.codeguru.geekclub.pl/baza-wiedzy/zabezpieczanie-aplikacji,2075

W sumie to jest to, co jest mi potrzebne na chwilę obecną w moim projekcie - dla mojej firmy jeden klucz, a dla kilku osób spoza firmy drugi klucz i podpisywanie (to, że ręcznie nie jest problemem).

Powiedzcie mi tylko - na ile to, jest "bezpieczne". Wziąłem w cudzysłów, ponieważ nic nie jest nie do złamania.
Ale osoby, które będą korzystać z mojej aplikacji, nie są nadzwyczaj zaawansowane w programowaniu.

Obecnie mam własną klasę, która obsługuje generowanie kodu żądania i aktywacji - a taką wiadomo, można otworzyć w disassemblerze (Reflector) i przepisać tak, by wygenerować kod aktywacji bez mojej wiedzy.

Czy podpisy cyfrowe zapewniają mi ciut więcej komfortu psychicznego?

Dzięki :)

0

Ktoś poradzi? :)

0

Myślę że, stworzenie mechanizmu generowania pustego certyfikatu, następnie uzyskanie podpisu tego certyfikatu + przypisanie loginu do użytkownika aplikacji jest dobrym pomysłem. Ponadto stworzyłbym mechanizm klucza publicznego prywatnego oraz zaszyfrował plik xml z danymi o certyfikacie dla konkretnej maszyny i użytkownika. Na koniec można sprawdzać za pomocą już wymienionych przeze mnie kluczy podpisy na bieżąco przez sieć, podczas logowania do aplikacji, w tym momencie mozliwe tez jest wprowadzenie dodatkowego zabezpieczenia pochodzącego od serwera, a polegającego na generowaniu specyficznego hashcodu i przypinaniu go "gdzieś" do certyfikatu, taki hashcode zmieniał by się zaleznie od "woli" serwera, i wprowadzałby zabezpieczenie związane z możliwością kopiowania pliku certyfikatu i próby użycia go przechwycenia danych lub stworzenia mechanizmu podszywania się pod użytkownika za pomocą przechwyconego certyfikatu. Mówiąc po ludzku serwer generuje odpowiedni klucz na podstawie którego przy przesłaniu certyfikatu przez klienta, serwer stwierdza czy plik ten jest prawdziwy i aktualny czy jest to już wykozystana wersja... Tak ja bym to rozwiazał... ale to tylko przemyslnei awiec może byc tu kilka sprzeczności. Pozdrawiam

0

Twój opis jest nieziemski :) Na pewno coś z tego wykorzystam (z pewnością hashowanie pliku licencji).

Szukam natomiast potwierdzenia tezy, że generowanie licencji na podstawie klucza prywatnego i publicznego jest lepszym (bezpieczniejszym) rozwiązaniem niż zastosowanie numeru seryjnego (w zewnętrznej bibliotece + zaciemniony kod).

0

Kiedyś stworzyłem bibliotekę, która generalnie miała za zadanie szyfrowanie a następnie serializację zaszyfrowanych danych za pomocą RSA http://pl.wikipedia.org/wiki/RSA_(kryptografia) . Biblioteka posiada swoje globalne ustawienie, gdzie określamy miejsce przechowywania lub zapisywania wygenerowanych zaszyfrowanych informacji w pliku XML, nazwy plików, obsługę błędów poprzez generowanie plików z logami. Posiada także mechanizm o którym wspomniałem, czyli tworzenie hashcodu i porównywanie z oryginałem, nie ma mechanizmu generowania za każdym razem innego hashcodu ale nic nie stoi na przeszkodzie aby to dorobić (np wykorzystać serwer WCF, dodać referencje do biblioteki, wyedytowac ustawienia i dopisać mechanizm podpinania hashcodu do otrzymywanych strumieni). Oczywiście jest też opcja wysyłania takiego strumienia. generalnie zaniechałem prac z uwagi na inne zajęcia. Nie jest przetestowana w 100% i w niektórych przypadkach zawiera śladowe ilości błędów, możesz sobie podłubać, może coś Ci się przyda (nie gwarantuje poprawności działania ponieważ już dawno zaniechałem pracy nad tym projektem, ponadto kod prawdopodobnie jest do przebudowania i optymalizacji ponieważ jest to tylko wersja wstępna):

0

To pseudozabezpieczenie. Ominąć je można tak:

  1. Patchując kod sprawdzający
  2. Generując własny certyfikat jeśli źle dobierzesz klucze (będą za krótkie)
  3. Podmieniając klucze publiczne na swoje własne klucze (często się tak robi)

To dobry sposób na to, żeby nikt keygeneratora nie napisał, jednak to nie jest dobre zabezpieczenie aplikacji.

0

@Bartosz

Ad.1. Czyli to, że wszystko mam w jednej bibliotece, nie stanowi problemu i może zostać spatchowane, tak?
Ad.2. Co to znaczy, że klucze będą za krótkie?
Ad.3. Mimo tego, że klucze są jako osadzone zasoby, to i tak mogą zostać podmienione?

I ostatnie pytanie - czy obejścia takiego zabezpieczenia może dokonać taki człowiek, który ma średnie pojęcie o programowaniu?
Na ile jest to trudniejsze od keygena, który ktoś może zrobić patrzeć na kod (mimo, że zaciemniony).

Dzięki!

0

@Bartosz

To co byś mi proponował?

0

C++ odpada. Projekt musi być pisany w C# (nie mój wymysł).

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