10/08/2016

Zapytaj eksperta: Jornt van der Wiel opowiada o szyfrowaniu

Porady Projekt specjalny

Jornt van der Wiel to czołowy ekspert od programów żądających okupu w naszym zespole GReAT (Global Research and Analysis Team — Globalny Zespół ds. Badań i Analiz). Posiada on również rozległą wiedzę dotyczącą szyfrowania. Zaproponowaliśmy naszym Czytelnikom, aby zadali Jorntowi swoje pytania, a było ich tak wiele, że odpowiedzi musieliśmy podzielić na dwa posty.

W pierwszej części Jornt odpowiadał na pytania związane z ransomware. Teraz przyszedł czas na szyfrowanie i wszystko, co z nim się wiąże.

ask-expert-featured

Zastanawiam się, jaki jest cel bezpieczeństwa IT. Wolność? Prywatność? Bezpieczeństwo narodowe? Nie jest łatwo znaleźć odpowiedź, ale chciałabym wiedzieć, co Ty o tym sądzisz.

Według mnie zadaniem bezpieczeństwa IT jest ochrona życia codziennego. Automatyzacja, a później IT, miały pierwotnie ułatwiać życie, zautomatyzować to, co człowiek musiał wykonywać własnymi rękami. Niestety podczas projektowania wielu systemów IT nie wzięto pod uwagę kwestii bezpieczeństwa, dlatego dziś mamy z nimi problem. Jeśli systemy informatyczne nie byłyby chronione, w życie codzienne mógłby wkradać się chaos.

Wyobraź sobie, że musisz szybko jechać do szpitala, a na miejscu dowiadujesz się, że lekarze nie mogą ci pomóc, ponieważ ktoś zhakował komputery. Lub inna sytuacja: żyjesz poniżej poziomu morza i nagle Twój dom tonie, bo blokada na zaporze została zhakowana. To tylko kilka przykładów, które mogą się przydarzyć.

Jednak w grę wchodzą nie tylko scenariusze związane z bezpośrednio życiem i zdrowiem: w końcu codzienność składa się także z małych rzeczy, które mają dla nas znaczenie. Ktoś może stracić zdjęcia swojego niedawno zmarłego ojca, ponieważ jego komputer został zaatakowany przez ransomware. Strata tego rodzaju też wpłynie na tę osobę. Bezpieczeństwo IT jest po to, aby chronić to, na czym ludziom zależy najbardziej.

Jak wytłumaczyć zwykłemu użytkownikowi, który nie zna się za bardzo na komputerach, dlaczego szyfrowanie jest ważne?

Według mnie najlepszym sposobem jest posługiwanie się przykładami tego, co mogłoby się stać, gdyby nie było szyfrowania. Na przykład co się dzieje, gdy czyjś laptop lub pendrive zawierający wrażliwe dane zostanie zgubiony lub skradziony. Jeśli znajdujące się na nim dane nie były zaszyfrowane, mogą je zobaczyć osoby, które znajdą zgubę. Można także podać przykład płatności internetowych – gdyby nie było szyfrowania, ruch mógłby podlegać różnym manipulacjom, itd. Najlepszymi przykładami są te z życia wzięte.

Czy łatwo jest utworzyć algorytmy szyfrowania? Ile potrzeba na to czasu?

Na tworzenie solidnego algorytmu szyfrowania, czyli takiego, który jest matematycznie bezpieczny, składają się lata badań oraz wiele lat nauki związanej z samą matematyką. Jednak jeśli chcesz utworzyć coś prostszego, co może zostać zhakowane w kilka sekund, nie zajmie ci to wiele czasu.

Jak właściwie działa szyfrowanie?

W tym miejscu należy zaznaczyć, że istnieją różne rodzaje szyfrowania: szyfr strumieniowy, symetryczny i asymetryczny (znany także jako kryptografia klucza publicznego).

