1/55
Kryptografia symetryczna - nowoczesne algorytmy i funkcje skrótu
Cel slajdu: Slajd wprowadza w tematykę kryptografii symetrycznej, nowoczesnych szyfrów blokowych i funkcji skrótu.

Kryptologia i bezpieczna wymiana informacji

Część 3 - Kryptografia symetryczna: nowoczesne algorytmy i funkcje skrótu

Kryptografia symetryczna (ang. symmetric cryptography): Jest to dział kryptologii wykorzystujący jeden wspólny tajny klucz do szyfrowania i odszyfrowywania danych. Obejmuje nowoczesne szyfry blokowe takie jak AES, szyfry strumieniowe takie jak ChaCha20 oraz funkcje skrótu służące do ochrony integralności. Stanowi fundament ochrony danych w spoczynku i w ruchu dzięki wysokiej szybkości działania.
Kryptologia i bezpieczna wymiana informacji – Kryptografia symetryczna K Szyfry blokowe DES, 3DES, AES Tryby pracy CBC, CTR, GCM Strumieniowe ChaCha20-Poly1305 Funkcje skrótu SHA-2, SHA-3, HMAC Część 3: Kryptografia symetryczna, algorytmy blokowe i funkcje skrótu
Schemat slajdu 1 – Kryptografia symetryczna - nowoczesne algorytmy i funkcje skrótu
2/55
Spis treści części 3
Cel slajdu: Slajd przedstawia spis treści części trzeciej, porządkujący drogę od DES po zastosowania praktyczne.

Plan materiału

Spis treści (ang. table of contents): Jest to uporządkowany plan części trzeciej prowadzący od przypomnienia kryptografii symetrycznej przez DES i AES po tryby pracy i szyfry strumieniowe. Obejmuje także funkcje skrótu od MD5 i SHA-1 po SHA-2, SHA-3 i HMAC wraz z ich praktycznymi zastosowaniami. Porządkuje naukę od konstrukcji blokowych do zagadnień integralności i studium przypadku.
Plan materiału – Przegląd zagadnień kryptografii symetrycznej 1. Standardy blokowe: DES i AES • Sieć Feistela i funkcja rundowa f(R,K) • Standard AES (Rijndael) i macierz State • Rundy: SubBytes, ShiftRows, MixColumns 2. Tryby pracy blokowej i AEAD • Słabości ECB i wzorzec pingwina • Łańcuchowe CBC i wektor IV • Tryb licznikowy CTR oraz Galois (GCM) 3. Szyfry strumieniowe • Generacja pseudolosowego keystreamu • Upadek RC4 i podatności WEP/TLS • Nowoczesny ChaCha20-Poly1305 4. Funkcje skrótu i integralność • Własności kryptograficzne hashów • Kolizje MD5 i SHA-1 (SHAttered) • Rodzina SHA-2, SHA-3 oraz kody HMAC Program obejmuje pełną architekturę symetryczną od warstwy blokowej po funkcje skrótu
Schemat slajdu 2 – Spis treści części 3
3/55
Cele uczenia się
Cel slajdu: Slajd określa cele uczenia się, czyli umiejętności opanowywane przy szyfrach symetrycznych i haszowaniu.

Kluczowe zagadnienia części 3

  • W2 - zna algorytmy kryptografii symetrycznej: DES/3DES, AES, ChaCha20 - ich budowa, parametry i bezpieczeństwo.
  • W3 - rozumie działanie funkcji skrótu: SHA-2, SHA-3, własności, HMAC, podatności MD5/SHA-1.
  • U1 - potrafi dobrać algorytm do zastosowania: wybór szyfru, trybu pracy i funkcji skrótu zależnie od potrzeb (dane w spoczynku, w ruchu, integralność, hasła).
  • U2 - implementuje podstawowe mechanizmy kryptograficzne: szyfrowanie/odszyfrowywanie AES, HMAC, hashowanie w bibliotece kryptograficznej.
  • U3 - analizuje podatności: kolizje MD5/SHA-1, wady ECB, ponowne użycie IV/nonce - i dobiera dobre praktyki.
Cele uczenia się (ang. learning objectives): Określają one wiedzę o budowie i parametrach algorytmów DES, 3DES, AES i ChaCha20 oraz o własnościach funkcji SHA-2 i SHA-3. Wymagają umiejętności doboru szyfru, trybu pracy i funkcji skrótu do konkretnego zastosowania oraz implementacji szyfrowania i HMAC w bibliotece kryptograficznej. Obejmują także analizę podatności takich jak kolizje, wady ECB czy ponowne użycie IV.
Kluczowe zagadnienia części 3 – Standardy kryptografii symetrycznej i integralności W2: Algorytmy symetryczne • Znajomość budowy i parametrów: DES, 3DES, AES (128/192/256), ChaCha20 • Zrozumienie trybów pracy: ECB (zagrożenia), CBC, CTR, GCM (AEAD) • Wektory ataków i kryptoanaliza: Brute-force kluczy 56-bitowych, MITM W3: Funkcje skrótu i integralność • Własności kryptograficzne: Pre-image, second pre-image, kolizyjność • Standardy skrótu: SHA-256, SHA-512, SHA-3 (Keccak Sponge) • Uwierzytelnianie wiadomości: Mechanizm HMAC, haszowanie haseł Kluczowe zagadnienia łączą poufność algorytmów z integralnością funkcji skrótu
Schemat slajdu 3 – Cele uczenia się
4/55
Kryptografia symetryczna - przypomnienie
Cel slajdu: Slajd przypomina zasadę kryptografii symetrycznej z jednym wspólnym kluczem do szyfrowania i deszyfrowania.

Jeden wspólny klucz

  • Zalety: szybkość (przetwarzanie gigabajtów w czasie rzeczywistym), prostota implementacji, dowiedzione bezpieczeństwo przy poprawnym użyciu.
  • Wady: problem dystrybucji klucza (jak bezpiecznie dostarczyć wspólny sekret?) oraz skalowanie kluczy (n par = n(n-1)/2 kluczy).
  • Gdzie używana: szyfrowanie danych w spoczynku (dyski, pliki, bazy danych) i w ruchu (TLS, WiFi, VPN - po uzgodnieniu klucza kryptografią asymetryczną).
Dystrybucja klucza to główna motywacja kryptografii asymetrycznej (część 4): kluczem symetrycznym szyfrujemy dane, asymetrycznym - szyfrujemy klucz sesji.
Kryptografia symetryczna (ang. symmetric-key cryptography): Wykorzystuje jeden wspólny sekretny klucz do szyfrowania i odszyfrowywania, przy czym bezpieczeństwo zależy wyłącznie od poufności klucza. Zapewnia wysoką szybkość i prostotę implementacji, lecz stwarza problem bezpiecznej dystrybucji klucza i kwadratowego wzrostu liczby kluczy w grupie. Stosowana jest do danych w spoczynku oraz w ruchu po uzgodnieniu klucza metodami asymetrycznymi.
Jeden wspólny klucz – Model wymiany informacji w kryptografii symetrycznej 👩 Nadawca Tekst M Szyfr E_K Klucz K C Deszyfr D_K Klucz K 👨 Odbiorca Tekst M Wspólny klucz K musi pozostać ściśle poufny; problemem staje się bezpieczna dystrybucja klucza
Schemat slajdu 4 – Kryptografia symetryczna - przypomnienie
5/55
Szyfry blokowe - koncepcja
Cel slajdu: Slajd wyjaśnia koncepcję szyfru blokowego jako operacji na stałych porcjach danych z kluczem.

Podział danych na bloki

  • Każdy blok szyfrowany osobno - ale przy długich danych powstaje problem spójności bloków (stąd tryby pracy, slajdy 21-26).
  • Dane dłuższe niż jeden blok wymagają trybu pracy (ECB, CBC, CTR, GCM), który definiuje łączenie bloków.
  • Ostatni blok wymaga paddingu (uzupełnienia do pełnego bloku).
  • Struktura Feistela: wiele szyfrów blokowych (DES, Blowfish) buduje się jako sieć Feistela - podział bloku na połówki i wielokrotne rundy podstawień z permutacjami. AES używa sieci SPN (substitution-permutation network).
Szyfr blokowy (ang. block cipher): Jest to algorytm szyfrujący dane porcjami o stałej długości bloku, na przykład 64 bity dla DES i 128 bitów dla AES. Każda porcja jest przekształcana pod kontrolą klucza, a dłuższe wiadomości wymagają trybu pracy oraz dopełnienia ostatniego bloku. Budowany jest najczęściej jako sieć Feistela albo sieć podstawieniowo-permutacyjna SPN.
Podział danych na bloki – Segmentacja strumienia i dopełnienie PKCS#7 Ciągły strumień bajtów tekstu jawnego (Plaintext Stream) Blok 1 (P₁) 128 bitów (16 B) Bajty 0..15 Blok 2 (P₂) 128 bitów (16 B) Bajty 16..31 Blok 3 (P₃) 128 bitów (16 B) Bajty 32..47 Blok n (P_n) Dane Pad PKCS#7 Szyfr blokowy przetwarza stałe porcje danych; niepełny ostatni blok wymaga dopełnienia (paddingu)
Schemat slajdu 5 – Szyfry blokowe - koncepcja
6/55
DES - historia i geneza
Cel slajdu: Slajd przedstawia historię DES od algorytmu Lucifer do przyjęcia jako standardu rządowego.

Data Encryption Standard

  • Opracowany w IBM - zespół kierowany przez Horsta Feistela (koniec lat 60., Lucifer).
  • Przyjęty przez NBS (dziś NIST) w 1977 jako oficjalny standard federalny USA (FIPS 46).
  • Klucz zmniejszony do 56 bitów (obawy NSA); bezpieczeństwo przez wiele lat wystarczające, dziś - historyczne.
  • Znaczenie historyczne i logistyczne: pierwszy szeroko rozpowszechniony standard szyfrowania (bankowość, komunikacja wojskowa i cywilna); wyznaczył standardy projektowania szyfrów blokowych (sieć Feistela, S-boksy).
  • Zapoczątkował proces otwartych, publicznie recenzowanych konkursów na standardy (AES; później SHA-3) - lekcja otwartego projektowania.
DES (ang. Data Encryption Standard): Jest to pierwszy szeroko rozpowszechniony standard szyfrowania blokowego opracowany w IBM przez zespół Horsta Feistela jako Lucifer. Został przyjęty przez NBS w 1977 roku jako standard federalny USA ze zredukowanym do 56 bitów kluczem. Wyznaczył kanony projektowania szyfrów blokowych i zapoczątkował tradycję otwartych konkursów kryptograficznych.
Data Encryption Standard – Zasada konstrukcji sieci Feistela Blok wejściowy 64 bity (IP) Lewa L₀ (32 bity) Prawa R₀ (32 bity) f(R₀, K₁) L₁ = R₀ (32 b) R₁ = L₀ ⊕ f(R₀, K₁) Konstrukcja Feistela: odwracalność szyfrowania bez konieczności odwracalności samej funkcji f
Schemat slajdu 6 – DES - historia i geneza
7/55
DES - parametry techniczne
Cel slajdu: Slajd omawia parametry techniczne DES: blok 64-bitowy, klucz 56-bitowy i sieć Feistela.

Parametry szyfru

ParametrWartość
Wielkość bloku64 bity
Długość klucza56 bitów efektywnie (64 bity z bitami parzystości)
Liczba rund16
Strukturasieć Feistela
Funkcja rundowaS-boksy (8x), permutacja P, rozszerzenie E
Tryby pracyECB, CBC, CFB, OFB (FIPS 81), CTR (SP 800-38A)
  • Blok 64-bitowy był barierą dla obliczeń lat 70.; dziś wiąże się z ryzykiem ataku urodzinowego (Sweet32).
  • Klucz 56 bitów = 2^56 możliwości - przeszukiwanie siłowe stało się praktycznie wykonalne pod koniec lat 90. (publiczne złamanie: EFF Deep Crack, 1998).
Parametry DES (ang. DES parameters): Obejmują one 64-bitowy blok, efektywnie 56-bitowy klucz z bitami parzystości oraz 16 rund w sieci Feistela. Funkcja rundowa wykorzystuje rozszerzenie E, osiem S-boksów i permutację P, a standardowe tryby pracy opisano w FIPS 81. Krótki blok i krótki klucz stały się później główną przyczyną wycofania algorytmu.
Parametry DES – Struktura bloku, klucza i rund kryptograficznych Parametr Wartość w standardzie DES Długość bloku (Block Size) 64 bity (8 bajtów) Długość klucza wejściowego 64 bity (z 8 bitami kontroli parzystości) Efektywna długość klucza 56 bitów (2⁵⁶ możliwych kluczy) Liczba rund (Rounds) 16 identycznych rund Feistela Długość podkluczy rundowych 48 bitów na rundę (K₁ ... K₁₆) Bloki nieliniowe (S-Boxes) 8 tablic S-box (6 bitów wejścia → 4 bity wyjścia) Efektywny klucz 56-bitowy okazał się krytyczną słabością DES w obliczu rozwoju mocy obliczeniowej
Schemat slajdu 7 – DES - parametry techniczne
8/55
DES - funkcja rundowa i S-Boksy
Cel slajdu: Slajd wyjaśnia funkcję rundową DES oraz rolę S-boksów jako źródła nieliniowości.

Budowa f(R, K)

Funkcja rundowa DES działa na 32-bitowej prawej połówce (R) i 48-bitowym podkluczu rundowym (K):

  1. Rozszerzenie E: R (32 bity) rozszerzane do 48 bitów (powtórzenie wybranych bitów).
  2. XOR z podkluczem rundowym (48 bitów).
  3. Podział na 8 bloków 6-bitowych.
  4. S-Box: każde 6 bitów zamieniane na 4 bity (8 tabel po 4x16 wpisów) - to nieliniowe podstawienie, sedno bezpieczeństwa.
  5. Permutacja P: przełożenie 32 bitów na nowe pozycje (rozpraszanie).
Funkcja rundowa DES (ang. DES round function): Przekształca ona 32-bitową prawą połówkę bloku wraz z 48-bitowym podkluczem poprzez rozszerzenie, operację XOR, osiem S-boksów 6-na-4 bity i permutację P. To właśnie S-boksy zapewniają nieliniowość i odporność na kryptoanalizę liniową oraz różnicową. Bez nich cała konstrukcja byłaby afiniczna i łatwa do złamania.
Budowa funkcji f(R, K) – Rozszerzenie, S-boxy i permutacja P R_(i-1) (32 bity) Rozszerzenie E (32 → 48 bitów) K_i (48 bitów) 8 bloków S-box: S₁ do S₈ (każdy 6 bitów → 4 bity) Łącznie: 48 bitów wejścia → 32 bity wyjścia (jedyny element nieliniowy!) Permutacja P (32 bity) Funkcja f(R,K): S-boxy wprowadzają konfuzję, natomiast permutacja P gwarantuje dyfuzję
Schemat slajdu 8 – DES - funkcja rundowa i S-Boksy
9/55
DES - generowanie podkluczy
Cel slajdu: Slajd opisuje generowanie szesnastu podkluczy rundowych z klucza głównego DES.

Od klucza głównego do 16 podkluczy

  1. Permutacja PC-1: klucz 64 bity (z parzystościami) redukowany do 56 bitów (PC-1 odrzuca bity parzystości).
  2. Podział na C0 i D0 (po 28 bitów).
  3. Przesunięcia cykliczne w każdej rundzie: w rundzie 1, 2, 9, 16 o 1 bit, w pozostałych o 2 bity - powstają Ci i Di.
  4. Permutacja PC-2: z 56 bitów (Ci + Di) wybiera 48 bitów podklucza rundowego Ki.

Powtarzane 16 razy daje 16 podkluczy; ten sam schemat w odszyfrowaniu (klucze używane w odwrotnej kolejności).

Harmonogram klucza DES (ang. DES key schedule): Jest to procedura wyprowadzania szesnastu 48-bitowych podkluczy rundowych z 56-bitowego klucza głównego. Obejmuje permutację PC-1, podział na rejestry C i D, cykliczne przesunięcia oraz kompresującą permutację PC-2. Dzięki przesunięciom każda runda otrzymuje inny podzbiór bitów klucza, co różnicuje rundy.
Key Schedule DES – Generowanie 16 podkluczy rundowych z klucza głównego Klucz główny (64 bity) Permutowany Wybór 1 (PC-1) → 56 bitów Rejestr C₀ (28 bitów) Rejestr D₀ (28 bitów) Przesunięcie w lewo o 1/2 Przesunięcie w lewo o 1/2 PC-2: Zwężenie 56 → Podklucz K_i (48 bitów) 16 podkluczy powstaje poprzez cykliczne przesunięcia rejestrów C i D oraz kompresję PC-2
Schemat slajdu 9 – DES - generowanie podkluczy
10/55
DES - bezpieczeństwo i ataki
Cel slajdu: Slajd omawia bezpieczeństwo DES i jego złamanie przez atak brute force w 1998 roku.

Dlaczego DES przestał być bezpieczny

  • Przestrzeń kluczy 2^56 - dla dzisiejszych komputerów zbyt mała; specjalizowany sprzęt przeszukuje ją w godziny/dni.
  • EFF DES Cracker (1998) - maszyna za ok. 250 tys. USD złamała DES w 56 godzin. Dziś robią to klastry GPU/FPGA i usługi w chmurze.
  • Atak bruteforce: przeszukanie wszystkich 2^56 kluczy.
  • Kryptoanaliza różnicowa (differential cryptanalysis): Biham i Shamir (1990) - metodologiczne złamanie wymagające 2^47 wybranych tekstów (znaczenie wyłącznie ilościowe przy małym kluczu).
  • Współcześnie: DES tylko do celów edukacyjnych i historycznych; standardem jest AES.
Bezpieczeństwo DES (ang. DES security): Zostało podważone z powodu zbyt małej przestrzeni kluczy liczącej jedynie 2 do potęgi 56 możliwości. W 1998 roku maszyna EFF DES Cracker złamała klucz w 56 godzin, dowodząc podatności na atak siłowy. Dziś DES ma wyłącznie znaczenie historyczne i dydaktyczne, a jego używanie jest zabronione.
Upadek standardu DES – Złamanie przestrzeni 2^56 i atak Sweet32 Moc 2⁵⁶ vs Czas złamania 1977: Standard NBS/NIST 2⁵⁶ ≈ 7,2 × 10¹⁶ kombinacji (bezpieczny) 1998: EFF Deep Crack Maszyna za 250k$ łamie w 56h! Współcześnie (GPU/FPGA) Złamanie w minuty (Crack.sh) Dodatkowe słabości • Mały blok: 64 bity Podatność na kolizje po 2³² blokach (atak urodzinowy Sweet32) • Słabe klucze (Weak Keys) 4 klucze dające podklucze identyczne oraz 12 kluczy półsłabych tworzących 6 par (inwolucje) • Kryptoanaliza liniowa Matsui (1993): 2⁴³ znanych tekstów DES wycofano z użycia ze względu na zbyt krótki 56-bitowy klucz i 64-bitowy blok (Sweet32)
Schemat slajdu 10 – DES - bezpieczeństwo i ataki
11/55
Triple DES (3DES)
Cel slajdu: Slajd przedstawia Triple DES jako potrójne zastosowanie DES wzmacniające efektywny klucz.

Trzykrotne szyfrowanie DES

  • Trzykrotne szyfrowanie: EDE = Encrypt-Decrypt-Encrypt (szyfruj blok DES z K1, odszyfruj z K2, zaszyfruj z K3).
  • Warianty: 2-kluczowy (K1=K3; klucz 112 bitów, bezpieczeństwo efektywne ~80 bitów) i 3-kluczowy (klucz 168 bitów, bezpieczeństwo efektywne ~112 bitów - atak meet-in-the-middle).
  • Wycofany przez NIST w 2023 (SP 800-131A) - blok 64 bity i mały margines bezpieczeństwa nie spełniają już wymogów (ryzyko ataku urodzinowego/Sweet32).
  • Zalety i wady: + kompatybilność ze starymi systemami; - wolniejsze (3x), blok tylko 64 bity, słabszy niż AES.
  • Praktyka: systemy bankowe (stare standardy PCI) długo wymagały 3DES; obecnie migracja na AES.
3DES (ang. Triple DES): Jest to potrójne zastosowanie DES w układzie szyfruj-odszyfruj-szyfruj EDE z dwoma lub trzema niezależnymi kluczami. Wariant dwukluczowy daje 112 bitów klucza, a trójkluczowy 168 bitów, lecz efektywne bezpieczeństwo obniża atak meet-in-the-middle. Z powodu małej szybkości, 64-bitowego bloku i podatności Sweet32 został wycofany przez NIST pod koniec 2023 roku.
Potrójny DES – Tryb EDE (Encrypt-Decrypt-Encrypt) i atak Meet-in-the-Middle P (64b) 1. Szyfrowanie (E) Klucz K₁ 2. Deszyfr (D) Klucz K₂ 3. Szyfrowanie (E) Klucz K₃ C (64b) Kompatybilność wsteczna: Jeśli K₁ = K₂ = K₃, układ działa dokładnie jak pojedynczy DES Bezpieczeństwo efektywne: 3TDEA (168b klucz) = 112 bitów ze względu na atak Meet-in-the-Middle Tryb EDE w 3DES pozwolił wydłużyć klucz przy zachowaniu zgodności sprzętowej z układami DES
Schemat slajdu 11 – Triple DES (3DES)
12/55
AES - konkurs NIST
Cel slajdu: Slajd opisuje konkurs NIST, w którym otwarta rywalizacja wyłoniła następcę DES.

Rywalizacja o nowy standard

  • Ogłoszenie konkursu (1997): NIST zapragnął otwartego, publicznie opracowanego szyfru blokowego, który zastąpi DES.
  • 15 kandydatów: m.in. MARS (IBM), RC6 (Rivest), Rijndael (Belgowie), Serpent (Anderson), Twofish (Schneier).
  • Rijndael - zwycięzca (październik 2000): autorzy Joan Daemen i Vincent Rijmen (Belgia). Wyróżniał się wydajnością i prostotą analizy.
  • Publikacja jako FIPS 197 (2001): od tego czasu standard światowy (federalny USA, protokoły TLS/IPsec, dyski, bazy danych).
Konkurs AES (ang. AES competition): Był to otwarty konkurs NIST z 1997 roku na następcę DES, w którym spośród 15 kandydatów wybrano Rijndaela. Zwycięski algorytm Belgów Joana Daemena i Vincenta Rijmena ogłoszono w 2000 roku i ustandaryzowano jako FIPS 197. Pokazał on wartość jawnej, międzynarodowej kryptoanalizy w wyborze standardu.
Rywalizacja o standard AES – Finał konkursu NIST i zwycięstwo Rijndael Konkurs NIST na Advanced Encryption Standard (1997 – 2001) Wymagania: otwarty, darmowy, blok 128 bitów, klucze 128/192/256 bitów, wysoka wydajność Rijndael 🏆 ZWYCIĘZCA Daemen & Rijmen (Belgia) SPN macierz Serpent 2. miejsce Anderson, Biham Najwyższy margines bezpiecz. Wolniejszy Twofish Finalista Bruce Schneier S-boxy zależne od klucza Sieć Feistela RC6 Finalista Ron Rivest (RSA) Mnożenie i obroty bitowe Ograniczenia patent MARS Finalista IBM Research Heterogeniczna struktura rund Złożony kod Rijndael wygrał dzięki eleganckiej algebrze macierzowej, bezpieczeństwu i znakomitej wydajności
Schemat slajdu 12 – AES - konkurs NIST
13/55
AES - parametry
Cel slajdu: Slajd omawia parametry AES: bloki 128-bitowe oraz klucze 128, 192 i 256 bitów.

Parametry AES

ParametrWartość
Wielkość bloku128 bitów (16 bajtów) - stała
Długość klucza128 / 192 / 256 bitów
Liczba rund10 / 12 / 14 (zależnie od klucza)
Strukturasieć SPN (substitution-permutation network)
Operacje rundySubBytes, ShiftRows, MixColumns, AddRoundKey
Trzy wersjeAES-128, AES-192, AES-256
  • W odróżnieniu od Feistela (DES), AES szyfruje cały blok naraz w każdej rundzie.
Parametry AES (ang. AES parameters): Obejmują stały 128-bitowy blok oraz klucze o długości 128, 192 lub 256 bitów z odpowiednio 10, 12 lub 14 rundami. Konstrukcja oparta jest na sieci SPN przetwarzającej cały stan w każdej rundzie. Większy klucz oznacza więcej rund i wyższy margines bezpieczeństwa przy zachowaniu wysokiej wydajności.
Parametry standardu AES – Wersje 128, 192 i 256 bitów Wersja AES Rozmiar klucza Rozmiar bloku Liczba rund (Nr) AES-128 128 bitów (16 B) 128 bitów (16 B) 10 rund AES-192 192 bity (24 B) 128 bitów (16 B) 12 rund AES-256 256 bitów (32 B) 128 bitów (16 B) 14 rund Uwaga: Rozmiar bloku danych w standardzie AES jest ZAWSZE stały i wynosi dokładnie 128 bitów! Parametry AES: Zmienny rozmiar klucza (128/192/256 bitów) decyduje o liczbie rund (10/12/14)
Schemat slajdu 13 – AES - parametry
14/55
AES - wewnętrzna struktura (State)
Cel slajdu: Slajd wyjaśnia wewnętrzną strukturę AES opartą na macierzy stanu przetwarzanej rundami.

Macierz State i kolejność bajtów

  • Wypełnianie: blok wejściowy (16 bajtów) wpisuje się kolumna po kolumnie (bajt 0 = wiersz 0, kolumna 0; bajt 1 = wiersz 1, kolumna 0; ...).
  • Rundy główne (ścieżka przetwarzania): SubBytes -> ShiftRows -> MixColumns -> AddRoundKey (w każdej rundzie prócz ostatniej); ostatnia runda pomija MixColumns.
  • Przed pierwszą rundą wykonywany jest wstępny AddRoundKey (klucz początkowy).
Stan AES (ang. AES State): Jest to robocza reprezentacja 128-bitowego bloku w postaci macierzy czterech na cztery bajty przetwarzanej rundami. Bajty tekstu jawnego wpisywane są kolumna po kolumnie, a wszystkie operacje rundy działają na tej macierzy. Taka organizacja ułatwia realizację podstawień, przesunięć i mieszania kolumn.
Macierz State w AES – Porządek kolumnowy zapisu bajtów Blok wejściowy (16 B) in₀ in₁ in₂ ... in₁₅ Bajty wypełniają macierz State KOLUMNA PO KOLUMNIE Macierz State (4 × 4 bajty) S₀,₀ S₁,₀ S₂,₀ S₃,₀ S₀,₁ S₁,₁ S₂,₁ S₃,₁ S₀,₂ S₁,₂ S₂,₂ S₃,₂ S₀,₃ S₁,₃ S₂,₃ S₃,₃ Stan roboczy AES to macierz 4x4 bajtów przetwarzana kolumnami w ciele Galois GF(2⁸)
Schemat slajdu 14 – AES - wewnętrzna struktura (State)
15/55
AES - SubBytes
Cel slajdu: Slajd opisuje operację SubBytes jako podstawienie bajtów przez S-boks AES.

S-Box AES - nieliniowe podstawienie

  • Odwrotność w ciele GF(2^8): dla każdego bajtu liczymy odwrotność w polu wielomianowym (0 - wyjątek: zostaje 0), daje to silną nieliniowość (odporność na kryptoanalizę liniową i różnicową).
  • Transformacja afiniczna (bitowy XOR z rotowanymi wektorami + dodanie 0x63) usuwa punkty stałe (S(a)=a).
  • Ostatnia runda bez MixColumns - struktura deszyfrowania zachowuje symetrię.
  • Rola: SubBytes wnosi konfuzję (jak w teorii Shannona).
SubBytes (ang. SubBytes): Jest to operacja podstawienia każdego bajtu stanu wartością z niezmiennego 256-elementowego S-boksa AES. S-boks łączy odwrotność w ciele GF z potęgi 2 do ósmej z transformacją afiniczną, co daje silną nieliniowość. Zapewnia odporność na kryptoanalizę liniową i różnicową oraz jest odwracalna przez tablicę odwrotną.
S-Box AES (SubBytes) – Odwrotność w GF(2^8) i nieliniowe podstawienie Bajt wejściowy {xy}₁₆ Tablica S-Box (256 bajtów) 1. Odwrotność w GF(2⁸) b' = a⁻¹ (oraz 0⁻¹ = 0) 2. Transformacja afiniczna b_i = b'_i ⊕ b'_(i+4) ⊕ ... ⊕ c_i Bajt wyjściowy {S(xy)}₁₆ SubBytes: jedyna nieliniowa operacja AES, chroni przed kryptoanalizą różnicową i liniową
Schemat slajdu 15 – AES - SubBytes
16/55
AES - ShiftRows
Cel slajdu: Slajd wyjaśnia operację ShiftRows jako cykliczne przesunięcie wierszy stanu AES.

Przesunięcia wierszy w State

  • Efekt rozproszenia w kolumnach: po przesunięciu bajty z jednej kolumny mieszają się z innymi kolumnami - przygotowanie do MixColumns.
  • Dzięki temu zależność między bajtami rozchodzi się po całym bloku (dyfuzja).
  • Przy odszyfrowywaniu wykonuje się przesunięcia w prawo (InvShiftRows).
ShiftRows (ang. ShiftRows): Polega na cyklicznym przesunięciu wierszy macierzy stanu w lewo o zero, jeden, dwa i trzy bajty. Powoduje rozproszenie bajtów jednej kolumny do różnych kolumn, przygotowując dane do mieszania. Jest operacją liniową odwracaną przez przesunięcia w prawo przy odszyfrowywaniu.
Przesunięcia wierszy (ShiftRows) – Cykliczne przesunięcia State Wiersz 0: [s₀,₀] [s₀,₁] [s₀,₂] [s₀,₃] Shift 0 (bez zmian) Wiersz 1: [s₁,₀] [s₁,₁] [s₁,₂] [s₁,₃] Shift 1 w lewo [s₁,₁..s₁,₀] Wiersz 2: [s₂,₀] [s₂,₁] [s₂,₂] [s₂,₃] Shift 2 w lewo [s₂,₂..s₂,₁] Wiersz 3: [s₃,₀] [s₃,₁] [s₃,₂] [s₃,₃] Shift 3 w lewo [s₃,₃..s₃,₂] ShiftRows przesuwa wiersze cyklicznie o 0, 1, 2 i 3 pozycje, zapewniając dyfuzję między kolumnami
Schemat slajdu 16 – AES - ShiftRows
17/55
AES - MixColumns
Cel slajdu: Slajd opisuje operację MixColumns jako mieszanie kolumn zapewniające dyfuzję AES.

Mieszanie kolumn w GF(2^8)

  • Mnożenie macierzowe realizowane jest jako XOR-y i mnożenia w GF(2^8) (z redukcją wielomianową 0x11B).
  • Efekt dyfuzji: zmiana 1 bajtu kolumny wejściowej zmienia całą kolumnę wyjściową - statystyki rozpraszają się po bloku.
  • To drugi (obok ShiftRows) mechanizm rozpraszania; razem tworzą pełną dyfuzję Shannona.
  • Ostatnia runda pomija MixColumns - deszyfrowanie jest czytelniejsze.
MixColumns (ang. MixColumns): Jest to mnożenie każdej kolumny stanu przez stałą macierz cztery na cztery w ciele GF z potęgi 2 do ósmej. Sprawia, że każdy bajt wyjściowy kolumny zależy od wszystkich czterech bajtów wejściowych, co zapewnia silną dyfuzję. W ostatniej rundzie szyfrowania operacja ta jest pomijana zgodnie ze specyfikacją.
Mieszanie kolumn (MixColumns) – Mnożenie macierzowe w ciele GF(2^8) s'₀,c s'₁,c s'₂,c s'₃,c = 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 × s₀,c s₁,c s₂,c s₃,c Ciało GF(2⁸) • Dodawanie = XOR • Mnożenie wielomian • Redukcja mod m(x): x⁸+x⁴+x³+x+1 (bajt 0x11B) MixColumns miesza każdy bajt kolumny ze wszystkimi 4 bajtami wejściowymi w GF(2⁸)
Schemat slajdu 17 – AES - MixColumns
18/55
AES - AddRoundKey
Cel slajdu: Slajd wyjaśnia operację AddRoundKey jako dodawanie klucza rundowego do stanu AES.

XOR stanu z kluczem rundowym

  • Klucz rundowy to wycinek rozszerzonego klucza (Key Expansion) - z klucza głównego generowane są kolejne porcje po 16 bajtów na rundę.
  • AddRoundKey jest operacją odwracalną (XOR samym sobą) i prostą - nie wnosi konfuzji ani dyfuzji, ale łączy klucz z danymi.
  • Wykonywane: raz przed rundami (AddRoundKey wstępny) i po każdej rundzie.
  • Klucz rundowy jest wyprowadzany z klucza głównego i pozostaje poufny - nie jest wiedzą publiczną, choć kryptoanalityk może go odtworzyć w ramach skutecznego ataku.
AddRoundKey (ang. AddRoundKey): Polega na dodawaniu klucza rundowego do stanu poprzez bitową operację XOR bajt po bajcie. Jest jedynym miejscem, w którym tajny klucz wchodzi bezpośrednio do przetwarzania danych. Dzięki odwracalności operacji XOR ta sama operacja służy do szyfrowania i odszyfrowywania.
AddRoundKey – Wprowadzanie klucza rundowego do macierzy State Macierz State S [4×4] 16 bajtów Klucz rundowy W_i [4×4] 16 bajtów = Nowy stan S' [4×4] S' = S ⊕ W AddRoundKey to jedyny krok w rundzie AES wprowadzający materiał tajnego klucza! AddRoundKey: bezpośrednia operacja XOR pomiędzy bajtami stanu State a kluczem rundy
Schemat slajdu 18 – AES - AddRoundKey
19/55
AES - rozszerzanie klucza
Cel slajdu: Slajd opisuje rozszerzanie klucza AES na klucze rundowe dla wszystkich rund szyfrowania.

Key Expansion

  • Klucz początkowy: Nk słów (4 bajty na słowo): AES-128 -> Nk=4, AES-192 -> Nk=6, AES-256 -> Nk=8.
  • Rozszerzenie do Nb*(Nr+1) słów: 4*(10+1)=44 słowa dla AES-128.
  • Funkcje pomocnicze:
    • RotWord - cykliczne przesunięcie słowa o 1 bajt;
    • SubWord - zastosowanie S-Boxu do każdego bajtu;
    • Rcon - stałe rundowe (potęgi 2 w GF(2^8)).
  • Wzór rekurencyjny: dla pozycji wielokrotnych Nk: w[i] = w[i-Nk] XOR (SubWord(RotWord(w[i-1])) XOR Rcon[i/Nk]); dla pozostałych: w[i] = w[i-Nk] XOR w[i-1].
Rozszerzanie klucza (ang. key expansion): Jest to procedura wyprowadzania wszystkich kluczy rundowych z klucza głównego przy użyciu rotacji słów, podstawień S-boksem i stałych rundowych. Dla AES-128 z czterech słów klucza powstają 44 słowa, czyli klucz początkowy plus dziesięć kluczy rundowych. Gwarantuje, że każda runda używa innego, nieliniowo powiązanego materiału kluczowego.
Rozszerzenie klucza (Key Expansion) – RotWord, SubWord i Rcon Klucz: w₀, w₁, w₂, w₃ Funkcja pomocnicza g(w) • RotWord: rotacja 4 bajtów w lewo • SubWord: zamiana bajtów przez S-Box • XOR ze stałą rundową Rcon[i] Formuła generowania kolejnych słów: w[i] = w[i-4] ⊕ g(w[i-1]) (dla i wielokrotności 4) Key Expansion generuje 44 słowa 32-bitowe (11 podkluczy 128-bitowych) dla AES-128
Schemat slajdu 19 – AES - rozszerzanie klucza
20/55
Bezpieczeństwo AES
Cel slajdu: Slajd omawia bezpieczeństwo AES i brak praktycznych ataków łamiących pełną liczbę rund.

Stan bezpieczeństwa i rekomendacje

  • Brak praktycznych ataków na pełny AES - mimo blisko 25 lat analiz (ataki tylko na zredukowane rundy).
  • Przestrzeń kluczy: 2^128, 2^192, 2^256 - nieprzeszukiwana siłą brutto; 2^128 ≈ 3,4×10^38.
  • Rekomendacje NIST: poziom 128 bitów (AES-128) pozostaje akceptowalny także po 2030 r. (SP 800-57 przewiduje przejście na co najmniej 128-bitowy poziom bezpieczeństwa w 2030 r.); AES-192/256 - na długie okresy (certyfikaty); AES-256 wymagany przez NSA (zestaw Suite B) dla danych szczególnie chronionych (tajemnice państwowe USA).
  • Odporność kryptoanalityczna: brak znaczących ataków różnicowych/liniowych; S-Box minimalizuje maksymalne prawdopodobieństwa różnicowe.
  • Uwaga: bezpieczeństwo AES zależy od trybu pracy i losowości IV/nonce (słaby tryb lub powtórzone IV psują bezpieczeństwo mimo mocnego szyfru).
Bezpieczeństwo AES (ang. AES security): Oznacza brak praktycznych ataków na pełną liczbę rund po ponad dwudziestu pięciu latach publicznej kryptoanalizy. Przestrzenie kluczy od 2 do potęgi 128 wzwyż wykluczają atak siłowy, a znane ataki dotyczą jedynie wersji ze zredukowaną liczbą rund. NIST nadal rekomenduje AES-128 jako wystarczający także w kontekście zagrożeń kwantowych przy dłuższych kluczach.
Bezpieczeństwo AES – Odporność na brute-force i ochrona sprzętowa AES-NI Bezpieczeństwo matematyczne Przestrzeń kluczy 2¹²⁸ 3,4 × 10³⁸ kombinacji (nietykalne) Brak ataków analitycznych Tylko na zredukowane rundy (7/10) Certyfikacja Dane o kluczu w pamięci RAM nie są chronione przez klasę ochrony systemu operacyjnego NSA, NIST, BSI, NATO Rzeczywiste zagrożenia • Ataki kanałem bocznym (SCA) Czas wykonania tablicy (Cache timing) Pobór mocy (DPA / SPA) • Ochrona sprzętowa AES-NI Instrukcje procesora o stałym czasie likwidują ataki czasowe • Algorytm Grovera (Kwantowy) Redukuje siłę do połowy (AES-256 → 128) AES pozostaje złotym standardem światowej kryptografii; klucze 256-bitowe chronią przed komputerem kwantowym
Schemat slajdu 20 – Bezpieczeństwo AES
21/55
Tryby pracy szyfrów blokowych - wprowadzenie
Cel slajdu: Slajd wprowadza tryby pracy szyfrów blokowych jako sposoby szyfrowania danych dłuższych niż blok.

Dlaczego tryby pracy są potrzebne

  • Tryby: ECB (codebook), CBC (chain), CTR (counter), GCM (Galois/Counter - z uwierzytelnianiem), oraz OFB, CFB.
  • Właściwości doboru: łączność (chain), równoległość (parallelism), autentyczność (AEAD), odporność na manipulacje.
  • Dobór trybu do zastosowania: dane dysk/lokalne - CBC/XTS; transmisja - GCM; strumienie - CTR; najlepsza praktyka nowoczesna - AEAD (GCM, ChaCha20-Poly1305).
Nigdy nie szyfruj trybem ECB danych o regularnej strukturze; do danych produkcyjnych wybieraj AEAD (GCM) lub CBC z HMAC.
Tryb pracy (ang. mode of operation): Jest to sposób użycia szyfru blokowego do szyfrowania wiadomości dłuższych niż jeden blok wraz z obsługą wektora inicjalizacyjnego. Definiuje łączenie bloków, propagację błędów, możliwość równoległości oraz ewentualne uwierzytelnianie. Do podstawowych trybów należą ECB, CBC, CTR i GCM.
Tryby pracy szyfrów blokowych – Konieczność stosowania i rola wektora IV Problem 1-blokowy • Szyfr blokowy (np. AES) szyfruje DOKŁADNIE 16 bajtów • Co jeśli plik ma 50 MB? Należy zdefiniować regułę łączenia kolejnych bloków! Tryb pracy (Mode of Operation) Rola wektora IV • Losowy wektor początkowy • Nie musi być tajny (jawny w nagłówku) • MUSI BYĆ UNIKALNY (NONCE) Ten sam tekst jawny zaszyfrowany dwukrotnie da zupełnie inny szyfr! Bezpieczeństwo semantyczne Tryby pracy zapobiegają ujawnianiu powtarzających się wzorców danych i gwarantują losowość szyfru
Schemat slajdu 21 – Tryby pracy szyfrów blokowych - wprowadzenie
22/55
Tryb ECB (Electronic Codebook)
Cel slajdu: Slajd wyjaśnia tryb ECB i jego słabość polegającą na ujawnianiu powtarzających się bloków.

Każdy blok szyfrowany niezależnie

  • Zalety: równoległość obliczeń, prostota, brak łańcucha - błąd w jednym bloku nie psuje pozostałych.
  • Wady: identyczne bloki tekstu -> identyczne bloki szyfrogramu - struktura danych "prześwieca" (najpoważniejsza słabość).
  • Klasyczna demonstracja: szyfrowanie obrazka trybem ECB zdradza kontury (np. logo Tuxa), bo obszary jednolite mapują się na identyczne bloki.
  • Nie używany do danych; dopuszczalny wyłącznie w eksperymentach.
$ printf 'AAAAAAAABBBBBBBBAAAAAAAABBBBBBBB' > plik.txt
$ openssl enc -aes-128-ecb -pbkdf2 -S 3ae3dae0747fa8c9 -in plik.txt -out plik.enc -pass pass:haslo
$ xxd plik.enc
00000000: 5361 6c74 6564 5f5f 3ae3 dae0 747f a8c9   Salted__:...t...
00000010: e484 6ade 89ba fc02 3b7f dc8b f620 7786   ..j..........
00000020: e484 6ade 89ba fc02 3b7f dc8b f620 7786   ..j..........
00000030: 337c 919f 1d5a c7bb b71b 2e0e 3ce1 4f1e  3|...Z......<.O.
# dwa identyczne bloki tekstu jawnego -> dwa identyczne bloki
# szyfrogramu (obszar e484...7786 powtórzony); sól 3ae3dae0747fa8c9
# jest wymuszona flagą -S, bo inaczej jest losowa przy każdym uruchomieniu
# 32 B danych = 2 pełne bloki, więc OpenSSL dopisuje jeszcze blok
# paddingu PKCS#7 - czwarty wiersz (00000030)
ECB (ang. Electronic Codebook): Jest to najprostszy tryb szyfrujący każdy blok niezależnie tym samym kluczem według wzoru szyfrogram równy szyfrowi tekstu. Zachowuje równoległość i ogranicza propagację błędów, lecz identyczne bloki jawne dają identyczne bloki szyfrogramu. Ujawnia strukturę danych, czego symbolem jest szyfrowany obraz pingwina, dlatego nie wolno go stosować do dłuższych danych.
Tryb ECB (Electronic Codebook) – Prześwietlanie struktury danych i wzorzec pingwina ECB: Ci = E_K(Pi) • Każdy blok szyfrowany osobno • Brak wektora IV • Identyczne bloki P → identyczne C! KATEGORYCZNY ZAKAZ STOSOWANIA Efekt ECB (Tux Penguin) Widoczny wzorzec pikseli! ECB nie zaciemnia struktury danych: identyczne bloki dają identyczny szyfr, ujawniając treść
Schemat slajdu 22 – Tryb ECB (Electronic Codebook)
23/55
Tryb CBC (Cipher Block Chaining)
Cel slajdu: Slajd opisuje tryb CBC z łańcuchowaniem bloków przez wektor inicjujący i poprzedni szyfrogram.

Łańcuchowe łączenie bloków

  • IV (wektor inicjalizacyjny) - losowy, unikalny (nigdy nie powtarzany!) blok startowy; nie jest tajny, ale musi być inny dla każdej sesji/komunikatu.
  • Propagacja zmian: zmiana jednego bloku tekstu wpływa na ten i wszystkie kolejne bloki szyfrogramu; zmiana bloku szyfrogramu psuje odszyfrowanie dwóch bloków (ten i następny).
  • Zalety: identyczne bloki dają różne szyfrogramy (IV + łańcuch).
  • Wady: szyfrowanie sekwencyjne (brak równoległości), brak integralności (wymaga MAC/HMAC), podatność na bit-flipping przy braku autentykacji.
CBC (ang. Cipher Block Chaining): Jest to tryb łańcuchowy, w którym każdy blok jawny jest XORowany z poprzednim szyfrogramem, a pierwszy z losowym wektorem IV. Wektor nie musi być tajny, lecz musi być nieprzewidywalny i unikalny dla każdego szyfrowania. Tryb wymaga dopełnienia, nie zapewnia integralności i jest podatny na manipulacje bitowe bez dodatkowego kodu MAC.
Tryb CBC (Cipher Block Chaining) – Łańcuchowe powiązanie bloków z wektorem IV Blok P₁ IV E_K C₁ Blok P₂ E_K C₂ Własności trybu CBC • Szyfrowanie szeregowe (brak równoległości w enc) • Deszyfrowanie równoległe (znane są wszystkie Ci) • Błąd w C_i psuje 2 bloki (cały P_i oraz 1 bit P_(i+1)) W trybie CBC każdy blok szyfru zależy od wszystkich poprzednich bloków szyfrogramu (a pierwszy - od wektora IV)
Schemat slajdu 23 – Tryb CBC (Cipher Block Chaining)
24/55
Tryb CTR (Counter)
Cel slajdu: Slajd wyjaśnia tryb CTR jako przekształcenie szyfru blokowego w strumieniowy z licznikiem.

Szyfrowanie licznika

  • Operacja XOR każdego bloku danych z blokiem keystreamu - szyfrowanie i deszyfrowanie są identyczne (XOR dwa razy).
  • Równoległość przetwarzania: każdy blok keystreamu można liczyć niezależnie - świetne dla wielowątkowości i sprzętu.
  • IV + counter nonce: licznik zaczyna od wartości nie do powtórzenia (unikalny nonce); powtórzenie nonce przy tym samym kluczu = katastrofa (XOR dwóch keystreamów zdradza teksty).
  • Brak paddingu - strumień.
CTR (ang. Counter mode): Przekształca szyfr blokowy w strumieniowy poprzez szyfrowanie unikalnej pary nonce i licznika, a wynik XORuje z danymi. Umożliwia pełną równoległość oraz dostęp swobodny, nie wymaga dopełnienia i ma identyczne szyfrowanie i deszyfrowanie. Krytycznym warunkiem jest nigdy nie powtarzać pary nonce-licznik pod tym samym kluczem, bo prowadzi to do odtworzenia tekstu.
Tryb licznikowy (CTR) – Pełna równoległość i zamiana w szyfr strumieniowy Nonce || Ctr=1 AES(K) P₁ C₁ Nonce || Ctr=2 AES(K) P₂ C₂ Zalety trybu licznikowego (CTR) ✓ 100% zrównoleglenie (SIMD/wielordzeniowość) ✓ Preprocessing: generowanie keystreamu w tle ✓ Dostęp swobodny (Random Access) do bloku ✓ Brak paddingu (działa jak strumieniowy) RYGOR: Nonce + Ctr NIGDY nie może się powtórzyć! CTR zamienia algorytm blokowy w strumieniowy: szyfruje wartości licznika i XORuje z tekstem
Schemat slajdu 24 – Tryb CTR (Counter)
25/55
Tryb GCM (Galois/Counter Mode)
Cel slajdu: Slajd przedstawia tryb GCM łączący poufność CTR z uwierzytelnianiem Galois.

CTR + uwierzytelnianie (AEAD)

  • AEAD: jednocześnie poufność + integralność + autentyczność (odbierający weryfikuje tag przed odsłonięciem danych).
  • GMAC: tryb z samym tagiem bez szyfrowania - do uwierzytelniania wiadomości (wariant).
  • Associated Data (AAD): nagłówki, które nie są szyfrowane, ale są pokryte tagiem (np. SPI i numer sekwencyjny w IPsec/ESP - RFC 4106; nagłówek rekordu w TLS).
  • Współczesny standard: TLS 1.3, IPv6/IPsec, WiFi 5/6 (WPA2/WPA3), QUIC - AEAD domyślny.
  • Zalety bezpieczeństwa: wykrycie podszycia się i modyfikacji szyfrogramu (każda próba zmiany danych lub tożsamości powoduje odrzucenie komunikatu) (wymaga unikalnego IV dla każdego szyfrowania!).
GCM (ang. Galois/Counter Mode): Jest to tryb uwierzytelnionego szyfrowania AEAD łączący poufność trybu CTR z tagiem uwierzytelniającym GHASH w polu Galois. Jednocześnie zapewnia poufność, integralność i autentyczność oraz chroni dodatkowe dane nagłówkowe bez ich szyfrowania. Odbiorca weryfikuje tag przed odszyfrowaniem, co chroni przed fałszerstwem i manipulacją.
Tryb GCM (Galois/Counter Mode) – Szyfrowanie uwierzytelnione AEAD Poufność: Tryb CTR • Szyfrowanie AES-CTR • Dowolna długość danych • Błyskawiczna wydajność Wynik: Szyfrogram C Chroniona poufność Autentyczność: GHASH • Mnożenie w ciele Galois GF(2¹²⁸) • Chroni C oraz dane jawne AAD (np. nagłówki IP, porty, ID sesji) Wynik: Tag uwierzytelnienia T 128-bitowy znacznik MAC GCM (AEAD): gwarantuje jednocześnie poufność, integralność i autentyczność (standard w TLS 1.3)
Schemat slajdu 25 – Tryb GCM (Galois/Counter Mode)
26/55
Porównanie trybów pracy
Cel slajdu: Slajd porównuje tryby pracy pod względem równoległości, propagacji błędów i uwierzytelniania.

Tabela porównawcza: ECB, CBC, CTR, GCM, OFB, CFB

TrybŁańcuchRównoległośćAutentycznośćPodatności / uwagi
ECBbraktaknieprześwietlanie struktury - NIE STOSOWAĆ
CBCtak (poprzedni C)tylko deszyfrnie (dodaj HMAC)zły IV/bit-flipping bez MAC
CTRbraktakniepowtórzenie nonce = katastrofa
GCMbraktaktak (AEAD)nie powtarzaj IV! silny 128-bitowy tag
OFBsprzężenie wyjściowenieniebrak propagacji błędu w szyfrogramie; powtórzenie IV
CFBtak (poprzedni C)tylko deszyfrniebłąd propagacji 1 blok; poufność, brak integralności

Rekomendacje praktyczne: do transmisji - GCM (AEAD); do danych lokalnych - XTS-AES (dyski) lub CBC+HMAC; nigdy ECB dla danych o strukturze.

Porównanie trybów (ang. modes comparison): Zestawia ono łańcuchowanie, równoległość, obsługę integralności i typowe podatności trybów ECB, CBC, CTR i GCM. Wskazuje, że tylko GCM jest natywnie uwierzytelniony, CBC wymaga osobnego HMAC, a ECB nie nadaje się do użytku. Ułatwia wybór trybu zgodnie z wymaganiami bezpieczeństwa i wydajności.
Porównanie trybów pracy – Macierz właściwości, wydajności i bezpieczeństwa Tryb Łańcuch Równoległość Autentyczność Status / Rekomendacja ECB Nie Tak (Enc/Dec) Brak ZAKAZ STOSOWANIA CBC Tak Tylko Dec Brak Brak integralności (Padding Oracle) CTR Nie Tak (Enc/Dec) Brak Wymaga zewnętrznego MAC GCM Nie Tak (Enc/Dec) TAK (AEAD) ZALECANY STANDARD (TLS 1.3) CFB / OFB Różnie Ograniczona Brak Niszowe zastosowania Podsumowanie trybów pracy: Współczesne standardy bezpieczeństwa wymagają trybów AEAD (GCM)
Schemat slajdu 26 – Porównanie trybów pracy
27/55
Szyfry strumieniowe - wprowadzenie
Cel slajdu: Slajd wprowadza szyfry strumieniowe jako generatory strumienia kluczowego dodawanego do danych.

Szyfrowanie biegłym strumieniem keystreamu

  • Keystream powstaje z klucza i nonce (i ewentualnie licznika) przez generator strumieniowy.
  • XOR z danymi: jeden bit wadliwy w strumieniu = jeden bit zmiany w danych (bez propagacji).
  • Różnica względem blokowych: blokowe operują na pełnych blokach (16 B) z paddingiem; strumieniowe działają bit/bajt po bit/bajcie - bez paddingu, bez łańcucha.
  • Zalety: szybkość (dla małych urządzeń, transmisji czasu rzeczywistego), prostota, brak paddingu, równoległość.
Szyfr strumieniowy (ang. stream cipher): Generuje ciągły pseudolosowy strumień kluczowy z klucza i wartości nonce, a następnie XORuje go z danymi bit po bicie. Nie wymaga podziału na bloki ani dopełnienia i dobrze nadaje się do komunikacji o zmiennej długości. Warunkiem bezpieczeństwa jest nigdy nie powtarzać strumienia kluczowego pod tym samym kluczem.
Szyfry strumieniowe – Zasada działania generatora keystreamu i operacji XOR Generator Keystreamu Klucz K + Wektor Nonce (IV) KS_i (Keystream) Tekst jawny (M_i) Szyfr (C_i = M_i ⊕ KS_i) Szyfry strumieniowe generują pseudolosowy potok bitów XORowany w locie z danymi
Schemat slajdu 27 – Szyfry strumieniowe - wprowadzenie
28/55
RC4 - algorytm i zastosowania
Cel slajdu: Slajd przedstawia algorytm RC4 oraz jego historyczne zastosowania w WEP i TLS.

Ron Rivest, 1987

  • Stosowany w WEP (WiFi) i dawnych wersjach SSL/TLS (RSA_RC4_*), także w PDF.
  • Dwie części:
    • KSA (Key Scheduling Algorithm) - inicjalizacja tablicy stanu S[256] z klucza;
    • PRGA (Pseudo-Random Generation Algorithm) - generacja kolejnych bajtów keystreamu przez permutowanie i wymianę w S.
  • Klucz: 8-2048 bitów (typowo 128; 40-bitowe klucze w WEP/SSL 3.0 wynikały z ograniczeń eksportowych).
  • Powszechna krytyka - silne statystyczne skazy (bias), przez co wycofany.
RC4 (ang. Rivest Cipher 4): Jest to prosty i szybki szyfr strumieniowy Rona Rivesta z 1987 roku oparty na permutowanej tablicy stanu o 256 bajtach. Składa się z inicjalizacji KSA i generatora PRGA wytwarzającego kolejne bajty strumienia. Był powszechnie używany w WEP, SSL i TLS oraz plikach PDF, zanim wykryto jego słabości.
Szyfr RC4 – Algorytmy KSA (mieszanie tablicy) oraz PRGA (generacja strumienia) 1. KSA (Key-Scheduling) • Inicjalizacja tablicy S[0..255] • Wypełnienie: S[i] = i • Mieszanie z kluczem K: j = (j + S[i] + K[i % len]) mod 256 swap(S[i], S[j]) Wynik: permutacja S 2. PRGA (Keystream Generation) • Generowanie każdego bajtu: i = (i + 1) mod 256 j = (j + S[i]) mod 256 swap(S[i], S[j]) KS = S[(S[i] + S[j]) mod 256] Bajt klucza wyjściowego RC4 opierał się na 256-bajtowej permutacji tablicy S i dwóch wskaźnikach i oraz j
Schemat slajdu 28 – RC4 - algorytm i zastosowania
29/55
Podatności RC4
Cel slajdu: Slajd omawia podatności RC4, które wyeliminowały go ze współczesnych zastosowań.

Dlaczego RC4 padł

  • Bias w pierwszych bajtach (Fluhrer, Mantin, Shamir - 2001): keystream wykazuje statystyczne odchylenia (bias), szczególnie na początku - umożliwia odtworzenie klucza (atak na WEP).
  • Ataki na WEP (Aircrack-ng): powtórne użycie IV (24-bitowe) i bias generatora; do złamania klucza WEP potrzeba od kilkudziesięciu tysięcy pakietów (atak PTW/Klein) do ok. miliona i więcej (FMS/KoreK) - minuty, zwłaszcza przy wymuszaniu ruchu ARP.
  • RC4 wycofany z TLS 1.3 (i odradzany od TLS 1.2, RFC 7465); dokumenty IETF zalecają całkowitą rezygnację.
  • Współcześnie: tylko znaczenie historyczne; wszystkie nowe systemy używają ChaCha20 lub szyfrów blokowych w trybie AEAD.
$ airmon-ng start wlan0          # monitor mode (tworzy np. wlan0mon)
$ airodump-ng wlan0mon          # zbieranie pakietów (IV)
$ aircrack-ng -b AA:BB:CC:DD:EE:FF capture.cap   # złamanie WEP
Podatności RC4 (ang. RC4 vulnerabilities): Wynikają ze statystycznych obciążeń strumienia kluczowego, zwłaszcza w początkowych bajtach, opisanych przez Fluhrera, Mantina i Shamira. W protokole WEP krótkie powtarzane IV umożliwiły szybkie odtworzenie klucza narzędziami takimi jak Aircrack-ng. Z tego powodu RC4 został zakazany w TLS i całkowicie wycofany z zastosowań.
Upadek szyfru RC4 – Bias statystyczny, atak FMS i podatności protokołu WEP Bias statystyczny pierwszych bajtów • Drugi bajt keystreamu ma P(KS[2]=0) = 2/256 zamiast 1/256! • Atak FMS (Fluhrer-Mantin-Shamir, 2001): Odchylenia ujawniają klucz główny przy znanym wektorze IV RFC 7465: Zakaz w TLS! Katastrofa WEP (Wi-Fi 802.11) • Zbyt krótki IV: 24 bity Powtórzenie IV po zaledwie 16 milionach pakietów (~kilka godzin) • Narzędzie Aircrack-ng Wstrzykiwanie pakietów ARP Złamanie klucza WEP w 2-3 minuty • Brak integralności (CRC-32) CRC-32 jest liniowe (brak kryptografii) RC4 upadł przez korelacje statystyczne w początkowych bajtach i błędną implementację w protokole WEP
Schemat slajdu 29 – Podatności RC4
30/55
ChaCha20 - historia
Cel slajdu: Slajd przedstawia historię ChaCha20 jako nowoczesnej odpowiedzi na słabości RC4.

Daniel J. Bernstein (2008)

  • Opracowany przez Daniela J. Bernsteina w 2008 jako ulepszenie Salsa20 (z rotacjami o 16, 12, 8 i 7 bitów zamiast 7, 9, 13, 18).
  • Następca Salsa20: to wariant Salsa20/12 wybrano do portfela projektu eSTREAM (profil oprogramowania, 2008); ChaCha20 powstał po zakończeniu konkursu jako ulepszenie Salsa20 i sam nie był jego kandydatem.
  • Adopcja: TLS (Google Chrome wdrażał ChaCha20-Poly1305 dla urządzeń bez AES-NI w latach 2013-2014), WireGuard (VPN), OpenSSH, TLS 1.2 (RFC 7905), TLS 1.3 (RFC 8446), QUIC, Signal.
  • Projekt nastawiony na prostotę, szybkość na procesorach bez sprzętowej akceleracji AES i minimalizację ryzyka side-channel.
Historia ChaCha20 (ang. ChaCha20 history): Rozpoczyna się od prac Daniela Bernsteina, który w 2008 roku ulepszył swój szyfr Salsa20 zmieniając rotacje i dyfuzję. Salsa20 został wyróżniony w projekcie eSTREAM, a ChaCha20 powstał jako jego bezpieczniejsza kontynuacja. Z czasem stał się standardem IETF i składnikiem nowoczesnych protokołów.
Szyfr ChaCha20 – Geneza Bernsteina, operacje ARX i odporność na ataki czasowe Geneza ChaCha20 • Twórca: Daniel J. Bernstein (2008) • Udoskonalenie szyfru Salsa20 (zwycięzca europejskiego eSTREAM) • Poprawione rotacje bitowe: <<< 16, <<< 12, <<< 8, <<< 7 Zwiększona dyfuzja na rundę Architektura bez tablic • Tylko operacje ARX: Add (dodawanie), Rotate, XOR • Odporność na ataki czasowe: Stały czas wykonania (Constant Time) brak odwołań do pamięci cache (S-boxów) Wysoka wydajność na urządzeniach mobilnych i ARM ChaCha20 to nowoczesny, szybki szyfr strumieniowy pozbawiony podatności na ataki czasowe
Schemat slajdu 30 – ChaCha20 - historia
31/55
ChaCha20 - budowa
Cel slajdu: Slajd wyjaśnia budowę ChaCha20 opartą na operacjach ARX i macierzy stanu.

Stan, klucz, nonce, licznik

  • Klucz: 256 bitów; nonce: 96 bitów; licznik: 32 bity (RFC 8439).
  • Stan: macierz 4x4 słów 32-bitowych (16 słów): 4 słowa stałe ("expand 32-byte k"), 8 słów klucza, 1 słowo licznika, 3 słowa nonce (RFC 8439).
  • 20 rund (10 podwójnych: na kolumnach i po przekątnych - łącznie 20 rund).
  • Funkcja quarter round: podstawowa operacja: a+=b; d=rotl(d^a,16); c+=d; b=rotl(b^c,12); a+=b; d=rotl(d^a,8); c+=d; b=rotl(b^c,7).
