Coraz częściej słychać w świecie o wymagalności szyfrowania danych, czy to danych osobistych użytkowników systemów informatycznych, czy to bezpiecznego przesyłania informacji pomiędzy systemami informatycznymi. Dlatego w tej skromnej publikacji chciałbym omówić jakie są główne różnice kryptografii symetrycznej i asymetrycznej oraz jak można używać obu do implementacji najbezpieczniejszej komunikacji.
Zacznijmy od podstaw, a dokładnie – jak działają algorytmu kryptografii symetrycznej i asymetrycznej.
Jak nazwa wskazuje, kryptografia symetryczna bazuje się na wykorzystaniu klucza znanego obu stornom komunikacji w celu zaszyfrowania i odszyfrowania informacji. Natomiast, kryptografia asymetryczna bazuje się na wykorzystaniu pary kluczy – jeden klucz służy do zaszyfrowania informacji inny służy do odszyfrowania informacji. W tej małej publikacji będę skupiał się na algorytmach AES oraz RSA jako dwóch najpopularniejszych przedstawicielach obu obozów:
Główna zaletą algorytmu AES jest szybkość działania – działamy o relatywnie krótkich kluczach (np. 256 bitowych), które są wykorzystywane do tzn. bitowych przesunięć w celu zaszyfrowania lub odszyfrowania informacji.
Główną zaletą natomiast algorytmu RSA jest jego „bezpieczność”, wykorzystywanie klucza od długości 4k bitów prawie eliminuje możliwość ingerencji w treść przesyłanych informacji.
Żaden z tych algorytmów nie poddał się atakowi w praktyce, ale … [patrz linki na końcu]
Jeśli chodzi o wady, to największą wadą AES jest klucz – jak go bezpiecznie przesłać innej stronie wymiany? Jako wadę można też wytoczyć używanie stosunkowo prostej arytmetyki, co potencjalnie jest łatwiejsze do zaatakowania niż np. duże liczby proste na których oparty jest RSA.
Wadą RSA jest natomiast jego powolne działanie w porównaniu do AES, winowajcą czego jest te same duże liczby proste.
Powstaje pytanie, czy da się uzyskać stopień zabezpieczenie przesyłanej informacji taki jaki daje nam algorytm RSA oraz szybkość szyfrowania/odszyfrowania tejże informacji. Tak – da się. Jest to dość prosty w działaniu algorytm, nazwijmy go RSAES 😂
Algorytm ten polega na kombinacji silnych stron obu algorytmów, w celu połączenia ich zalet oraz prawie całkowitej eliminacji wad. Możemy to osiągnąć przesyłając klucz AES służący do szyfrowania i odszyfrowania informacji obok tejże informacji. Proszę nie rzucać od razu pomidorami, już wyjaśniam, dlaczego.
Wykorzystywanie AES dla szyfrowania i odszyfrowania informacji ma największą zaletę, której w tym momencie potrzebujemy – szybkość działania. Czekaj, czekaj Panie, przecież wyżej pisałeś, że wadą AES jest ogólny poziom bezpieczeństwa w porównaniu do RSA. Tak, jest to wada, ale ją eliminujemy w następnym kroku: klucz AES przesyłany obok zaszyfrowanej informacji szyfrujemy parą kluczy RSA znanej tylko stronom wymieniającym się informacją. Wynikiem tej operacji będzie przesłanie w bezpieczny sposób klucza AES który później służy do odszyfrowania wiadomości.
Dorzucając do klucza AES jakiś losowy challenge całkowicie eliminuje ataki typu bruteforce, nawet jeśli atakującemu udaje się zorganizować atak typu man-in-the-middle – możliwość powtórzenia się challenge o odpowiedniej długości jest znikoma.
Nie jest to jakieś nowe podejście, proszę nie mianować mnie jako autora algorytmu RSAES – ja tylko podaję to podejście do szyfrowania dalej. Zapraszam do dyskusji.
Krótkie notatki o potencjalnych atakach na RSA (http://www.members.tripod.com/irish_ronan/rsa/attacks.html) oraz AES (https://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Known_attacks).