Niebezpieczna kryptografia

Prowadzący: Michał Radwański


Kategorie: informatyka informatyka teoretyczna

Opis

Być może kiedyś, jeszcze jako dzieciak, chciałeś(łaś) wymienić się z kimś jakimiś informacjami. Wystarczyło naskrobać coś na szybko, zmiąć w kulkę z papieru, komuś podrzucić. Ale co jeśli ktoś jednak ukradnie ten papier? Wymyślało się wtedy jakiś sposób na zapisanie tego co trzeba, ale nie bezpośrednio - tak, aby zrozumiał to tylko nadawca. Sęk w tym, że bardzo często, albo kolega do którego pisałem nie miał pojęcia o co chodzi, albo każdy od razu mógł się domyślić. Problem ten, jak umożliwić taką wymianę informacji, gdzie nikt postronny nie będzie umiał się nic dowiedzieć na temat wiadomości jest znany od dawna, a twórcy takich rozwiązań bardzo często padali ofiarą własnych rozwiązań - bardzo prosto stworzyć system, który jest w jakiś sposób błędny. Naukę, która obejmuje te oraz pokrewne zagdnienia nazywamy kryptografią, natomiast same analizowanie powyższych konstrukcji, kryptologią.

 

Aby poprawnie używać kryptografi, trzeba rozumieć do czego służą poszczególne konstrukcje (takie jak szyfry, funkcje skrótu, etc.), wiedzieć co zapewniają, jakich założeń wymagają, oraz do czego służą. W kontekście bezpieczeństwa, nie można oddzielić protokołu od środowiska, w którym jest używany. Tak zwane ataki side-channel polegają na mierzeniu dodatkowych rzeczy takich jak czas działania, by dowiadywać się poufnych informacji. Kryptologia wobec tego jest bardzo asymetryczną dziedziną - wystarczy często jeden błąd aby zniweczyć długotrwałe badania kryptografów. W tych warsztatach zobaczymy, że błędy te często nie są nieosiągalne dla ludzi bez tytułu doktora.

 

Zajęcia będą przebiegać w sposób warsztatowy z przerywnikami wykładowymi. Będę naprzemiennie przedstawiać potrzebną teorię, a następnie będziecie mogli spróbować łamać napisane przeze mnie systemy.

 

Wymagania

Nie wymagam żadnej wiedzy o kryptografii - wszystko co potrzebne pojawi się na zajęciach. Przyda się z kolei podstawowa wiedza matematyczna (zwyczajny licealny program rozszerzony), w tym podstawy teorii prawdopodobieństwa oraz teorii liczb (warto wiedzieć co to jest arytmetyka modulo).

 

Do przemyślenia i rozwiązania wielu zadań przyda się kartka i długopis, ale nie ukrywam, że warto umieć programować (w stopniu podstawowym) - niektóre z zadań będzie się dało zrobić bez tej umiejętności, ale tak czy inaczej będzie to karkołomne. Zalecam używanie Pythona (w wersji względnie nowej, np. co najmniej 3.6), gdyż jest to bardzo prosty, wygodny i praktyczny język, szczególnie na potrzeby tych warsztatów. Jeśli jednak ktoś się zdecyduje na inny język, być może będę mógł służyć pomocą. Chciałbym tutaj także wspomnieć, że zdecydowanie odradzam używanie języków C lub C++. Wiem, że są one popularne, ale programowanie w nich zajmuje wiele czasu i nie umożliwiają prostej komunikacji sieciowej [^1], ponadto osoby znające C++ z pewnością dadzą sobie radę z Pythonem.

 

Poprzednie wymaganie również sugeruje, że trzeba mieć własny komputer. System operacyjny generalnie nie jest ważny, ale polecam mieć zainstalowane środowisko programistyczne (czyli np. interpreter Pythona).

Materiały

Polecam książkę https://www.crypto101.io/ oraz stronę https://cryptopals.com/.


[^1]: Być może można sobie poradzić używając biblioteki Qt, jednakże jest szansa, że nie będę umiał Tobie pomóc.