Budowa ChaCha20 (ang. ChaCha20 design): Opiera się wyłącznie na prostych operacjach dodawania modulo 2 do 32, XOR i rotacji, czyli tak zwanych ARX. Stan to macierz szesnastu słów 32-bitowych zawierająca stałe, 256-bitowy klucz, licznik i 96-bitowy nonce, przetwarzana w dwudziestu rundach. Brak tablic podstawień zapewnia stały czas wykonania i odporność na ataki czasowe.
Stan ChaCha20 – Macierz 4x4: stałe, klucz 256b, licznik i nonce (RFC 8439) Stan początkowy ChaCha20 (16 słów 32-bitowych = 512 bitów) 0x61707865 0x3320646e 0x79622d32 0x6b206574 Klucz K₀ Klucz K₁ Klucz K₂ Klucz K₃ Klucz K₄ Klucz K₅ Klucz K₆ Klucz K₇ Licznik Ctr Nonce N₀ Nonce N₁ Nonce N₂ Struktura stanu wg RFC 8439: 4 słowa stałych, 8 słów klucza (256b), 1 licznik (32b), 3 nonce (96b)
Schemat slajdu 31 – ChaCha20 - budowa
32/55
ChaCha20 - blok szyfrujący
Cel slajdu: Slajd opisuje blok szyfrujący ChaCha20 generujący 64-bajtowy strumień kluczowy.

Operacje i keystream

  • Operacje: dodawanie mod 2^32, XOR i rotacje o 8, 12, 16 bitów (oraz 7 w podwójnej rundzie) - tylko sprzętowo proste, bez mnożenia.
  • Po 20 rundach: wynik dodaje się do początkowego stanu (feed-forward) - każda zmiana stanu jest istotna.
  • Keystream: stan wyjściowy (16 słów = 64 bajty) jest blokiem strumienia; zwiększamy licznik i generujemy kolejny blok.
  • Wizualizacja: bloki keystreamu XOR z danymi (po 64 B) dają szyfrogram; deszyfrowanie - tę samą operację.
Blok ChaCha20 (ang. ChaCha20 block function): Przetwarza stan przez dziesięć podwójnych rund kolumnowych i diagonalnych, po czym dodaje stan początkowy w sprzężeniu zwrotnym. Wynikowe szesnaście słów tworzy 64 bajty strumienia kluczowego XORowanego z danymi. Zwiększanie licznika dla każdego bloku zapewnia unikalność strumienia.
Operacje ChaCha20 – Funkcja Quarter-Round ARX i suma feed-forward Quarter-Round QR(a, b, c, d) a = a + b; d = (d ⊕ a) <<< 16 c = c + d; b = (b ⊕ c) <<< 12 a = a + b; d = (d ⊕ a) <<< 8 c = c + d; b = (b ⊕ c) <<< 7 Tylko operacje ARX Brak mnożenia, brak tabel S-box 20 Rund i Feed-Forward • 10 rund kolumnowych • 10 rund diagonalnych (przekątne) • Suma Feed-Forward: State_out = State_20 + State_0 64 bajty Keystreamu XORowane z 64 bajtami tekstu ChaCha20 wykonuje 10 podwójnych rund ARX, a suma feed-forward uniemożliwia odwrócenie stanu
Schemat slajdu 32 – ChaCha20 - blok szyfrujący
33/55
ChaCha20-Poly1305
Cel slajdu: Slajd przedstawia konstrukcję ChaCha20-Poly1305 jako szyfrowanie uwierzytelnione AEAD.

AEAD: szyfrowanie + uwierzytelnianie

  • Poly1305 - jednorazowy MAC oparty na arytmetyce modulo 2^130-5; klucz jednorazowy wyodrębniany z pierwszego bloku ChaCha20.
  • AEAD: szyfrowanie + tag; odbiorca weryfikuje tag przed użyciem danych.
  • Popularność: urządzenia mobilne i IoT (wolny sprzęt bez AES-NI), WireGuard, OpenSSH, TLS 1.3.
  • Porównanie wydajności: na platformach z AES-NI (sprzętowy AES) AES-GCM bywa szybszy; bez akceleracji (ARM, mikrokontrolery, starsze x86) ChaCha20-Poly1305 - szybki i odporny na ataki boczne (side-channel).
ChaCha20-Poly1305 (ang. ChaCha20-Poly1305): Jest to konstrukcja szyfrowania uwierzytelnionego AEAD opisana w RFC 8439, łącząca szyfr ChaCha20 z kodem Poly1305. Jednorazowy klucz Poly1305 wywodzony jest z pierwszego bloku szyfru i służy do wyliczenia tagu w arytmetyce modulo 2 do 130 minus 5. Zapewnia poufność i integralność bez sprzętowej akceleracji, dlatego dominuje w TLS na urządzeniach mobilnych i w WireGuard.
ChaCha20-Poly1305 – Architektura trybu AEAD i arytmetyka Poly1305 1. Blok Ctr = 0 (Klucz Poly1305) • Pierwsze 64B keystreamu: Bajt 0..31: klucze r i s dla MAC Gwarantuje jednorazowość klucza MAC! 2. Szyfrowanie danych (Ctr ≥ 1) • Dane jawne M XORowane z kolejnymi blokami keystreamu Wynik: Szyfrogram C 3. Obliczenie Tagu Poly1305 (Arytmetyka mod 2¹³⁰ - 5) Tag = Poly1305(Klucz_jednorazowy, AAD || C || długości) mod (2¹³⁰ - 5) Wynik: 128-bitowy tag gwarantujący integralność (w ramach jednego klucza i bez znanego tagu; klucz nigdy nie może być użyty ponownie) i autentyczność ChaCha20-Poly1305 (RFC 8439): kompletny tryb AEAD chroniący poufność i autentyczność
Schemat slajdu 33 – ChaCha20-Poly1305
34/55
Porównanie AES i ChaCha20
Cel slajdu: Slajd porównuje AES i ChaCha20 pod względem szybkości, sprzętu i odporności na ataki czasowe.

Kiedy które?

CechaAES (GCM)ChaCha20 (Poly1305)
Sprzętowa akceleracjaAES-NI (szeroko)brak (general purpose)
Wydajność z AES-NIbardzo wysokadobra
Wydajność bez akceleracjiśrednia, ryzyko ataków bocznychwysoka, stały czas
Bezpieczeństwouznane, wymaga unikalnego IVuznane, wymaga unikalnego nonce
Typowe zastosowaniadyski, TLS, IPsec, bazyTLS (alternatywa), WireGuard, IoT, SSH

Rekomendacje: oba są dobre; dla maksymalnej zgodności i szybkości na nowym sprzęcie wybierz AES-GCM z AES-NI; dla urządzeń bez akceleracji i odpornych na ataki boczne (IoT, ARM) - ChaCha20-Poly1305. W TLS oba są standardem.

Porównanie AES i ChaCha20 (ang. AES vs ChaCha20): Dotyczy szybkości z akceleracją AES-NI i bez niej, odporności na ataki boczne oraz wymagań dotyczących unikalności IV. AES-GCM wygrywa na procesorach ze wsparciem sprzętowym, natomiast ChaCha20-Poly1305 jest szybszy i bezpieczniejszy czasowo na platformach ogólnego przeznaczenia. Oba tryby są uznane, lecz oba wymagają ścisłej unikalności nonce.
Porównanie standardów – Kiedy stosować AES-GCM, a kiedy ChaCha20-Poly1305 AES-GCM (Wybierz gdy:) ✓ Akceleracja sprzętowa AES-NI Dostępna na procesorach x86 / AMD64 i nowszych rdzeniach ARM (v8 Crypto) ✓ Serwery i centra danych Przepustowości rzędu 50-100 Gbps Minimalne obciążenie CPU Standard w FIPS i korporacjach ChaCha20-Poly1305 (Wybierz gdy:) ✓ Brak wsparcia AES-NI Starsze smartfony, mikrokontrolery, urządzenia IoT i sensory (MIPS/RISC-V) ✓ Odporność na Cache-Timing Bezpieczny programowo pod warunkiem losowego, niepowtarzalnego nonce dla danego klucza Bardzo dobra wydajność na czystym CPU Protokół WireGuard / Android Oba algorytmy są równorzędnymi standardami IETF/TLS 1.3 dopasowanymi do profilu sprzętowego
Schemat slajdu 34 – Porównanie AES i ChaCha20
35/55
Funkcje skrótu - wprowadzenie
Cel slajdu: Slajd wprowadza funkcje skrótu jako jednokierunkowe odciski danych o stałej długości.

Hash, digest, skrót

  • Stała długość wyjścia niezależnie od długości wejścia - to nie jest szyfrowanie (brak klucza).
  • Własności: obliczeniowa odporność na odwrócenie (jednokierunkowość), odporność na kolizje, determinizm, wrażliwość (efekt lawinowy).
  • Zastosowania: integralność (porównanie skrótów), przechowywanie haseł, podpisy cyfrowe (podpisuj skrót, nie całość), HMAC, weryfikacja pobrań, deduplikacja, blockchain.
Funkcja skrótu (ang. hash function): Jest to deterministyczna funkcja jednokierunkowa odwzorowująca dane o dowolnej długości na ciąg o stałej długości zwany digestem. Nie jest szyfrowaniem, ponieważ nie ma klucza ani operacji odwrotnej, a służy do odcisku danych. Warunkiem kryptograficzności jest jednokierunkowość i odporność na kolizje.
Funkcje skrótu – Istota odwzorowania, determinizm i cyfrowy odcisk palca Wejście (M) • 1 znak "A" • Plik PDF 10 MB • Obraz ISO 4 GB Funkcja H Jednokierunkowa Deterministyczna Brak klucza! Efekt lawinowy Skrót (Digest) 256 bitów (dla SHA-256) 32 bajty (64 hex) Funkcja skrótu tworzy cyfrowy odcisk palca danych o stałej długości, niezależnie od rozmiaru wejścia
Schemat slajdu 35 – Funkcje skrótu - wprowadzenie
36/55
Własności bezpieczeństwa funkcji skrótu
Cel slajdu: Slajd omawia własności bezpieczeństwa funkcji skrótu: preimage, second preimage i odporność na kolizje.

Cztery warunki bezpieczeństwa

  • Odporność na pierwszy obraz (preimage resistance): mając dany skrót h, trudno znaleźć jakikolwiek tekst x taki, że H(x)=h (jednokierunkowość).
  • Odporność na znalezienie drugiego preobrazu (second preimage resistance): mając x i H(x), trudno znaleźć inny x' z tym samym skrótem.
  • Odporność na kolizje (collision resistance): trudno znaleźć dowolne dwie różne wiadomości x != x' o tym samym skrócie. (Silniejsza niż 2. preimage.)
  • Efekt lawinowy: zmiana jednego bitu danych zmienia przeciętnie ok. 50% bitów skrótu - nie da się przewidzieć zależności.

Wymagane bezpieczeństwo obliczeniowe: dla skrótu o n bitach ataki preimage wymagają ok. 2^n, kolizje ok. 2^(n/2) (paradoks urodzin).

Własności skrótu (ang. hash security properties): Obejmują odporność na przeciwobraz, czyli niemożność odtworzenia wejścia ze skrótu, odporność na drugi przeciwobraz oraz odporność na kolizje. Dodatkowo wymagane są determinizm, lawinowość i szybkie obliczanie dla dowolnych danych. Złamanie którejkolwiek własności dyskwalifikuje funkcję w zastosowaniach kryptograficznych.
Warunki bezpieczeństwa – Preimage, Second Preimage i Collision Resistance 1 Preimage Resistance • Mając h = H(x), obliczeniowo niemożliwe jest znalezienie x Złożoność: 2ⁿ operacji 2 Second Preimage Resistance • Mając x, niemożliwe jest znalezienie x' ≠ x t.że H(x')=H(x) Złożoność: 2ⁿ operacji 3 Collision Resistance • Niemożliwe jest znalezienie DOWOLNEJ pary x₁ ≠ x₂ t.że H(x₁)=H(x₂) Złożoność: 2ⁿ/² (Paradoks Urodzin) 4 Efekt Lawinowy (Avalanche) • Zmiana 1 bitu tekstu jawnego zmienia ~50% bitów wyjściowego skrótu Brak jakichkolwiek korelacji Dla parzystego n odporność na kolizje wynosi n/2 bitów (paradoks dnia urodzin); dla n nieparzystego jest to (n−1)/2, bo r+1 możliwych wyników
Schemat slajdu 36 – Własności bezpieczeństwa funkcji skrótu
37/55
MD5 - przegląd
Cel slajdu: Slajd przedstawia przegląd MD5: konstrukcję, długość skrótu i historyczne zastosowania.

Ronald Rivest, 1991

  • Konstrukcja Merkle-Damgård (bloki 512-bitowe, IV 128-bitowy, 4 rundy po 16 operacji).
  • Używany przez lata do weryfikacji integralności (pobieranie plików), podpisów cyfrowych, przechowywania haseł, sum kontrolnych.
  • Słabości: kolizje funkcji kompresji od 1996 (Dobbertin), pełne kolizje MD5 od 2004 (Wang) - z tego powodu uznawany za niezdatny do celów bezpieczeństwa.
  • Obecnie tylko do sum kontrolnych niekryptograficznych (np. kontrola spójności plików bez wektora ataku), nie do integralności bezpieczeństwa.
$ printf 'Kryptografia' | md5sum
5396b2b9fa82a71a6cab631d124024d6  -
MD5 (ang. Message-Digest 5): Jest to 128-bitowa funkcja skrótu Rona Rivesta z 1991 roku oparta na konstrukcji Merkle-Damgarda z blokami 512-bitowymi. Była szeroko używana do weryfikacji integralności plików i przechowywania haseł, zanim wykryto jej słabości. Dziś służy jedynie do niekryptograficznych sum kontrolnych i zastosowań historycznych.
Funkcja MD5 – Konstrukcja Merkle-Damgårda i parametry algorytmu Konstrukcja Merkle-Damgårda (bloki 512-bitowe) IV (128b) → [ f(M₁) ] → [ f(M₂) ] → ... → [ f(M_k) ] → Digest (128b) Parametry MD5 • Długość skrótu: 128 bitów (16 B) • Rozmiar bloku: 512 bitów (64 B) • 4 rundy po 16 nieliniowych kroków • Rejestry stanu: 4 słowa 32-bit (A,B,C,D) Koniec ery MD5 • Zastąpił MD4 w 1991 roku • Był fundamentem wczesnego Internetu • Całkowicie skompromitowany! Generowanie kolizji w ułamku sekundy MD5 opierał się na 128-bitowym stanie i 64 krokach kompresji w konstrukcji Merkle-Damgårda
Schemat slajdu 37 – MD5 - przegląd
38/55
Kolizje MD5 - atak Wanga (2004)
Cel slajdu: Slajd opisuje atak Wanga na MD5 z 2004 roku, który praktycznie złamał odporność na kolizje.

Zespół Wang, Feng, Lai, Yu

  • Czas generowania: od sekund do minut (metoda różnicowa ukierunkowana); obecnie narzędzia (np. hashclash, fastcoll) generują kolizje niemal natychmiast.
  • Skutki: MD5 niezdatny do zastosowań bezpieczeństwa (podpisy, certyfikaty, uwierzytelnianie).
  • Przykłady praktyczne:
    • Malware: dwa pliki o tym samym MD5 - inny szkodliwy, inny nieszkodliwy (stare sygnatury AV omijane);
    • Certyfikaty X.509: udowodniono możliwość fałszowania certyfikatów (Chosen-prefix collisions, Stevens i in., 2008 - fałszywe CA);
    • Rogue CA: 2008 - Stevens, Sotirov, Appelbaum, Lenstra, Molnar, Osvik, Weimer: "MD5 considered harmful" - praktyczne wykazanie, że dowolnie wybrane dwa pliki mogą mieć ten sam skrót MD5; autorzy wykorzystali tę własność m.in. do podrobienia certyfikatu CA/Root. Tytuł artykułu odnosi się do użytego w nim skrótu MD5, a nie do autorów.
  • Wniosek: MD5 i SHA-1 do weryfikacji integralności, nie do bezpieczeństwa.
