Mam dosyć nietypowy i na pewno trudny temat, który od kilku miesięcy mnie intryguje. Dużo czytałem o RSA i ogólnie o szyfrowaniu, jednak nie potrafię odwrócić całej tej procedury i dostosować jej do moich potrzeb.
Ale po kolei! Załóżmy, że mamy stronę który chcielibyśmy zabezpieczyć za pomocą licencji - pliku tekstowego zawierającego zaszyfrowaną informację o:
- dacie ważności licencji,
- osobie której została przydzielona,
- domenie pod którą będzie działać.
W logice biznesowej zaszywamy ukrytą funkcję która sprawdza licencję i jeśli wszystko się zgadza, to strona się wyświetla, w przeciwnym razie zwraca exit(), wyjątek czy inną wymyślną rzecz. Kwestię tego jak utajnić logikę biznesową aby ktoś jednym komentarzem nie wyłączył tego sprawdzania pomijamy - jest na to wiele sposobów, a i nie to jest tematem tego wątku.
Na czym polega haczyk? A no na tym, że ma to być odwrócenie RSA. O ile w RSA mamy dostępny dla każdego klucz publiczny (szyfrowanie) i zastrzeżony tylko dla właściciela klucz prywatny (deszyfrowanie), o tyle tutaj chciałbym uzyskać w 180 stopniach odmienny efekt:
Każdy może odszyfrować ukrytą treść licencji (a przynajmniej wystarczy, że w kodzie aplikacji będzie zaszyta odpowiednia funkcja która to zrobi), jednak tylko ja chcę mieć możliwość jej zaszyfrowania, a więc udzielania licencji. Ważne jest to, aby można było bez przeszkód zweryfikować autentyczność zaszyfrowanej licencji, tak aby nie można jej było wygenerować ręcznie.
Czy macie pomysł na to, jak taki problem rozwiązać w praktyce? Może ktoś słyszał o podobnych technikach szyfrowania i zechce podzielić się jakimś ciekawym artykułem?

Edit: Czy przy wykorzystaniu RSA posiadając szyfr, oryginalną wiadomość i klucz prywatny można odtworzyć klucz publiczny?