Wrocław University of Science and TechnologyDepartment of Fundamentals of Computer Science

Kryptografia II stopień

Od definicji bezpieczeństwa do konstrukcji, redukcji i publikacji naukowych.

Schemat jako krotka algorytmów

Najpierw określamy, co można zrobić i z jakimi danymi. Posiadacz klucza podpisującego ma tworzyć podpisy. Odbiorca ma je sprawdzać bez dostępu do tego sekretu. Inny mechanizm pozwoli każdemu zaszyfrować wiadomość dla odbiorcy, lecz tylko odbiorcy odczytać jej treść. To różne funkcjonalności. Jeszcze nie musimy wiedzieć, czy zrealizujemy je potęgowaniem, działaniami na krzywej czy operacjami na bitach.

Schemat nie jest pojedynczym równaniem. Jest krotką, czyli uporządkowanym zestawem algorytmów o uzgodnionych wejściach i wyjściach. Definicja wskazuje, kto wykonuje każdy algorytm, jakie dane musi posiadać i co otrzymuje. Następnie określa wymagania poprawności oraz osobne wymagania bezpieczeństwa. Sama lista nazw algorytmów nie zapewnia żadnego z tych warunków.

Parametry publiczne oznaczamy przez pppp, od public parameters. Określają m.in. dopuszczalne rozmiary kluczy, przestrzeń wiadomości Mpp\mathcal M_{pp} i sposób kodowania obiektów. Zapis 1λ1^\lambda oznacza ciąg λ\lambda jedynek, nie potęgę liczby 1. Jest standardowym wejściem opisującym parametr bezpieczeństwa. Klucz publiczny to pkpk (public key), a klucz tajny to sksk (secret key). Nazwy algorytmów opisują ich rolę. Ich konkretne obliczenia poznamy przy poszczególnych konstrukcjach.

Setup oznacza ustalenie parametrów, a KeyGen generowanie kluczy. Oddzielamy je, aby publicznych parametrów nie mylić z tajnym kluczem użytkownika. Setup może wskazywać ustalony profil albo losować parametry. Nie oznacza automatycznie zaufanej instytucji ani ceremonii z tajnym stanem. W części publikacji Setup jest włączony do KeyGen lub Gen. Jest to różnica zapisu interfejsu, którą trzeba odróżnić od zmiany algorytmu.

Algorytm, funkcja i pojedyncze wykonanie

Algorytm opisuje sposób wykonania obliczenia. Wywołanie uruchamia go na konkretnych argumentach. Zapis σ←Sign(pp,sk,m)\sigma\leftarrow\mathsf{Sign}(pp,sk,m) oznacza odebranie podpisu, a nie przesłanie klucza do innej osoby. Urządzenie może przechowywać sksk wewnątrz i przyjmować od aplikacji tylko wiadomość oraz identyfikator klucza.

Algorytm deterministyczny dla tych samych wejść zwraca ten sam wynik. Algorytm losowy korzysta dodatkowo z własnych losowych bitów. Gdy chcemy je pokazać jawnie, zapisujemy Sign(pp,sk,m∣ρ)\mathsf{Sign}(pp,sk,m\mid\rho), gdzie ρ\rho oznacza wszystkie losowe bity tego wykonania. Po ustaleniu także ρ\rho wynik jest wyznaczony. Dwa wywołania Sign dla tej samej wiadomości mogą dać różne poprawne podpisy. Nie wymagamy, aby podpis był jednostajnie losowy w całej przestrzeni możliwych ciągów.

W protokole interaktywnym wynik jednego kroku obejmuje również stan do następnego kroku. Sama funkcja od pojedynczego komunikatu do odpowiedzi nie opisuje wtedy całego uczestnika. Musimy wskazać klucze, pamięć sesji, kolejność komunikatów i moment podjęcia decyzji.

Podpis: od interfejsu do przebiegu

Wprowadzamy podpis z dołączoną wiadomością. Wiadomość mm pozostaje osobnym wejściem weryfikatora, a σ\sigma jest podpisem tej wiadomości. Przestrzeń podpisów oznaczamy przez Spp\mathcal S_{pp}. Bit decyzji bb ma wartość 1 przy akceptacji i 0 przy odrzuceniu.

Πsig=(Setup,KeyGen,Sign,Verify).\Pi_{\mathrm{sig}}=(\mathsf{Setup},\mathsf{KeyGen},\mathsf{Sign},\mathsf{Verify}).
Wywołanie i wynik Znaczenie wejścia i wyjścia
pp←Setup(1λ)pp\leftarrow\mathsf{Setup}(1^\lambda) Wybiera publiczne parametry dla danego poziomu bezpieczeństwa. Parametry opisują także dozwolone formaty danych.
(pk,sk)←KeyGen(pp)(pk,sk)\leftarrow\mathsf{KeyGen}(pp) Tworzy pasującą parę kluczy dla tych parametrów. Klucz publiczny można udostępnić. Klucz tajny pozostaje u podpisującego.
σ←Sign(pp,sk,m)\sigma\leftarrow\mathsf{Sign}(pp,sk,m) Przyjmuje klucz tajny i wiadomość m∈Mppm\in\mathcal M_{pp}. Zwraca podpis σ∈Spp\sigma\in\mathcal S_{pp}. Może korzystać z wewnętrznej losowości.
b←Verify(pp,pk,m,σ)b\leftarrow\mathsf{Verify}(pp,pk,m,\sigma) Przyjmuje jawne dane i zwraca bit decyzji. Nie wymaga sksk ani losowości użytej przez Sign. Niepoprawny format podpisu prowadzi do odrzucenia.

