Poufność i szyfrowanie#

Autor: Maciej Grześkowiak

Co to jest szyfrowanie?#

Dowiedziałeś się już, że dane na urządzeniach elektronicznych są reprezentowane za pomocą ciągów bitów

\[ 00101010010010010010010101010010010101010. \]

Stajesz sie powoli ekspertem i pewnie już wiesz, co to znaczy zakodować i hashować taki ciąg bitów. Kolejnym procesem, który możemy wykonać na takim ciągu to szyfrowanie. Wyobraź sobie, że Alice chce wysłać do Boba drogą elektroniczną pewną ważną wiadomość, a zatem konkretny ciąg bitów. Jednak Alice nie chce, aby ktokolwiek poza Bobem poznał treść tej wiadomości. Alice nie może tylko zakodować i wysłać tej wiadomości bo każdy może ją przechwycić, łatwo ją odkodować i w końcu odczytać. Haszowanie wiadomości też nic nie da, bo Bob i każdy inny z hasha wiadomości nie wydobędzie. Aby zapewnić poufność przesyłanej wiadomości, Alice i Bob powinni ustalić i użyć schematu szyfrowania z kluczem tajnym.

Schemat szyfrowania z kluczem tajnym#

Schemat szyfrowania, to dwa algorytmy kryptograficzne: algorytm szyfrownia i deszyfrownia. Oznaczmy przez E algorytm szyfrownia, a przez D algorytm deszyfrownia. Strony, które się między sobą komunikują mogą je jawnie wybrać. Załóżmy, że Alice i Bob wybrali schemat szyfrownaia i chcą zapewnić poufność swojej komunikacji. Aby to zrobić, Alice wybiera klucz tajny do szyfrowania K, który jednocześnie pełni rolę klucza do deszyfrowania. Klucz tajny musi zosać przekazany bezpiecznie do Boba przez Alice. Klucz tajny to ciąg bitow o ustalonej liczbie bitów (np. 128 bitów). Natępnie Alice tworzy wiadomość M, którą chce zaszyfrować. Szyfruje M za pomoca algorytmu szyfrowania E i klucza tajnego K. W ten sposób otrzymuje szyfrogram C, który wysyła do Boba. Bob po otrzymaniu szyfrogramu, deszyfruje wykorzystując algorytm D i klucz K. W ten sposób otrzymuje on wiadomość M.

Przykład:

  1. Alice i Bob ustalają algorytm szyfrowania E=AES128, taki w którym liczba bitów klucza ma 128 bitów.

  2. Alice losuje klucz K=a1b2c3d4e5f6g7h8 i przekazuje bezpiecznie Bobowi. Jak to zrobić?

  3. Alice ustala wiadomość

M=”Postaw na konia DragonFly”

  1. Alice szyfruje M kluczem K algorytmem E=AES128

E=AES(K,M)=027a3a6c6cc0dbe589868c3068aa70f7a40f754c4de655116d2f30b19519da2a

  1. Alice wysyła szyfrogram C=027a3a6c6cc0dbe589868c3068aa70f7a40f754c4de655116d2f30b19519da2a do Boba

  2. Bob deszyfruje C zapomocą algorytmu D=AES128 i klucza K

D=AES128(K,C)=Postaw na konia DragonFly

Zadanie (Szyfrowanie)

Zaszyfruj wiadomość M=”DragonFly to zly kon. Postaw na Secretariat” algorytmem E=AES128 i kluczem tajnym K=a1b2c3d4e5f6g7h8. Wykorzystaj narzędzie CyberChef.

  1. Wejdź na stronę https://gchq.github.io/CyberChef/

  2. W polu Input wpisz wiadomość M.

OT

  1. W sekcji Operations wyszukaj AES Encrypt i przeciągnij do pola Recipe

OT

  1. Działamy teraz w sekci AES Encrypt. W polu key wpisz klucz tajny K i zaznacz obok UTF8. W polu Mode wybierz ECB, a w polu obok wybierz Raw. W polu Output wybierz Raw.

OT

  1. W sekcji Output zobaczysz szyfrogram C. Skopuj go do pamięci.

OT

Zadanie (Deszyfrowanie)

Masz w pamięci skopiowany szyfrogram C, z poprzedniego zadania. Zeszyfruj go algorytmem E=AES128 i kluczem tajnym K=a1b2c3d4e5f6g7h8. Wykorzystaj narzędzie CyberChef.

  1. Wejdź na stronę https://gchq.github.io/CyberChef/

  2. W pole Input wklej szyfrogram C.

OT

  1. W sekcji Operations wyszukaj AES Decrypt i przeciągnij do pola Recipe

