encyklopedia.space

Padding Oracle Attack

Padding Oracle Attack (atak typu „oracle” na wypełnienie) – metoda kryptograficzna pozwalająca na odszyfrowanie zaszyfrowanego komunikatu lub wstrzyknięcie własnych danych, wykorzystująca informacje zwrotne (tzw. „oracle”) o poprawności wypełnienia przy użyciu trybu szyfrowania blokowego, najczęściej trybu CBC oraz schematu wypełniania PKCS#7 (również zwany PKCS#5). Atak został po raz pierwszy opisany w 2002 roku przez Sergei’ego Bleichenbachera w kontekście protokołu PKCS#1, a później szczegółowo opracowany w 2003 roku przez Daniego Bailey’a, Keitha Robbie’ego i Nielsa Fergusona.

Opis ataku

Atak polega na wielokrotnym wysyłaniu zmodyfikowanych wersji tego samego szyfrogramu do systemu, który analizuje przychodzące dane i w odpowiedzi informuje, czy wypełnienie (padding) jest prawidłowe. Nawet bardzo ogólne odpowiedzi („poprawne wypełnienie”, „błąd w wypełnieniu”) dostarczają atakującemu wystarczającej wiedzy do systematycznego odtwarzania oryginalnego tekstu jawnego.

Warunki konieczne

  • Szyfrowanie w trybie blokowym, najczęściej CBC, CFB lub OFB, przy założeniu, że każdy blok jest szyfrowany niezależnie.
  • Użycie schematu wypełniania, najpowszechniejszy PKCS#7/PKCS#5.
  • Obecność mechanizmu (oracle), który zwraca informację o poprawności wypełnienia, np. różne kody HTTP (404 vs 500), różne czasy odpowiedzi lub komunikaty w aplikacji.
  • Brak dodatkowego uwierzytelnienia integralności (MAC) lub szyfrowania uwierzytelniającego (AEAD) przed sprawdzeniem wypełnienia.

Przebieg ataku

  1. Atakujący przechwytuje szyfrogram C = C₀‖C₁‖...‖Cₙ, gdzie C₀ jest wektorem inicjalizującym (IV).
  2. Modyfikuje ostatni bajt jednego z bloków (zwykle Cₙ₋₁) i wysyła zmieniony szyfrogram do serwera.
  3. Na podstawie odpowiedzi oracle (np. „błąd wypełnienia” vs „poprawny szyfr”) atakujący wywnioskuje, czy zmiana spowodowała prawidłowe wypełnienie.
  4. Poprzez systematyczne próby (255 możliwych wartości) atakujący odzyskuje bajt po bajcie oryginalnego bloku jawnego Pₙ.
  5. Proces jest powtarzany dla kolejnych bloków, aż do odszyfrowania całego komunikatu.

Historia i znaczące przypadki

Po publikacji pierwszych opisów ataku, luka została wykryta w wielu protokołach i implementacjach, w tym w:

  • TLS/SSL (wersje przed 1.2, w których używano trybu CBC i nieodpowiedniego sprawdzania wypełnienia).
  • Systemach płatności internetowych opartych na 3DES oraz AES w trybie CBC.
  • Oprogramowaniu do szyfrowania plików, takim jak PKZIP oraz starsze wersje WinZip.
  • Niektórych implementacjach XML Encryption i JWT.

Środki zaradcze i najlepsze praktyki

Aby zabezpieczyć systemy przed atakiem typu padding oracle, zaleca się:

  • Używanie trybów AEAD (np. GCM, CCM), które łączą szyfrowanie i uwierzytelnianie oraz nie sprawdzają wypełnienia przed weryfikacją MAC.
  • Odciąganie czasu odpowiedzi (constant‑time) i unifikację komunikatów błędowych, tak aby nie było możliwe odróżnienie błędów wypełnienia od innych błędów.
  • Stosowanie losowego IV przy każdym szyfrowaniu oraz jego weryfikacji przed odszyfrowaniem.
  • Wprowadzenie dodatkowego szyfrowania uwierzytelniającego (MAC) przed sprawdzeniem wypełnienia – schemat Encrypt‑then‑MAC jest najbezpieczniejszy.
  • Aktualizowanie bibliotek kryptograficznych do wersji, które już nie zezwalają na oddzielne zwracanie informacji o wypełnieniu.

Związane pojęcia

Bibliografia (linki wewnętrzne)

Więcej informacji można znaleźć w następujących artykułach: