W dziedzinie bezpieczeństwa komputerowego bardzo ceni się demonstrowanie podatności systemów poprzez przeprowadzenie udanego ataku w praktyce. Co prawda do zdyskwalifikowania algorytmu kryptograficznego zwykle wystarczy teoretyczne opracowanie ataku, którego ze względu na złożoność nie da się przeprowadzić w praktyce, ale ze względu na prawo Moore'a i rozwój kryptoanalizy ataki na starsze algorytmy z czasem stają się możliwe do wykonania nawet na przeciętnym komputerze.
Zajęcia są przeznaczone dla osób, które zamierzają wykorzystywać kryptografię we własnych programach. Celem zajęć jest nauka poprawnego — tj. pozbawionego podatności — implementowania kryptografii poprzez badanie, co może pójść źle, tj. opracowywanie i wykonywanie ataków na implementacje posiadające takie podatności. Zajęcia będą polegać na wykonywaniu w praktyce ataków na algorytmy kryptograficzne, np. znalezienie kolizji w MD5 i wykorzystanie jej do przygotowania fałszywego certyfikatu SSL itp. Głownym efektem nauczania jest wpojenie uczestnikom zasady YANAC.
### Tematyka
- Kryptoanaliza szyfrów klasycznych. Analiza częstościowa. Szyfry podstawieniowe, Vigenère’a, _one-time pad_.
- Szyfry blokowe. Kryptoanaliza różnicowa i liniowa. DES, uproszczony AES.
- Szyfry strumieniowe. Kryptoanaliza LFSR. Podatności RC4, A3/1 i A3/2, KASUMI.
- Tryby łączenia bloków i ich podatności. Plastyczność szyfrów. _Watermarking attack_.
- Kolizje funkcji haszujących. Ataki na MD5 i SHA-1.
- Praktyczne ataki na klucze i certyfikaty. Evil-32 itp.
- RSA. Proste ataki na podręcznikowy RSA. Faktoryzacja metodą Fermata. Atak z użyciem ułamków łańcuchowych.
- _Padding_ w RSA. Atak Bleichenbachera.
- Krzywe eliptyczne w kryptografii.
- TLS, jego rozwój i podatności. Przegląd ataków.
- PKI.
- Protokoły i narzędzia. OpenPGP, OpenSSH, OpenVPN.
- Tokeny kryptograficzne, TPM.
- Szyfrowanie dysków.
- Hasła i ich łamanie. Hashcat i John the Ripper.
- Szyfrowanie i jego podatności w systemach radiowych (m.in. GSM, UMTS, LTE, TETRA, DMR itp.)
### Wymagania
- W większości zadań programistycznych wykorzystuje się język Python. Nieliczne zadania wymagają programowania w języku C.
- Niezbędna wiedza teoretyczna zostanie przedstawiona na wykładzie, choć zakłada się wstępną wiedzę uczestników na temat kryptografii.
- Zajęcia w ramach ćwiczenio-pracowni odbywają się w sali ćwiczeniowej wyposażonej w tablicę i rzutnik. Uczestnicy w trakcie zajęć używają własnych komputerów.
### Literatura
1. Mark Stamp, Richard M. Low, _Applied cryptanalysis_, Wiley, 2007.
2. Seth James Nielson, Christopher K. Monson, _Practical Cryptography in Python. Learning Correct Cryptography by Example_, Apress 2019.
3. Shannon W. Bray, _Implementing Cryptography Using Python®_, Wiley 2020.