To interfejs, jeszcze nie konkretna konstrukcja. Wewnątrz Sign nie ma na razie wskazanego równania. Wiemy już jednak, co można przekazać do Verify: wynik σ\sigma wraz z tą samą wiadomością, parametrami i pasującym kluczem publicznym. Sam podpis nie wystarcza. Nie wolno też podmienić klucza weryfikacji na inny i uważać, że sprawdzamy tego samego autora.

Podpis: wynik Sign jest argumentem Verify: czynności i komunikatyPodpisującyWeryfikatorSign: użyj sekretu
Klucz sk pozostaje po tej stronie.
Wiadomość i podpis, bez sekretuVerify: sprawdź publicznie
1: akceptacja. 0: odrzucenie.

Podpis: wynik Sign jest argumentem Verify

Podpisujący: pp,sk,mpp,sk,m

Weryfikator: pp,pkpp,pk

  1. Podpisujący, Sign: użyj sekretu: σ←Sign(pp,sk,m)\sigma\leftarrow\mathsf{Sign}(pp,sk,m) Klucz sk pozostaje po tej stronie.
  2. Podpisujący → Weryfikator: (m,σ)(m,\sigma) Wiadomość i podpis, bez sekretu
  3. Weryfikator, Verify: sprawdź publicznie: b←Verify(pp,pk,m,σ)b\leftarrow\mathsf{Verify}(pp,pk,m,\sigma) b∈{0,1}b\in\{0,1\} 1: akceptacja. 0: odrzucenie.
Setup i KeyGen wykonano wcześniej. Obie strony używają tych samych parametrów, a pk odpowiada sk. Strzałka przekazuje wynik i wiadomość. Weryfikator nie potrzebuje sekretu ani kontaktu z podpisującym.

Weryfikator może wykonać swoją czynność później i bez kontaktu z podpisującym. Diagram nie oznacza zatem obowiązkowego połączenia sieciowego. Para (m,σ)(m,\sigma) może zostać zapisana w pliku. Powiązanie pkpk z właściwą osobą musi być ustalone poza samym Verify. Algorytm sprawdza zgodność z podanym kluczem, nie nazwisko na stronie internetowej.

Poprawność: wyniki algorytmów pasują do siebie

Poprawność mówi o uczciwym wykonaniu. Dla każdych parametrów zwracanych przez Setup, każdej pary kluczy zwracanej przez KeyGen dla tych parametrów i każdej dozwolonej wiadomości wynik Sign ma być akceptowany przez Verify. Przy doskonałej poprawności zapisujemy:

Pr⁡[Verify(pp,pk,m,Sign(pp,sk,m))=1]=1.\Pr[\mathsf{Verify}(pp,pk,m,\mathsf{Sign}(pp,sk,m))=1]=1.

W tym wzorze pp,pk,sk,mpp,pk,sk,m są ustalone zgodnie z poprzednim zdaniem. Prawdopodobieństwo dotyczy wewnętrznej losowości Sign. Verify jest tu deterministyczny. Gdy określony schemat dopuszcza zaniedbywalny błąd poprawności, zapisujemy i uzasadniamy taką granicę osobno. Nie ukrywamy jej pod słowem „działa”.

Zgodność typów jest konieczna, ale nie wystarcza. Verify musi umieć odczytać format zwracany przez Sign, lecz musi też zaakceptować uczciwy wynik. Dla szyfrowania wymaganie ma inną postać: Dec ma odzyskać dokładnie wiadomość podaną do Enc. Dla uzgadniania klucza uczciwe, prawidłowo komunikujące się strony mają zakończyć protokół ze zgodnymi kluczami. Każda funkcjonalność ma własny warunek poprawności.

Bezpieczeństwo: czego nie osiągnie przeciwnik

Przeciwnik zna algorytmy i publiczne dane. Nie otrzymuje klucza tajnego atakowanego użytkownika. Nie wystarczy powiedzieć, że nie potrafi wywołać Sign z właściwym kluczem. Może próbować znaleźć akceptowany podpis dowolną inną metodą, również bez odzyskiwania klucza. Definicja bezpieczeństwa ma obejmować każdą wydajną strategię zgodną z modelem.

Może także otrzymać poprawne podpisy od prawdziwego podpisującego. Ich ponowne pokazanie nie jest nowym fałszerstwem. Dlatego potrzebujemy dwóch warunków jednocześnie: akceptacji pod atakowanym kluczem i nowej wiadomości. W modelu z dostępem do podpisywania wygląda to następująco:

  1. Prowadzący eksperyment uruchamia Setup i KeyGen. Przeciwnik A\mathcal A otrzymuje pp,pkpp,pk, lecz nie sksk.
  2. Przeciwnik może wybierać wiadomości mim_i i otrzymywać wyniki Sign(pp,sk,mi)\mathsf{Sign}(pp,sk,m_i). Zbiór QQ, początkowo pusty, zapamiętuje wszystkie wiadomości, o których podpisanie zapytano. Kolejne pytania mogą zależeć od poprzednich odpowiedzi.
  3. Przeciwnik zwraca parę (m⋆,σ⋆)(m^\star,\sigma^\star). Gwiazdka oznacza jego końcową próbę. Nie wskazuje, że do jej utworzenia użyto Sign.
  4. Eksperyment sprawdza format, przynależność m⋆∈Mppm^\star\in\mathcal M_{pp} i poniższy warunek wygranej.
Win  ⟺  Verify(pp,pk,m⋆,σ⋆)=1∧m⋆∉Q.\mathsf{Win}\iff \mathsf{Verify}(pp,pk,m^\star,\sigma^\star)=1 \quad\land\quad m^\star\notin Q.

