Zabezpieczenie programu kluczem sprzetowym

0

Pewnie zaraz powiecie ze temat nadaje się do newbie ale specjalnie pisze tutaj bo mało jest na temat kluczy sprzętowych w sieci a z działu newbie za miesiąc temat wyleci.

Napisałem program który tez, będę sprzedawał, zdecydowałem się na zabezpieczenie go za pomocą klucza sprzętowego ponieważ jest to stosunkowo prosty sposób i wystarczy by obronić się przed przeciętnym zjadaczem chleba.

Zabezpieczenie polega na tym ze do programu dołączam dwa pliki (dll i lib dostarczone przez producenta) a potem przy starcie wykonuje kilka funkcji w tej bibliotece (oczywiście podając pewne wpisane na stale informacje takie jak klucz AES) i jeżeli te wszystkie funkcje zwrócą wartość 0 oznacza to ze podłączony klucz jest poprawny.

Widzę w tym rozwiązaniu kilka powaznych wad łatwych do wykożystania przez nawet kiepskiego crackera, i tu mam do was pytania jak w możliwie najprostszy sposób utrudnić takiej osobie życie.

  1. żaden problem podmienić bibliotekę na taka która zawsze powie ze klucz jest podłączony i ze jest prawidłowy. Tu akurat wydaje mi się że sprawdzanie sumy kontrolnej było by wystarczające, jak myślicie? Jeśli tak to jaka będzie dobra? MD5?

  2. Wszystko sprowadza się do sprawdzenia warunku: jeżeli funkcja zwraca 0 to super. Tylko czy przypadkiem cracker nie może namieszać tak że program będzie porównywał zwracana wartość z numerem standardowego błędu?

  3. Cracker może zdaje się podmienić wpisany w programie klucz publiczny, na inny.

Jeśli wiecie jak się przed tym zabezpieczyć, albo widzicie kolejne wady tego sposobu zabezpieczania, to napiszcie, myślę ze taki temat pomoże paru osobom w zabezpieczaniu swoich programów.

0

Ekspertem nie jestem, ale jakieś tam pojęcie o temacie mam, więc sie wypowiem :)

Zabezpieczenie polega na tym ze do programu dołączam dwa pliki (dll i lib dostarczone przez producenta) a potem przy starcie wykonuje kilka funkcji w tej bibliotece (oczywiście podając pewne wpisane na stale informacje takie jak klucz AES) i jeżeli te wszystkie funkcje zwrócą wartość 0 oznacza to ze podłączony klucz jest poprawny.
i zapewne w tym momencie następuje uruchomienie programu i zapominamy o kwestii bezpieczeństwa... I to jest IMHO spory błąd. Dlaczego? Juz tłumacze :) Jest to (chyba?) dość rzadko stosowana technika, ale za to skuteczna - uruchamiamy orginalny program na maszynie wirtualnej, podłączamy klucz sprzętowy, program sie odpala, "zapisujemy" maszyne wirtualna i ta zapisana wersje rozpowszechanimy... Przerost formy nad treścia? Tak, dlatego rzadko stosuje sie ten sposob, ale jednak przy takim zabezpieczeniu jest on bardzo skuteczny. Dlatego proponuje dodać nawet jakieś "lekkie" zabezpieczenie, które bedzie w czasie działania programu sprawdzało czy klucz jest podpięty i czy wszystko jest ok.

  1. Nie wiem...
  2. Może namieszać tak, że niezależnie od zwróconej waartości program będzie się zachowywał tak jakby została zwrócona wartość 0.
  3. Może i jeżeli plik/biblioteka nie będzie zaszyfrowany i nie będzie tam kilku(nastu) fałszywych kluczy to nie bedzie to duży problem.
0

generalnie taki klucz to lipa, dobry klucz (jak dla mnie) powinien zawierac szyfr/klucz za pomoca ktorego zaszyfrowane sa wazne czesci programu, ktory ma byc uruchomiony (i przy uruchomieniu laduja sie do pamieci).

Takie zabezpieczenie juz ciezko zlamac bez klucza a ci co maja klucz nie za bardzo zazwyczaj chca sie dzielic. W kluczu moga byc tez czesci istotne z punktu widzenia programu (czyli to co najwazniejsze w programi np jakis algorytm - trzeba jednak pomyslec o tym jak upgradowac takie kluczyki).