OT

  1. Działamy teraz w sekci AES Dencrypt. W polu key wpisz klucz tajny K i zaznacz obok UTF8. W polu Mode wybierz ECB, a w polu obok wybierz Raw. W polu Output wybierz Raw.

OT

  1. Powinieneś zobaczyć odszyfrowaną wiadomość M.

Zadanie (Kompresowanie i szyfrowanie)

Skompresuj i zaszyfruj plik kot.jpg. Wykorzystaj narzędzie 7-zip.

  1. Utwórz dowolny folder i zapisz w nim zdjęcie kot.jpg.

OT

  1. Zaznacz plik, kliknij prawym klawiszem myszki i wybierz 7_zip Dodaj do archiwum

OT

  1. Podaj nazwę archiwum. W sekcji szyfrowanie: Wprowadź hasło i wybierz szyfrowanie AES-256. Kliknij OK.

OT

  1. W folderze znajdziesz skompresowany i zaszyfrowany szyfrem AES plik o takiej nazwie jaka podałeś.

OT

  1. Prześlij skompresowany plik z rozszerzeniem zip do ustalonej osoby z grupy. Przekaż tej osobie bezpiecznie hasło

Zadanie (Rozpakowanie i deszyfrowanie)

PrzeslikRozpakuj i deszyfruj plik otrzymany plik. Użyj hasła, które otrzymałeś, Wykorzystaj narzędzie 7-zip.

  1. Kilkinj na plik z rozszerzeniem zip plik i wybierz Wypakuj

OT

  1. Poad nazwę folderu do którego ma być rozpakowany i zdeszyfrowany plik.

OT

  1. Podaj hasło, które otrzymałeś w bezpieczny sposób

OT

  1. W folderze, o nazwie która podałeś wkroku 2 znajdziesz rozpakowany i zdeszyfrowany plik.

OT

  1. Porównaj czy pliki sa identyczne.

Zadanie

Wyszukaj porównanie dotyczące 7-zip, winrar, winzip, w który byłoby kryterium: bezpieczeństwo

Na przykład odwiedź stronę: https://www.movavi.com/learning-portal/7zip-vs-winrar.html

Dyskusja#

  1. Czy przekazanie hasła lub klucza tajnego do szyfrowania to faktycznie problem?

  2. Czy plik był faktycznie zaszyfrowany tym hasłem? Czy klucz i hasło to jest to samo?

Funkcje derywacji klucza#

Aby zapewnić bezpieczeństwo hasło nie powinno byś kluczem tajnym do szyfrowania. Kluczem powinien byc losowy ciąg bitów. Tylko, w takim przypadku szyfr AES może nam zapewnić poufność. Jak już wiesz hasło łatwo odgadnąć wykorzystująć np.: ataki słownikowe. Z drugiej strony większości użytkowników byłoby trudno generować losowe ciągi bitów. Dlatego wykorzystuje się algorytmy kryptograficzne zwane funkcjami derywacji klucza. Wejściem do takiego algorytmu jest dowolny ciag znaków ( np. hasło), a wyjściem jest prawie losowy ciąg zwany ciągiem pseudolosowym. Funkcję derywaccji podobnie jak funkcje hashujące są jednokierunkowe.

Argon2id jest funkcją derywacji klucza. Chroni ona przed rozmaitymi atakami, co jest ważną właściwością, jeśli nie masz gwarancji, że jesteś jedynym użytkownikiem w swoim systemie.

Zadanie: Wygeneruj za pomocą funkcji Argon2id klucz tajny do szyfrowania powstały z hasła MojeTajneHaslo. Zwiększająć liczbę iteracji algorytmu Argon2id poprzez 3,300,3000 staraj się ulosowić klucz tajny. Pracuj w środowisku CyberChef.

  1. Wejdź na stronę https://gchq.github.io/CyberChef/

  2. W polu Input wpisz hasło MojeTajneHaslo lub inne.

OT

  1. W sekcji Operations wyszukaj Argon2 i przciagnij do sekcji Recipe

OT

  1. Działamy teraz w sekcji Argon2. W polu Salt wpisz dowolną 8-znakową sól. W polu Type wybierz Argon2id. W polu Output Format wybierz Raw hash

OT

  1. Działamy w sekcji Argon2. W polu Iterations wpisz 300

OT

  1. Działamy w sekcji Argon2. W polu Iterations wpisz 3000

OT

  1. Po chwili powinieneś zobaczyć pseudolosowy klucz do AES256.

Szyfry blokowe#

