W drugiej części cyklu poznasz zagadnienia związane z wyborem algorytmów szyfrujących, oraz technikami generowania i przekazywania kluczy – tak aby możliwe było odszyfrowanie danych.
1. Planujesz szyfrowanie symetryczne czy asymetryczne?
Rozumiesz różnice? Wiesz, o jakie algorytmy chodzi?
A może szyfrowanie symetryczne plików użytkownika kluczem komputera szyfrowanym asymetrycznie?
Pracowałeś kiedyś jako programista albo integrator z algorytmami AES, RSA lub podobnymi? Jeśli nie, koniecznie najpierw wszystko dokładnie przećwicz na „oficjalnym” oprogramowaniu – tj. takim, w przypadku którego możesz:
- opublikować kod źródłowy na Githubie
- zapytać na Stack Overflow o jakieś problematyczne kwestie
- poprosić kogoś o code review
- itd.
2. W którym momencie i w którym miejscu chcesz generować klucze?
Na obrabianym właśnie komputerze? Czy na swoim serwerze, aby potem pobierać je na obrabiany komputer?
Przy szyfrowaniu asymetrycznym, parę kluczy można wygenerować w innym miejscu i pobrać na komputer sam tylko klucz szyfrujący. W ten sposób klucz deszyfrujący w żadnym momencie nie znajduje się na komputerze ofiary, a więc nie jest możliwe jego odzyskanie, niezależnie od kwalifikacji firmy odzyskującej dane.
W praktyce jednak szyfrowanie asymetryczne ma relatywnie słabą wydajność i z reguły stosuje się inną strategię, polegającą na tym, że:
- generuje się unikalny „klucz sesji” (w tym przypadku klucz komputera)
- tym kluczem sesji szyfruje się dane użytkownika symetrycznie (np. AES)
- jednocześnie sam symetryczny klucz sesji szyfruje się asymetrycznie (np. RSA) kluczem prywatnym autora
- po zakończeniu procesu szyfrowania, usuwa z komputera jego postać jawną
Takie podejście pozwala na rezygnację z automatycznego przekazywania klucza – zrobi to sam użytkownik, któremu zależy na odzyskaniu własnych danych.
Algorytmy szyfrujące są bardzo trudne do poprawnej implementacji. Ich samodzielna implementacja od podstaw bardzo często prowadzi do błędów ułatwiających ataki na klucz, albo wprost do możliwości odszyfrowania danych bez płacenia – lub odwrotnie, do całkowitej niemożliwości odszyfrowania danych w pewnych niestandardowych przypadkach. Dlatego też nie należy samodzielnie implementować algorytmów asymetrycznych, ale korzystać ze znanych i dobrze przetestowanych bibliotek.
3. Jak chcesz te klucze przekazywać, aby nie ryzykować ujawnienia swojej tożsamości, ale umożliwić klientom odszyfrowanie danych po zapłacie?
4. Kiedy i o jakich zdarzeniach program szyfrujący powinien informować autora?
Np.:
- pobranie klucza (i inne operacje związane z kluczem jako takim)
- rozpoczęcie i zakończenie procesu szyfrowania
- raport nt. znalezionych na komputerze danych użytkownika
- itp.
Jak to pogodzić z generowaniem lub pobieraniem klucza?
Kiedy i w jakich sytuacjach takie dane będą Ci naprawdę niezbędne, a kiedy będą jedynie zbędną ciekawostką, ew. będą zaledwie przyspieszały Twoją pracę? Innymi słowy, czy i kiedy to przyspieszenie pracy będzie warte ryzyka?
5. Demonstracja możliwości odszyfrowania plików
Ofiara często przed wysłaniem pieniędzy żąda dowodu – „wyślij zaszyfrowany plik a dostaniesz rozszyfrowaną wersję” jest funkcją must-have w dzisiejszych szyfratorach (w każdym razie tych, które rzeczywiście zarabiają). Jak wmontować taką funkcję we flow obsługi kluczy i zdarzeń, aby zminimalizować ryzyko dekonspiracji (aby autor nie musiał każdorazowo pobierać odpowiedniego klucza deszyfrującego z serwera sterującego)?
W kolejnej części – enumeracja zasobów.
Intencją autorów ani wydawcy treści prezentowanych w magazynie PAYLOAD nie jest namawianie bądź zachęcanie do łamania prawa. Jeśli popełniłeś lub masz zamiar popełnić przestępstwo, bądź masz wątpliwości, czy Twoje działania nie będą łamać prawa, powinieneś skonsultować się z najbliższą jednostką Policji lub Prokuratury, a jeśli są one związane z pieniędzmi, dla pewności również z Urzędem Skarbowym.
Nie zezwala się na użycie treści prezentowanych w magazynie PAYLOAD, ani produktów dostępnych w sklepie PAYLOAD, do celów popełniania przestępstw lub przestępstw skarbowych.