Kolizje MD5 (ang. MD5 collisions): Zostały praktycznie skonstruowane w 2004 roku przez zespół Xiaoyun Wang metodą różnicową w czasie sekund lub minut. Narzędzia takie jak hashclash i fastcoll generują dwie różne wiadomości o tym samym skrócie, co umożliwia fałszowanie certyfikatów i plików. Z tego powodu MD5 jest bezwzględnie zakazany w ochronie integralności.
Złamanie MD5 – Badania zespołu Wang (2004) i fałszowanie certyfikatów X.509 Konferencja Crypto 2004 • Xiaoyun Wang i zespół: Pierwsza analityczna kolizja MD5! • Metoda różnicowa modułowa • Złożoność 2³⁹ zamiast 2⁶⁴ • Znalezienie kolizji w 1 godzinę Koniec zaufania do MD5 Praktyczne wektory ataku • Fałszywy CA (2008) Stworzenie podrobionego CA z podpisem akceptowanym w HTTPS! • Narzędzie fastcoll Generowanie kolizji MD5 w kilka milisekund na laptopie • Flame Malware (2012) Podrobienie podpisu Microsoft Xiaoyun Wang udowodniła w 2004 r. całkowitą podatność MD5 na kolizje różnicowe
Schemat slajdu 38 – Kolizje MD5 - atak Wanga (2004)
39/55
SHA-1 - przegląd
Cel slajdu: Slajd przedstawia przegląd SHA-1: parametry, zastosowania i wycofywanie ze standardów.

Secure Hash Algorithm 1

  • Struktura: 80 rund, konstrukcja Merkle-Damgård, bloki 512-bitowe, wewnętrzny stan 160 bitów (5 rejestrów 32-bit).
  • Rozpowszechnienie: TLS 1.0/1.1 (wycofane), git (obiekty), podpisy cyfrowe, podpisywanie kodu, certyfikaty X.509, GPG (starsze ekosystemy).
  • Ataki teoretyczne: 2005 (Wang, 2^69 do kolizji), atak na drugi preobraz 2005 (Kelsey i Schneier, Eurocrypt 2005: ~2^106 zamiast 2^160, ale dla bardzo długich wiadomości rzędu 2^60 bajtów, więc niepraktyczny), praktyczna kolizja 2017 (SHAttered).
  • Współcześnie wycofywany; NIST zezwala tylko do zastosowań legacy.
SHA-1 (ang. Secure Hash Algorithm 1): Jest to 160-bitowa funkcja NIST z 1995 roku oparta na osiemdziesięciu rundach i konstrukcji Merkle-Damgarda. Powstała jako poprawka SHA-0 i przez lata zabezpieczała TLS, podpisy i system Git. Z powodu postępującej kryptoanalizy została formalnie wycofana ze wszystkich zastosowań kryptograficznych.
Algorytm SHA-1 – 160-bitowy stan, 80 rund i specyfikacja FIPS 180-1 Architektura Secure Hash Algorithm 1 (SHA-1, FIPS 180-1) A (32b) B (32b) C (32b) D (32b) E (32b) • Rozmiar wyjściowego skrótu: 160 bitów (20 bajtów = 40 znaków hex) • Blok wejściowy: 512 bitów (16 słów 32-bit rozszerzanych do 80 słów) • Liczba rund: 80 rund w 4 fazach z różnymi funkcjami logicznymi • Status: OFICJALNIE ZDEPRECJONOWANY (od 2011/2017) SHA-1 wprowadził 160-bitowy skrót, ale jego odporność została przełamana w projekcie SHAttered
Schemat slajdu 39 – SHA-1 - przegląd
40/55
Atak SHAttered (2017)
Cel slajdu: Slajd opisuje atak SHAttered z 2017 roku jako pierwszą praktyczną kolizję SHA-1.

Pierwsza praktyczna kolizja SHA-1

  • Złożoność: ok. 2^63 operacji (vs 2^80 paradoks urodzin) - wymagało ok. 110 GPU-letów (przeliczenie mocy obliczeniowej 6 500 lat CPU).
  • Efekt: możliwość podstawienia dokumentu o tym samym skrócie - wykorzystanie w podpisach (podpis nad dokumentem A = podpis nad dokumentem B).
  • Znaczenie dla ataków: praktyczne kolizje SHA-1 ułatwiają ataki na podpisy dokumentów i certyfikatów; w starszych TLS osłabiały je także kolizje transkryptu handshake (klasa SLOTH, 2015 - kolizje z wybranym prefiksem MD5/SHA-1 w TLS/IKE/SSH) - POODLE (2014) to zaś osobny atak: oracle paddingowy na SSL 3.0, niezwiązany ze słabością SHA-1 (słabości SHA-1 i RC4 to oddzielne problemy starszych TLS).
  • Wycofanie SHA-1: NIST zakazał stosowania SHA-1 do podpisów, przeglądarki przestały akceptować certyfikaty SHA-1, TLS 1.2/1.3 bez SHA-1, ale np. obiekty git nadal go używają.
SHAttered (ang. SHAttered attack): Jest to pierwsza praktyczna kolizja SHA-1 ogłoszona w 2017 roku przez Google i CWI Amsterdam na przykładzie dwóch różnych plików PDF. Obniżyła złożoność ataku z 2 do 80 do około 2 do 63 operacji kosztem około stu dziesięciu lat pracy GPU. Dowiodła konieczności migracji do SHA-2 i SHA-3 oraz wycofania SHA-1 z przeglądarek i podpisów.
Projekt SHAttered (2017) – Praktyczna kolizja dwóch plików PDF w SHA-1 DOKUMENT A Niebieskie tło Treść umowy 1 plik_1.pdf Identyczny SHA-1 ! 38762cf7f55934b34d 179ae6a4c80cadccbb 7f0a KOLIZJA WYKRYTA (2017) DOKUMENT B Czerwone tło Treść umowy 2 plik_2.pdf Projekt SHAttered (CWI & Google, 2017) ostatecznie pogrzebał bezpieczeństwo SHA-1
Schemat slajdu 40 – Atak SHAttered (2017)
41/55
Rodzina SHA-2
Cel slajdu: Slajd przedstawia rodzinę SHA-2 z wariantami długości i konstrukcją Merkle-Damgårda.

SHA-224, SHA-256, SHA-384, SHA-512

  • Struktura: Merkle-Damgård z funkcją kompresji SC (SHA-256: 64 rundy, słowa 32-bitowe; SHA-512: 80 rund, słowa 64-bitowe). SHA-224/384 = warianty z innymi IV.
  • Zastosowania: TLS 1.2/1.3 (PRF, podpisy), blockchain (SHA-256 w Bitcoin), podpisy, certyfikaty, git (SHA-256), weryfikacja pobrania.
  • Brak praktycznych ataków - kolizje do 2^128 dla SHA-256 (poziom celu); analizy teoretyczne tylko dla zredukowanych rund.
  • Dla bezpieczeństwa na poziomie 128 bitów zalecany jest co najmniej skrót 256-bitowy (NIST SP 800-57 Part 1 Rev. 5); 384-bitowy dla 192-bitowego bezpieczeństwa, 512-bitowy dla 256-bitowego.
SHA-2 (ang. Secure Hash Algorithm 2): Jest to rodzina funkcji NIST z wariantami SHA-224, SHA-256, SHA-384 i SHA-512 o różnej długości wyjścia i liczbie rund. Wykorzystuje konstrukcję Merkle-Damgarda ze słowami 32-bitowymi dla SHA-256 i 64-bitowymi dla SHA-512. Mimo pokrewieństwa z SHA-1 pozostaje bezpieczna i stanowi obecny standard integralności i podpisów.
Rodzina SHA-2 – Gałęzie 32-bitowa (SHA-256) oraz 64-bitowa (SHA-512) Gałąź 32-bit (SHA-256) • Słowa robocze: 32 bity • Liczba rund: 64 rundy • Blok wejściowy: 512 bitów • Stan: 8 rejestrów (A..H) po 32b SHA-256: Wyjście 256 bitów Najpopularniejszy hash na świecie Gałąź 64-bit (SHA-512) • Słowa robocze: 64 bity • Liczba rund: 80 rund • Blok wejściowy: 1024 bity • Stan: 8 rejestrów (A..H) po 64b SHA-512: Wyjście 512 bitów Zoptymalizowany pod procesory 64-bit Rodzina SHA-2 to współczesny standard kryptograficzny, bezpieczny i rekomendowany przez NIST
Schemat slajdu 41 – Rodzina SHA-2
42/55
SHA-3 (Keccak)
Cel slajdu: Slajd wprowadza SHA-3 oparty na funkcji Keccak wyłonionej w konkursie NIST.

Zwycięzca konkursu NIST (2012)

  • Konkurs NIST na nową rodzinę skrótów ogłoszony w 2007 po atakach na MD5/SHA-1; 51 kandydatów. Zwycięzca (październik 2012): Keccak (Bertoni, Daemen, Peeters, Van Assche).
  • Struktura sponge (gąbka) - konstrukcja zasadniczo inna niż Merkle-Damgård (MD5, SHA-1, SHA-2): wiadomość jest absorbowana do wewnętrznego stanu przetwarzanego jedną permutacją, a wynik jest z niego wyciskany; nie ma tu oddzielnej funkcji kompresji w stylu Merkle-Damgårda.
  • Funkcje: absorb (krok absorpcji danych) i squeeze (krok wyciskający wyniki) na permutacji Keccak-f[1600].
  • Warianty długości wyjścia: SHA3-224, SHA3-256, SHA3-384, SHA3-512 oraz SHAKE128/256 (XOF - zmienna długość).
  • Wykorzystywany w post-kwantowych schematach (SHAKE/Keccak w ML-DSA/Dilithium i ML-KEM/Kyber, warianty SHAKE w SLH-DSA/SPHINCS+) oraz w TLS do podpisów.
SHA-3 (ang. Secure Hash Algorithm 3): Jest to standard oparty na funkcji Keccak zwycięskiej w konkursie NIST z 2012 roku autorstwa Bertoniego, Daemena, Peetersa i Van Assche. W przeciwieństwie do poprzedników używa konstrukcji gąbki, a nie Merkle-Damgarda, co daje niezależność od wcześniejszych ataków. Oferuje warianty o różnej pojemności i funkcje o rozszerzalnym wyjściu SHAKE.
Standard SHA-3 – Finał konkursu NIST i zwycięstwo konstrukcji Keccak Konkurs NIST na SHA-3 (2007 – 2012) Cel: alternatywa o architekturze innej niż Merkle-Damgård (odporność na ataki wspólne) Zwycięzca: Keccak 🏆 • Autorzy: Bertoni, Daemen, Peeters, Van Assche (Belgia/Włochy) • Konstrukcja gąbki (Sponge) • Stan 1600 bitów (5×5×64) • FIPS 202 (2015 rok) Finaliści konkursu SHA-3 • BLAKE (Aumasson) - świetny software • Grøstl (Knudsen) - oparty o AES • JH (Wu) - struktura Feistela • Skein (Schneier) - szyfr Threefish Wszyscy finaliści byli znakomitymi algorytmami Keccak zwyciężył w konkursie NIST dzięki unikalnej architekturze gąbki i elastyczności
Schemat slajdu 42 – SHA-3 (Keccak)
43/55
Konstrukcja sponge w SHA-3
Cel slajdu: Slajd wyjaśnia konstrukcję gąbki w SHA-3 z fazami wchłaniania i wyżymania.

Absorb, permutacja, squeeze

  • Absorpcja: XOR danych (blok po bloku r) ze stanem + permutacja po każdym bloku.
  • Permutacja Keccak-f: 24 rundy na 1600-bitowym stanie (słowa 64-bitowe), operacje: rotacja, XOR, Chi (nieliniowa), Iota (stałe rundowe).
  • Squeezing: po wchłonięciu odczytujemy r bitów i powtarzamy permutację dla dalszych fragmentów (dzięki temu XOF).
  • Elastyczność: długość wyjścia może być dowolna; bezpieczeństwo zależne od c (capacity).
Gąbka SHA-3 (ang. sponge construction): Przetwarza dane w dwóch fazach wchłaniania i wyżymania na stanie złożonym z szybkości rate i pojemności capacity. Bloki wejściowe są XORowane ze stanem i przepuszczane przez permutację Keccak-f, a wynik odczytywany jest porcjami rate. Bezpieczeństwo zależy od pojemności, której nie ujawnia się na zewnątrz konstrukcji.
Konstrukcja gąbki (Sponge) – Absorpcja, permutacja Keccak-f i wyciskanie Przepustowość (Rate r: np. 1088b) Pojemność (Capacity c: 512b) 1. Faza Absorpcji • Blok danych P_i XORowany z częścią r • Capacity 'c' nietknięte (chroni przed atakami!) 2. Permutacja f • Keccak-f[1600] • 24 rundy • Krok: θ, ρ, π, χ, ι Brak klucza i S-boxów 3. Faza Wyciskania • Odczyt porcji z r • Kolejna permutacja f → Skrót SHA3-256 lub funkcje XOF (SHAKE) Konstrukcja gąbki separuje wejście/wyjście (rate r) od marginesu bezpieczeństwa (capacity c)
Schemat slajdu 43 – Konstrukcja sponge w SHA-3
44/55
HMAC - uwierzytelnianie wiadomości
Cel slajdu: Slajd przedstawia HMAC jako sposób uwierzytelniania wiadomości kluczem z funkcją skrótu.

Hash-based Message Authentication Code

  • Klucz + wiadomość -> hash: dwukrotne hashowanie z wewnętrznym (ipad) i zewnętrznym (opad) pad. Klucz K' = K lub H(K) (gdy dłuższy niż blok).
  • HMAC-SHA256 jako standard (RFC 4868, TLS PRF).
  • Zastosowania: uwierzytelnianie API (tokeny), sesje web (cookies), kody OTP (TOTP/HOTP), przelewy, MAC w trybie Encrypt-then-MAC.
  • Bezpieczeństwo HMAC: odporność oparta na trudności wybrania MAC dla nieznanego klucza; wymaga bezpiecznej funkcji skrótu (SHA-256/384). Atak length-extension na SHA-2 niwelowany konstrukcją (dwukrotne hashowanie).
$ printf 'wiadomosc' | openssl dgst -sha256 -hmac 'tajny-klucz'
(stdin)= 832a08059ffd5c7d5d9af67f447af1fa4525f9fa785f3d004c218ff839b9f6d1
# postać etykiety zależy od wersji OpenSSL: 1.1.x -> (stdin)=, 3.x -> np. SHA2-256(stdin)= lub HMAC-SHA2-256(stdin)=
HMAC (ang. Hash-based Message Authentication Code): Jest to konstrukcja kodu uwierzytelniającego łącząca klucz z funkcją skrótu poprzez podwójne hashowanie z dopełnieniami ipad i opad. Zapewnia integralność i autentyczność wiadomości bez szyfrowania, a weryfikacja polega na porównaniu tagów. Pozwala bezpiecznie używać nawet słabszych funkcji skrótu, choć zaleca się SHA-2 lub SHA-3.
Konstrukcja HMAC – Dwustopniowe haszowanie ze stałymi ipad i opad (RFC 2104) HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)) ipad = 0x3636...36, opad = 0x5c5c...5c (stałe maski wypełniające blok b-bitowy) 1. Hash Wewnętrzny (Inner Hash) • Klucz K XORowany ze stałą ipad (0x36) • Dopisanie treści wiadomości M • Obliczenie skrótu: H(K_in || M) Wynik: Pośredni skrót H_in 2. Hash Zewnętrzny (Outer Hash) • Klucz K XORowany z opad (0x5C) • Dopisanie pośredniego skrótu H_in • Obliczenie ostatecznego skrótu H Wynik: Kod HMAC (Tag) Konstrukcja dwukrotnego haszowania w HMAC uodparnia na ataki przedłużenia (Length Extension)
Schemat slajdu 44 – HMAC - uwierzytelnianie wiadomości
45/55
Porównanie funkcji skrótu
Cel slajdu: Slajd porównuje funkcje skrótu pod względem długości, bezpieczeństwa i zalecanych zastosowań.