W przypadku szyfru strumieniowego sprawa jest dosyć prosta. Na podstawie klucza użytkownika generowany jest nieskończony strumień danych losowych, który należy ponownie poddać alternatywie wykluczającej XOR ze swoim zaszyfrowanym tekstem. W wyniku tego otrzymuje się oryginalny czysty tekst.

Dla szyfrów symetrycznych należy wykonać czynności procesu szyfrowania od tyłu. Na przykład aby zaszyfrować dane, musisz wykonać czynność A, następnie B, później C. Z kolei aby je odszyfrować, musisz wykonać czynność C, później B, a następnie A.

Jeśli chodzi o kryptografię asymetryczną, to jest „czysta magia”. Ona także zależy od rodzaju szyfru asymetrycznego (ECC i RSA działają całkowicie inaczej). Napisałem „magia”, ponieważ używa ona zasad matematycznych. Wiedzieć, jak coś odszyfrować, to nie to samo, co naprawdę rozumieć matematykę stojącą za procesem odszyfrowania.

Które algorytmy kryptograficzne są godne polecenia?

Istnieje wiele algorytmów kryptograficznych, których można użyć do różnych celów. Jeśli chodzi o mnie, używam tych, które wygrywają zestawienia NIST (AES/Rijndael i SHA-3/KECCAK). Ponadto warto wziąć pod uwagę, w jaki sposób będzie używany algorytm oraz jaki będzie system. Jeśli masz ograniczoną przestrzeń pamięci, możesz na przykład wybrać ECC, który wykorzystuje mniejsze klucze niż RSA.

Które metody szyfrowania są odporne na atak siłowy z komputera kwantowego?

Aby odpowiedzieć na to pytanie, musiałbym sporo poczytać 🙂 Mam jednak podstawową wiedzę w tym zakresie. Po pierwsze, różnica pomiędzy komputerem kwantowym a zwykłym pecetem jest taka, że komputer kwantowy używa tzw. „kubitów”, a nie normalnych bitów. Jeden kubit może mieć dwa stany jednocześnie. Aby nie wdawać się w opis tego długiego i skomplikowanego procesu, napiszę ogólnie: w przypadku szyfrowania symetrycznego podwajanie rozmiaru klucza zmniejsza korzyści posiadania komputera kwantowego do celów deszyfrowania metodą siłową.

W przypadku szyfrowania symetrycznego sytuacja jest nieco inna. Peter Shor, znany matematyk, wynalazł algorytm Shora, którego można używać to faktoryzacji liczby całkowitej w czasie wielomianowym. Na faktoryzacji liczby całkowitej opiera się w dużym stopniu wiele algorytmów z kluczem publicznym. Możliwość faktoryzowania liczby całkowitej w czasie wielomianowym (w tym przypadku log n) skutecznie zmniejsza bezpieczeństwo tych algorytmów do zera.

W jaki sposób implementuje się algorytm szyfrowania w programie?

Wykonuje się to poprzez pobieranie biblioteki szyfrowania do swojego języka programowania i zastosowanie API. Wówczas można wywoływać funkcje kryptograficzne z tej biblioteki i użyć ich w swoim kodzie.

Czy wszystkie organizacje używają „silnych” algorytmów szyfrowania, czy wolą użyć kodu z zasobów publicznych i nieco go zmodyfikować?

Domyślam się, że chodzi o firmy zajmujące się tworzeniem programów. Mam głęboką nadzieję, że nie wykorzystują one kodu dostępnego publicznie. Widzieliśmy już przypadki, w których źle to się kończyło, na przykład wystarczy spojrzeć na błąd generatora liczb losowych w systemie Debian Linux. Zasadniczo firma zmodyfikowała kod, ale nie w tę stronę —  osłabiła go, a nie wzmocniła. Zdarza się wielokrotnie, że zestawy SDK są dostarczane z pakietami (np. terminal POS) lub z tym, co jest dostępne publiczne. To dlatego błędy w protokołach OpenSSL przysparzają wielu dostawcom tak wiele problemów.