Schemat jest niepodrabialny w tym modelu, jeśli dla każdego przeciwnika PPT istnieje zaniedbywalna funkcja νA\nu_{\mathcal A} ograniczająca Pr⁡[Win]\Pr[\mathsf{Win}] w zależności od λ\lambda. Prawdopodobieństwo obejmuje losowania parametrów, kluczy, podpisów oraz samego przeciwnika. Czas pracy i liczba zapytań są wielomianowo ograniczone. Nie jest to obietnica, że fałszerstwo jest logicznie niemożliwe. Jest to granica szans jego wydajnego znalezienia.

Ten cel nazywa się EUF-CMA, od existential unforgeability under chosen-message attack, czyli egzystencjalna niepodrabialność przy ataku z wybranymi wiadomościami. Słowo „egzystencjalna” oznacza, że wystarczy choć jedna nowa poprawnie podpisana wiadomość wybrana przez przeciwnika. Boneh–Shoup, §13.1 i eksperyment 13.1.

Dwa ważne rozróżnienia. Wygenerowanie własnej pary kluczy i podpisanie dokumentu własnym kluczem nie łamie tego wymagania. Sprawdzamy podpis pod konkretnym atakowanym pkpk. Z kolei zmiana podpisu pod wiadomością już należącą do QQ nie jest sukcesem w tej grze. Silniejszy cel, który wyklucza także nową parę podpis–wiadomość dla wcześniej podpisywanej wiadomości, poznamy przy podpisach.

Kontrprzykład: poprawność bez ochrony. Wyobraź sobie celowo błędny wariant. Sign zawsze zwraca jeden bit 0, a Verify akceptuje ten bit dla każdej wiadomości i ignoruje klucz. Uczciwy podpis zawsze przechodzi kontrolę. Przeciwnik bez żadnego zapytania również podaje 0 dla dowolnej wiadomości i wygrywa z prawdopodobieństwem 1. Formalne wejście sksk w nagłówku algorytmu niczego nie zabezpiecza, jeśli konstrukcja go nie wykorzystuje do zapewnienia właściwej gwarancji.

Różne funkcjonalności, różne cele ochrony

Rozdzielenie dostępnych i niedostępnych danych jest punktem wyjścia. Nie każda własność bezpieczeństwa sprowadza się jednak do wytworzenia niedostępnego wyniku. Czasem chcemy uniemożliwić rozpoznanie, skąd dany wynik pochodzi albo jaką wiadomość ukrywa.

Funkcjonalność Co ma się udać uczciwej stronie Co ograniczamy w modelu przeciwnika
Podpis cyfrowy Sign z sksk daje wynik akceptowany przez publiczny Verify. Szansę nowego fałszerstwa pod atakowanym kluczem, mimo dozwolonych zapytań o podpisy.
Szyfrowanie Dec z właściwym sekretem odzyskuje wiadomość z wyniku Enc. Możliwość rozpoznania, którą z dwóch dopuszczalnych wiadomości zaszyfrowano. Sam brak metody odczytu całej wiadomości jest zbyt słabym celem.
MAC, message authentication code, kod uwierzytelniający wiadomość Tag tworzy znacznik, a Check sprawdza go. Oba algorytmy korzystają ze wspólnego sekretu. Szansę fałszerstwa zgodnie z warunkiem nowości danego modelu. Posiadacz klucza weryfikującego sam może tworzyć znaczniki, więc MAC nie jest publicznym podpisem.
Identyfikacja interaktywna Uczciwy weryfikator akceptuje właściwego uczestnika w bieżącej sesji. Szansę podszycia się w sesji testowej, przy jasno określonym dostępie do wcześniejszych lub równoległych rozmów.
AKE, authenticated key exchange, uwierzytelnione uzgadnianie klucza Uczciwe strony uzgadniają wspólny klucz i właściwego partnera. Rozróżnienie klucza chronionej sesji od losowego oraz naruszenie wymaganego uwierzytelnienia. Trzeba ustalić dopuszczalne ujawnienia i reguły wiązania sesji.
Publiczna funkcja skrótu Każdy może obliczyć skrót zadanej wiadomości. Zależnie od własności: znalezienie przeciwobrazu, drugiej wiadomości o zadanym skrócie albo dwóch różnych wiadomości o wspólnym skrócie. Nie ma tajnego klucza, którego brak miałby blokować zwykłe haszowanie.

Później dodamy także anonimowość. Poprawne Verify może potwierdzać udział kogoś z dopuszczalnego zbioru, a osobna gra pytać, czy da się rozpoznać konkretną osobę. Ten sam interfejs może mieć kilka niezależnych wymagań bezpieczeństwa.

Jeden sekret, dwa klucze, rozmowa

  • Szyfrowanie symetryczne używa tego samego tajnego klucza kk po obu stronach. KeyGen zwraca kk, a interfejsy mają postać Enc(pp,k,m)\mathsf{Enc}(pp,k,m) oraz Dec(pp,k,C)\mathsf{Dec}(pp,k,C). Mechanizmy z nonce i uwierzytelnianymi danymi mają dodatkowe jawne argumenty, które wprowadzimy przy ich definicjach.
  • Szyfrowanie publiczne używa pkpk do szyfrowania i sksk do odszyfrowania. Nadawca nie musi znać sekretu odbiorcy.
  • Podpis używa sksk do podpisania i pkpk do sprawdzenia. Nie jest „szyfrowaniem kluczem prywatnym”.
  • Identyfikacja interaktywna jest rozmową dowodzącego z weryfikatorem. Oprócz kluczy opisujemy kolejność wiadomości, stany stron i warunek akceptacji. Nie zastępujemy tej rozmowy pojedynczym wywołaniem Sign.

Parametry pppp będziemy czasem pomijać w zapisie, gdy są już ustalone dla całego fragmentu. Analogicznie Gen(1λ)\mathsf{Gen}(1^\lambda) w skróconym eksperymencie oznacza przygotowanie parametrów i kluczy, z parametrami publicznymi dostępnymi uczestnikom. Nie oznacza innego sposobu generowania sekretu. Schemat i reguły jego użycia muszą pasować do eksperymentu bezpieczeństwa.