Algorytm szyfrowania AES jest szyfrem blokowym. Oznacza to, że wiadomość jest dzielona na bloki o ustalonej długości i każdy blok jest szyfrowany osobno za pomocą tego samego klucza tajnego. Na przykład, gdy używasz algorytmu AES-128 oznacza to, że musisz użyć klucza 128-bitowego (np.: 16 znaków wpisanych z klawiatury). Wtedy, długość szyfrowanego bloku wynosi również 126 bitów. Natomiast, gdy używasz algorytmu AES-256 musisz użyć klucza 256-bitowe (np.: 32 zkaki wpisane z klawiatury), a długość szyfrowanego bloku wynosi 256 bitów.

Tryby działania szyfrów blokowych#

Każdy szyfr blokowy może pracować w różnych trybach szyfrowania. Wybór trybu szyfrowania ma istotny wpływ na bezpieczeństwo i zapewnienie poufności. Opiszmy dwa podstawowe tryby szyfrowania.

Tryb ECB Tryb ECB, to tryb elektronicznej ksiażki kodowej. W tym trybie każdy blok wiadomości jest szyfrowany tym samy kluczem tajnym niezależnie od wcześniej zaszyfrowanych bloków. Oznacza, to w praktyce, że jeśli zaszyfrujemy dwa identyczne bloki o tej samej długości, to dostaniemy dwa indentyczne bloki szyfrogramu.

Tryb CBC Tryb CBC to tryb szyfrowania, w którym aktualnie szyfrowany blok wiadomości jest powiązany z szyfrogramem bloku poprzedniego. Oznacza, to w praktyce, że jeśli zaszyfrujemy dwa identyczne bloki o tej samej długości, to dostaniemy dwa różne od siebie bloki szyfrogramu. Ponieważ pierwszego bloku wiadomości nie możemy związać poprzednim zaszyfrowanym blokiem, podajemy jako parametr do algorytmu szyfrowania tzw. wektor początkowy oznaczany jako IV.

Zadanie Zaszyfruj algorytmem AES-128, kluczem K=a1b2c3d4e5f6g7h8 wiadomość M=OdpowiedzielnoscOdpowiedzialnosc. Wykorzystaj tryb ECB oraz CBC z parametrem IV=wektorwektor12

  1. Wejdź na stronę https://gchq.github.io/CyberChef/

  2. W sekcji Operations wyszukaj AES Encrypt i przciagnij do sekcji Recipe. W polu Input wpisz wiadomość Odpowiedzialnosc. W sekcji AES Encrypt wpisz klucz K, wybierz Mode ECB oraz ustaw Input i Output na Raw. Wyszukaj w polu Output blok szyfrogramu odpowiadający wiadomosci Odpowiedzialnosc.

OT

  1. W polu Input wpisz wiadomość M=OdpowiedzielnoscOdpowiedzialnosc. Wyszukaj w polu Output dwa bloki szyfrogramu odpowiadający wiadomosci OdpowiedzialnoscOdpowiedzialnosc. Czy są one identyczne?

OT

  1. W sekcji AES Encrypt wybierz Mode CBC. Wpisz IV=wektorwektor12.

OT

  1. Zastanów się czy na podstawie otrzymanego szyfrogramu możemy wywnioskować, że zaszyfrowano dwa identyczne bloki wiadomości?

Zadanie:

Znajdź w sklepie z częściami dysk twardy ( może być zewnetrzny) z szyfrowaniem. Jaki jest to szyfrowanie? Czy poszczególne modele różnią się długością stosowanego klucza?

Zadanie

Sprawdź czy twój telefon jest zaszyfrowany. Czy wiesz, jak to działa? Czy masz kontrolę nad tym procesem?

Jakie są najczęściej używane hasła?#

odszukaj jakikolwiek artykuł prasowy na ten temat

• czy wszystkie źródła podają to samo? (lub mniej więcej to samo?)

• popatrzmy na https://en.wikipedia.org/wiki/List_of_the_most_common_passwords

lub https://en.wikipedia.org/wiki/Wikipedia:10,000_most_common_passwords

• czy jest tam Twoje hasło?

• Są jeszcze większe bazy np. https://www.proxynova.com/tools/comb/

• Wniosek: jeśli są tak duże i wciąż uaktualniane bazy to może faktyczne Twoje hasło powinno być naprawdę wyjątkowe?

• Wpisz swój mail na https://haveibeenpwned.com/ i zobacz czy Twoje dane kiedyś wyciekły

• Wniosek: dostawcy jakiekolwiek usługi nie można ufać bezgranicznie (zdarzają się błędy, usterki w konfiguracji i w efekcie baza użytkowników może “wyciec”); baza zawiera login, którym często jest email; ryzykownym jest używanie tego samego hasła w kilku miejscach