Zabezpieczenie i tak sie da obejsc kwestia czy zostanie zlamane jest

proporcjonalnie do

  • popularnosc
  • popularnosc danego systemu kodowania (jesli to bardzo popularny a przy tym kiepski system to na 100% istnieje uniwersalne cracki)

odwrotnie proporcjonalnie do

  • namieszane, duzo funkcji, szyfrowanie blokow pamieci, zaciemnianie kodu
  • oprogramowanie specjalistyczne (tu i tak klient woli kupic)

a to co przedstawiles (taki rodzaj klucza) to rownie dobrze moglby to byc klucz dawany przez ciebie w postaci ciagu znakow i zapisywany w pliku, zaleznie od usera.
Jak podmieni biblioteke to i sume md5 tez co to za problem. Mozna liczyc tylko na zniechcecenie (co prawda jak sie trafi na crackera z prawdziwego zdazenia to zamieszanie w kodzie bedzie raczej traktowal jak wyzwanie - zachete :) )

0

A ja bym był skłonny zrobić własny klucz sprzętowy który by posiadał jakiś numer seryjny którego nie da się zmienić. A aplikacja by sprawdzała co jakiś czas czy urządzenie podpięte do PC to odpowiedni klucz sprzętowy. tak naprawdę to nie jest takie trudne i co najlepsze komunikacja z takim kluczem odbywa się na zasadzie PC -> RS232 zaś klucz byłby podpięty pod USB. Wszystko dzięki konwertorowi USB-RS232 no a z obsługą COM-a to już chyba problemów nie ma.

0

Poziom trundosci pozbycia sie klucza w przypadku gdy jest to transmisja com jest podobny do przedstawionego tu klucza.

  • podsluch com/rs232
  • juz wiemy co w trawie piszczy

a) jesli tylko COM<->USB bez dodatkow (najprostsza konfiguracja np. kostki FTDI)
udawany port com (programy do udawania - virtualne comy mozna znalezsc w sieci)

b) jesli wprowadzono dodatki (rozszerzajace COM) to juz moze byc lepiej, jednak duzo tu osiagnac nie mozna (wciaz jest to niby COM).

poza tym jak z jednego miejsca mozna wywalic sprawdzenie to i z innych tez (ile musialo by ich byc ?? w kazdej funkcji - wtedy mozna by bylo szukac podobienstw kodu, chyba ze autor zmienial by ich wyglad losowo - tu znow trudnosc ...)

BTW. zrobienie klucza jest proste ale czy tansze ....

0

Dawno, dawno widziałem prosto robiony kluczyk.
Układ CMOS, rejestr przesuwny i chyba bramki XOR (liczyło to coś na kształt CRC) próba rozkręcenia obudowy odłączała baterię co powodowało utratę zawartości rejestru.

0

No tak ale tu odpada USB (wlasciwie mozna zapomniec dzis o com i lpt).

wiec jak sie policzy

  • polaczenie z usb uP albo cos w stylu FTDI (10 - 40zl)
  • dodatki, plytka, wytrawiacz, elementy pasywne ~10zl
  • wtyk obudowa, w koncu musi jakos wygladac ~10zl
  • poswiecony czas - liczac 5zl/h jak dla sparzataczki mysle ze z ~20zl
  • w przypadku uP trzeba napisac program - jednorazowy problem

mamy 50 - 80 zl za jako taki klucz a cena takiego w ktorym mozna trzymac dane o programie, ma szyfrowanie etc. to okolo 100zl

0

tak naprawde to jakie zabezpieczenie daje nam 100% pewności? bo według mnie żadne jedyne co można zrobić to jak najbardziej utrudnić życie crackerowi który sie za nasz program zabierze. Zrobienie własnego klucza na pewno nie jest idealnym ale zato fajny bajer. Zresztą można taki układ wyposażyć w EEPROM (FT232R ma już taki wbudowany koszt koło 12 zł) i możęmy w nim zapisywać jakieś istotne dane bez których program się nie uruchomi. na pewno prostrzym sposobem było by taki klucz kupić ale zawsze można coś takiego zrobić choćby dla bajeru lub żeby się czegoś nauczyć. Pozostaje jeszcze kwestia za ile chcesz swój program sprzedawać. Bo jeśli cena programu jest niska to wg. mnie robienie takich zabezpieczeń jest średnio opłacalne. Taka moja uwaga :)

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