Pełne interfejsy znajdują się przy swoich rodzinach: identyfikacja, podpis, AKE i szyfrowanie publiczne. W każdym przypadku odróżnimy algorytm od jego wykonania w urządzeniu. Algorytm określa rachunek. Urządzenie przechowuje klucz i stan oraz egzekwuje reguły dostępu. Nie każda aplikacja uprawniona do żądania podpisu powinna móc odczytać klucz.

Trzy poziomy opisu

  1. Funkcjonalność i interfejs. Co chcemy umożliwić? Jak nazywają się algorytmy, co przyjmują, co zwracają i kto ma ich argumenty?
  2. Wymagania. Co ma zachodzić po uczciwych wywołaniach? Co widzi przeciwnik, jakie usługi otrzymuje i co oznacza jego sukces? Poprawność oraz bezpieczeństwo zapisujemy osobno, zanim ocenimy konstrukcję.
  3. Konstrukcja i uzasadnienie. Jakie dokładnie obliczenia wykonują algorytmy? Dlaczego zapewniają poprawność? Przy jakich założeniach spełniają zdefiniowany cel bezpieczeństwa? Schnorr wykorzysta równanie w grupie, a AES operacje na bajtach. Matematyka realizuje określoną funkcjonalność, nie zastępuje jej definicji.

Każdą kolejną konstrukcję czytaj w tej kolejności. Najpierw znajdź jej algorytmy. Prześledź, jak wynik jednego staje się argumentem następnego. Dopiero potem wejdź w rachunek w poszczególnych boksach. Test wykonania sprawdza konkretny przypadek. Dowód uzasadnia wymaganie dla wszystkich przypadków objętych twierdzeniem.

Sprawdź rozumienie: które dane są potrzebne do Verify, ale nie są wynikiem Sign? Dlaczego otrzymanie prawdziwego podpisu nie łamie niepodrabialności? Czy Verify akceptujący wszystko byłby poprawny? Czy byłby bezpieczny? Zastosuj ten podział w C0.6–7 i przy projektowaniu interfejsów w laboratorium.

Definicje ogólne i rozróżnienie szyfrowania oraz podpisów: Boneh–Shoup, rozdziały 11 i 13. Do tych samych interfejsów wrócimy w eksperymentach: wyrocznia podpisująca będzie wykonywała Sign, a wyrocznia deszyfrująca Dec. Przeciwnik otrzyma wynik dozwolonego wywołania, nie całą pamięć urządzenia.

Przeciwnik, eksperyment i wyrocznie

Adwersarz, czyli przeciwnik, to algorytm opisujący strategię ataku. Nie ograniczamy go do pomysłów autora systemu. Może zapamiętywać wcześniejsze odpowiedzi, wybierać następne kroki na ich podstawie i losować własne wartości. Słowo „adaptacyjny” oznacza właśnie taki dobór działań po uzyskaniu nowych informacji.

Siłę przeciwnika opisujemy przez interfejs, budżet i cel. Interfejs mówi, co wolno zrobić. Budżet ogranicza czas, pamięć, liczbę sesji i zapytań. Cel określa, kiedy uznajemy atak za udany. Nawet bardzo szybki algorytm nie ma prawa korzystać z sekretu, którego jego interfejs nie ujawnia.

Możliwość Przykład rzeczywisty Co zapisujemy w modelu
Podsłuch Obserwacja komunikacji Publiczne komunikaty i ich kolejność
Wybrana wiadomość Zlecenie podpisania dokumentu Dostęp do podpisywania pod ustalonym kluczem
Aktywna sieć Przekierowanie i modyfikacja ruchu Dostarczanie własnych komunikatów
Ujawnienie Odczyt określonego fragmentu stanu Nazwa sesji i dokładny zwracany sekret
Reset Odtworzenie migawki urządzenia Powtórzenie stanu, czasem także losowości
Przejęcie hosta Złośliwy program przy chronionym module Kontrola hosta, ale tylko określone API modułu
API
Application Programming Interface. Interfejs programistyczny, czyli określony zestaw dostępnych operacji.

Jak czytać skróty modeli ataku

Angielskie nazwy będą wracać w rysunkach i publikacjach. Skrót opisujący dostęp przeciwnika nie jest jeszcze deklaracją bezpieczeństwa. Najpierw ustalamy, co przeciwnik może zrobić. Osobno podajemy, czego mimo tego nie powinien osiągnąć.

W nazwach związanych z szyfrowaniem plaintext oznacza tekst jawny, czyli wiadomość przed zaszyfrowaniem. Ciphertext to szyfrogram, czyli wynik szyfrowania. Słowo chosen oznacza, że dane wybiera przeciwnik, a known, że je zna, lecz nie musi mieć wpływu na ich wybór.