Czy w przyszłości szyfrowanie stanie się przestarzałe lub zagrożone? Chodzi mi o to, że agencje rządowe (np. GCHQ) będą próbowały zaimplementować tylne furtki w celu gromadzenia danych, przez co szyfrowanie może stać się nieaktualne.

Moim zdaniem szyfrowanie nigdy nie straci swojej mocy, a przynajmniej mam taką nadzieję. Na przykład DES został wynaleziony dawno temu, a wciąż często spotykamy go w urządzeniach. Można więc przypuszczać, że minie sporo czasu, zanim urządzenia te oraz nowsze, wyposażone w AES, wypadną całkowicie z użytku. W kraju, w którym żyję, niedawno podjęto walkę z backdoorami w oprogramowaniu, przyznając równocześnie, że szyfrowanie jest dobrym pomysłem. Co więcej, na wdrożenie (jeśli dobrze pamiętam) OpenSSL przeznaczono nawet specjalną pulę pieniędzy. Podsumowując, nie uważam, że szyfrowanie przestanie być używane.

Czy można w jakiś sposób oszacować niezawodność narzędzia typu TrueCrypt? Czy są dla niego jakieś realne alternatywy — może chmura?

TrueCrypt został poddany audytowi na obecność backdoorów i błędów w implementacji, które nie wykazały niczego niepokojącego. Niedługo później opublikowano jego kod źródłowy, więc ludzie mogą sprawdzać go sami, jeśli chcą. Znaleziono kilka luk, ale nie wykryto żadnej tylnej furtki. Następnie publicznie zostały udostępnione inne produkty oparte na kodzie TrueCrypta, co oznacza, że i one mogą zostać sprawdzone. Mówiąc krótko: tak, niezawodność tych produktów jest potwierdzona, ponieważ zostały one sprawdzone. Przewagą rozwiązania takiego jak TrueCrypt nad chmurą jest taka, że sam trzymasz swój klucz. Nawet jeśli Dropbox szyfruje Twoje pliki podczas przechowywania ich na serwerach, wciąż jest w posiadaniu klucza. Oznacza to, że może uzyskać dostęp do Twoich danych. Z drugiej strony zaletą Dropboxa jest to, że tworzy kopie zapasowe. Moja rada? Szyfruj swoje pliki lokalnie i przechowuj je, gdzie tylko chcesz, o ile klucz będzie tylko w Twoich rękach.

Czy gry szyfrują dane przesyłane pomiędzy klientem a serwerem? Jeśli nie, to czy użytkownik może zrobić coś, aby zabezpieczyć przesyłane dane?

Mam nadzieję, że komunikacja z serwerem podczas gry odbywa się przy użyciu połączenia szyfrowanego. W przeciwnym razie otwiera to możliwość oszukiwania. Jeśli nie jest szyfrowana, gracz nie może zrobić nic. Ustawienie bezpiecznego połączenia SSL z serwerem nie zadziała, bo serwer nie będzie tego rozumiał. Mam jednak małą uwagę: jeśli połączenie pomiędzy serwerem a klientem jest niezaszyfrowane, a Ty masz dostęp zarówno do serwera, jak i klienta, możesz zbudować pomiędzy nimi tunele SSL, szyfrując w ten sposób całą komunikację.

Jak stworzyć silną ochronę dla gry komputerowej?

Jeśli chcesz porządnej ochrony, musisz użyć rozwiązań sprzętowych, które nie posiadają backdoorów. Tutaj znajdziesz ciekawy film na ten temat:

Jeśli chcesz to zrobić czysto na poziomie oprogramowania, sprawdź, jak chroni gry komputerowe firma Denuvo (chociaż i one zostały zhakowane). Dobre pomysły i przydatną wiedzę na ten temat znajdziesz tutaj.

To już koniec sesji Zapytaj eksperta z Jorntem van der Wielem, naszym badaczem zajmującym się programami żądającymi okupu i szyfrowaniem. Mamy nadzieję, że znaleźliście odpowiedzi na swoje pytania. Dziękujemy za udział w sesji!