Kryptografia II stopień
Od definicji bezpieczeństwa do konstrukcji, redukcji i publikacji naukowych.
W9. Podpisy, Fiat–Shamir i BLS
Nowa potrzeba: odbiorca nie uczestniczy w rozmowie w chwili tworzenia dokumentu. Chcemy zostawić wiadomość i obiekt, który sprawdzi później. Dlatego zastępujemy żywą rozmowę dwoma lokalnymi algorytmami: Sign u autora oraz Verify u odbiorcy. Weryfikacja nie wymaga ponownego połączenia z autorem.
Podpis nie jest zapisem dowolnej udanej identyfikacji. Taki zapis uczciwego Schnorra potrafi stworzyć poznany symulator. Potrzebujemy dodatkowego związania wyzwania z wiadomością. Pokaże je transformata Fiata–Shamira. Podpisy cyfrowe jako ogólna rodzina nie są z definicji nieinteraktywnymi dowodami z wiedzą zerową. W Schnorrze wykorzystujemy związek z dowodem znajomości sekretu i analizą w modelu wyroczni losowej. Własność podpisu, którą musimy następnie udowodnić, to niepodrabialność. W odróżnieniu od symulowalnego zapisu identyfikacji podpis jest przeznaczony do publicznego przekazywania i sprawdzania.
Podpis umożliwia publiczną weryfikację wiadomości. W EUF-CMA przeciwnik może uzyskać podpisy wybranych wiadomości, a wygrywa przez podpis nowej. Silna niepodrabialność dodatkowo wyklucza nowy podpis wiadomości już podpisanej.
Rozwinięcie skrótu EUF-CMA to existential unforgeability under chosen-message attack. „Egzystencjalne” oznacza, że wystarczy dowolna nowa wiadomość spełniająca warunek gry. Atak nie musi podrabiać konkretnego dokumentu wybranego przez audytora. „Wybrane wiadomości” oznaczają dostęp do podpisywania przed zakończeniem ataku. Weryfikacja podpisu jest publiczna, więc nie musimy ukrywać jej za tajną wyrocznią.
Podpis cyfrowy: Setup, KeyGen, Sign, Verify
Wracamy do kontraktu wprowadzonego na początku. Sign korzysta z klucza tajnego, a Verify z właściwego klucza publicznego. Wymaganie, aby przeciwnik nie tworzył nowych akceptowanych podpisów, jest osobną definicją niepodrabialności. Schemat zapisujemy jako:
| Algorytm i jego wynik | Wejście | Co wykonuje i komu służy |
|---|---|---|
| Parametr bezpieczeństwa | Ustala jawne parametry, kodowania i przestrzeń wiadomości. | |
| Parametry publiczne | Podpisujący tworzy powiązaną parę kluczy. | |
| Parametry, klucz tajny i wiadomość | Tworzy podpis z określonej przestrzeni podpisów . | |
| Parametry, klucz publiczny, wiadomość i podpis | Zwraca bit: 1 oznacza akceptację, 0 odrzucenie, także niepoprawnego formatu. |
Sign znaczy podpisz, a Verify sprawdź. W tym kursie opisujemy podpis z dołączoną wiadomością: weryfikator otrzymuje zarówno , jak i . Nie odzyskuje dokumentu z samego podpisu. W ogólnym interfejsie zakładamy, że Sign może wyznaczyć odpowiadający klucz publiczny z klucza tajnego i parametrów. Tam, gdzie potrzebne są dodatkowe jawne dane, zaznaczamy je w opisie konkretnego klucza.
Przy doskonałej poprawności dla każdych parametrów i pasującej pary kluczy zwracanych przez Setup oraz KeyGen wymagamy:
Prawdopodobieństwo w tym wzorze dotyczy losowości Sign przy ustalonych parametrach, kluczach i wiadomości. Sign może być losowy, jak w omawianym Schnorrze, albo deterministyczny, jak w podstawowym BLS przy ustalonym haszu. Verify jest tutaj deterministyczny. Niepodrabialność będzie mówiła o tworzeniu nowych akceptowanych podpisów przez przeciwnika. Nie wynika z samego równania poprawności.
Gdzie wykonuje się Sign
Użytkownik przekazuje urządzeniu dokładne bajty . Urządzenie odnajduje uprawniony klucz i uruchamia . Na zewnątrz zwraca podpis. To, że algorytm ma klucz wśród argumentów, nie oznacza wysyłania klucza do odbiorcy ani konieczności przekazywania go przy każdym wywołaniu przez aplikację. W API urządzenia aplikacja może podawać identyfikator klucza przechowywanego wewnątrz.
Do sprawdzenia potrzebne są . Jeśli odbiorca nie ma wiarygodnego powiązania z autorem, poprawne Verify potwierdza zgodność podpisu z tym kluczem, ale nie nazwisko autora. Ustalenie tego powiązania, kontrola uprawnień i ochrona urządzenia są częścią systemu otaczającego schemat.
Podpis Schnorra
Z rozmowy identyfikacyjnej przechodzimy do schematu . W tym dydaktycznym profilu podpis ma postać pary . Element jest zobowiązaniem, a skalar odpowiedzią. Wiadomość dostarczamy do Verify oddzielnie.
Podpis Schnorra: algorytmy i przepływ
Setup dołącza skalarny hasz ℋ oraz jednoznaczne kodowanie. Zaufany klucz publiczny jest znany przed Verify. Wiadomość m jest ciągiem bajtów.
G ma pierwszy rząd q i generator g. Ustal jednoznaczne kodowanie i separator domeny Schnorr.
Profil z całym ciałem, zgodnie z opisem konstrukcji. Sekret a pozostaje u właściciela. Odbiorca uwierzytelnia publiczny A.
Przed równaniem sprawdź klucz, X i s.
Podpis Schnorra
Podpisujący:
Weryfikator:
- Podpisujący, Sign: zobowiązanie:
- Podpisujący, Sign: wyzwanie i odpowiedź:
- Podpisujący → Weryfikator: Zapis lub przesłanie podpisanego dokumentu
- Weryfikator, Verify: samodzielne odtworzenie:
Setup: grupa i hasz Schnorra
Wejście: . Wyjście: . Grupa ma pierwszy rząd i generator . Funkcja zwraca skalar. Kodowanie jednoznacznie zapisuje typy i granice pól. Ustalamy także separator domeny . Parametry i oznaczenie profilu są wspólne dla podpisującego oraz weryfikatora. Późniejszy dowód analizuje w modelu wyroczni losowej.
KeyGen: klucze podpisującego
Wejście: . Losujemy i obliczamy . Wyjście: . Małe jest tajnym skalarem, a duże publicznym elementem grupy. To te same role co w protokole identyfikacji, ale inny interfejs niż w szyfrowaniu. Sign używa , a Verify używa .
Sign: tworzenie podpisu
Wejście: , klucz tajny i wiadomość . Algorytm wyznacza odpowiadający klucz publiczny . Następnie:
- Losuje świeże i oblicza .
- Oblicza .
- Oblicza .
- Zwraca .
Skalar nie jest częścią podpisu i nie może być ponownie używany w innym podpisywaniu. Wartość będzie odtworzona z jawnych danych, więc w tym formacie nie trzeba jej przesyłać.
Verify: sprawdzanie podpisu
Wejście: , klucz publiczny , wiadomość i podpis . Sprawdzamy jednoznaczny format oraz typy i . Błędne wejście daje 0. Dla poprawnego formatu obliczamy ponownie z tych samych czterech argumentów i zwracamy:
Algorytm nie otrzymuje ani . Nie ufa wartości podanej przez inną stronę.
Poprawność i przejście z identyfikacji
Dla podpisu zwróconego przez Sign zachodzi:
To dowód poprawności. Niepodrabialność wymaga osobnego dowodu z symulacją i forking lemma. Zgodnie z tym opisem losujemy z . Klucz jest degeneracją o prawdopodobieństwie . Profil odrzucający taki klucz musi jawnie zmienić regułę KeyGen, nie samo równanie Verify.
Weryfikator nie wysyła już losowego wyzwania. Sam wylicza je z klucza, zobowiązania i wiadomości. Podpisujący musi więc najpierw ustalić zobowiązanie, następnie policzyć hasz, a dopiero potem odpowiedź. Dziedzina oznaczona napisem Schnorr rozdziela to zastosowanie od innych protokołów korzystających z podobnych obiektów.
Dwa formaty tego samego podpisu
W powyższym formacie przesyłamy , a weryfikator oblicza . Można zamiast tego przesłać i odzyskać zobowiązanie. Klucz publiczny nadal wynosi . Dla tego samego kodowania i tej samej etykiety domeny weryfikator wykonuje:
Nawias kwadratowy oznacza bit wyniku porównania. Przed tym rachunkiem sprawdzamy parametry, dozwoloną podgrupę klucza oraz kanoniczne kodowanie skalarów . Stosujemy te same reguły dopuszczalności klucza i zobowiązania co w wybranym profilu Sign. Nie wystarczy obliczyć i ogłosić sukcesu. Dla dowolnych skalarów da się obliczyć jakiś element grupy. Dopiero ponowne obliczenie hasza i porównanie wiąże wynik z wiadomością.
W realizacji addytywnej i . Przy uczciwym podpisie odtwarzamy dokładnie pierwotne , więc oba formaty prowadzą do tego samego wejścia hasza. Zadania C6.6 i L4.7 pozwalają porównać liczbę przesyłanych bajtów i działania Verify. Zmiana formatu nie jest nową gwarancją bezpieczeństwa i nie uzasadnia zmiany dziedziny hasza między implementacjami.
Ataki na błędne warianty hasza
Pominięcie zobowiązania.
Celowo błędny wariant wylicza , pomijając . Przeciwnik zna wtedy przed ustaleniem zobowiązania. Wybiera dowolne i oblicza:
Oddaje . Weryfikacja przechodzi dla wiadomości . Nie znalazł kolizji hasza i nie poznał klucza. Konstrukcja pozwoliła mu rozwiązać równanie w niewłaściwej kolejności. Powrót do związania zobowiązania zamyka tę prostą strategię, ale pełny dowód nadal wymaga symulacji zapytań i argumentu forking.
„Hasz” o zbyt prostej algebrze.
Rozważmy inną, jawnie błędną funkcję , gdzie wiadomości są skalarami, a kodowanie publiczne. Z podpisu wiadomości przeciwnik wybiera i tworzy:
Nowe wyzwanie jest równe poprzedniemu, więc równanie podpisu nadal zachodzi. Aby spełnić warunek nowej wiadomości, trzeba uzyskać . Atak pokazuje znaczenie struktury funkcji, nie ogólną wadę dodawania w ciele. W poprawnym podpisie używamy właściwej funkcji z właściwym modelem, a nie dowolnego kodowania nazwanego haszem.
Zbyt krótkie wyzwanie.
Jeśli wyzwanie ma tylko możliwych wartości, oszust może zgadywać , wybierać , tworzyć i sprawdzać, czy hasz zwrócił zgadnięte . Dla świeżych wejść w idealnym modelu prawdopodobieństwo trafienia wynosi na próbę. Mała przestrzeń wyzwań osłabia podpis niezależnie od rozmiaru grupy.
To nie ten sam rachunek co poszukiwanie dowolnej kolizji hasza z kosztem urodzinowym. Tutaj trzeba trafić określoną wartość po ustaleniu związanej z nią reszty danych. Zanim użyjesz pierwiastka z rozmiaru przestrzeni, nazwij dokładnie zdarzenie, którego szukasz.
Hash wiąże wiadomość, klucz i zobowiązanie. Model wyroczni losowej idealizuje hash. Redukcja może programować odpowiedzi pod warunkami tego modelu. Implementacja nie ma programowalnego SHA.
Forking lemma służy otrzymaniu drugiego kompatybilnego wykonania ze zmienionym wyzwaniem. Nie gwarantuje sukcesu. Symulację i straty wyprowadzamy w pogłębieniu dowodowym.
Podpis BLS
W BLS podpis jest jednym elementem grupy, zamiast pary zobowiązanie–odpowiedź. Nadal mamy ten sam ogólny interfejs . Zmieniają się typ podpisu i sposób sprawdzania. Poniżej opisujemy pojedynczy podpis, nie agregację podpisów.
Podpis BLS: algorytmy i przepływ
Grupy mają wspólny pierwszy rząd q. Ustal generator g₂, kodowania i separator domeny hash-to-group.
Sprawdź podgrupy, kodowania i niezerowy klucz.
Podpis BLS
Podpisujący:
Weryfikator:
- Podpisujący, Sign: hash do grupy:
- Podpisujący, Sign: działanie sekretem:
- Podpisujący → Weryfikator: Podpis jest jednym elementem
- Weryfikator, Verify:
Setup: grupy i hash do punktu
Wejście: . Wyjście: wraz z kodowaniami i separatorem domeny hasza. Grupy mają ten sam pierwszy rząd . Pairing jest biliniowy i niezdegenerowany, a generuje . Funkcja poprawnie haszuje wiadomość do grupy, w uzgodnionym profilu haszowania. Nie jest jawnym kodowaniem do skalaru pomnożonego przez stałą bazę.
KeyGen: sekret i klucz w drugiej grupie
Wejście: . Losujemy niezerowe i obliczamy . Wyjście: . Publiczny należy do . Podpis będzie należał do . W podstawowym wariancie nie trzeba publikować drugiego klucza w .
Sign: haszowanie i działanie sekretem
Wejście: , klucz tajny oraz wiadomość . Wyznaczamy i zwracamy . Przy ustalonym kluczu i profilu hasza wynik jest deterministyczny. Nie losujemy osobnego nonce jak w Schnorrze.
Verify: równanie parowań
Wejście: , klucz publiczny , wiadomość i podpis . Sprawdzamy kodowania i przynależność do podgrup oraz . Odrzucamy neutralny klucz publiczny. Dla błędnego wejścia zwracamy 0. W przeciwnym razie samodzielnie liczymy i zwracamy 1 wtedy i tylko wtedy, gdy:
Argumenty pairingu mają ustaloną kolejność: najpierw element , potem element . Weryfikator nie potrzebuje sekretu .
Poprawność, notacja i demonstrator
Podpis i jego kontrola mają prosty zapis potęgowy:
Obie strony są równe . Hasz daje element grupy, nie jawny skalar do pomnożenia przez stały generator. Potęgowanie hasza oznacza tu działanie sekretnego skalara na otrzymanej bazie. W implementacji na krzywej ta sama operacja nosi nazwę mnożenia skalarnego.
W addytywnych grupach źródłowych , . Sprawdzamy:
Multiplikatywnie zapisujemy . To mnożenie punktu przez skalar zapisane potęgą, nie potęgowanie współrzędnych.
Gdy wariant używa także , zgodność reprezentacji sprawdza . Podstawowy wariant nie musi publikować obu. Grupy źródłowe nie są zamienne w API.
MCL WebAssembly, BLS12-381. Podpis w i klucz publiczny w . Lokalne hashAndMapToG1, nie deklaracja standardowej ciphersuite.
Zapis i obliczenia. Wzory schematu są multiplikatywne. MCL realizuje je na krzywej. Generatory odpowiadają punktom . W grupach punktów iloczyn oznacza dodawanie, potęga oznacza mnożenie punktu przez skalar, a odwrotność oznacza punkt przeciwny. Nie potęgujemy współrzędnych. Ten schemat używa również pairingu. W grupie docelowej zapis pozostaje multiplikatywny.
Gotowe do rozpoczęcia.
Błędny zamiennik: dla znanego publicznie . Z podpisu dla odzyskujemy i tworzymy podpis każdej wiadomości. Poprawny hash do grupy nie ujawnia tak znanego logarytmu.
Demonstrator używa hashAndMapToG1 MCL. Nie deklaruje standardowego formatu BLS ani konkretnego zestawu RFC 9380. Bada pojedyncze podpisy. Agregacja wymaga dodatkowych warunków, np. ochrony przed rogue-key attacks.
Pełna ścieżka dowodowa: Schnorr: symulator, fork i redukcja DL, Okamoto: podpis i dwie reprezentacje. Najpierw przeczytaj definicję EUF-CMA powyżej. Rozdziały dowodowe podają założenia, wszystkie interfejsy oraz straty prawdopodobieństwa.
Powiązania: C6, L4, Boneh–Lynn–Shacham, RFC 9380.
W10. Ustalanie kluczy: DH, SIGMA i NAXOS
- NAXOS
- NAXOS. Nazwa własna protokołu uwierzytelnionej wymiany klucza, nie skrót rozwijany do angielskich słów.
Nowa potrzeba: nie wystarczy rozpoznać rozmówcy ani podpisać dokumentu. Dwie strony chcą uzyskać ten sam świeży sekret do ochrony kolejnych wiadomości i wiedzieć, z kim go współdzielą. Uzgodnienie klucza jest protokołem. Podpis jest jednym z możliwych narzędzi jego uwierzytelniania, a nie kompletnym protokołem wymiany.
Interfejs AKE: klucze długoterminowe i stan sesji
AKE, authenticated key exchange, oznacza uwierzytelnione uzgadnianie klucza. Dla omawianych systemów z kluczami publicznymi uporządkujemy opis jako
Jest to wspólny interfejs dydaktyczny dla maszyny stanów protokołu. Publikacje mogą grupować te czynności inaczej. Nie jest to twierdzenie, że każdy protokół AKE ma identyczne komunikaty lub korzysta z podpisów. W SIGMA KeyGen przygotuje klucze podpisu, a w NAXOS klucze dla działań grupowych. Inne rodziny AKE mogą używać współdzielonego sekretu lub hasła.
Niech oznacza lokalną tożsamość, zamierzonego partnera, a rolę inicjatora lub odpowiadającego. Stan zawiera m.in. klucz długoterminowy lub odwołanie do niego, świeże sekrety sesji, dotychczasowe komunikaty i etap protokołu. Bufor zawiera komunikat do wysłania, a komunikat otrzymany. Pusty bufor zapisujemy jako .
| Wywołanie | Wynik i znaczenie |
|---|---|
| Profil grup, algorytmów, kodowań i długości kluczy. | |
| Długoterminowe klucze uczestnika. Rejestracja wiąże jego tożsamość z . | |
| Nowy prywatny stan oraz pierwszy komunikat albo . Weryfikowane klucze partnerów uzyskujemy z uzgodnionego mechanizmu rejestracji. | |
| Kolejny stan, odpowiedź do sieci i status: kontynuacja, odrzucenie lub akceptacja. oznacza, że aplikacja nie otrzymuje jeszcze klucza. Przy akceptacji otrzymuje o długości ustalonej przez profil. |
Klucz wewnętrznie obliczony z otrzymanych punktów nie jest automatycznie kluczem zaakceptowanej sesji. Najpierw muszą przejść kontrole wymagane przez protokół. Wywołanie Next odrzuca także komunikat w niewłaściwym formacie lub niedozwolony na danym etapie. Po zakończeniu nie kontynuuje tej samej sesji z nowymi komunikatami.
Poprawność: jeśli uczciwi, zgodnie skonfigurowani partnerzy wykonają cały protokół i otrzymają wymagane komunikaty, akceptują zgodny klucz oraz właściwego partnera. Bezpieczeństwo: w określonym modelu aktywnej sieci przeciwnik nie powinien rozpoznać klucza świeżej sesji ani naruszyć wymaganej gwarancji uwierzytelnienia. Dokładne reguły partnerowania i ujawnień są częścią definicji. Nie wyprowadza się ich z samej równości dwóch kluczy.
Rdzeń DH i atak pośrednika
W DH Alicja wysyła , Bob , a oboje liczą . Przeciwnik pośrodku może zastąpić punkty i uzgodnić dwa sekrety. Zgodność uczciwego rachunku nie zapewnia tożsamości rozmówcy.
Podstawowa wymiana Diffiego–Hellmana: algorytmy i przepływ
To jeszcze nie AKE. Nie ma klucza tożsamości ani uwierzytelnienia partnera. Start tworzy jednorazową parę sesji, a Finish kończy lokalne obliczenie.
Rząd q jest liczbą pierwszą. Ustal kodowania i działania grupy. Dodatkowe funkcje wskazano przy konstrukcji.
Sprawdź podgrupę i odrzuć neutralny Y. Wynik jest elementem grupy, nie kluczem AES.
Podstawowa wymiana Diffiego–Hellmana
Alicja:
Bob:
- Alicja, Start:
- Alicja → Bob: Pierwszy wkład
- Bob, Start:
- Bob → Alicja: Drugi wkład
- Alicja, Finish:
- Bob, Finish:
AKE łączy uwierzytelnianie z ustanowieniem świeżego klucza. Potrzebne są jednoznaczne kodowania, role, identyfikatory, transkrypt i właściwa KDF. Oddzielne etykiety wyznaczają klucze aplikacyjne, klucze MAC i kierunki komunikacji.
Od elementu grupy do bajtów klucza
Wspólny jest elementem grupy, nie od razu kluczem AES. Najpierw obie strony kodują go w identyczny ciąg bajtów . Następnie KDF korzysta z tego tajnego materiału i jawnego kontekstu. Wyprowadza osobne bajty dla każdego zastosowania, np. klucz MAC i klucz szyfrowania . Kontekst zawiera uzgodnione identyfikatory protokołu, sesji i ról.
To zapis interfejsu, nie specyfikacja konkretnej KDF. W HKDF etap Extract przetwarza materiał wejściowy z użyciem soli, a Expand wyprowadza klucze z informacją o kontekście i przeznaczeniu. Szczegółowy profil protokołu określa kodowanie, sól i długości. Ten praktyczny mechanizm odróżniamy od idealnej wyroczni wyprowadzającej klucz w dowodzie NAXOS. Nie zastępujemy jednej drugim bez osobnej analizy.
Dwie rozmowy zamiast jednej: man in the middle
Alicja wysyła , ale Ewa zatrzymuje go i wysyła Bobowi . Bob odpowiada , a Ewa podmienia odpowiedź dla Alicji na . Alicja liczy , które Ewa oblicza jako . Bob liczy , które Ewa oblicza jako . Ewa nie zna ani , ale zna oba klucze.
Problemem nie jest złamanie CDH. Ewa rozwiązuje dwa zadania, w których sama wybrała jeden wykładnik. Potrzebujemy uwierzytelnienia wkładów i połączenia ich z tożsamościami oraz rolami. Samo poprawne potęgowanie po obu stronach nie daje tego związku.
Zobacz oba sekrety pośrednika
W poniższym rachunku i są uczciwymi wkładami. W wariancie ataku Ewa podstawia dla Boba oraz dla Alicji. Indeks oznacza element faktycznie otrzymany z sieci. Sprawdzamy osobno i . Strona Ewy używa wyłącznie przechwyconych elementów oraz własnych skalarów. Nie otrzymuje ani . Realizacja na krzywej zapisuje te same równości jako i .
MCL WebAssembly, BLS12-381. Małe edytowalne sekrety służą wyłącznie nauce. Rysunek przedstawia tok obliczeń, nie wysyłanie sekretów. Nie jest to pełny AKE.
Zapis i obliczenia. Wzory schematu są multiplikatywne. MCL realizuje je na krzywej. Generator odpowiada punktowi . W grupach punktów iloczyn oznacza dodawanie, potęga oznacza mnożenie punktu przez skalar, a odwrotność oznacza punkt przeciwny. Nie potęgujemy współrzędnych. Ten rachunek nie używa pairingu.
Gotowe.
Obliczenia MCL na krzywej. Poniżej pokazujemy konkretne operacje biblioteki. Grupy punktów zapisujemy addytywnie.
Alicja i Bob
Oczekuje.
Przekazanie albo podmiana
Oczekuje.
Wspólne elementy grupy
Oczekuje.
Kontrola zgodności i wiedzy Ewy
Oczekuje.
Sprawdź: Najpierw sprawdź uczciwą rozmowę. Następnie włącz podmianę. Kto potrafi teraz policzyć każdy z dwóch elementów grupy?
To demonstracja nieuwierzytelnionego DH, nie implementacja SIGMA ani NAXOS. Uzyskany punkt wymaga jeszcze wyprowadzenia kluczy z kontekstem. Dodanie KDF samo nie uwierzytelnia podstawionych wkładów.
SIGMA: podpis i MAC mają różne zadania
Podpis wiąże wkłady DH. MAC pod kluczem wyprowadzonym z DH wiąże tożsamość z wymianą.
SIGMA: podstawowy przepływ: algorytmy i przepływ
To podstawowa struktura SIGMA, nie kompletny profil IKE. Parametry obejmują grupę, podpis, MAC i KDF. Start i Next mają interfejs maszyny AKE z W10. Poniżej rozpisujemy ich czynności. Tożsamości muszą odpowiadać zarejestrowanym kluczom. Początkowy stan Boba zawiera parametry, jego klucz sekretny, rolę i oczekiwanego partnera.
- IKE
- Internet Key Exchange. Protokół uzgadniania kluczy i parametrów ochrony połączenia.
Ustal kodowania, role i kontekst pełnego profilu.
Klucz podpisu wiążemy z tożsamością.
Zapamiętaj x, X, partnera i rolę.
Wyprowadź k_m z Z i kontekstu. Zachowaj stan do kontroli M₃.
Najpierw waliduj Y, związek ID_B z kluczem, podpis i MAC. Przy błędzie odrzuć. Wyprowadź oddzielny klucz aplikacji.
Sprawdź partnera. Stan accepted jest wydawany tylko po wymaganych kontrolach profilu.
SIGMA: podstawowy przepływ
Alicja:
Bob:
- Alicja, Start: pierwszy wkład: Sekret x pozostaje u Alicji.
- Alicja → Bob: 1. Wkład Diffiego–Hellmana
- Bob, Next: wkład i klucz MAC: Najpierw sprawdź grupę i niejednostkowość X.
- Bob, Next: podpis i znacznik tożsamości:
- Bob → Alicja: 2. Wkład, tożsamość, podpis i MAC Boba
- Alicja, Next: odtwórz klucz MAC: Najpierw sprawdź grupę i niejednostkowość Y.
- Alicja, Next: sprawdź Boba: Sprawdź też powiązanie ID z kluczem partnera.
- Alicja, Next: własny podpis i MAC: Odpowiedz tylko po poprawnej weryfikacji.
- Alicja → Bob: 3. Tożsamość, podpis i MAC Alicji
- Bob, Next: sprawdź Alicję: Sprawdź też powiązanie ID z kluczem partnera.
- ID
- identifier / identification. Identyfikator / identyfikacja, zależnie od nazwy pola. RP ID identyfikuje usługę, a ID Token przekazuje informację o uwierzytelnieniu.
To nie kompletny format IKE. Profile określają kontekst, role, kodowania i ewentualne szyfrowanie tożsamości. Klucz musi być powiązany ze sprawdzoną tożsamością. Podpis pod jednym punktem nie zastępuje konstrukcji.
Który algorytm jest wywoływany w SIGMA
Rozpiszmy skróty z rysunku. Parametry schematu podpisu oznaczamy przez , a zarejestrowane klucze Boba przez . Dla podstawowego przepływu powyżej jest podpisywaną wiadomością Boba, a wiadomością Alicji. Kolejność pól rozróżnia role. Pełny profil ustala ponadto separatory domen i kontekst protokołu.
- Bob oblicza wspólny sekret: . Z jego kodowania wyprowadza klucz do MAC i oddzielny materiał na klucz aplikacyjny.
- Bob wywołuje podpis: . Klucz pozostaje w urządzeniu, a trafia do komunikatu.
- Bob uwierzytelnia tożsamość w tej wymianie: . To znacznik MAC, nie drugi podpis cyfrowy.
- Alicja weryfikuje: oblicza i zgodny . Uruchamia oraz . Sprawdza również, czy jest właściwym zarejestrowanym kluczem wskazanego partnera.
- Alicja odsyła własny dowód: wywołuje Sign ze swoim dla oraz Tag dla swojej tożsamości. Bob wykonuje odpowiadające sprawdzenia. Każda lokalna sesja wydaje klucz aplikacji dopiero zgodnie z warunkami akceptacji profilu.
To rozwinięcie interfejsów Sign, Verify, Tag i Check w podstawowej strukturze SIGMA, nie kompletna specyfikacja IKE. Konkretne kodowania, certyfikaty, ochrona tożsamości i momenty akceptacji wymagają pełnego profilu. Porównanie ról podpisu i MAC oraz warianty przepływu przedstawia Krawczyk, SIGMA, §5.
NAXOS: zalążek nie jest wykładnikiem
Ten sam cel AKE, inne wnętrze algorytmu Next. NAXOS nie jest SIGMA z zamienionym haszem. Zamiast dołączać podpisy wiąże długoterminowe i efemeryczne sekrety poprzez działania grupowe oraz wyrocznie wyprowadzające wykładnik i klucz. Dlatego nie dopisujemy mu wywołania Sign, którego w tej konstrukcji nie ma.
NAXOS: dwie wiadomości, trzy wspólne składniki: algorytmy i przepływ
Publiczne A i B są zaufanymi kluczami partnerów. ℋ zwraca skalar, a niezależna wyrocznia 𝒦 klucz bitowy. Prywatne zalążki mają długość ustaloną w parametrach. Początkowy stan Boba zawiera jego sekret, parametry i tożsamości obu stron.
Sekret a pozostaje u właściciela. Odbiorca uwierzytelnia publiczny A.
Stan obejmuje zalążek, rolę, partnera i dane potrzebne do końcowego obliczenia.
Po kontroli punktu Y i zaufanego klucza B.
Ten sam porządek tożsamości i składników. Nie dodajemy nieobecnego w NAXOS podpisu.
NAXOS: dwie wiadomości, trzy wspólne składniki
Alicja:
Bob:
- Alicja, Start:
- Alicja → Bob: Wkład z pochodnego wykładnika
- Bob, Next:
- Bob → Alicja: Drugi wkład
- Alicja, Next: wyprowadzenie klucza:
- Bob, Next: wyprowadzenie klucza:
Alicja ma sekret stały i zalążek , Bob . Niech , :
oznacza tutaj skalarną wyrocznię publikacji. Niezależna odpowiada wyroczni klucza i daje ciąg bitów:
Składniki są kolejno równe , i . Tożsamości mają ten sam porządek. Ujawnienie nie jest ujawnieniem . Bez nie odtwarza się po prostu wejścia hasza.
Co wykazujemy poza poprawnością
- Określamy sesję, partnerowanie, zakończenie i ujawniane stany.
- Wybieramy świeżą sesję testową. Nie ujawniamy jej klucza ani klucza partnera.
- Definiujemy kompromitacje. CK i eCK nie są jedną definicją.
- CK
- Canetti–Krawczyk. Nazwiska autorów modelu bezpieczeństwa uwierzytelnionej wymiany klucza.
- eCK
- extended Canetti–Krawczyk. Rozszerzony model Canettiego–Krawczyka. Dopuszczalne ujawnienia określa jego definicja.
- Symulujemy wszystkie dozwolone zapytania, a udane rozróżnianie przekształcamy w rozwiązanie problemu trudnego.
Pogłębienie AKE zawiera gry i przypadki ujawnień. L5 rozdziela obliczenia DH i KDF od uwierzytelniania.
Od klucza sesji do kanału
Klucz AKE jest wynikiem protokołu, nie gotowym szyfrogramem. Po akceptacji wyprowadzamy oddzielne klucze kierunkowe. Dla jednego kierunku używamy poznanego AEAD:
Tutaj jest nonce unikalnym dla danego klucza w profilu wymagającym unikalności, a jawnymi danymi dodatkowymi. Mogą one wiązać identyfikator sesji, kierunek i numer rekordu. Odbiorca przekazuje aplikacji tylko po poprawnej kontroli. Musi również egzekwować politykę numerów rekordów, bo sam poprawny tag nie wykrywa ponownego dostarczenia całego starego rekordu.
Widzimy już trzy różne warstwy: podpis uwierzytelnia dane wymiany, AKE ustanawia klucze, AEAD chroni rekordy. Następny rozdział rozwiąże inny problem: zaszyfrowanie wiadomości, kiedy odbiorca nie uczestniczy teraz w rozmowie.