Skrót Rozwinięcie angielskie i znaczenie po polsku
COA Ciphertext-only attack.
Atak z dostępem tylko do szyfrogramów. Przeciwnik obserwuje szyfrogramy. Może znać algorytm i ogólny format wiadomości, ale nie otrzymuje odpowiadających im tekstów jawnych.
KPA Known-plaintext attack.
Atak ze znanym tekstem jawnym. Przeciwnik zna pewne pary wiadomość–szyfrogram, choć nie wybiera wiadomości do zaszyfrowania.
CPA Chosen-plaintext attack.
Atak z wybranym tekstem jawnym. Przeciwnik wybiera wiadomości i uzyskuje ich szyfrogramy pod atakowanym kluczem.
CCA Chosen-ciphertext attack.
Atak z wybranym szyfrogramem. Przeciwnik może zlecać odszyfrowanie wybranych szyfrogramów. Reguły eksperymentu określają ograniczenia tego dostępu.
CCA1 Non-adaptive chosen-ciphertext attack.
Atak z wybranym szyfrogramem z dostępem do deszyfrowania tylko przed wyzwaniem. Wyzwaniem jest szyfrogram jednej z dwóch wiadomości. Przeciwnik ma wskazać, którą z nich zaszyfrowano.
CCA2 Adaptive chosen-ciphertext attack.
Adaptacyjny atak z wybranym szyfrogramem. Dostęp do deszyfrowania pozostaje także po otrzymaniu wyzwania, ale nie wolno żądać odszyfrowania samego szyfrogramu wyzwania.
EAV Od eavesdropping, czyli podsłuchu.
To skrót od jednego słowa. W podstawowej grze poufności oznacza obserwację szyfrogramu wyzwania bez dodatkowych usług szyfrowania i deszyfrowania.
CMA Chosen-message attack.
Atak z wybranymi wiadomościami. W modelu podpisu przeciwnik wybiera wiadomości i uzyskuje ich podpisy. Nie chodzi o szyfrowanie, jak w CPA.

Cyfry 1 i 2 w CCA1 i CCA2 oznaczają warianty dostępu, nie liczbę zapytań. Historyczna nazwa non-adaptive przy CCA1 nie zabrania uzależnienia kolejnego zapytania od wcześniejszej odpowiedzi. Wskazuje, że pytań o deszyfrowanie nie można już dostosować do otrzymanego wyzwania. Handbook of Applied Cryptography, §7.2, Bellare i in., definicja 2.1.

Nazwę własności bezpieczeństwa odczytujemy osobno:

  • IND, od indistinguishability, to nierozróżnialność. W grze poufności przeciwnik próbuje rozpoznać, którą z dwóch wybranych wiadomości zaszyfrowano.
  • EUF, od existential unforgeability, to egzystencjalna niepodrabialność. Sukcesem jest znalezienie choć jednej poprawnej pary wiadomość–podpis spełniającej warunek nowości. Nie trzeba podrobić konkretnego dokumentu wskazanego z góry przez inną osobę.

Dlatego IND-CPA rozwijamy jako indistinguishability under chosen-plaintext attack: nierozróżnialność przy ataku z wybranym tekstem jawnym. Analogicznie odczytujemy IND-EAV, IND-CCA1 i IND-CCA2, zmieniając zakres dostępu zgodnie z tabelą. Nazwa EUF-CMA oznacza existential unforgeability under chosen-message attack: egzystencjalną niepodrabialność przy ataku z wybranymi wiadomościami. W tym modelu końcowy podpis musi dotyczyć wiadomości, której wcześniej nie zlecono do podpisania.

IND-EAV
indistinguishability against eavesdropping. Nierozróżnialność przy podsłuchu.
IND-CCA1
indistinguishability under non-adaptive chosen-ciphertext attack. Nierozróżnialność przy dostępie do deszyfrowania tylko przed wyzwaniem.
IND-CCA2
indistinguishability under adaptive chosen-ciphertext attack. Nierozróżnialność przy adaptacyjnym ataku z wybranym szyfrogramem.

Eksperyment, nazywany też grą bezpieczeństwa

Słowo gra nie oznacza tu zręczności ani rywalizacji człowieka z komputerem. Oznacza precyzyjnie zdefiniowany eksperyment z wynikiem. Jedną stroną jest przeciwnik, drugą program prowadzący eksperyment, często nazywany challengerem. Prowadzący generuje klucze, odpowiada na dozwolone pytania i sprawdza końcowy warunek. Przeciwnik nie widzi całej pamięci prowadzącego.

Eksperyment można zapisać jako program. Wynik 1 znaczy, że przeciwnik osiągnął cel, a 0, że go nie osiągnął. Powtarzamy rozumowanie nad wszystkimi losowaniami kluczy, monet przeciwnika i pozostałych algorytmów. Prawdopodobieństwo sukcesu nie jest odsetkiem, który musimy koniecznie zmierzyć w przeglądarce. Jest wielkością matematyczną określoną przez ten eksperyment.

Przykład niepodrabialności podpisu. Prowadzący tworzy parę kluczy. Publiczny przekazuje przeciwnikowi. Przeciwnik może prosić o podpisy pod wybranymi dokumentami. Na końcu przedstawia nowy dokument i podpis. Wygrywa, jeśli podpis jest poprawny, a dokument nie należał do wcześniej podpisywanych. Warunek nowości wyklucza trywialne ponowne pokazanie otrzymanego podpisu. Nie zabrania analizy ani modyfikacji wcześniejszych odpowiedzi.

Na rysunku przeciwnika oznaczamy przez A\mathcal A, a challengera przez Ch\mathsf{Ch}. Challenger nie próbuje wygrać własną strategią. Wykonuje ustalone reguły, według których oceniamy przeciwnika. To model usługi i jej otoczenia, nie dodatkowy uczestnik rzeczywistego protokołu.

Algorytm Gen\mathsf{Gen} generuje klucz publiczny pkpk i klucz tajny sksk. Zapis 1λ1^\lambda jest standardowym wejściem opisującym parametr bezpieczeństwa. Algorytm Sign\mathsf{Sign} podpisuje, a Verify\mathsf{Verify} sprawdza podpis i zwraca 1 przy akceptacji. Zbiór QQ, początkowo pusty, gromadzi wiadomości przesłane do podpisania. Indeks ii numeruje zapytania. Gwiazdka w (m⋆,σ⋆)(m^\star,\sigma^\star) oznacza końcową próbę fałszerstwa, nie operację na wiadomości.

Niepodrabialność podpisu: EUF-CMA