MD5, SHA-1, SHA-256, SHA-512, SHA3-256

FunkcjaWyjścieBezpieczeństwo kolizjiStatus
MD5128 b2^32 do 2^64 (teoria); praktycznie 2^18-2^20 (krótkie prefiksy, 2019) oraz sekundy dla znanych celówZAKAZ (nie używać)
SHA-1160 b2^61-2^63 (SHAttered 2017); obecnie szacunki rzędu 2^30 do wyliczenia kolizji metodą wspólnych prefiksówwycofana
SHA-256256 b2^128zalecana
SHA-512512 b2^256zalecana
SHA3-256256 b2^128zalecana (sponge)

Wytyczne NIST: co najmniej 256 bitów (SHA-2/SHA-3); MD5 i SHA-1 wykluczone z nowych systemów; SHA-1 dozwolone wyłącznie w legacy (np. weryfikacja starych).

Porównanie skrótów (ang. hash comparison): Zestawia długość wyjścia, poziom odporności na kolizje i aktualny status MD5, SHA-1, SHA-256, SHA-512 i SHA3-256. Wskazuje MD5 i SHA-1 jako złamane i zakazane, a SHA-2 i SHA-3 jako rekomendowane do nowych systemów. Ułatwia decyzję o migracji i wyborze parametrów bezpieczeństwa.
Porównanie funkcji skrótu – Tabela bezpieczeństwa, długości i statusu w IT Funkcja Długość Blok Odporność kolizji Status w IT MD5 128 b 512 b 2³⁹ (złamanie < 1s) KATEGORYCZNY ZAKAZ SHA-1 160 b 512 b 2⁶³ (SHAttered) WYCOFANY (DEPRECATED) SHA-256 256 b 512 b 2¹²⁸ (pełna) ZALECANY STANDARD SHA-512 512 b 1024 b 2²⁵⁶ (pełna) ZALECANY (64-bit CPU) SHA3-256 256 b 1088 b (r) 2¹²⁸ (Gąbka) NOWOCZESNY STANDARD Podsumowanie: SHA-2 oraz SHA-3 gwarantują pełne bezpieczeństwo kryptograficzne w systemach IT
Schemat slajdu 45 – Porównanie funkcji skrótu
46/55
Funkcje skrótu w praktyce - użycie właściwe
Cel slajdu: Slajd pokazuje właściwe użycie funkcji skrótu: weryfikacja integralności zamiast szyfrowania.

Cztery kluczowe zastosowania

  • Przechowywanie haseł (password hashing): hasła hashowane unikalną solą i powolnymi funkcjami: bcrypt, scrypt, Argon2 - patrz slajd 47.
  • Weryfikacja integralności plików: porównanie skrótu pliku przesłanego vs znany (np. sha256sum dla obrazów ISO).
  • Podpisy cyfrowe i certyfikaty: podpisuje się skrót wiadomości (potem kluczem prywatnym) - szybkość i weryfikowalność.
  • Blockchain i systemy rozproszone: hashowanie bloków (SHA-256 w Bitcoin; PoW), drzewo Merkle w Ethereum, deduplikacja danych.
$ echo 'Kryptografia i bezpieczna wymiana informacji' | sha256sum
b199b3924ce9f1b626c8ffe108bcf725fba7ec62095a6667c1d0164f0b9a2e53  -
$ wget -O plik.iso https://example.com/distro.iso   # przykład - liczy się porównanie skrótu
$ sha256sum plik.iso   # porównaj z oficjalnym skrótem
Zastosowania skrótów (ang. hash applications): Obejmują przechowywanie haseł z solą i funkcjami powolnymi, weryfikację integralności plików przez porównanie digestów oraz budowę podpisów cyfrowych i łańcuchów zaufania. Właściwe użycie polega na integralności i identyfikacji, nigdy na odwracalnym szyfrowaniu. Dobór funkcji zależy od modelu zagrożeń i wymagań wydajnościowych.
Zastosowania funkcji skrótu – Hasła, integralność, podpisy cyfrowe i drzewa Merkle 1 Przechowywanie haseł • Serwer nigdy nie zna hasła jawnego • Zapis: Sól + KDF(Hasło) Standardy: Argon2id, bcrypt 2 Weryfikacja integralności • Sprawdzanie pobranych plików i ISO • Polecenie: sha256sum plik.iso Wykrywa błędy sieci i manipulacje 3 Podpisy cyfrowe • Podpisywanie skrótu zamiast pliku • RSA-PSS, ECDSA z SHA-256 Szybkość i niezaprzeczalność 4 Struktury danych (Merkle) • System kontroli wersji Git (commit ID) • Łańcuchy bloków i kryptowaluty Drzewa Merkle Tree i łańcuchy hashy Funkcje skrótu stanowią fundament integralności, autentykacji i nowoczesnych struktur danych
Schemat slajdu 46 – Funkcje skrótu w praktyce - użycie właściwe
47/55
Słabe hasło vs sól i iteracje
Cel slajdu: Slajd wyjaśnia, dlaczego słabe hasła wymagają soli i iteracji w funkcjach typu bcrypt i Argon2.

Problem prostych hashów haseł

  • Problemy prostych hashów: MD5/SHA-x są zbyt szybkie - atak offline przeszukuje miliardy haseł/sekundę (hasła słownikowe pękają w sekundy); bez soli identyczne hasła dają identyczne hashy (ataki tęczowe).
  • Sól (salt): losowy, unikalny ciąg (np. 16 bajtów) dodawany do hasła przed hashowaniem; każdy użytkownik ma inną sól -> te same hasła mają różne hashy, tęczowe tabele bezradne.
  • Iteracje / powolne funkcje: wielokrotne hashowanie (PBKDF2), koszt pamięci (scrypt, Argon2) - spowalniają atak siłowy bez zakłócania pracy użytkownika.
  • Porównanie czasu: hasło SHA-256 - mikrosekundy; Argon2/bcrypt - milisekundy na próbę (spowolnienie dziesiątki tysięcy razy).
$ htpasswd -nbB user haslo     # bcrypt + sól
user:$2y$05$h6hXZBuSEQl1QKffHZMvOux8g.o3L/xsLwuttMkKYSgOm/9ntBKI.  ( $2y = bcrypt, 05 = koszt, sól zakodowana w polu; w produkcji koszt co najmniej 10-12)
$ python3 -c "
import hashlib, os
s = os.urandom(16)  # sól - unikalna dla każdego użytkownika
print(hashlib.pbkdf2_hmac('sha256', b'haslo', s, 600000, 32).hex())
"   # PBKDF2 (hasło, sól, iteracje); uwaga: moduł 'crypt' jest przestarzały - usunięty w Pythonie 3.13
Sól i iteracje (ang. salt and iterations): Są to mechanizmy obrony haseł przed atakami słownikowymi, tęczowymi i przeszukiwaniem offline. Losowa unikalna sól różnicuje skróty tych samych haseł, a wielokrotne iteracje lub funkcje pamięciowo-trudne takie jak bcrypt, scrypt i Argon2 spowalniają atakującego. Szybkie skróty MD5 i SHA nadają się do plików, lecz nie do bezpośredniego hashowania haseł.
Haszowanie haseł – Zagrożenia prostych skrótów, rola soli i standard Argon2id ZŁA PRAKTYKA: SHA-256(hasło) • Zbyt szybki algorytm: GPU: miliardy hashy na sekundę! • Tablice tęczowe (Rainbow Tables): Błyskawiczne odwrócenie prostych hashy • Identyczne hasła dają ten sam hash: Ujawnia użytkowników o tym samym haśle KATEGORYCZNIE NIEBEZPIECZNE STANDARD: Sól + Argon2id • Losowa sól (Salt) 16 bajtów: Unikalna dla każdego użytkownika (niweluje tablice tęczowe) • Celowo powolne KDF: Pamięciożerność (Memory-Hardness) Paraliżuje farmy GPU i układy ASIC Argon2id / scrypt / bcrypt Zalecenia OWASP i NIST Sól unieważnia tablice tęczowe, a pamięciożerne KDF uniemożliwiają masowy brute-force na GPU
Schemat slajdu 47 – Słabe hasło vs sól i iteracje
48/55
Zastosowania praktyczne - szyfrowanie danych
Cel slajdu: Slajd przedstawia praktyczne zastosowania: szyfrowanie dysków, HTTPS i bankowość.

Pliki, dyski, bazy, komunikacja

  • Szyfrowanie plików: openssl enc (tryby CBC/CTR - nie obsługuje trybów AEAD), 7z (AES-256), VeraCrypt, gpg symetrycznie; tryby AEAD (AES-GCM, ChaCha20-Poly1305) stosujesz w TLS i w bibliotekach kryptograficznych (np. cryptography, PyCryptodome).
  • Szyfrowanie dysków (full-disk encryption): dm-crypt/LUKS (Linux), BitLocker (Windows, AES-XTS), FileVault (macOS) - szyfrują całe dyski i partycje (warstwa przed dostępem fizycznym).
  • Szyfrowanie baz danych: TDE w SQL Server (i MySQL Enterprise) szyfruje pliki danych w spoczynku, ale nie chroni transmisji ani buforów w pamięci. Kryptografia na poziomie kolumn/klucza danych chroni tylko wybrane pola. Przed zaszyfrowaniem kopii bezpieczeństwa potrzebny jest backup klucza, zarządzany osobno.
  • Komunikacja: TLS 1.3 (AES-GCM / ChaCha20-Poly1305), VPN (IPsec/IKE, WireGuard), WiFi WPA2/WPA3 (AES-CCMP/GCMP).
Zastosowania praktyczne (ang. practical applications): Obejmują szyfrowanie plików narzędziami openssl, 7z, VeraCrypt i GPG, szyfrowanie całych dysków oraz ochronę komunikacji w TLS, VPN i sieciach bezprzewodowych. W nowoczesnych wdrożeniach preferowane są tryby AEAD takie jak AES-GCM i ChaCha20-Poly1305 wraz z bibliotekami cryptography i PyCryptodome. Kluczowe jest także bezpieczne zarządzanie kluczami i kopiami zapasowymi.
Wdrożenia IT – Szyfrowanie plików, dysków LUKS/BitLocker, baz i sieci TLS 1. Pliki • OpenSSL enc • Archiwa 7-Zip (AES-256) • GPG symetrycznie • Kontenery VeraCrypt Pojedyncze dane 2. Dyski (FDE) • Linux: LUKS (dm-crypt) • Windows: BitLocker (XTS) • macOS: FileVault Ochrona kradzieży 3. Bazy danych • TDE (Transparent Data Encryption) • Szyfrowanie tabel i kolumn (Postgres, Oracle, SQL Server) Data-at-Rest 4. Sieci • TLS 1.3 (HTTPS) AES-GCM / ChaCha • VPN (WireGuard, IPsec, OpenVPN) • SSH (ChaCha20) Data-in-Transit Szyfrowanie symetryczne chroni dane w spoczynku (pliki, dyski, bazy) i w transmisji (sieci)
Schemat slajdu 48 – Zastosowania praktyczne - szyfrowanie danych
49/55
Studium przypadku - szyfrowanie pliku
Cel slajdu: Slajd pokazuje studium szyfrowania pliku od wyboru algorytmu po weryfikację integralności.

OpenSSL - szyfrowanie pliku krok po kroku (weryfikowane)

  1. Wybór algorytmu i trybu: AES-256-CBC z PBKDF2 (lub AES-256-GCM) - standardowe.
  2. Polecenie: openssl enc -aes-256-cbc -pbkdf2 -salt -in plik -out plik.enc -kfile klucz.txt - w praktyce używaj pliku klucza lub menedżera sekretów, a nie hasła w wierszu poleceń (parametr -pass ujawnia je w historii powłoki i na liście procesów)
  3. Wynik: otrzymujesz szyfrogram; opcjonalnie -p pokazuje sól, klucz i IV (do zapamiętania).
  4. Odszyfrowanie: openssl enc -d -aes-256-cbc -pbkdf2 -in plik.enc -out plik -pass pass:haslo
$ echo -n "Tajna wiadomosc testowa" > jawny.txt
$ openssl enc -aes-256-cbc -pbkdf2 -salt -S F56FFD13A48CFD87 -in jawny.txt -out szyfr.bin -pass pass:tajnehaslo -p
salt=F56FFD13A48CFD87
key=A8A2289FF3CB49CEE9E40EB415AB8972376BEF3310E96BAF768E27CE262253F8
iv =972A667E74A002336E7D465153F0C6F1
$ openssl enc -d -aes-256-cbc -pbkdf2 -in szyfr.bin -pass pass:tajnehaslo
Tajna wiadomosc testowa
Uwagi praktyczne: hasło steruje kluczem (PBKDF2 z solą); nie zgub klucza/hasła! Rozważ menedżer haseł i bezpieczne kopie klucza; do produkcji rozważ tryb AEAD (AES-GCM), dostępny w bibliotekach kryptograficznych - openssl enc trybów AEAD nie obsługuje.
Studium szyfrowania pliku (ang. file encryption case study): Przedstawia krok po kroku wybór AES-256-CBC z PBKDF2 lub AES-256-GCM oraz szyfrowanie poleceniem openssl enc z solą i plikiem klucza. Obejmuje weryfikację integralności przez porównanie skrótów SHA-256 przed i po operacji. Pokazuje pełny cykl od decyzji projektowej po praktyczną kontrolę poprawności.
Praktyka OpenSSL – Procedura szyfrowania pliku z PBKDF2 i weryfikacja sha256 bash — openssl cli # 1. Bezpieczne szyfrowanie pliku z PBKDF2 i solą openssl enc -aes-256-cbc -pbkdf2 -salt -in dane.txt -out dane.enc -pass pass:TajneHaslo123! # 2. Deszyfrowanie pliku do postaci jawnej openssl enc -d -aes-256-cbc -pbkdf2 -in dane.enc -out odtworzone.txt -pass pass:TajneHaslo123! # 3. Weryfikacja integralności sha256sum sha256sum dane.txt odtworzone.txt # Identyczne skróty! Praktyka OpenSSL: zawsze wymuszaj opcję -pbkdf2 dla bezpiecznego wyprowadzenia klucza z hasła
Schemat slajdu 49 – Studium przypadku - szyfrowanie pliku
50/55
Ćwiczenie praktyczne - DES w praktyce
Cel slajdu: Slajd proponuje ćwiczenie praktyczne z DES ilustrujące działanie sieci Feistela.

