Cryptology Academy · Lekcja

Podstawy szyfrów blokowych i dopełnianie

Zrozumieć rozmiar bloku, dopełnianie PKCS7 i strukturę szyfru

Lekcja 1 z 413 kroki

Podstawy szyfrów blokowych i dopełnianie to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Szyfry blokowe szyfrują bloki o stałym rozmiarze. Gdy tekst jawny nie wypełnia całego bloku, potrzebne jest dopełnienie. W tej lekcji opanujemy budowę szyfrów blokowych, schematy dopełniania i ich znaczenie.

Przypomnienie rozmiaru bloku

AES używa bloków o rozmiarze 128 bitów (16 bajtów). DES używał bloków o rozmiarze 64 bitów (8 bajtów). Jeśli tekst jawny ma dokładnie 16 bajtów, zajmuje jeden blok. 17 bajtów wymaga dwóch bloków.

Dlaczego potrzebne jest dopełnianie

Jeśli tekst jawny ma 20 bajtów, drugi blok zawiera tylko 4 bajty. Szyfr potrzebuje pełnego bloku o rozmiarze 16 bajtów. Pozostałe 12 bajtów uzupełniamy za pomocą deterministycznego i odwracalnego schematu.

Dopełnianie PKCS#7

PKCS#7 dopełnia dane N bajtami, z których każdy ma wartość N: - Potrzeba 3 bajtów → dołącz: 03 03 03 - Potrzeba 12 bajtów → dołącz: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - Potrzeba 0 bajtów → dołącz pełny blok 16 bajtów: 10×16

Zawsze dodawaj jeden pełny blok

Jeśli tekst jawny ma dokładnie 16 bajtów, PKCS#7 dodaje pełny dodatkowy blok o wartości 0x10×16. Dzięki temu odbiorca zawsze wie, gdzie kończy się dopełnienie: wartość ostatniego bajtu wskazuje, ile bajtów należy usunąć.

PKCS#7 w Pythonie

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

Ataki typu padding oracle

Jeśli serwer ujawnia, czy dopełnienie jest prawidłowe po odszyfrowaniu (w komunikacie błędu lub na podstawie czasu odpowiedzi), atakujący może odszyfrować szyfrogram bajt po bajcie bez znajomości klucza. W 2010 roku doprowadziło to do złamania mechanizmu ViewState w ASP.NET.

Dopełnianie zerami i ANSI X.923

Dopełnianie zerami: dopełnianie bajtami 0x00 (niejednoznaczne — oryginalne dane mogą kończyć się zerami). ANSI X.923: dopełnianie zerami, ostatni bajt = liczba bajtów dopełnienia. ISO 7816-4: pierwszy bajt dopełnienia = 0x80, pozostałe = 0x00. PKCS#7 jest jednoznaczny i preferowany.

Dopełnianie bitowe (CTS)

Ciphertext Stealing (CTS) całkowicie eliminuje dopełnianie: zmienia kolejność dwóch ostatnich bloków, aby obsłużyć dane niepełnego bloku. Stosuje się je w szyfrowaniu dysków (Kerberos, niektóre implementacje AES).

Wpływ rozmiaru bloku na bezpieczeństwo

W przypadku bloków 64-bitowych (DES, 3DES, Blowfish) kolizja urodzinowa występuje po 2^32 blokach (~32 GB). Przeglądarki wyłączyły 3DES w TLS po ataku SWEET32, który w 2016 roku zademonstrował to zagrożenie. Bloki AES o rozmiarze 128 bitów wymagają 2^64 bloków — w praktyce są bezpieczne.

Tryby bez dopełniania

AES-CTR i AES-GCM nie wymagają dopełniania: używają szyfru blokowego jako generatora strumienia klucza i wykonują operację XOR na danych o dowolnej długości. Granica bloku jest tylko szczegółem wewnętrznej implementacji.

Szybkie sprawdzenie

Jakie dopełnienie zostanie dodane do wiadomości o długości 13 bajtów przy użyciu PKCS#7 i bloków 16-bajtowych?

Podsumowanie

Opanowałeś dopełnianie w szyfrach blokowych! Następnie porównamy tryby ECB i CBC — zaczynając od słynnego ataku na pingwina w trybie ECB.
Bezpłatny start

Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
67
Lekcje
261

Często zadawane pytania

Czy lekcja „Podstawy szyfrów blokowych i dopełnianie” jest bezpłatna?

Tak — pełny tekst „Podstawy szyfrów blokowych i dopełnianie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy szyfrów blokowych i dopełnianie”?

Zrozumieć rozmiar bloku, dopełnianie PKCS7 i strukturę szyfru Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy szyfrów blokowych i dopełnianie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy szyfrów blokowych i dopełnianie
  2. ECB a CBC: wzorce i wektory IV
  3. Tryb CTR i działanie szyfrów strumieniowych
  4. GCM i szyfrowanie uwierzytelnione
← Powrót do Cryptology Academy