Przeciwnik zna algorytmy i klucz publiczny. Po lewej są jego obliczenia, po prawej czynności challengera. Strzałki pokazują przekazywane dane. W ramce można wielokrotnie wracać do obliczeń i kolejnych zapytań.

Niepodrabialność podpisu: EUF-CMA: adwersarz i challenger 1. Challenger generuje klucze. Klucz tajny zostaje u niego. Rejestr zapytań jest początkowo pusty. 2. Przeciwnik otrzymuje klucz publiczny. Nie otrzymuje klucza tajnego. 3. Przeciwnik wykonuje własne obliczenia. Może tworzyć, przechowywać i sprawdzać kandydatów przed zapytaniami, między nimi oraz po ostatniej odpowiedzi. Publiczne Verify nie wymaga pytania challengera. 4. Jeżeli przeciwnik chce kolejnego podpisu, wybiera wiadomość. Wybór może zależeć od całego dotychczasowego widoku. Może też pominąć zapytania i od razu zwrócić wynik w kroku 7. 5. Challenger podpisuje otrzymaną wiadomość i zapisuje ją w rejestrze Q. Rejestr obejmuje wszystkie zapytania do chwili zwrócenia wyniku. 6. Podpis wraca do przeciwnika. Może on wrócić do własnych obliczeń, zadać kolejne pytanie albo zwrócić wynik. Animacja pokazuje jedną możliwą iterację, nie obowiązkową liczbę zapytań. 7. Przeciwnik zwraca wybraną parę jako wynik i kończy swój udział w eksperymencie. Gwiazdka oznacza wybrany wynik, a nie chwilę jego obliczenia. Kandydat mógł powstać wcześniej. 8. Challenger ocenia zwrócony wynik. Wygrana wymaga poprawnego podpisu i wiadomości nieobecnej w całym rejestrze Q. Jeżeli przeciwnik zlecił jej podpisanie już po przygotowaniu kandydata, warunek świeżości nie zachodzi. Adwersarz · przeciwnik AAdwersarz Awybiera zapytania i odpowiedź końcowąprzeciwnik Challenger · prowadzący ChChallenger Chwykonuje reguły eksperymentuprowadzący 1Przygotowanie kluczy i rejestru
(pk,sk)←Gen(1λ),Q=∅(pk,sk)\leftarrow\mathsf{Gen}(1^\lambda),\quad Q=\varnothing
Tajny: sk. Rejestr Q pamięta zapytania.Klucz sk pozostaje tajny.
2
pkpk
klucz publiczny
Obliczenia i zapytania przeplatane adaptacyjnieObliczenia i opcjonalne zapytania3Własne obliczeniaLokalnieTworzy i zachowuje kandydatów.Tworzy próby.Sam sprawdza podpisy: Verify.Testuje podpisy.Wybiera następne działanie.Wybiera krok.4
mim_i
opcjonalne zapytanie o podpis
5Wyrocznia podpisująca
σi←Signsk(mi)\sigma_i\leftarrow\mathsf{Sign}_{sk}(m_i)
Q←Q∪{mi}Q\leftarrow Q\cup\{m_i\}
6
σi\sigma_i
odpowiedź na zapytanie
Obliczenia można powtarzać przed zapytaniami i między nimi.Obliczenia przed i między pytaniami.Zero lub więcej zapytań. Przeciwnik sam wybiera chwilę zakończenia.Można skończyć bez zapytań.7
(m⋆,σ⋆)(m^\star,\sigma^\star)
zwrócenie wyniku, koniec zapytań
8Wynik 1 wtedy i tylko wtedy, gdy
Verifypk(m⋆,σ⋆)=1\mathsf{Verify}_{pk}(m^\star,\sigma^\star)=1
orazm⋆∉Q\text{oraz}\quad m^\star\notin Q
W pozostałych przypadkach wynik 0.

Cały eksperyment. 8 kroków, dwa różne punkty widzenia.

Ramka obejmuje powtarzalne obliczenia i opcjonalne zapytania, nie sztywną fazę poprzedzającą fałszowanie. Animacja wyróżnia jedną iterację. Ostatnia strzałka oznacza oddanie wyniku, który mógł zostać obliczony wcześniej. Animacja przedstawia reguły eksperymentu, nie pomiar bezpieczeństwa konkretnego algorytmu.

Przygotowanie kandydata a oddanie wyniku. Przeciwnik może sam uruchamiać publiczny algorytm Verifypk\mathsf{Verify}_{pk} w dowolnym momencie. Może zachować kandydata, nadal pytać o podpisy pod innymi wiadomościami i dopiero później zwrócić wybraną parę. Nie musi wykorzystać całego limitu zapytań.

Liczy się cały rejestr zapytań. Jeżeli po przygotowaniu kandydata poprosi o podpis pod m⋆m^\star, wiadomość trafi do QQ. Ten kandydat nie wygra wtedy EUF-CMA, nawet jeśli powstał wcześniej. Gwiazdka wyróżnia wynik oddany do oceny. Nie oznacza, że obliczenia zaczęły się dopiero przy ostatniej strzałce.

Dlaczego wynik jest na końcu? W standardowej definicji zwrócenie pary kończy działanie przeciwnika. Nie ogranicza to chwili znalezienia fałszerstwa. Gdy przeciwnik ma już poprawny podpis pod świeżą wiadomością, może od razu go zwrócić. Do rozpoznania sukcesu wystarczają publiczne Verify i historia własnych zapytań. Dalsze pytania nie są potrzebne.

Definicja: Boneh i Shoup, §13.1.1, eksperyment 13.1. Ujęcie z końcowym wynikiem: Bellare i Rogaway, s. 239–240.

