Wątek zablokowany 2016-11-16 20:32 przez furious programming.

Odczytanie pliku licencyjnego (zaszyfrowanego wcześniej RSA) przez program u użytkownika

0

Witam załogę !

Nie spodziewałem się tego, ale mam niestety dylemat ;]
Może zacznę od początku.
Załóżmy, że stworzyłem swój super program. Chciałbym, żeby ten mój super program był zabezpieczony super plikiem licencji (jak na super program przystało), a ten plik licencji byłby zaszyfrowany super algorytmem wielkiej mocy RSA, tak ze 2048 na dobry początek.
Skromnie napiszę, że plik takowy potrafię wygenerować. I wygenerować i odszyfrować też, i co ciekawe, po odszyfrowaniu jest wszystko jak przed zaszyfrowaniem ;]
Co mnie jednak martwi .. Mój super program (u potencjalnego wielce szczęśliwego użytkownika) musi przecież odszyfrować ten mój super zaszyfrowany plik licencji, sprawdzić czy wszystko gra, i jak gra to hulaj dusza.
Być może wynika to z mojego niedouczenia, ale rozumiem, że odszyfrowanie takiego pliku zaszyfrowanego RSA możliwe jest tylko w przypadku posiadania mojego klucza prywatnego?
Czyli podsumowując, czy aby odszyfrować/odczytać plik licencyjny którego sam stworzyłem i zaszyfrowałem, zgodnie z zasadami RSA, mój program u klienta musi mieć wbudowany mój klucz prywatny aby odczytać plik licencji?
To mi się nie bardzo widzi.
Bo z tego co wiem, klucz prywatny powinien być szczególnie chroniony, a jak będzie wbudowany w programie to ta jego ochrona taka mizerna będzie.
Na pewno jest na to inny sposób, aby zachować bezpieczeństwo, przynajmniej w przypadku komunikacji autor>plik licencji>aplikacja u użytkownika.

Nie bez powodu piszę w tym dziale,
nie jestem programistą po szkołach, a szkoły mam już raczej za sobą,
choć niektórzy mówią, że uczymy się całe życie.. a i tak ...

Czy ktoś z szanownego grona może mi zdradzić, jak taki proces się zazwyczaj realizuje (plik licencji RSA odczytywany przez mój program u klienta)?
Nie chodzi mi o przykłady (choć mile widziane, w Delphi), a o metodykę.

Dla zwycięzcy rozszyfruję mojego nicka. Jeśli takie będzie miał życzenie.
Choć jak komuś się nudzi może już teraz próbować go odszyfrować.

0

Żeby odszyfrować plik potrzeba klucza publicznego . Swój klucz prywatny możesz trzymać bezpieczny. Zresztą, nieprawdą jest że należy mieć koniecznie klucz prywatny, można mieć ten co zwą publicznym, a wszystkim rozdawać prywatny aby mogli do nas wysłać coś zaszyfrowanego, ale tylko my będziemy mogli to odszyfrować. Z jednego klucza nie da się łatwo otrzymać drugiego w przypadku RSA.

Dla zwycięzcy rozszyfruję mojego nicka. Jeśli takie będzie miał życzenie.
Choć jak komuś się nudzi może już teraz próbować go odszyfrować.

mam inną propozycję: Pokaż skąd masz kod który umożliwia na stosowanie RSA w Delphi (najlepiej to żeby działało pod Lazarusem), bo kiedyś szukałem ale nie udało mi się :P .

0

Wyszperałem AecRSA na torry.net, niestety nie ma źródeł, tylko dcu.

0

Producenci gier komputerowych od dawna z takim problemem (szyfrowania programu na dany komputer) walczą, jak na razie bez szczególnego efektu. Ogólnie to jedyna szansa na przedłużenie ataku leży w obfuskacji, ale to i tak zajmie więcej czasu niż komuś ogarniętemu złamanie tego. Zawsze możesz spróbować SaaS.

0

"Żeby odszyfrować plik potrzeba klucza publicznego" o.O. Dodatkowo ty powinieneś trzymać klucz prywatny i rozdawać klucz publiczny, ponieważ klucz publiczny jest krótki, np. wykładnik wynosi 65537. Zamieniając kolejność kluczy tracisz całe bezpieczeństwo.