DES - sprawdź, jak szybko go złamać

  1. Narzędzia: OpenSSL (openssl enc -des-ecb / -des-cbc) i Python z biblioteką pycryptodome (Crypto.Cipher.DES).
  2. Szyfrowanie i deszyfrowanie kluczem: des-ecb wymaga 8-bajtowego klucza; po podaniu klucza (-K) szyfrogram nie zawiera nagłówka "Salted__" (nagłówek powstaje tylko przy wyprowadzaniu klucza z hasła, dlatego przykład używa -nosalt).
  3. Analiza czasu operacji: wykonaj np. 10^6 szyfrowań w pętli; porównaj z AES (aes-128-ecb) - na procesorach z AES-NI różnica jest ogromna (AES wielokrotnie szybszy); bez akceleracji sprzętowej wynik zależy od platformy i trybu, a 3DES pozostaje zwykle wolniejszy od AES; pomiar zależy od procesora, dlatego podaj własny wynik polecenia openssl speed zamiast stałego współczynnika.
  4. Wnioski dot. bezpieczeństwa: klucz 56 bitów => w praktyce przeszukanie siłowe możliwe; nigdy nie używaj DES do danych produkcyjnych.
$ printf 'KRYPTOLOGIA' | openssl enc -des-ecb -K 0123456789ABCDEF -nosalt | xxd
00000000: e455 c13c f74a b5d1 b2a7 7cf5 ed4a bed0  .U.<.J......J..
# OpenSSL 3.x: dodaj -provider legacy -provider default (DES nie jest w domyślnym providerze)
$ pip install --user pycryptodome   # jeśli biblioteka nie jest zainstalowana
$ python3 -c "
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad   # PyCryptodome NIE dopełnia danych samodzielnie
c = DES.new(bytes.fromhex('0123456789ABCDEF'), DES.MODE_ECB)
print(c.encrypt(pad(b'KRYPTOLOGIA', 8)).hex())  # 11 B danych -> 16 B z paddingiem"
Ćwiczenie DES (ang. DES exercise): Polega na praktycznym szyfrowaniu i odszyfrowywaniu w OpenSSL oraz w Pythonie z biblioteką pycryptodome w celu zilustrowania sieci Feistela. Używa ośmiobajtowego klucza i trybów ECB oraz CBC, zwracając uwagę na nagłówek solny i parametry wywołania. Demonstruje prostotę implementacji oraz historyczną słabość krótkiego klucza.
Złożoność obliczeniowa – Skrajny kontrast między 56-bitowym DES a AES-128 DES (Klucz 56 bitów) • Przestrzeń: 2⁵⁶ ≈ 7,2 × 10¹⁶ • Czas złamania (GPU/FPGA): < 1 DOBA (lub minuty) • Koszt ataku w chmurze: Ok. 20–50 USD (Crack.sh) ZŁAMANY I PRZESTARZAŁY AES (Klucz 128 bitów) • Przestrzeń: 2¹²⁸ ≈ 3,4 × 10³⁸ • Czas złamania superkomputerem: > WIEK WSZECHŚWIATA • Zużycie energii: Wymaga energii gwiazdy! BEZPIECZNY W OBECNYCH WARUNKACH Różnica między 56 a 128 bitami to przepaść od kilkunastu godzin do miliardów lat obliczeń
Schemat slajdu 50 – Ćwiczenie praktyczne - DES w praktyce
51/55
Podsumowanie części 3 - najważniejsze zagadnienia
Cel slajdu: Slajd podsumowuje część trzecią, utrwalając DES, AES, tryby pracy i funkcje skrótu.

Co wynosisz z części 3

  • DES/3DES (przestarzałe): 56-bitowy klucz, dzisiaj złamany; 3DES wycofany przez NIST ze stosowania (koniec 2023, SP 800-131A Rev. 2; ryzyko Sweet32 i zbyt mały margines bezpieczeństwa).
  • AES (standard): blok 128 bitów, klucze 128/192/256, struktura SPN (SubBytes, ShiftRows, MixColumns, AddRoundKey), bez praktycznych ataków.
  • ChaCha20 (nowoczesny): szyfr strumieniowy, 20 rund, świetna wydajność bez AES-NI; z Poly1305 - AEAD.
  • Tryby pracy: ECB (zła), CBC (łańcuch + IV), CTR (licznik, równoległy), GCM (AEAD - standard), dobierany zależnie od potrzeb.
  • Funkcje skrótu: MD5 i SHA-1 złamane (kolizje); SHA-2/SHA-3 zalecane (min. 256 bitów); HMAC - MAC z kluczem.
  • Hasła: sól + powolne funkcje (bcrypt, scrypt, Argon2), nigdy prosty hash.
Podsumowanie (ang. summary): Utrwala, że DES i 3DES są przestarzałe i wycofane, AES z blokiem 128-bitowym jest obowiązującym standardem, a tryby ECB nie wolno stosować. Podkreśla przewagę trybów uwierzytelnionych GCM i ChaCha20-Poly1305 oraz zakaz używania MD5 i SHA-1 do celów kryptograficznych. Wskazuje SHA-2, SHA-3 i HMAC jako podstawę integralności.
Wnioski części 3 – Standardy rekomendowane oraz algorytmy wycofane z IT Kluczowe wnioski i wiedza operacyjna z części 3 ✓ Złoty standard szyfrów blokowych: AES-GCM (128 / 256 bitów) ✓ Złoty standard szyfrów strumieniowych: ChaCha20-Poly1305 (RFC 8439) ✓ Złoty standard integralności i haszowania: SHA-256, SHA-512, SHA-3 oraz HMAC ✗ Kategoryczny zakaz w nowych systemach: DES, 3DES, RC4, MD5, SHA-1, tryb ECB Część 3 definiuje współczesne standardy symetryczne stosowane w bankowości i TLS
Schemat slajdu 51 – Podsumowanie części 3 - najważniejsze zagadnienia
52/55
Słownik pojęć - części 3
Cel slajdu: Slajd systematyzuje słownik pojęć części trzeciej od S-boksu po AEAD.

Najważniejsze pojęcia

AES
Advanced Encryption Standard - szyfr blokowy SPN, blok 128 b, klucz 128/192/256.
DES / 3DES
przestarzałe szyfry blokowe (Feistel, blok 64b); 3DES wycofany 2023.
ChaCha20
szyfr strumieniowy Bernsteina (2008), 20 rund, używany w TLS/WireGuard.
RC4
przestarzały szyfr strumieniowy (WEP/SSL); bias i ataki -> wycofany.
ECB / CBC / CTR / GCM
tryby pracy szyfrów blokowych; GCM = AEAD.
AEAD
Authenticated Encryption with Associated Data - szyfrowanie z uwierzytelnianiem.
Hash, digest
skrót - deterministyczny wynik funkcji skrótu o stałej długości.
HMAC
MAC oparty na haszu z kluczem (RFC 2104).
Collision
kolizja - dwie różne wiadomości o tym samym skrócie.
Preimage
odwrotny obraz - znalezienie danych po skrócie (jednokierunkowość).
Sól (salt)
losowy unikalny ciąg dodawany do hasła przed hashowaniem.
PBKDF2 / bcrypt / scrypt / Argon2
powolne funkcje hashowania haseł.
Słownik (ang. glossary): Systematyzuje kluczowe terminy części trzeciej takie jak AES, DES i 3DES, ChaCha20, RC4, funkcje SHA, HMAC i AEAD. Porządkuje skróty, parametry i status bezpieczeństwa każdego pojęcia w jednym miejscu. Ułatwia szybką powtórkę przed egzaminem i w pracy inżynierskiej.
Słownik pojęć części 3 – Repetytorium najważniejszych terminów symetrycznych AES (Rijndael) Szyfr blokowy SPN; blok 128 bitów, klucze 128/192/256 b GCM (AEAD) Połączenie CTR z GHASH; jednoczesna poufność oraz autentyczność ChaCha20 Szyfr strumieniowy ARX; klucz 256b, brak tabel, odporny na cache timing Konstrukcja Sponge Model gąbki w SHA-3; fazy absorb i squeeze z permutacją Keccak-f HMAC Kod autentyczności z dwukrotnym hashem i maskami ipad/opad KDF / Sól Wyprowadzanie kluczy z haseł (Argon2id); sól niweluje rainbow tables Słownik pojęć stanowi zwięzłe repetytorium terminologii kryptografii symetrycznej
Schemat slajdu 52 – Słownik pojęć - części 3
53/55
Pytania kontrolne - część 3
Cel slajdu: Slajd sprawdza zrozumienie kryptografii symetrycznej poprzez pytania o AES i haszowanie.

Sprawdź zrozumienie

  1. Wymień parametry AES-128 (blok, klucz, rundy) i opisz jedną operację rundy (np. SubBytes).
  2. Dlaczego ECB jest niebezpieczny? Podaj przykład struktury danych, która "prześwieci" w trybie ECB.
  3. Do czego służy IV w CBC i CTR? Co się stanie przy powtórzeniu nonce w trybie GCM/CTR?
  4. Wyjaśnij, na czym polega różnica między odpornością na kolizje a odpornością na pierwszy obraz (preimage).
  5. Jaka funkcja skrótu jest zalecana: MD5, SHA-1, SHA-256 czy SHA-3? Uzasadnij.
  6. Do czego służy sól i iteracje w przechowywaniu haseł?
  7. Wymień dwa tryby AEAD i jedno zastosowanie każdego z nich.
Zadanie domowe (podsumowujące): zaszyfruj i odszyfruj plik narzędziem OpenSSL (AES-256-CBC z -pbkdf2), policz skrót SHA-256 i SHA3-256, porównaj ich długość (oba mają 256 bitów, czyli 64 znaki szesnastkowe), a następnie porównaj właściwości obu rodzin: SHA-2 opiera się na konstrukcji Merklego-Damgårda, a SHA-3 na gąbce Keccak. Sprawdź też, czy wynik zależy od długości wejścia.
Pytania kontrolne (ang. review questions): Sprawdzają zrozumienie parametrów AES-128, niebezpieczeństw ECB, roli IV w CBC i CTR oraz skutków powtórzenia nonce w GCM. Dotyczą także różnic między MD5, SHA-1 i SHA-2 oraz zasad HMAC i przechowywania haseł. Służą do samodzielnej weryfikacji opanowania materiału przed zadaniem domowym.
Sprawdź zrozumienie – Karta pytań kontrolnych z kryptografii symetrycznej Q1 Parametry AES Jaki jest rozmiar bloku danych dla AES-256? Odp: DOKŁADNIE 128 bitów (nie 256!) Q2 Zagrożenie trybu ECB Dlaczego tryb ECB ujawnia wzorzec obrazu Tuxa? Odp: Identyczne bloki P dają identyczne C Q3 Sól w hasłach Przed jakim atakiem chroni sól, mimo że jest jawna? Odp: Przed tablicami tęczowymi Q4 Zaleta AEAD Dlaczego w TLS 1.3 dopuszcza się wyłącznie tryby AEAD? Odp: Gwarantują integralność i autentyczność Pytania kontrolne sprawdzają praktyczne zrozumienie kluczowych pojęć części 3
Schemat slajdu 53 – Pytania kontrolne - część 3
54/55
Zadanie domowe - część 3
Cel slajdu: Slajd zadaje pracę domową: eksperymenty z trybami pracy i funkcjami skrótu.

Praca samodzielna

  1. Implementacja szyfrowania AES w Pythonie: użyj biblioteki cryptography lub pycryptodome - zaszyfruj i odszyfruj plik (AES-256-GCM z losowym nonce). Krótki kod + wynik (skróty sha256 pliku przed/po = różne).
  2. Analiza podatności MD5 i SHA-1: uruchom przykładową kolizję (użyj narzędzi docs/skryptów np. fastcoll dla MD5 - do celów edukacyjnych; opisz mechanizm).
  3. Sprawdzenie trybów pracy na obrazku (ECB vs CBC): zaszyfruj prosty obrazek (np. logo) narzędziem OpenSSL w trybie ECB i CBC, a następnie zdekoduj pliki szyfrogramu z powrotem do obrazu (np. openssl enc -d -aes-256-ecb -K ... -in obraz.enc -out obraz.png) i porównaj wizualnie - widać kontury w ECB (demonstracja).
  4. Projekt: zadanie samodzielne wykorzystujący biblioteki kryptograficzne (AES-GCM, haszowanie haseł bcrypt) - np. menedżer haseł lub szyfrator plików z GUI.
Zadanie domowe (ang. homework assignment): Polega na samodzielnej implementacji szyfrowania AES-256-GCM w Pythonie oraz analizie podatności MD5 i SHA-1 na przykładzie znanych kolizji. Wymaga zaszyfrowania i odszyfrowania pliku z losowym nonce oraz porównania skrótów SHA-256 wyników. Rozwija umiejętność łączenia teorii z działającym kodem i dokumentacją eksperymentu.
Praca samodzielna – Ćwiczenia implementacyjne AES-GCM i eksperyment z kolizją MD5 Zadanie 1: AES-GCM w Pythonie • Użyj modułu cryptography • Wygeneruj losowy klucz 256b • Zaszyfruj plik z 12-bajtowym nonce • Przetestuj wykrywanie manipulacji (zmiana 1 bajtu szyfrogramu) Weryfikacja: InvalidTag Zadanie 2: Analiza kolizji MD5 • Pobierz lub skompiluj fastcoll • Wygeneruj dwa różne pliki o identycznym skrócie MD5 • Sprawdź ich sumy SHA-256 (upewnij się, że są różne!) Weryfikacja: Kolizja w MD5 Samodzielna implementacja utrwala zasady bezpiecznego korzystania z bibliotek kryptograficznych
Schemat slajdu 54 – Zadanie domowe - część 3
55/55
Literatura i źródła - część 3
Cel slajdu: Slajd porządkuje literaturę i źródła do pogłębienia wiedzy o szyfrach symetrycznych.

Dokumentacja i podręczniki

  • FIPS 197 (NIST) - specyfikacja AES; FIPS 180-4 - SHA-2; FIPS 202 - SHA-3 (Keccak).
  • RFC 8439 - ChaCha20-Poly1305 (poprzednio RFC 7539); RFC 2104/6151 - HMAC; RFC 8017 - RSA (część 4).
  • SP 800-38A (NIST) - tryby pracy szyfrów blokowych (ECB, CBC, CFB, OFB, CTR), SP 800-38D - tryb uwierzytelniony GCM; SP 800-57 - zarządzanie kluczami.
  • W. Stallings - Kryptografia i bezpieczeństwo sieci komputerowych (rozdz. o kryptografii symetrycznej i funkcjach skrótu).
  • C. Paar, J. Pelzl - Understanding Cryptography (AES, tryby, hash - ćwiczenia z Pythonem).
  • Podręczniki wykorzystywane w opracowaniu (patrz Literatura podstawowa).
Literatura (ang. references): Porządkuje normatywne źródła do pogłębienia wiedzy takie jak FIPS 197 dla AES, FIPS 180-4 dla SHA-2 i FIPS 202 dla SHA-3. Obejmuje dokumenty RFC 8439 dla ChaCha20-Poly1305, RFC 2104 dla HMAC oraz serie NIST SP 800-38 dla trybów pracy. Stanowi punkt wyjścia do dalszych studiów i weryfikacji implementacji.
Dokumentacja i zapowiedź części 4 – Standardy FIPS/RFC i kryptografia asymetryczna Oficjalne standardy FIPS / RFC • FIPS 197: Standard AES • FIPS 180-4: Standard SHA-2 • FIPS 202: Standard SHA-3 (Keccak) • RFC 8439: ChaCha20-Poly1305 • RFC 2104: Specyfikacja HMAC • NIST SP 800-38D: Tryb GCM W części 4: Kryptografia asymetryczna ▶ Problem dystrybucji klucza ▶ Protokół Diffiego-Hellmana (DH) ▶ Algorytm RSA (faktoryzacja) ▶ Krzywe eliptyczne (ECC, Ed25519) ▶ Podpisy cyfrowe i certyfikaty ▶ Kryptografia postkwantowa (PQC) Koniec części 3: zapraszamy do części 4 – matematyka i standardy kryptografii asymetrycznej
Schemat slajdu 55 – Literatura i źródła - część 3