To model EUF-CMA: niepodrabialność przy dostępie do podpisywania wybranych wiadomości. Przeciwnik sam wybiera wiadomość, którą spróbuje podrobić. Może też nie zadawać żadnych pytań. Liczba pytań i czas pracy muszą mieścić się w budżecie przyjętym w twierdzeniu. Boneh–Shoup, eksperyment 13.1.

W tym przykładzie sukces mierzymy prawdopodobieństwem akceptacji fałszerstwa. W eksperymencie poufności będziemy zgadywać losowy bit. Tam naturalnym punktem odniesienia jest 1/21/2. Nie każdy model ma tę samą definicję przewagi.

Wyrocznia jako dozwolona usługa

Wyrocznia podpisująca jest formalnym interfejsem: podaj wiadomość, odbierz podpis. W rzeczywistości odpowiada np. legalnej usłudze podpisu, z której przeciwnik może korzystać. Model może celowo przyznawać nawet szerszy dostęp niż konkretna aplikacja. Mocniejsza gwarancja jest przydatna, o ile interfejs nie czyni celu trywialnym.

Wyrocznia nie daje przeciwnikowi klucza tylko dlatego, że używa go wewnętrznie. Podobnie korzystanie z terminala płatniczego nie oznacza znajomości wszystkich jego sekretów. Osobne zapytanie o ujawnienie klucza to dodatkowa możliwość, którą trzeba jawnie dopuścić.

Wyrocznia Wejście i odpowiedź Co modeluje
Podpisująca Wiadomość → podpis Wybrane zlecenia pod stałym sekretem
Szyfrująca Tekst → szyfrogram Dostęp do szyfrowania, np. własnych rekordów
Deszyfrująca Szyfrogram → tekst lub odrzucenie Dostęp do przetwarzania wybranych szyfrogramów
Weryfikująca Dane i znacznik → akceptacja lub odrzucenie Publiczny sprawdzian albo kontrola znacznika z tajnym kluczem
Ujawniająca Wskazany sekret → jego wartość Konkretną kompromitację

Liczba zapytań ma znaczenie. Sto podpisów to inny zasób niż miliard. Jeśli każde zgadywanie ma małą szansę powodzenia, suma szans rośnie wraz z liczbą prób. Gdy zapytanie zawiera bardzo długą wiadomość, do kosztu należy także jej przetworzenie. Interfejs nie oznacza nieograniczonego czasu ani nieskończenie dużych wejść.

Wyrocznia losowa jest innym pojęciem

ROM rozwijamy jako random oracle model, czyli model wyroczni losowej. To sposób idealizowania funkcji haszującej w analizie, a nie kolejny poziom dostępu typu CPA lub CCA. Możemy np. badać niepodrabialność EUF-CMA w modelu ROM.

Nie utożsamiamy wyroczni losowej z wyrocznią podpisującą. Pierwsza idealizuje publiczną funkcję haszującą. Druga używa sekretnego klucza do wykonywania algorytmu podpisu. Podpis może wewnętrznie korzystać z hasza, ale te dwa interfejsy mają inne zadania i inne wyjścia.

Wyrocznię losową wyobrażamy sobie jako nieskończoną, raz wylosowaną tabelę. Dla praktycznego opisu nie trzeba od razu wypełniać wszystkich wierszy. Przy pierwszym pytaniu losujemy odpowiedź. Zapamiętujemy ją. Powtórzone identyczne wejście zawsze dostaje tę samą odpowiedź. Nowe wejście dostaje niezależną odpowiedź. Dwa różne wejścia mogą przypadkowo dać ten sam wynik.

Na rysunku A\mathcal A oznacza przeciwnika, mm wiadomość, σ\sigma podpis, a sksk tajny klucz usługi. Dla wyroczni losowej ℋ\mathcal H zapytanie nazywamy xx, odpowiedź yy, a zapamiętane pary tworzą tabelę TT. Zapis T[x]=yT[x]=y oznacza wpis przypisujący temu wejściu tę odpowiedź. W animacji widzimy wnętrze modelu. Interfejs przeciwnika ujawnia tylko odpowiedź na zadane pytanie, nie całą tabelę.

Przeciwnikwybiera wiadomość
A\mathcal A
Wyrocznia podpisującasekret pozostaje wewnątrz
σ←Signsk(m)\sigma\leftarrow\mathsf{Sign}_{sk}(m)
mm zapytanie
σ\sigma odpowiedź
Model usługi: podpisz wybrany dokument, nie ujawniaj klucza.Przeciwnikwybiera ciąg bajtów
A\mathcal A
Wyrocznia losowapamięta odpowiedzi
T[x]=yT[x]=y
xx zapytanie
y=ℋ(x)y=\mathcal H(x)
Nowe x: wylosuj i zapamiętaj y. Powtórzone x: zwróć zapisane y.
Górny interfejs wykonuje algorytm z sekretem. Dolny idealizuje losową funkcję. Dostęp do jednego nie jest dostępem do drugiego. Strzałki rozdzielają wejście i odpowiedź, a liczby zapytań liczymy osobno.
Odpowiedz(x):
    jeśli tabela zawiera x: zwróć tabela[x]
    wylosuj y z zadeklarowanej dziedziny wyników
    tabela[x] = y
    zwróć y
Wyrocznia losowa · sprawdzenie, losowanie, zapis

Model z małą dziedziną Z101\mathbb Z_{101}. Tabela jest początkowo pusta. Różne wejścia mogą otrzymać równy wynik.

Prywatna pamięć modelu wyroczniPrzeciwnik
A\mathcal A
zapytania i wynikiCzy wpis istnieje?
x∈dom⁡(T)?x\in\operatorname{dom}(T)?
TAK · odczytaj wpis
y←T[x]y\leftarrow T[x]
NIE · losuj niezależny wynik
y←$Z101y\overset{\$}{\leftarrow}\mathbb Z_{101}
Zapisz raz w tabeli
T[x]←yT[x]\leftarrow y
Zwróć tylko odpowiedź
ℋ(x)=y\mathcal H(x)=y
xx
yy
  1. Sprawdzenie
  2. Losowanie
  3. Zapis
  4. Odczyt
  5. Odpowiedź