Widać że nie znam się zbyt na RSA? Cóż :-/

Załóżmy, że stworzyłem swój super program. Chciałbym, żeby ten mój super program był zabezpieczony super plikiem licencji (jak na super program przystało), a ten plik licencji byłby zaszyfrowany super algorytmem wielkiej mocy RSA, tak ze 2048 na dobry początek.

To mam inny pomysł, tak to robią np. twórcy IDy: Szyfrujesz część informacji (np. hash i czas) tobie znanym algorytmem i tobie znanym hasłem. Dzięki temu tylko ty jesteś w stanie sprawdzić czy ta licencja jest prawdziwa. Ale istnieje możliwość jej usnięcia, wraz z całą licencją, wobec czego nie jesteś w stanie stwierdzić kto spowodował wyciek cracka. Ale w takim wypadku możesz się bawić w zmianę kodu, na taki, który powoduje taki sam efekt (np. mov eax,0 = xor eax,eax) a ma inny skład bajtów. Dzięki temu jeżeli każdy klient otrzyma inny kod maszynowy, ciężko będzie usunąć informację, kto to jest. To nie zabezpieczy kodu przez zhackowaniem, ale umożliwi stwierdzenie od kogo twój kod wyciekł.

Jeżeli chciałeś zabezpieczyć swój program przed hackowaniem, to przez szyfrowane pliki licencji nie droga. Jedynym skutecznym rozwiązaniem to SaaS.

0

Dziękuję za zainteresowanie i odpowiedzi,

-oho123 : też czytałem o możliwości zamiany kluczy prywatnego z publicznym, ale nie byłem pewien czy te klucze mają porównywalną 'moc'. Widać nie bez powodu (informacja od Zjarek) zalecają chronienie klucza prywatnego, a rozpowszechnianie publicznego.
Niestety zdaję sobie sprawę, że każde zabezpieczenie programu da się obejść, po krótszym lub dłuższym czasie (ten krótszy czas to kilka/kilkanaście minut, a ten dłuższy liczony jest w dniach.
W końcu i ja pogodziłem się z tym.
Powiem też, że interesowałem się programami typu exe-protector. Te rozwiązania mają swoje wady i zalety. Zalety takie, że opóźnią trochę moment złamania, a jeśli są to znane rozwiązania, tylko im bardziej są znane tym te czasy są krótsze.
A wady, wg mnie największą bolączką tych programów jest to, że zabezpieczone nimi programy są wykrywane jako niebezpieczne, przez antywirusy.

Czy ktoś zna jakiś obfuscator/protector do którego nie czepiają się antywirusy?

Nie oparły się nawet protectory z wirtualizacją i mutacją kodu. Na Ollyego i jego skrypty mocnych póki co nie ma ..

Ten pomysł z plikiem licencji RSA to tak raczej dla spokoju sumienia był. W sumie wychodzi na to, że taka licencja to tylko, jak to mówią, .. pic na wodę , fotomontaż.
Algorytm RSA nie jest zły, szyfr jest dobry, ale najlepsze zabezpieczenie jest na tyle silne, ile jego najsłabsze ogniwo. To stara znana prawda.
A to słabe ogniwo jest w kodzie programu. Nie w szyfrowaniu.
W końcu coś i tak trzeba odszyfrować i porównać z czymś, po czym coś zrobić. I tu pole do popisu dla crackerow.

Doszedłem do wniosku żeby jednak zadziałać tak, aby potencjalnemu legalnemu użytkownikowi nie sprawić za dużo kłopotów.

-Zjarek
SaaS się raczej nie u mnie sprawdzi, bo nie mogę wymagać dostępu do internetu na tych docelowych urządzeniach na których będzie działał program.
Jest jednak nadzieja, albowiem ten program raczej nie będzie do użytku 'domowego'.

Pozdrawiam,
PS, -oho123, jak chcesz mogę spakować cały stuff jaki wyszperałem w poszukiwaniu algorytmów RSA na Delphi, i zamieścić gdzieś w sieci. Widzę jednak w źródłach, że w większości przypadków generatorów kluczy wykorzystywane są tablice z wpisanymi liczbami pierwszymi (na stałe), no i nie są to długie klucze (te ze źródłami max 512).

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