Tabela jest pusta. Żadne zapytanie nie zostało wysłane.

Roboczy stan wewnętrznyBrak.

Prywatna tabela modelu

Podgląd dydaktyczny. Uczestnicy nie mogą odczytać tej pamięci bezpośrednio.

xxyy

Widok przeciwnika

Historia dostarczonych odpowiedzi. Wewnętrzne losowanie i tworzenie wpisu nie są osobnymi komunikatami.

ZapytanieOdpowiedź

To tzw. leniwe losowanie. Wyrocznia nie potrzebuje hasła ani klucza podpisującego. Dostęp ma przeciwnik i mają go uczciwe strony. W praktyce publiczny algorytm haszujący można obliczać lokalnie. Jego ideał w dowodzie pozwala precyzyjnie liczyć, które wejścia zostały sprawdzone i jaka niewiadoma pozostaje przed pierwszym zapytaniem.

Dlaczego tabela zachowuje się jak losowa funkcja

Na początku T=∅T=\varnothing. Sprawdzenie wpisu nie jest losowaniem. Jeżeli x∈dom⁡(T)x\in\operatorname{dom}(T), odczytujemy dokładnie poprzednie T[x]T[x]. W przeciwnym razie losujemy nową odpowiedź jednostajnie z zadeklarowanej, skończonej dziedziny wyników D\mathcal D, niezależnie od odpowiedzi dla innych wejść. Zapisujemy ją przed wysłaniem. Symbol dom⁡(T)\operatorname{dom}(T) oznacza zbiór wejść już zapisanych w tabeli.

Niech R=∣D∣R=|\mathcal D| będzie liczbą możliwych wyników. Dla nowego wejścia i każdego y∈Dy\in\mathcal D, nawet po ustaleniu dotychczasowego widoku przeciwnika VV, zachodzi

Pr⁡[ℋ(x)=y∣V, x∉dom⁡(T)]=1R.\Pr[\mathcal H(x)=y\mid V,\ x\notin\operatorname{dom}(T)]=\frac1R.

Widok VV zawiera dotychczasowe zapytania i odpowiedzi, nie przyszłe losowania. Przeciwnik może wybierać następne wejście zależnie od wcześniejszych wyników. Nowy, jeszcze niesprawdzony argument nadal otrzymuje niezależny wynik. Dla ponowionego argumentu odpowiedź jest natomiast całkowicie określona przez tabelę.

  • Spójność: ta sama wiadomość zawsze daje ten sam hasz w jednym eksperymencie. Nowe losowanie przy każdym powtórzeniu nie modelowałoby funkcji.
  • Nieprzewidywalność nowego wyniku: trafienie zadanej wartości w jednym świeżym zapytaniu ma prawdopodobieństwo 1/R1/R. W najwyżej tt świeżych próbach znalezienia obrazu równego ustalonemu celowi granica wynosi t/Rt/R.
  • Kolizje: przy tt różnych wejściach prawdopodobieństwo co najmniej jednej kolizji nie przekracza min⁡{1,t⋅(t−1)/(2R)}\min\{1,t\cdot(t-1)/(2R)\}. Nie zakazujemy kolizji i nie odrzucamy losowania tylko dlatego, że wynik wystąpił już dla innej wiadomości.

To klasyczne granice dla dostępu przez zapytania, nie gwarancja braku kolizji. Dla wyników długości nn bitów mamy R=2nR=2^n. W demonstracji R=101R=101, dlatego zbieżne wyniki nie są zaskoczeniem. Skrypt korzysta z generatora przeglądarki i losowania przez odrzucanie, aby nie wprowadzać obciążenia operacją modulo. Idealna niezależność należy do modelu matematycznego, nie do deklaracji o fizycznej losowości komputera.

Formalne podejście ROM wprowadza praca Bellare i Rogaway, Random Oracles are Practical: A Paradigm for Designing Efficient Protocols, ACM CCS 1993. Probabilistyka wyjaśnia własności idealnej funkcji. Bezpieczeństwo korzystającego z niej protokołu wymaga jeszcze osobnego dowodu.

ACM
Association for Computing Machinery. Międzynarodowe stowarzyszenie naukowe związane z informatyką.
CCS
Conference on Computer and Communications Security. Konferencja o bezpieczeństwie komputerów i komunikacji.

Granica idealizacji. SHA-256 jest konkretnym, skończonym algorytmem, a nie idealną losową funkcją. Dowód w modelu wyroczni losowej nie jest automatycznie dowodem po podstawieniu dowolnego hasza. Programowanie wyroczni przez symulator należy do narzędzi dowodu. Nie znaczy, że rzeczywisty przeciwnik może wybrać wynik SHA-256. Takie rozdzielenie modelu i implementacji pozwala czytać późniejsze dowody bez przypisywania stronom nierealnych uprawnień.

SHA-256
Secure Hash Algorithm. Algorytm bezpiecznego haszowania. W nazwie SHA-256 liczba oznacza 256-bitowy wynik.

Sprawdź rozumienie: jeżeli przeciwnik może poprosić o podpis dowolnej wiadomości, dlaczego nie wygrywa od razu? Co zmieni się, gdy po podpisie wolno mu również poznać jednorazową wartość losową używaną przy podpisywaniu, nazywaną nonce? Odpowiedź zależy od celu i ujawnień, a nie tylko od nazwy algorytmu.

Literatura: Goldwasser–Bellare, Boneh–Shoup.