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.

Pogłębienie B. Rewinding i forking lemma

Dwa dowody, jedna idea algebraiczna. W identyfikacji ekstraktor sam wysyła drugie wyzwanie po odtworzeniu stanu dowodzącego. W podpisie wyzwanie jest odpowiedzią hasza. Redukcja musi więc ponownie uruchomić fałszerza ze zmienioną wyrocznią i doprowadzić do drugiego fałszerstwa dotyczącego tego samego zobowiązania. To dodatkowe wymaganie ma mierzalny koszt.

Najpierw ustalimy funkcjonalność i model, potem zbudujemy algorytm redukcji. Każdą stratę prawdopodobieństwa policzymy oddzielnie. Symbol ⊥\bot oznacza niepowodzenie, Pr⁡[E]\Pr[E] prawdopodobieństwo zdarzenia EE, a E[Z]\mathbb E[Z] wartość oczekiwaną zmiennej ZZ, czyli średnią ważoną prawdopodobieństwami jej wyników. Wszystkie eksperymenty są klasyczne. Nie obejmują kwantowych zapytań do wyroczni. Przeciwnicy mają jawny limit czasu, wielomianowy względem parametru bezpieczeństwa.

Identyfikacja Schnorra: pełny dowód z cofaniem przebiegu

1. Co dokładnie ma zapewniać schemat?

Publiczna grupa G=⟨g⟩G=\langle g\rangle ma pierwszy rząd qq. Jej działanie zapisujemy multiplikatywnie. Sekret to a∈Zqa\in\mathbb Z_q, a klucz publiczny to A=gaA=g^a. Parametry pppp obejmują grupę, generator, rząd i jednoznaczne kodowania. Skalary dodajemy i mnożymy modulo qq. Odbiorca sprawdza typy, przynależność do grupy i zakresy skalarów przed użyciem równania.

Schemat to krotka ΠID=(Setup,KeyGen,P,V)\Pi_{\mathrm{ID}}=(\mathsf{Setup},\mathsf{KeyGen},P,V). Dwa ostatnie algorytmy są interaktywne. Ich kroki i stan prywatny są zdefiniowane w formalnym opisie Schnorra. Przypomnijmy interfejsy potrzebne w dowodzie:

Algorytm Wejście i wynik Czynność
KeyGen\mathsf{KeyGen} pp⟼(A,a)pp\longmapsto(A,a) a←$Zqa\overset{\$}{\leftarrow}\mathbb Z_q, A=gaA=g^a
Commit\mathsf{Commit} pp⟼(X,u)pp\longmapsto(X,u) u←$Zqu\overset{\$}{\leftarrow}\mathbb Z_q, X=guX=g^u. Tylko XX jest wysyłane
Challenge\mathsf{Challenge} (pp,A,X)⟼c(pp,A,X)\longmapsto c c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q, po otrzymaniu poprawnego XX
Respond\mathsf{Respond} (pp,a,u,c)⟼s(pp,a,u,c)\longmapsto s s=u+a⋅c(modq)s=u+a\cdot c\pmod q. Stan z nonce uu jest jednorazowy
Check\mathsf{Check} (pp,A,X,c,s)⟼b(pp,A,X,c,s)\longmapsto b b=[gs=X⋅Ac]b=[g^s=X\cdot A^c], po kontroli typów

Poprawność. Uczciwy dowodzący zawsze przechodzi test, ponieważ

gs=gu+a⋅c=gu⋅(ga)c=X⋅Ac.g^s=g^{u+a\cdot c}=g^u\cdot(g^a)^c=X\cdot A^c.

Cel bezpieczeństwa. Przeciwnik ma przekonać uczciwego weryfikatora bez znajomości aa. Nie definiujemy porażki jako samego braku dostępu do algorytmu Respond. Przeciwnik może wykonywać dowolne obliczenia. Wygraną jest rzeczywista akceptacja jego odpowiedzi.

Rozważamy podszywanie po pasywnym treningu. Przeciwnik otrzymuje pp,App,A i może żądać wielomianowo wielu niezależnych transkryptów uczciwych sesji. Liczbę żądań i moment zakończenia treningu może dobierać adaptacyjnie. W końcowej sesji sam wysyła XX, otrzymuje świeże jednostajne cc i odpowiada ss. Nie ma wtedy dostępu do żywego uczciwego dowodzącego. Nie dostaje nonce ani klucza prywatnego. Nie zakładamy bezpieczeństwa wobec przekazywania wyzwania równolegle prawdziwemu użytkownikowi.

2. Symulator transkryptów nie potrzebuje sekretu

Symulator Sim(pp,A)\mathsf{Sim}(pp,A) losuje niezależnie c,s←$Zqc,s\overset{\$}{\leftarrow}\mathbb Z_q, oblicza X=gs⋅A−cX=g^s\cdot A^{-c} i zwraca (X,c,s)(X,c,s). Weryfikacja akceptuje. Ważniejsze jest jednak to, że rozkład całej trójki jest identyczny z uczciwym przebiegiem, a nie jedynie to, że równanie się zgadza.

Uczciwy przebieg wybiera (u,c)(u,c) z prawdopodobieństwem 1/q21/q^2. Dla ustalonego klucza odwzorowanie

(u,c)⟼(s,c)=(u+a⋅c,c)(u,c)\longmapsto(s,c)=(u+a\cdot c,c)

jest bijekcją na Zq2\mathbb Z_q^2. Jego odwrotność to u=s−a⋅cu=s-a\cdot c. Każdy dopuszczalny transkrypt ma więc w obu doświadczeniach prawdopodobieństwo 1/q21/q^2. To doskonała wiedza zerowa wobec uczciwego weryfikatora, czyli perfect honest-verifier zero knowledge. Symulator wybiera wyzwanie. Ten argument nie daje mu możliwości narzucania wyzwań złośliwemu weryfikatorowi w aktywnych sesjach.

Redukcja otrzymuje instancję problemu logarytmu dyskretnego (pp,A)(pp,A) i odpowiada na każde żądanie treningowe nowym wynikiem Sim. Nie zna aa, ale nie traci na symulacji żadnego prawdopodobieństwa. Przez indukcję po adaptacyjnych żądaniach cały widok przeciwnika ma właściwy rozkład.

3. Dwa transkrypty wydobywają ten sam sekret

Niech P∗P^* oznacza program podszywającego się przeciwnika. Ekstraktor uruchamia go z ustaloną taśmą losową, symuluje trening i zapamiętuje stan vv po wysłaniu XX, przed otrzymaniem cc. Taśma zawiera również bity, które program wykorzysta dopiero później. Po jej ustaleniu odpowiedź programu na konkretne wyzwanie jest deterministyczna. Przekroczenie limitu czasu lub brak odpowiedzi oznacza odrzucenie.

Identyfikacja: dwa wyzwania, ten sam stanStan v przed wyzwaniemPierwsze wyzwanieOdpowiedź z zapisanego stanuPierwsza kontrolaOdtworzenie i nowe wyzwanieOdpowiedź z tego samego stanuDruga kontrolaEkstrakcja po obu kontrolach

Identyfikacja: dwa wyzwania, ten sam stan

v:pp,A,X,ρv:\quad pp,A,X,\rho

Pierwsza gałąź
  1. Pierwsze wyzwanie: c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q
  2. Odpowiedź z zapisanego stanu: s←P∗(v,c)s\leftarrow P^*(v,c)
  3. Pierwsza kontrola: gs=?X⋅Acg^s\stackrel{?}{=}X\cdot A^c
Druga gałąź
  1. Odtworzenie i nowe wyzwanie: c′←$Zqc'\overset{\$}{\leftarrow}\mathbb Z_q
  2. Odpowiedź z tego samego stanu: s′←P∗(v,c′)s'\leftarrow P^*(v,c')
  3. Druga kontrola: gs′=?X⋅Ac′g^{s'}\stackrel{?}{=}X\cdot A^{c'} c′≠cc'\ne c

a^=(s−s′)⋅(c−c′)−1(modq)\widehat a=(s-s')\cdot(c-c')^{-1}\pmod q

ga^=?Ag^{\widehat a}\stackrel{?}{=}A

Cofamy program przeciwnika, nie uczciwe urządzenie. Stan i taśma losowa są te same, ale wyzwania są niezależne. Porażka którejkolwiek kontroli kończy próbę bez ekstrakcji.

Ekstraktor ExtractIDP∗(pp,A)\mathsf{ExtractID}^{P^*}(pp,A) wykonuje następujące czynności:

  1. Uruchamia trening i pierwszą część końcowej sesji. Jeśli nie uzyska poprawnego XX, zwraca ⊥\bot.
  2. Zapamiętuje vv. Losuje c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q, otrzymuje ss i sprawdza Check. Przy odrzuceniu zwraca ⊥\bot.
  3. Przywraca ten sam stan i taśmę. Losuje niezależnie c′←$Zqc'\overset{\$}{\leftarrow}\mathbb Z_q i otrzymuje s′s'. Sprawdza Check i c′≠cc'\ne c. Inaczej zwraca ⊥\bot.
  4. Oblicza a^=(s−s′)⋅(c−c′)−1(modq)\widehat a=(s-s')\cdot(c-c')^{-1}\pmod q. Sprawdza ga^=Ag^{\widehat a}=A i zwraca a^\widehat a.

Z dwóch akceptacji wynika kolejno

gsgs′=X⋅AcX⋅Ac′,gs−s′=Ac−c′,\frac{g^s}{g^{s'}}=\frac{X\cdot A^c}{X\cdot A^{c'}}, \qquad g^{s-s'}=A^{c-c'},
s−s′≡a⋅(c−c′)(modq),a^=(s−s′)⋅(c−c′)−1(modq).s-s'\equiv a\cdot(c-c')\pmod q, \qquad \widehat a=(s-s')\cdot(c-c')^{-1}\pmod q.

Ostatni krok jest legalny, bo qq jest pierwsze, a c−c′c-c' nie jest zerem w Zq\mathbb Z_q. W szczególności nie wystarczą dwa dowolne poprawne przebiegi. Muszą mieć ten sam klucz i to samo zobowiązanie oraz różne wyzwania. Ta własność nazywa się special soundness, czyli ekstrakcją świadka z dwóch akceptujących transkryptów o wspólnym pierwszym komunikacie.

Przykład liczbowy. W małej grupie G=⟨2⟩⊂Z47∗G=\langle2\rangle\subset\mathbb Z_{47}^* rzędu 2323 weźmy a=7a=7, więc A=34A=34. Dla u=9u=9 mamy X=42X=42. Wyzwania c=4c=4 i c′=12c'=12 dają odpowiedzi s=14s=14 i s′=1s'=1. Oba testy akceptują, a ekstraktor otrzymuje

a^=(14−1)⋅(4−12)−1≡13⋅15−1≡13⋅20≡7(mod23).\widehat a=(14-1)\cdot(4-12)^{-1} \equiv13\cdot15^{-1}\equiv13\cdot20\equiv7\pmod{23}.

Mała grupa służy sprawdzeniu rachunku, nie bezpieczeństwu. Cofanie jest uprawnieniem redukcji uruchamiającej kod przeciwnika. Nie zakładamy, że zewnętrzny napastnik może cofać uczciwe urządzenie. Jeżeli urządzenie rzeczywiście powtórzy nonce w dwóch sesjach, ten sam rachunek staje się atakiem na jego sekret.

4. Dokładne prawdopodobieństwo ekstrakcji

Dla ustalonego stanu vv niech kvk_v oznacza liczbę wyzwań, na które P∗P^* odpowiada poprawnie. Wtedy pv=kv/qp_v=k_v/q jest warunkowym prawdopodobieństwem akceptacji. Gdy program nie dotarł do poprawnego zobowiązania, przyjmujemy kv=0k_v=0. Dwa niezależne wyzwania tworzą q2q^2 jednakowo prawdopodobnych par. Dokładnie kv⋅(kv−1)k_v\cdot(k_v-1) par daje dwie akceptacje z różnymi wyzwaniami. Zatem

Pr⁡[ExtractID≠⊥∣v]=kv⋅(kv−1)q2=pv2−pvq.\Pr[\mathsf{ExtractID}\ne\bot\mid v] =\frac{k_v\cdot(k_v-1)}{q^2} =p_v^2-\frac{p_v}{q}.

Niech ϵ=E[pv]\epsilon=\mathbb E[p_v] będzie prawdopodobieństwem podszycia. Uśredniamy po treningu i losowości przeciwnika. Nieujemność wariancji daje E[pv2]≥(E[pv])2\mathbb E[p_v^2]\ge(\mathbb E[p_v])^2, stąd pełny rachunek:

Pr⁡[ExtractID≠⊥]=E[pv2]−E[pv]q≥ϵ2−ϵq.\Pr[\mathsf{ExtractID}\ne\bot] =\mathbb E[p_v^2]-\frac{\mathbb E[p_v]}q \ge\epsilon^2-\frac\epsilon q.

Twierdzenie ID. Jeśli istnieje przeciwnik odnoszący sukces ϵ\epsilon w opisanym modelu pasywnym, istnieje redukcja do logarytmu dyskretnego o sukcesie co najmniej max⁡{0,ϵ⋅(ϵ−1/q)}\max\{0,\epsilon\cdot(\epsilon-1/q)\}. Potrzebuje najwyżej dwóch wykonań przeciwnika, dokładnej symulacji treningu oraz ekstrakcji. Gdy qq rośnie wykładniczo z parametrem bezpieczeństwa, nieznikomy sukces podszycia daje nieznikomy sukces rozwiązania logarytmu dyskretnego. To sprzeczne z założeniem jego trudności.

Dlaczego nie możemy usunąć 1/q1/q? Bez sekretu można przygotować odpowiedź na jedno przewidziane wyzwanie c0c_0. Wybieramy s0s_0, ustalamy X=gs0⋅A−c0X=g^{s_0}\cdot A^{-c_0} i odpowiadamy tylko, gdy c=c0c=c_0. Dla niezerowego klucza daje to sukces 1/q1/q, ale nie dwa różne akceptujące wyzwania. Liczba 1/q1/q to knowledge error, czyli próg błędu wiedzy. Nie oznacza prawdopodobieństwa wycieku klucza.

Liczba akceptujących wyzwań przy q=23q=23 Sukces jednej sesji Sukces dwóch różnych wyzwań
1 1/231/23 0/5290/529
2 2/232/23 2/5292/529
12 12/2312/23 132/529132/529
23 23/2323/23 506/529506/529

Jeżeli dolna granica sukcesu jednej niezależnej próby na ustalonym kluczu wynosi b>0b>0, to po rr próbach prawdopodobieństwo niepowodzenia jest najwyżej (1−b)r≤e−r⋅b(1-b)^r\le e^{-r\cdot b}. Oczekiwana liczba prób do sukcesu jest najwyżej 1/b1/b. Nie wolno wyprowadzać takiej granicy oczekiwanego czasu dla każdego klucza wyłącznie ze średniego sukcesu po losowych kluczach. Rachunek jednej próby pozostaje poprawny również po uśrednieniu po kluczu, z ponownym użyciem nieujemnej wariancji.

Podpis Schnorra: pełna redukcja niepodrabialności

1. Krotka algorytmów i granice twierdzenia

Schemat podpisu to ΠSig=(Setup,KeyGen,Sign,Verify)\Pi_{\mathrm{Sig}}=(\mathsf{Setup},\mathsf{KeyGen},\mathsf{Sign},\mathsf{Verify}). Setup ustala pp=(G,q,g,enc⁡)pp=(G,q,g,\operatorname{enc}) oraz dziedzinę wyroczni skalarnej ℋ:{0,1}∗→Zq\mathcal H:\{0,1\}^*\to\mathbb Z_q. Funkcja enc jest jednoznaczna. Stały znacznik domeny Schnorr\mathtt{Schnorr} oddziela ten schemat od innych zastosowań hasza.

Algorytm Wejście i wynik Ciało
KeyGen\mathsf{KeyGen} pp⟼(A,a)pp\longmapsto(A,a) a←$Zqa\overset{\$}{\leftarrow}\mathbb Z_q, A=gaA=g^a
Signℋ\mathsf{Sign}^{\mathcal H} (pp,a,m)⟼(X,s)(pp,a,m)\longmapsto(X,s) Losuj u←$Zqu\overset{\$}{\leftarrow}\mathbb Z_q. Oblicz X=guX=g^u, t=enc⁡(Schnorr,A,X,m)t=\operatorname{enc}(\mathtt{Schnorr},A,X,m), c=ℋ(t)c=\mathcal H(t), s=u+a⋅c(modq)s=u+a\cdot c\pmod q
Verifyℋ\mathsf{Verify}^{\mathcal H} (pp,A,m,(X,s))⟼b(pp,A,m,(X,s))\longmapsto b Sprawdź typy. Oblicz to samo tt i c=ℋ(t)c=\mathcal H(t). Zwróć b=[gs=X⋅Ac]b=[g^s=X\cdot A^c]

Poprawność wynika z tego samego równania co w identyfikacji. Diagram uczciwego podpisywania znajduje się przy definicji schematu. Teraz badamy, czy przeciwnik może uzyskać akceptację dla nowej wiadomości.

Eksperyment EUF-CMA, czyli existential unforgeability under chosen-message attack, bada egzystencjalną niepodrabialność przy adaptacyjnie wybieranych wiadomościach. Przeciwnik A\mathcal A otrzymuje pp,App,A. Ma najwyżej QH≥1Q_H\ge1 zapytań do Hash i QSQ_S żądań Sign. Prowadzimy zbiór MSM_S wiadomości przekazanych do Sign. Wygrywa, gdy zwróci (m∗,X∗,s∗)(m^*,X^*,s^*) takie, że m∗∉MSm^*\notin M_S i Verify zwraca 1. Nowy podpis wcześniej podpisanej wiadomości nie jest wygraną tego eksperymentu.

Najpierw ustalamy A≠1GA\ne1_G. Nie zmieniamy po cichu wcześniejszego KeyGen. Przy losowaniu aa z całego ciała zdarzenie A=1GA=1_G ma prawdopodobieństwo 1/q1/q. W takim kluczu a=0a=0 jest jawne i każdy może podpisywać. Jeśli ϵall\epsilon_{\mathrm{all}} jest sukcesem dla całego KeyGen, a ϵ\epsilon sukcesem warunkowym dla A≠1GA\ne1_G, to

ϵall≤1q+(1−1q)⋅ϵ,ϵ≥max⁡{0,ϵall−1/q1−1/q}.\epsilon_{\mathrm{all}}\le\frac1q+\left(1-\frac1q\right)\cdot\epsilon, \qquad \epsilon\ge\max\left\{0,\frac{\epsilon_{\mathrm{all}}-1/q}{1-1/q}\right\}.

Dalsze twierdzenie dotyczy tego niezerowego profilu. Przy KeyGen losującym od początku z Zq∗\mathbb Z_q^* powyższej korekty nie potrzeba. Zerowy klucz nie psuje algebraicznej ekstrakcji w identyfikacji, bo jego logarytm wynosi po prostu zero. Ma jednak znaczenie dla poniższego oszacowania zgadywania hasza.

2. Redukcja dostaje trudny klucz i symuluje podpisującego

Redukcja B\mathcal B otrzymuje instancję DL, czyli discrete logarithm, problemu logarytmu dyskretnego (pp,A)(pp,A), bez aa. Przekazuje AA przeciwnikowi. Utrzymuje jedną początkowo pustą tabelę TT wejść hasza, wartości i ich pochodzenia. Zbiór zapisanych wejść oznaczamy przez dom⁡T\operatorname{dom}T. Pochodzenie jest informacją wewnętrzną redukcji. Przeciwnik go nie widzi.

Procedura Pełna obsługa
Hash(t)\mathsf{Hash}(t), istniejący wpis Zwróć T[t]T[t]. Nie losuj ponownie i nie przydzielaj nowego indeksu
Hash(t)\mathsf{Hash}(t), nowe wejście Pobierz kolejną niezależną odpowiedź hi←$Zqh_i\overset{\$}{\leftarrow}\mathbb Z_q. Zapisz (t,hi,i)(t,h_i,i) i zwróć hih_i
SimSign(m)\mathsf{SimSign}(m) Losuj niezależnie c,s←$Zqc,s\overset{\$}{\leftarrow}\mathbb Z_q. Oblicz X=gs⋅A−cX=g^s\cdot A^{-c} i t=enc⁡(Schnorr,A,X,m)t=\operatorname{enc}(\mathtt{Schnorr},A,X,m). Jeśli t∈dom⁡Tt\in\operatorname{dom}T, przerwij całe wykonanie. Inaczej zapisz (t,c,sign)(t,c,\mathtt{sign}), dodaj mm do MSM_S i zwróć (X,s)(X,s)

Symulator nie nadpisuje wcześniejszego hasza, nawet jeżeli jego wylosowane cc przypadkiem zgadza się z wpisem. Przerwanie jest świadomym uproszczeniem redukcji. Nie jest zachowaniem uczciwego podpisującego. Wpis programowany przez SimSign nie zużywa pozycji taśmy h1,…,hQHh_1,\ldots,h_{Q_H}. Późniejszy odczyt tego wpisu przez Hash też jej nie zużywa.

3. Dlaczego symulacja wygląda jak prawdziwe podpisy?

Gdy tt jest świeże, prawdziwy Sign wybiera jednostajne (u,c)(u,c) i oblicza s=u+a⋅cs=u+a\cdot c. SimSign wybiera jednostajne (s,c)(s,c). Bijekcja z dowodu identyfikacji daje identyczny rozkład (X,c,s)(X,c,s). Redukcja nie musi znać uu ani aa, aby wytworzyć ten rozkład.

Pozostaje konflikt z wcześniejszą tabelą. Przy jj-tym żądaniu podpisu jest w niej najwyżej QH+j−1Q_H+j-1 wpisów. Dla ustalonego cc skalar s−a⋅cs-a\cdot c jest jednostajny, więc XX jest jednostajne na GG. Każdy wcześniejszy wpis dotyczący tego samego A,mA,m wyklucza najwyżej jedno z qq zobowiązań. Warunkowe prawdopodobieństwo pierwszego konfliktu jest najwyżej (QH+j−1)/q(Q_H+j-1)/q. Sumujemy po żądaniach:

Pr⁡[abort]≤δS=min⁡{1,∑j=1QSQH+j−1q}=min⁡{1,QS⋅QH+QS⋅(QS−1)/2q}.\Pr[\mathrm{abort}]\le\delta_S =\min\left\{1,\sum_{j=1}^{Q_S}\frac{Q_H+j-1}{q}\right\} =\min\left\{1,\frac{Q_S\cdot Q_H+Q_S\cdot(Q_S-1)/2}{q}\right\}.

Nie zakładamy niezależności konfliktów. To nierówność sumy prawdopodobieństw. Sprzęgamy oba eksperymenty tak, aby do pierwszego konfliktu dawały te same transkrypty. Ich wyniki mogą się różnić tylko po konflikcie. Sukces symulowanego przeciwnika jest zatem co najmniej ϵ−δS\epsilon-\delta_S. Jest to przykład argumentu „identyczne do bad” w metodzie gier.

4. Wybierz sukces, którego hasz można rozwinąć ponownie

Jeżeli przeciwnik nie zapytał Hash o t∗=enc⁡(Schnorr,A,X∗,m∗)t^*=\operatorname{enc}(\mathtt{Schnorr},A,X^*,m^*), to tego wpisu nie mogła też utworzyć Sign. Wiadomość m∗m^* jest świeża. Weryfikacja losuje wtedy nowy, niezależny skalar. Dla ustalonych A≠1G,X∗,s∗A\ne1_G,X^*,s^* równanie akceptacji dopuszcza dokładnie jedno cc, ponieważ AA ma rząd qq. Sukces bez wcześniejszego pytania ma więc prawdopodobieństwo najwyżej 1/q1/q.

Niech η\eta oznacza rzeczywisty sukces po symulacji, ograniczony do fałszerstw z takim wcześniejszym pytaniem. Dostajemy

η≥ϵ0,ϵ0=max⁡{0,ϵ−δS−1/q}.\eta\ge\epsilon_0, \qquad \epsilon_0=\max\{0,\epsilon-\delta_S-1/q\}.

Procedura Run(pp,A,ρ,h1,…,hQH)\mathsf{Run}(pp,A,\rho,h_1,\ldots,h_{Q_H}) odtwarza cały ten eksperyment. ρ\rho zawiera taśmę przeciwnika i prywatne losowania SimSign. Przy odpowiednim sukcesie Run zwraca (I,m∗,X∗,s∗)(I,m^*,X^*,s^*), gdzie II jest indeksem pierwszego zapytania Hash tworzącego wpis t∗t^*. Inaczej zwraca (0,⊥)(0,\bot). Jeżeli wpisu brakuje, Run odrzuca wynik bez dodatkowego losowania hasza. Ta klasa sukcesów została już odjęta w oszacowaniu ϵ0\epsilon_0. Brakujące odpowiedzi do długości QHQ_H dopełniamy niewykorzystanymi niezależnymi skalarami.

5. Rozwidlenie musi odtworzyć stan, nie tylko zmienić c

Podpis: wspólny prefiks, dwa niezależne sufiksyTen sam prefiks przed pytaniem IPierwsza odpowiedź i sufiksPierwszy sukces RunWspólne dane do ekstrakcjiNowa odpowiedź i nowy sufiksDrugi sukces RunWarunki rozwidleniaEkstrakcja po obu kontrolach

Podpis: wspólny prefiks, dwa niezależne sufiksy

pp,A,ρ,h1,…,hI−1pp,A,\rho,h_1,\ldots,h_{I-1}

tI=enc⁡(Schnorr,A,X,m)t_I=\operatorname{enc}(\mathtt{Schnorr},A,X,m)

Pierwsza gałąź
  1. Pierwsza odpowiedź i sufiks: hI=ch_I=c hI,…,hQ←$Zqh_I,\ldots,h_Q\overset{\$}{\leftarrow}\mathbb Z_q
  2. Pierwszy sukces Run: (I,m,X,s)(I,m,X,s) gs=X⋅Acg^s=X\cdot A^c
  3. Wspólne dane do ekstrakcji: I≠0I\ne0 tI=enc⁡(Schnorr,A,X,m)t_I=\operatorname{enc}(\mathtt{Schnorr},A,X,m)
Druga gałąź
  1. Nowa odpowiedź i nowy sufiks: hI′=c′h'_I=c' hI′,…,hQ′←$Zqh'_I,\ldots,h'_Q\overset{\$}{\leftarrow}\mathbb Z_q
  2. Drugi sukces Run: (I′,m′,X′,s′)(I',m',X',s') gs′=X′⋅Ac′g^{s'}=X'\cdot A^{c'}
  3. Warunki rozwidlenia: I′=I,c′≠cI'=I,\quad c'\ne c m′=m,X′=Xm'=m,\quad X'=X

a^=(s−s′)⋅(c−c′)−1(modq)\widehat a=(s-s')\cdot(c-c')^{-1}\pmod q

ga^=?Ag^{\widehat a}\stackrel{?}{=}A

Q=QHQ=Q_H. Drugie wykonanie ponownie tworzy tabelę i nie dziedziczy wpisów pierwszego sufiksu. Równość indeksów zapewnia wspólną wiadomość i zobowiązanie. Porażka którejkolwiek kontroli kończy próbę bez ekstrakcji.

Algorytm Fork\mathsf{Fork} wykonuje dokładnie następujący eksperyment:

  1. Losuje ρ\rho i niezależne h1,…,hQH←$Zqh_1,\ldots,h_{Q_H}\overset{\$}{\leftarrow}\mathbb Z_q. Wywołuje Run. Jeśli I=0I=0, zwraca ⊥\bot.
  2. Zachowuje ρ\rho oraz h1,…,hI−1h_1,\ldots,h_{I-1}. Losuje niezależny sufiks hI′,…,hQH′h'_I,\ldots,h'_{Q_H}.
  3. Uruchamia Run od początku z tymi danymi. Dostaje (I′,m′,X′,s′)(I',m',X',s') albo porażkę. Każdy wpis tabeli powstaje ponownie podczas wykonania. Wpisów z pierwszego sufiksu nie kopiuje.
  4. Wymaga I′=I≠0I'=I\ne0 i hI′≠hIh'_I\ne h_I. Obie gałęzie muszą spełniać warunki poprawności i świeżości. Inaczej zwraca ⊥\bot.
  5. Zwraca a^=(s∗−s′)⋅(hI−hI′)−1(modq)\widehat a=(s^*-s')\cdot(h_I-h'_I)^{-1}\pmod q, po sprawdzeniu ga^=Ag^{\widehat a}=A.

Dlaczego wiadomość i zobowiązanie są te same? Do chwili wysłania pytania numer II program widzi identyczny klucz, losowość, odpowiedzi i symulowane podpisy. Jest deterministyczny po ustaleniu tych danych. Wysyła więc identyczne t∗t^*. Jednoznaczność enc ustala te same A,X∗,m∗A,X^*,m^*. Jeżeli drugie fałszerstwo wskazuje również indeks II, dotyczy właśnie tego wejścia. Nie jest potrzebne założenie, że reszta obu wykonań pozostanie identyczna.

Czego nie wolno dopowiedzieć? Druga gałąź może przestać odnosić sukces, przerwać symulację podpisu albo oprzeć fałszerstwo na innym pytaniu. Nie wolno przyjąć, że zmiana jednego wyzwania automatycznie zachowuje sukces. Tę trudność rozwiązuje poniższy rachunek.

Lemat o rozwidleniu: dowód, nie tylko gotowy wzór

Udowodnimy wersję o dwóch wykonaniach. To współczesna postać z Bellarego–Nevena, Lemma 1, wyrażająca precyzyjnie ideę Pointchevala–Sterna. Historyczny harmonogram z ich oryginalnymi stałymi wyprowadzimy osobno. W tej części QQ jest liczbą pozycji odpowiedzi, a hh rozmiarem alfabetu wyzwań. Dla naszego Schnorra Q=QHQ=Q_H i h=qh=q.

1. Warunkowanie po wspólnym prefiksie

Dla pozycji ii niech vv obejmuje publiczne wejście, całą taśmę ρ\rho i odpowiedzi h1,…,hi−1h_1,\ldots,h_{i-1}. Definiujemy

pi(v)=Pr⁡[Run zwraca indeks i∣v],μi=Ev[pi(v)].p_i(v)=\Pr[\mathsf{Run}\text{ zwraca indeks }i\mid v], \qquad \mu_i=\mathbb E_v[p_i(v)].

Prawdopodobieństwo pi(v)p_i(v) dotyczy dolosowania całego sufiksu od ii. Jeśli program w tym prefiksie nie może odnieść sukcesu z indeksem ii, wartość wynosi zero. Sumowanie po wszystkich prefiksach nadal jest poprawne. Zdarzenia wskazania różnych indeksów są rozłączne, dlatego ∑i=1Qμi=η\sum_{i=1}^Q\mu_i=\eta.

2. Policz dwa sukcesy o wspólnym indeksie

Przy ustalonym vv pierwszy i drugi sufiks są niezależne. Dwa sukcesy z indeksem ii mają prawdopodobieństwo pi(v)2p_i(v)^2. Nie twierdzimy, że sukcesy są niezależne bez warunkowania. Wspólny prefiks właśnie je wiąże. Zatem

Pr⁡[I=I′≠0]=∑i=1QEv[pi(v)2].\Pr[I=I'\ne0]=\sum_{i=1}^Q\mathbb E_v[p_i(v)^2].

Nieujemna wariancja daje E[Z2]≥(E[Z])2\mathbb E[Z^2]\ge(\mathbb E[Z])^2. Nierówność Cauchy'ego–Schwarza daje (∑iμi)2≤Q⋅∑iμi2(\sum_i\mu_i)^2\le Q\cdot\sum_i\mu_i^2. Stosując je kolejno, otrzymujemy

Pr⁡[I=I′≠0]≥∑i=1Qμi2≥(∑i=1Qμi)2Q=η2Q.\Pr[I=I'\ne0] \ge\sum_{i=1}^Q\mu_i^2 \ge\frac{(\sum_{i=1}^Q\mu_i)^2}{Q} =\frac{\eta^2}{Q}.

3. Usuń pary z równym wyzwaniem

Po dowolnym pierwszym sukcesie nowe hI′h'_I jest jednostajne i niezależne od całego pierwszego wykonania. Powtórzy hIh_I z prawdopodobieństwem 1/h1/h. Zdarzenie „pierwszy sukces i równe wyzwania” ma więc prawdopodobieństwo η/h\eta/h. Jego usunięcie może zabrać najwyżej tyle par sukcesów. Ostatecznie

Pr⁡[fork]≥max⁡{0,η2Q−ηh}.\Pr[\mathrm{fork}]\ge\max\left\{0,\frac{\eta^2}{Q}-\frac\eta h\right\}.

To kończy dowód lematu. Kwadrat pochodzi z dwóch sufiksów. Dzielenie przez QQ pochodzi z rozdzielenia sukcesów między indeksy. Odjęcie η/h\eta/h usuwa równe wyzwania. Nie mnożymy wyniku ponownie przez 1/Q1/Q. Indeks odczytujemy z pierwszego fałszerstwa, a cena zgodności indeksów została już policzona.

4. Wstaw wszystkie straty i zakończ redukcję Schnorra

Dwa sukcesy lematu mają to samo X∗,m∗X^*,m^* i różne c,c′c,c'. Algebraiczna ekstrakcja z identyfikacji daje więc dokładnie aa. Pełne twierdzenie przyjmuje postać

Pr⁡[B rozwiązuje DL]≥max⁡{0,ϵ02QH−ϵ0q},ϵ0=max⁡{0,ϵ−δS−1/q}.\Pr[\mathcal B\text{ rozwiązuje DL}] \ge\max\left\{0,\frac{\epsilon_0^2}{Q_H}-\frac{\epsilon_0}{q}\right\}, \qquad \epsilon_0=\max\{0,\epsilon-\delta_S-1/q\}.

Podstawienie dolnego oszacowania jest legalne. Funkcja f(x)=max⁡{0,x2/QH−x/q}f(x)=\max\{0,x^2/Q_H-x/q\} jest zerowa dla 0≤x≤QH/q0\le x\le Q_H/q, a następnie rosnąca. Dla nieznikomego ϵ\epsilon, wielomianowych budżetów i wykładniczo dużego qq otrzymujemy nieznikomy sukces DL. To dowodzi EUF-CMA w zadeklarowanym klasycznym modelu wyroczni losowej, ROM, czyli random oracle model, pod założeniem trudności DL.

Koszt. Oznaczmy przez TrunT_{\mathrm{run}} ograniczenie czasu całego Run, łącznie z symulacją. Jeśli samo wykonanie kodu przeciwnika kosztuje najwyżej TAT_{\mathcal A}, to można przyjąć

Trun≤TA+QS⋅(2Texp+Tmul+Tenc)+Ttab+Ttest.T_{\mathrm{run}}\le T_{\mathcal A} +Q_S\cdot(2T_{\mathrm{exp}}+T_{\mathrm{mul}}+T_{\mathrm{enc}}) +T_{\mathrm{tab}}+T_{\mathrm{test}}.

TexpT_{\mathrm{exp}} ogranicza potęgowanie w GG, a TmulT_{\mathrm{mul}} iloczyn grupowy. TencT_{\mathrm{enc}} obejmuje kodowanie wejścia podpisu, TtabT_{\mathrm{tab}} wszystkie operacje tabel, losowania i księgowanie, a TtestT_{\mathrm{test}} końcowe sprawdzenie fałszerstwa. Odpowiednie koszty uwzględniają długości wiadomości. Redukcja zużywa najwyżej 2Trun+Textract2T_{\mathrm{run}}+T_{\mathrm{extract}}. Ekstrakcja obejmuje odejmowania i odwrotność w Zq\mathbb Z_q oraz jedno potęgowanie kontrolne. Nie ma pairingu.

Składnik Przyczyna Czego nie zakładamy
δS\delta_S Konflikt programowanego wejścia z tabelą Nie nadpisujemy odpowiedzi hasza
1/q1/q przed rozwidleniem Trafiony hasz bez zapytania Nie każde fałszerstwo wskazuje indeks
1/QH1/Q_H wewnątrz lematu Wspólny istotny indeks dwóch sukcesów Drugie fałszerstwo może dotyczyć czegoś innego
η/q\eta/q wewnątrz lematu Przypadkowo takie samo wyzwanie Nie dzielimy przez zero

Granica nie obejmuje wycieku nonce, resetowania uczciwego podpisującego ani pairingowych modyfikacji protokołu. Zamiana idealnej wyroczni na konkretny hash jest etapem instancjacji, nie twierdzeniem, że każda funkcja skrótu dziedziczy ten dowód.

Poniższy kalkulator używa ogólnego alfabetu h=2kh=2^k i podanego już sukcesu ϵ0\epsilon_0 po odjęciu strat symulacji. Nie oblicza δS\delta_S za użytkownika. W dokładnym rachunku dla naszego skalarnego hasza alfabet ma rozmiar h=qh=q, a nie dowolnie zaokrągloną potęgę dwójki.

Forking · dolna granica prawdopodobieństwa

Granica dotyczy zdefiniowanego eksperymentu. Nie jest pomiarem sukcesu konkretnego fałszerza.

Gotowe do rozpoczęcia.

Pointcheval–Stern: skąd biorą się wszystkie stałe?

Powyższy dowód daje ograniczony czas jednej próby. Teraz prześledzimy historyczny harmonogram wielu prób z §3.1 pracy Security Arguments for Digital Signatures and Blind Signatures. To inny algorytm, więc jego stałej 8448084480 nie wstawiamy do poprzedniej granicy prawdopodobieństwa.

Ustalamy publiczne wejście i maszynę atakującą bez wyroczni podpisującej. Jej sukces wynosi ϵ\epsilon, liczba pytań jest najwyżej Q≥1Q\ge1, a czas jednego wykonania najwyżej TT. Alfabet odpowiedzi ma hh elementów. Oryginał posługuje się h=2kh=2^k. Dla kursowego Schnorra stosujemy h=qh=q. Potrzebujemy założenia, że sukces bez istotnego pytania ma prawdopodobieństwo najwyżej 1/h1/h. Dla A≠1GA\ne1_G i skalarnych wyzwań wynika ono z równania weryfikacji.

Przekład oznaczeń. Pointcheval i Stern zapisują klucz publiczny jako y=g−xy=g^{-x} i sprawdzają r=gs⋅yer=g^s\cdot y^e. Nasze oznaczenia to a=xa=x, A=y−1A=y^{-1}, X=rX=r i c=ec=e. Wtedy ten sam test przyjmuje postać gs=X⋅Acg^s=X\cdot A^c. Rachunek poniżej dotyczy jawnie podanego alfabetu wyzwań. Nie zakładamy, że redukowanie dowolnego ciągu bitów modulo qq zawsze daje jednostajny skalar.

1. Próg 7 i klasy sukcesów

Zakładamy ϵ≥7Q/h\epsilon\ge7Q/h. Niech SS będzie zdarzeniem sukcesu z zadanym istotnym pytaniem, a SiS_i sukcesu z indeksem ii. Oznaczmy ν=Pr⁡[S]\nu=\Pr[S]. Wtedy

ν≥ϵ−1/h≥6ϵ/7.\nu\ge\epsilon-1/h\ge6\epsilon/7.

Klasa jest ciężka, jeśli Pr⁡[Si∣S]≥1/(2Q)\Pr[S_i\mid S]\ge1/(2Q). Lekkich klas jest najwyżej QQ, więc ich łączna masa warunkowa jest najwyżej 1/21/2. Co najmniej połowa sukcesów trafia do ciężkich klas. Każda ciężka klasa ma bezwarunkową masę co najmniej ν/(2Q)\nu/(2Q).

2. Splitting lemma: dobry prefiks istnieje z policzalną częstością

W ciężkiej klasie nazwijmy prefiks dobrym, gdy pi(v)≥ν/(4Q)p_i(v)\ge\nu/(4Q). Symbol 1E\mathbf1_E oznacza wskaźnik zdarzenia. Ma wartość 1, gdy EE zachodzi, a 0 w przeciwnym przypadku. Masa sukcesów tej klasy pochodzących ze złych prefiksów wynosi

Ev[pi(v)⋅1{pi(v)<ν/(4Q)}]≤ν4Q.\mathbb E_v\bigl[p_i(v)\cdot\mathbf1_{\{p_i(v)<\nu/(4Q)\}}\bigr] \le\frac\nu{4Q}.

Cała klasa ma masę co najmniej ν/(2Q)\nu/(2Q), więc najwyżej połowa jej sukcesów pochodzi ze złych prefiksów. Po znalezieniu sukcesu prawdopodobieństwo jednoczesnego trafienia ciężkiej klasy i dobrego prefiksu jest co najmniej (1/2)⋅(1/2)=1/4(1/2)\cdot(1/2)=1/4. Jest to konkretne zastosowanie splitting lemma, czyli lematu o podziale przestrzeni wykonań na dobre prefiksy i ich kontynuacje. Nie wymaga niezależności dwóch tych zdarzeń. Drugie oszacowanie jest warunkowe w każdej ciężkiej klasie.

Z dobrego prefiksu prawdopodobieństwo użytecznej drugiej gałęzi jest co najmniej

ν4Q−1h≥6ϵ28Q−ϵ7Q=ϵ14Q.\frac\nu{4Q}-\frac1h \ge\frac{6\epsilon}{28Q}-\frac\epsilon{7Q} =\frac\epsilon{14Q}.

3. Znane epsilon: 2, 14, 16 oraz 1/9

Wykonujemy do ⌈2/ϵ⌉\lceil2/\epsilon\rceil niezależnych prób znalezienia pierwszego sukcesu. Szansa znalezienia go jest co najmniej 1−e−2ν/ϵ≥1−e−12/7>4/51-e^{-2\nu/\epsilon}\ge1-e^{-12/7}>4/5. Pierwszy znaleziony sukces ma rozkład wykonania warunkowany przez SS, więc z prawdopodobieństwem co najmniej 1/41/4 daje dobry prefiks.

Z tego prefiksu wykonujemy do ⌈14Q/ϵ⌉\lceil14Q/\epsilon\rceil niezależnych kontynuacji. Użyteczna druga gałąź pojawi się z prawdopodobieństwem co najmniej 1−e−1>3/51-e^{-1}>3/5. Cały eksperyment odnosi sukces z prawdopodobieństwem większym niż

45⋅14⋅35=325>19.\frac45\cdot\frac14\cdot\frac35=\frac3{25}>\frac19.

Planowana liczba wykonań spełnia

⌈2ϵ⌉+⌈14Qϵ⌉<16Qϵ+2.\left\lceil\frac2\epsilon\right\rceil+ \left\lceil\frac{14Q}\epsilon\right\rceil <\frac{16Q}\epsilon+2.

To pochodzenie stałych z Lemma 2. Autorzy zapisują budżet bez jawnego narzutu zaokrągleń. Dla rzeczywistej całkowitej liczby wywołań zachowujemy powyższe dwa sufity. Nie nazywamy 16Q/ϵ16Q/\epsilon dokładną liczbą uruchomień programu.

4. Nieznane epsilon: harmonogram adaptacyjny

Redukcja nie zna ϵ\epsilon ani ν\nu. W etapie j=0,1,…j=0,1,\ldots wykonuje nowe niezależne próby do pierwszego sukcesu w SS. Niech NjN_j będzie ich liczbą. Następnie wykonuje najwyżej ⌊140Nj⋅αj⌋\lfloor140N_j\cdot\alpha^j\rfloor kontynuacji uzyskanego prefiksu, gdzie α=8/7\alpha=8/7. Zatrzymuje się po użytecznym rozwidleniu. Inaczej przechodzi do następnego etapu. Używamy podłogi, aby budżet był całkowity i nie przekraczał wskazanej wartości.

NjN_j ma rozkład geometryczny o średniej 1/ν1/\nu. Czas oczekiwania i uzyskany pierwszy sukces są niezależne. Dla dowolnego podzbioru E⊆SE\subseteq S zachodzi bowiem

Pr⁡[Nj=n, E przy pierwszym sukcesie]=(1−ν)n−1⋅Pr⁡[E]=Pr⁡[Nj=n]⋅Pr⁡[E∣S].\Pr[N_j=n,\ E\text{ przy pierwszym sukcesie}] =(1-\nu)^{n-1}\cdot\Pr[E] =\Pr[N_j=n]\cdot\Pr[E\mid S].

Ponadto Pr⁡[Nj<1/(5ν)]≤1/5\Pr[N_j<1/(5\nu)]\le1/5. Wystarczy zsumować prawdopodobieństwa sukcesu w mniej niż 1/(5ν)1/(5\nu) pierwszych próbach. Zatem Pr⁡[Nj≥1/(5ν)]≥4/5≥3/4\Pr[N_j\ge1/(5\nu)]\ge4/5\ge3/4. Ostatnie, słabsze oszacowanie zachowujemy, aby odtworzyć stałe autorów.

Niech ℓ=⌈log⁡αQ⌉\ell=\lceil\log_\alpha Q\rceil. Dla j≥ℓj\ge\ell i Nj≥1/(5ν)N_j\ge1/(5\nu) liczba kontynuacji jest większa niż 28Q/ν−128Q/\nu-1. Prawdopodobieństwo użytecznej kontynuacji dobrego prefiksu jest co najmniej ν/(12Q)\nu/(12Q), ponieważ

1h≤ϵ7Q≤ν6Q,ν4Q−1h≥ν12Q.\frac1h\le\frac\epsilon{7Q}\le\frac\nu{6Q}, \qquad \frac\nu{4Q}-\frac1h\ge\frac\nu{12Q}.

Iloczyn liczby kontynuacji i dolnej granicy sukcesu jest większy niż

(28Qν−1)⋅ν12Q=73−ν12Q≥94>2.\left(\frac{28Q}\nu-1\right)\cdot\frac\nu{12Q} =\frac73-\frac\nu{12Q}\ge\frac94>2.

Uwzględniliśmy więc również podłogę w budżecie. Prawdopodobieństwo znalezienia drugiej gałęzi jest większe niż 1−e−2>6/71-e^{-2}>6/7. Od etapu ℓ\ell szansa sukcesu etapu jest co najmniej (1/4)⋅(3/4)⋅(6/7)=9/56>1/7(1/4)\cdot(3/4)\cdot(6/7)=9/56>1/7. Przyjmujemy zachowawczo γ=6/7\gamma=6/7 jako górną granicę porażki etapu.

5. Oczekiwany koszt i liczba 84480

Niech RjR_j oznacza zdarzenie dotarcia do etapu jj. Dla j<ℓj<\ell używamy granicy Pr⁡[Rj]≤1\Pr[R_j]\le1, a dla j≥ℓj\ge\ell granicy Pr⁡[Rj]≤γj−ℓ\Pr[R_j]\le\gamma^{j-\ell}. Koszt rozpoczętego etapu to najwyżej Nj+140Nj⋅αj≤141Nj⋅αjN_j+140N_j\cdot\alpha^j\le141N_j\cdot\alpha^j. Jego świeże próby są niezależne od wcześniejszych etapów. Dlatego dla łącznej liczby wykonań NN:

E[N]≤141ν∑j≥0αj⋅Pr⁡[Rj].\mathbb E[N]\le\frac{141}\nu\sum_{j\ge0}\alpha^j\cdot\Pr[R_j].

Nie warunkujemy średniej NjN_j przez przyszły moment zakończenia całego algorytmu. Takie warunkowanie mogłoby zmienić rozkład czasu oczekiwania. Sumujemy koszt tylko z prawdopodobieństwem rozpoczęcia etapu.

Aby uzyskać historyczną stałą, osłabiamy oszacowanie, zastępując αj\alpha^j większą wartością αj+1/(α−1)\alpha^{j+1}/(\alpha-1). Używamy też 141/ν≤(141⋅7/6)/ϵ<165/ϵ141/\nu\le(141\cdot7/6)/\epsilon<165/\epsilon. Rozdzielenie sumy na etapy przed ℓ\ell i po nim daje

E[N]≤165ϵ⋅αℓ+1α−1⋅(1α−1+11−α⋅γ).\mathbb E[N]\le\frac{165}\epsilon\cdot \frac{\alpha^{\ell+1}}{\alpha-1}\cdot \left(\frac1{\alpha-1}+\frac1{1-\alpha\cdot\gamma}\right).

Pierwszy składnik pochodzi z ograniczenia skończonej sumy geometrycznej. Drugi pochodzi z ogona ∑t≥0(α⋅γ)t\sum_{t\ge0}(\alpha\cdot\gamma)^t. Teraz każde podstawienie jest jawne:

1α−1=7,α⋅γ=4849,11−α⋅γ=49,\frac1{\alpha-1}=7,\qquad \alpha\cdot\gamma=\frac{48}{49},\qquad \frac1{1-\alpha\cdot\gamma}=49,
αℓ≤α⋅Q,αℓ+1α−1≤647⋅Q.\alpha^\ell\le\alpha\cdot Q, \qquad \frac{\alpha^{\ell+1}}{\alpha-1} \le\frac{64}{7}\cdot Q.

Otrzymujemy

E[N]≤165ϵ⋅64Q7⋅(7+49)=84480Qϵ.\mathbb E[N]\le\frac{165}\epsilon\cdot\frac{64Q}{7}\cdot(7+49) =\frac{84480Q}\epsilon.

Jeżeli TT obejmuje koszt pojedynczego wykonania z obsługą wyroczni i kontrolą sukcesu, czas uzyskania rozwidlenia ma wartość oczekiwaną najwyżej 84480⋅Q⋅T/ϵ84480\cdot Q\cdot T/\epsilon. Dla redukcji do DL dodajemy jednorazowy koszt ekstrakcji. Harmonogram kończy się z prawdopodobieństwem 1, bo jego ogon maleje geometrycznie. To luźna granica z konkretnego harmonogramu, a nie dolna granica pracy atakującego ani pomiar wydajności podpisu.

Zastosowanie do naszej symulacji podpisów. Run jest jednym programem probabilistycznym. Symulator Sign stanowi jego część, a nie dodatkową zewnętrzną wyrocznię. Dla ustalonego klucza jego sukces wynosi η\eta, z dolnym oszacowaniem ϵ0\epsilon_0. Każdy sukces Run ma istotny indeks. Jeżeli dla tego klucza ϵ0≥7QH/q\epsilon_0\ge7Q_H/q, ten sam rachunek etapów daje

E[TDL]≤84480⋅QH⋅Trunϵ0+Textract.\mathbb E[T_{\mathrm{DL}}] \le\frac{84480\cdot Q_H\cdot T_{\mathrm{run}}}{\epsilon_0} +T_{\mathrm{extract}}.

Do mianownika nie wolno wstawić sukcesu przed odjęciem strat symulacji. Nie wolno też zamienić warunku dla ustalonego klucza na samą średnią po kluczach. Bez takich dodatkowych warunków używamy wcześniejszego twierdzenia o ograniczonym czasie i sukcesie jednej próby.

Co wnosi sposób dowodzenia Herranza–Sáeza?

W podpisie pierścieniowym istotne może być nn różnych pytań. Herranz i Sáez grupują sukcesy według uporządkowanego wzorca ich indeksów, a rozwidlenie wykonują przy najpóźniejszym z nich. Liczba możliwych wzorców wynosi

VQ,n=Q⋅(Q−1)⋯(Q−n+1)=Q!(Q−n)!,Q≥n.V_{Q,n}=Q\cdot(Q-1)\cdots(Q-n+1)=\frac{Q!}{(Q-n)!},\qquad Q\ge n.

Ten wybór zachowuje wcześniejsze zobowiązania i odpowiedzi, a zmienia jedno wyzwanie potrzebne ekstrakcji. W zwykłym Schnorrze n=1n=1 i VQ,1=QV_{Q,1}=Q. Dokładnie to zrobiliśmy: wskazaliśmy istotny indeks, zachowaliśmy jego prefiks, sprawdziliśmy zgodność obu sukcesów i dopiero potem odjęliśmy równania. Nie dodajemy sztucznego czynnika 1/n1/n do dowodu dla jednego klucza.

W Theorem 1 pracy Herranza–Sáeza historyczny koszt ma postać 84480⋅VQ,n⋅T/ϵ84480\cdot V_{Q,n}\cdot T/\epsilon. W ich Theorem 2, dla konkretnej symulacji chosen-message, straty zostawiają co najmniej 7ϵ/127\epsilon/12. Zastąpienie ϵ\epsilon tą wartością daje 84480⋅12/7=144822,857…84480\cdot12/7=144822{,}857\ldots, więc zaokrąglona w górę stała wynosi 144823144823. Pełny rachunek pierścieniowy wyjaśnia oddzielnie warunki i straty tamtej symulacji. Nie przenosimy 7/127/12 do naszego SimSign. Jego rzeczywisty koszt prawdopodobieństwa to policzone wyżej δS\delta_S.

Co student powinien umieć sprawdzić samodzielnie?

  1. Wskazać instancję trudnego problemu i dane, których redukcja nie zna.
  2. Wykazać zgodność rozkładu odpowiedzi symulatora, nie tylko ich poprawność.
  3. Określić stan cofnięcia oraz losowość zachowaną i losowaną ponownie.
  4. Uzasadnić, że z dwóch sukcesów powstają zgodne równania z niezerowym mianownikiem.
  5. Przypisać każdej stracie prawdopodobieństwa konkretne zdarzenie.
  6. Odróżnić bezpieczeństwo identyfikacji w modelu pasywnym, EUF-CMA podpisu w ROM i koszt oczekiwany historycznego harmonogramu.

References

  • C.-P. Schnorr, Efficient Signature Generation by Smart Cards, Journal of Cryptology 4, 1991. Publikacja.
  • D. Pointcheval, J. Stern, Security Arguments for Digital Signatures and Blind Signatures, Journal of Cryptology 13, 2000, s. 361–396. Pełna wersja pracy Security Proofs for Signature Schemes z EUROCRYPT 1996. §2.3: splitting lemma. §3.1: Lemma 2 i Theorem 1 z rachunkiem stałych. Tekst autorów.
  • J. Herranz, G. Sáez, Forking Lemmas in the Ring Signatures' Scenario, 2003. §3: wzorce indeksów i oba warianty lematu. IACR ePrint 2003/067.
  • M. Bellare, G. Neven, Multi-Signatures in the Plain Public-Key Model and a General Forking Lemma, ACM CCS 2006. §3, Lemma 1: dwukrotne wykonanie i granica η2/Q−η/h\eta^2/Q-\eta/h. Tekst autorów.

Herranz–Sáez: pełny dowód anonimowości transkryptu

Punktem wyjścia jest rzeczywisty algorytm podpisywania, nie sam rysunek podobnych podpisów. Ustalamy pierścień LL, wiadomość mm i całą funkcję ℋ\mathcal H. W tym dowodzie hasz nie musi być wyrocznią losową. Porównujemy tylko rozkłady wywołane uczciwą losowością podpisujących.

Eksperyment. Przeciwnik wskazuje dwóch użytkowników w pierścieniu j0,j1j_0,j_1. Eksperyment losuje bit b←${0,1}b\overset{\$}{\leftarrow}\{0,1\} i zwraca Sign⁡jb(m)\operatorname{Sign}_{j_b}(m). Przeciwnik zgaduje bb. Nie dostaje faktycznie użytej taśmy losowej ani danych z kanałów bocznych. Pokażemy, że rozkład publicznego podpisu nie zależy od bb, nawet przy nieograniczonych obliczeniach.

Krok 1. Ustal dowolny możliwy publiczny wynik

Niech σ=(R1,…,Rn,z)\sigma=(R_1,\ldots,R_n,z) będzie podpisem akceptowanym w zadeklarowanym profilu, z różnymi Ri≠1GR_i\ne1_G. Jest

Vq−1,n=(q−1)⋅(q−2)⋯(q−n)V_{q-1,n}=(q-1)\cdot(q-2)\cdots(q-n)

możliwych uporządkowanych wektorów zobowiązań. Dla każdego takiego wektora wszystkie hasze są ustalone. Równanie weryfikacji wyznacza dokładnie jeden z∈Zqz\in\mathbb Z_q, ponieważ z↦gzz\mapsto g^z jest bijekcją. To stwierdzenie o jednoznaczności, nie algorytm obliczania DL.

Krok 2. Policz pozostałe n − 1 pozycji

Dla podpisującego jj każda pozycja poza jj jest losowana bez zwracania spośród niezerowych skalarów. Potęgowanie przenosi ten rozkład bijektywnie na niejednostkowe punkty. Prawdopodobieństwo dokładnie ustalonych RiR_i dla i≠ji\ne j wynosi

1(q−1)⋅(q−2)⋯(q−n+1).\frac{1}{(q-1)\cdot(q-2)\cdots(q-n+1)}.

Dla n=1n=1 iloczyn pusty wynosi jeden. Nie ma wtedy anonimowości między różnymi osobami, ale rachunek nadal opisuje poprawnie algorytm.

Krok 3. Uwzględnij odrzucenia, zamiast udawać losowanie bez ograniczeń

Po ustaleniu innych pozycji wyrażenie ∏i≠jAi−ci\prod_{i\ne j}A_i^{-c_i} jest stałe. Odwzorowanie u↦Rju\mapsto R_j jest bijekcją z Zq\mathbb Z_q na GG. Każda próba daje więc jednostajny punkt. Odrzucamy dokładnie nn punktów: element neutralny oraz n−1n-1 wcześniejszych zobowiązań.

Dla dowolnego dozwolonego RjR_j prawdopodobieństwo otrzymania go po dowolnej liczbie odrzuceń to

∑t=0∞(n/q)t⋅(1/q)=1q−n.\sum_{t=0}^{\infty}(n/q)^t\cdot(1/q)=\frac{1}{q-n}.

Nie jest to 1/q1/q. Średnia liczba prób wynosi q/(q−n)q/(q-n). Potrzebujemy n<qn<q. W rzeczywistych parametrach pierścień jest nieporównanie mniejszy od rzędu grupy.

Krok 4. Połącz prawdopodobieństwa i przejdź do gry

Odpowiedź zz jest już jednoznaczna. Nie pojawia się dodatkowy czynnik losowania odpowiedzi. Dla każdego użytkownika jj w pierścieniu:

Pr⁡[Sign⁡j(m)=σ]=1(q−1)⋅(q−2)⋯(q−n).\Pr[\operatorname{Sign}_{j}(m)=\sigma] =\frac{1}{(q-1)\cdot(q-2)\cdots(q-n)}.

Wartość jest taka sama dla wszystkich jj. Podpisy poza tym nośnikiem mają prawdopodobieństwo zero dla każdego podpisującego. Rozkłady są zatem identyczne punkt po punkcie. Dla dowolnej strategii zgadywania Pr⁡[b^=b]=1/2\Pr[\hat b=b]=1/2, a przewaga ∣Pr⁡[b^=b]−1/2∣|\Pr[\hat b=b]-1/2| wynosi zero.

Jeśli przeciwnik zna długoterminowe sekrety, może matematycznie odtworzyć możliwe losowości dla każdego kandydata. Nie dowie się jednak z samego podpisu, która została użyta. Ujawnienie faktycznej losowości jest innym modelem. Wiele niezależnych podpisów zachowuje równość rozkładów przez kolejne warunkowanie na już widzianych podpisach. Nierównomierne nonce lub dodatkowe logi mogą ten argument unieważnić.

To rozwinięcie rachunku z Herranz–Sáez, §4.3. W szczególności zachowuje odrzucanie powtórzonych zobowiązań. Nie dodaje do prawdziwego podpisującego zakazu kolizji wartości hasza, który występuje tylko w pomocniczym historycznym symulatorze. Źródło.

Herranz–Sáez: pełna ścieżka redukcji niepodrabialności

Cel gry. Ustalamy pierścień nn różnych uczciwie wygenerowanych kluczy. Przeciwnik nie zna żadnego sekretu, ale zadaje QH≥nQ_H\ge n zapytań do Hash i najwyżej WW żądań Sign. Może wskazać użytkownika, który podpisze. Wygrywa, jeśli podpisze wiadomość niepodpisaną wcześniej przez żadnego użytkownika w tym pierścieniu. W tym modelu nie ma Corrupt ani rejestracji własnych kluczy.

Poniżej podajemy kompletny wariant dydaktyczny redukcji, z jawną obsługą tabeli i własnym oszacowaniem strat. Zachowuje konstrukcję oraz ekstrakcję z oryginału. Nie jest przepisaniem stałej czasowej Theorem 3. Historyczne twierdzenie i jego dodatkowe warunkowania zestawiamy osobno, aby nie łączyć niezgodnych rachunków.

Krok 1. Jedna instancja DL we wszystkich kluczach

Redukcja dostaje A=ga≠1GA=g^a\ne1_G. Losuje różne niezerowe α1,…,αn\alpha_1,\ldots,\alpha_n i publikuje

Ai=Aαi.A_i=A^{\alpha_i}.

Mnożenie przez niezerowe aa jest permutacją Zq∗\mathbb Z_q^*. Dlatego wektor kluczy ma rozkład uczciwych różnych kluczy. Redukcja zna αi\alpha_i, ale nie zna żadnego sekretu ai=αi⋅aa_i=\alpha_i\cdot a. W ten sposób każda późniejsza wyekstrahowana gałąź będzie użyteczna. Nie zgadujemy dodatkowo indeksu podpisującego.

Krok 2. Hash i Sign współdzielą tabelę

Hash odczytuje istniejący wpis T[m,R]T[m,R] albo losuje jednostajny c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q i zapisuje go. Zwykłe kolizje wartości hasza są dozwolone. Różne wejścia mogą otrzymać ten sam skalar.

Na żądanie podpisu przez użytkownika jj:

  1. Wylosuj inne n−1n-1 zobowiązań dokładnie jak prawdziwy podpisujący. Dla każdego odczytaj albo utwórz ci=T[m,Ri]c_i=T[m,R_i] przez Hash.
  2. Wylosuj niezależnie cj,z←$Zqc_j,z\overset{\$}{\leftarrow}\mathbb Z_q i wyznacz
Rj=gz⋅(∏i≠jRi−1)⋅(∏i=1nAi−ci).R_j=g^z\cdot\left(\prod_{i\ne j}R_i^{-1}\right)\cdot\left(\prod_{i=1}^{n}A_i^{-c_i}\right).
  1. Przy Rj=1GR_j=1_G lub powtórzeniu innego zobowiązania losuj ponownie zz, pozostawiając pozostałe dane i cjc_j bez zmian.
  2. Jeśli (m,Rj)(m,R_j) ma już wpis w tabeli, przerwij redukcję. W przeciwnym razie zapisz T[m,Rj]=cjT[m,R_j]=c_j i zwróć podpis.

W żadnym kroku nie wykorzystaliśmy sekretu. Weryfikacja zgadza się przez konstrukcję RjR_j.

Krok 3. Uzasadnij rozkład, a nie tylko poprawne równanie

Ustalmy wcześniejszy widok, inne zobowiązania i ich hasze. W rzeczywistym podpisie zaakceptowane RjR_j jest jednostajne na q−nq-n dozwolonych punktach. Jeśli wejście jest świeże, jego hasz cjc_j jest niezależnym jednostajnym skalarem.

W symulatorze dla każdego ustalonego cjc_j odwzorowanie z↦Rjz\mapsto R_j jest bijekcją na GG. Po odrzuceniach każdy dozwolony punkt ma prawdopodobieństwo 1/(q−n)1/(q-n), niezależnie od cjc_j. Zatem para (Rj,cj)(R_j,c_j) w obu eksperymentach ma dla świeżego wejścia prawdopodobieństwo 1/((q−n)⋅q)1/((q-n)\cdot q). Odpowiedź zz jest jednoznacznie ustalona przez tę parę i pozostałe dane. Zgadza się cały transkrypt i tabela, nie tylko pojedynczy element.

Łączymy wykonania tak, aby były identyczne aż do trafienia zapisanego wejścia przez domykające zobowiązanie. Przy tt-tym podpisie tabela przed programowaniem ma najwyżej QH+n⋅(t−1)+(n−1)Q_H+n\cdot(t-1)+(n-1) wpisów. Jeden wcześniejszy wpis tej wiadomości wyklucza najwyżej jeden dozwolony punkt. Dlatego wystarcza jawna granica

δR=min⁡{1,W⋅QH+n⋅W⋅(W−1)/2+W⋅(n−1)q−n}.\delta_R=\min\left\{1, \frac{W\cdot Q_H+n\cdot W\cdot(W-1)/2+W\cdot(n-1)}{q-n} \right\}.

To oszacowanie jest konserwatywne, bo liczy także wpisy innych wiadomości. Nie zakłada niezależności kolizji. Nie dopisujemy tu błędu za powtórzone wartości cic_i, bo nasz symulator dopuszcza je tak samo jak prawdziwa wyrocznia.

Losowanie z odrzucaniem ma oczekiwaną liczbę prób q/(q−n)q/(q-n). Przy wymaganym sztywnym limicie KK prób na domknięcie trzeba dodać do granicy błędu najwyżej W⋅(n/q)KW\cdot(n/q)^K. Wtedy również czas symulatora ma jawny limit. Losowanie różnych pozostałych skalarów można realizować bez zwracania, bez odrzucania całego podpisu.

Krok 4. Zidentyfikuj zapytania sfałszowanego podpisu

Świeżość wiadomości oznacza, że żaden z jej wpisów nie został zaprogramowany przez Sign. Jeżeli przeciwnik pominął któryś hasz, weryfikacja wymaga trafienia niezależnej odpowiedzi. Ponieważ odpowiadający jej AiA_i ma rząd qq, najwyżej jedna wartość nieznanego wyzwania dopełnia równanie przy ustaleniu pozostałych. Można zastosować konserwatywną sumę n/qn/q dla brakujących pozycji.

Po usunięciu konfliktów symulacji i takich trafień prawdopodobieństwo użytecznej pierwszej gałęzi η\eta spełnia

η≥ϵ0=max⁡{0,ϵ−δR−n/q}.\eta\ge\epsilon_0=\max\{0,\epsilon-\delta_R-n/q\}.

W naszym symulatorze zwykłych świeżych losowań Hash jest najwyżej Q=QH+W⋅(n−1)Q=Q_H+W\cdot(n-1). Drugi składnik liczy hasze innych gałęzi, tworzone wewnątrz Sign. Programowane cjc_j należą do prywatnej taśmy symulatora. Nie pomijamy tych dwóch rodzajów losowości przy odtwarzaniu.

Krok 5. Fork pierścienia: zachowaj cały wzorzec

Dla poprawnego fałszerstwa zapamiętujemy uporządkowany wektor (ℓ1,…,ℓn)(\ell_1,\ldots,\ell_n) indeksów pierwszych losowań Hash dla (m,Ri)(m,R_i). Są różne, bo zobowiązania są różne. Możliwych wzorców jest co najwyżej

VQ,n=Q⋅(Q−1)⋯(Q−n+1)=Q!(Q−n)!.V_{Q,n}=Q\cdot(Q-1)\cdots(Q-n+1)=\frac{Q!}{(Q-n)!}.

Dla Q=10,n=3Q=10,n=3 jest ich 720720, nie 1010 ani 120120. Pozycja wektora jest związana z konkretnym kluczem. Nie można zastąpić uporządkowanego wektora zbiorem indeksów.

Rozwidlamy przy b=max⁡iℓib=\max_i\ell_i. Odtwarzamy ten sam stan, taśmę przeciwnika i symulatora oraz odpowiedzi sprzed bb. Od bb dolosowujemy nowy sufiks. Sukces drugiej gałęzi wymaga tego samego wektora indeksów i innej odpowiedzi na pytanie bb.

Wszystkie istotne pytania powstały najpóźniej w chwili bb, a każde zostało wysłane przed otrzymaniem własnej odpowiedzi. Wspólny prefiks i to samo ostatnie pytanie ustalają więc wiadomość oraz wszystkie RiR_i. Tylko jedno istotne wyzwanie się zmienia. Pozostałe odpowiedzi spoza podpisu mogą zmienić się w sufiksie.

Fork pierścienia · dwa przebiegi pozostają obok siebie

Przygotowane akceptujące transkrypty w małej grupie. Drugi wynik obliczamy ze znanych sekretów przykładu. Nie symulujemy znalezienia fałszerstwa. Rysunek sprawdza warunki ekstrakcji.

Druga gałąź
Wspólny prefiks
(m,R1), c1=4, (m,R2)(m,R_1),\ c_1=4,\ (m,R_2)
Pierwszy przebieg
(R1,R2,c1,c2,z)=(8,16,4,6,19)(R_1,R_2,c_1,c_2,z)=(8,16,4,6,19)
Drugi przebieg
(R1′,R2′,c1′,c2′,z′)(R_1^\prime,R_2^\prime,c_1^\prime,c_2^\prime,z^\prime)
Warunkowa ekstrakcja
aj=(z−z′)⋅(cj−cj′)−1a_j=(z-z^\prime)\cdot(c_j-c_j^\prime)^{-1}

Pierwszy przebieg

Drugi przebieg

Wynik ekstraktora

Pełny rachunek dla tego wariantu. Dla każdego wzorca λ\lambda ustalamy prefiks przed jego ostatnim indeksem i oznaczamy warunkową szansę sukcesu z tym wzorcem przez pλ(v)p_\lambda(v). Zdarzenia wyboru wzorców są rozłączne. Dokładnie jak w poprzednim lemacie:

∑λE[pλ(v)2]≥η2VQ,n.\sum_\lambda\mathbb E[p_\lambda(v)^2] \ge\frac{\eta^2}{V_{Q,n}}.

Powtórzenie zmienianego wyzwania zabiera najwyżej η/q\eta/q. Zatem użyteczny fork ma prawdopodobieństwo co najmniej max⁡{0,η2/VQ,n−η/q}\max\{0,\eta^2/V_{Q,n}-\eta/q\}. Nie wystarcza zachowanie tylko ostatniego indeksu. Wtedy inne pozycje w końcowym podpisie mogłyby być inne.

Krok 6. Dokończ redukcję DL

Niech zmienioną pozycją będzie jj. Dzielimy dwa równania akceptacji. Wszystkie zobowiązania i wszystkie pozostałe potęgi kluczy skracają się:

gz−z′=Ajcj−cj′=ga⋅αj⋅(cj−cj′).g^{z-z'}=A_j^{c_j-c'_j}=g^{a\cdot\alpha_j\cdot(c_j-c'_j)}.

Redukcja zwraca

a=(z−z′)⋅αj−1⋅(cj−cj′)−1(modq).a=(z-z')\cdot\alpha_j^{-1}\cdot(c_j-c'_j)^{-1}\pmod q.

Oba mianowniki są niezerowe. Sprawdzenie ga=Ag^a=A kończy algorytm. W opisanym eksperymencie dwóch gałęzi sukces jest co najmniej

max⁡{0,ϵ02/VQ,n−ϵ0/q}.\max\{0,\epsilon_0^2/V_{Q,n}-\epsilon_0/q\}.

To zamyka drogę od instancji DL przez symulację adaptacyjnych podpisów do ekstrakcji. Nie ma dodatkowego mnożnika 1/n1/n, bo instancja została osadzona we wszystkich kluczach. Nie ma też gwarancji, że fork zakończy się sukcesem w jednej próbie.

Osobno: dokładny zakres historycznych stałych

W raporcie Herranza–Sáeza symbole Q,WQ,W liczą zapytania przeciwnika odpowiednio do Hash i Sign. To inna konwencja QQ niż całkowita liczba losowań w naszym powyższym symulatorze. Autorzy używają symulatora z pomocniczym warunkowaniem na różne wyzwania, a potem ograniczają różnicę względem prawdziwego rozkładu. Nie przenosimy tej reguły do algorytmu podpisującego.

W Theorem 1 próg dla ataku bez podpisów wynosi ϵ≥7VQ,n/h\epsilon\ge7V_{Q,n}/h, a oczekiwany czas uzyskania forka jest co najwyżej 84480VQ,nT/ϵ84480V_{Q,n}T/\epsilon, gdzie h=2kh=2^k. Dowód używa tego samego podziału na ciężkie klasy co Pointcheval–Stern, ale klasami są całe wzorce. Strata za nieodpytane hasze wynosi najwyżej n/hn/h, a VQ,n≥nV_{Q,n}\ge n pozwala zachować ν≥6ϵ/7\nu\ge6\epsilon/7.

Theorem 2 dla chosen-message zakłada

ϵ≥12VQ,n+6(Q+W⋅n)2h.\epsilon\ge\frac{12V_{Q,n}+6(Q+W\cdot n)^2}{h}.

Przy wymaganych w raporcie granicach masy zobowiązań trzy składniki kontroli kolizji mają następujące oszacowania:

Zdarzenie w historycznej symulacji Górna granica Po użyciu progu
Symulowany punkt trafia wcześniejsze pytanie przeciwnika 2QnW/h2QnW/h ϵ/6\epsilon/6
Symulowany punkt trafia punkt innego podpisu (nW)2/h(nW)^2/h ϵ/6\epsilon/6
Dwa losowane wyniki hasza są równe (Q+nW)2/(2h)(Q+nW)^2/(2h) ϵ/12\epsilon/12

Suma wynosi najwyżej 5ϵ/125\epsilon/12, więc pozostaje co najmniej 7ϵ/127\epsilon/12. Po zastosowaniu twierdzenia bez podpisów otrzymujemy

T′≤144823⋅VQ,n⋅(T+W⋅Ts)ϵ,144823=⌈84480⋅127⌉.T'\le\frac{144823\cdot V_{Q,n}\cdot(T+W\cdot T_s)}{\epsilon}, \qquad 144823=\left\lceil84480\cdot\frac{12}{7}\right\rceil.

TsT_s to koszt symulacji jednego podpisu. Parametr hh należy dobrać zgodnie z alfabetem i warunkami entropii twierdzenia. Dla wyzwań jednostajnych w Zq\mathbb Z_q wartość 2k≤q2^k\le q daje zachowawczą granicę trafienia, ale pozostałe warunki lematu nadal trzeba sprawdzić. Nie utożsamiamy automatycznie 2k2^k z pierwszą liczbą qq.

Ograniczenie istotne przy czytaniu publikacji: VQ,nV_{Q,n} rośnie bardzo szybko. Dla stałego nn jest wielomianem w QQ. Dla rosnącego nn nie musi nim być. Próg większy od jednego oznacza, że to oszacowanie nie daje informacji, a nie że znaleziono atak. Ani historycznego, ani naszego prostego rachunku nie nazywamy ciasną gwarancją dla dowolnie dużego pierścienia.

Źródło historycznego schematu, modelu i twierdzeń: Herranz–Sáez, §3 oraz §4. Podpis OR, ten podpis pierścieniowy i konstrukcje hierarchiczne mają wspólne idee, ale nie są jednym schematem z wymiennymi dowodami.

Okamoto: pełny dowód bezpieczeństwa identyfikacji

Cel: odporność na podszywanie się po aktywnym treningu. Przeciwnik najpierw rozmawia z prawdziwym użytkownikiem jako złośliwy weryfikator. Później próbuje sam przekonać uczciwego weryfikatora. Pokażemy, jak taki program wykorzystać do obliczenia logarytmu dyskretnego. Nie jest to jeszcze dowód niepodrabialności podpisu. Podpis Okamoto ma osobny eksperyment i osobną redukcję.

Pomysł składa się z dwóch kroków. Rewinding, czyli odtworzenie wcześniejszego stanu programu przeciwnika, dostarczy reprezentację klucza publicznego. Porównanie jej z reprezentacją zapamiętaną przez redukcję dostarczy logarytm jednego generatora względem drugiego. Trzeba udowodnić zarówno skuteczność pierwszego kroku, jak i to, że drugi nie zatrzyma się na tej samej parze wykładników.

1. Schemat, typy i jednorazowy stan

Grupa cykliczna GG ma pierwszy rząd qq. Parametry pp=(G,q,g1,g2)pp=(G,q,g_1,g_2) zawierają dwa generatory tej samej grupy, opis jej działań oraz jednoznaczne kodowania. Indeksy 1,21,2 nie oznaczają grup pairingu. Wszystkie działania na skalarach wykonujemy w ciele Zq\mathbb Z_q. Działania na elementach GG zapisujemy potęgowo.

Setup wybiera generatory o rozkładzie przyjętym w problemie logarytmu dyskretnego. W szczególności g2g_2 jest jednostajnym elementem G∖{1G}G\setminus\{1_G\} dla ustalonego g1g_1. Istnieje α∈Zq∗\alpha\in\mathbb Z_q^* takie, że g2=g1αg_2=g_1^\alpha, ale nie udostępniamy tego wykładnika. Trudność dotyczy jego obliczenia z publicznych parametrów. Nie zakładamy trudności dla dowolnej źle dobranej pary, na przykład publicznie ustalonego g2=g17g_2=g_1^7.

Identyfikacja jest krotką

ΠOkaID=(Setup,KeyGen,P,V).\Pi_{\mathrm{OkaID}}=(\mathsf{Setup},\mathsf{KeyGen},P,V).

PP i VV są maszynami interaktywnymi. Commit i Respond to kroki PP, a Challenge i Check to kroki VV. Klucz prywatny oznaczamy a=(a1,a2)\mathbf a=(a_1,a_2), publiczny przez AA. Nawias [E][E] daje 11, gdy warunek EE zachodzi, i 00 w przeciwnym razie.

Procedura i wynik Ciało oraz znaczenie
KeyGen(pp)⟼(A,a)\mathsf{KeyGen}(pp)\longmapsto(A,\mathbf a) Losuj a1,a2←$Zqa_1,a_2\overset{\$}{\leftarrow}\mathbb Z_q. Oblicz A=g1a1⋅g2a2A=g_1^{a_1}\cdot g_2^{a_2}. Powtórz, jeżeli A=1GA=1_G.
Commit(pp)⟼(X,stP)\mathsf{Commit}(pp)\longmapsto(X,st_P) Losuj niezależne u1,u2←$Zqu_1,u_2\overset{\$}{\leftarrow}\mathbb Z_q. Oblicz X=g1u1⋅g2u2X=g_1^{u_1}\cdot g_2^{u_2} i zachowaj stP=(u1,u2,X)st_P=(u_1,u_2,X). Wysyłasz tylko XX.
Challenge(pp,A,X)⟼(c,stV)\mathsf{Challenge}(pp,A,X)\longmapsto(c,st_V) Sprawdź klucz i zobowiązanie. Losuj c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q. Zachowaj stV=(A,X,c)st_V=(A,X,c).
Respond(pp,a,stP,c)⟼(s1,s2)\mathsf{Respond}(pp,\mathbf a,st_P,c)\longmapsto(s_1,s_2) Sprawdź c∈Zqc\in\mathbb Z_q. Oblicz si=ui+ai⋅cs_i=u_i+a_i\cdot c dla i∈{1,2}i\in\{1,2\}. Zużyj stPst_P.
Check(pp,stV,(s1,s2))⟼b\mathsf{Check}(pp,st_V,(s_1,s_2))\longmapsto b Po kontroli typów zwróć b=[g1s1⋅g2s2=X⋅Ac]b=[g_1^{s_1}\cdot g_2^{s_2}=X\cdot A^c].

Weryfikator sprawdza przynależność elementów do właściwej grupy, nieneutralność klucza AA i kanoniczne zakresy skalarów. Dopuszczamy X=1GX=1_G oraz c=0c=0. Wykluczenie ich zmieniłoby rozkłady używane poniżej. Dla niepoprawnego komunikatu następuje odrzucenie. Jeden stan stPst_P służy do jednej odpowiedzi.

Okamoto: dokładna obsługa aktywnego treningu: czynności i komunikatyRedukcja w roli dowodzącegoPrzeciwnik w roli weryfikatoraCommit: świeża para nonceZobowiązanie przed wyzwaniemDowolny wybór po otrzymaniu X
Może zależeć od całej historii.
Przeciwnik wybiera wyzwanieRespond: znana reprezentacja
Zużyj oba nonce. Nie potrzebujesz logarytmu baz.
Dwie odpowiedzi skalarneZapamiętaj rozmowę
Następna sesja albo koniec treningu.

Okamoto: dokładna obsługa aktywnego treningu

Redukcja w roli dowodzącego: pp,A,(a1,a2)pp,A,(a_1,a_2)

Przeciwnik w roli weryfikatora: pp,App,A

  1. Redukcja w roli dowodzącego, Commit: świeża para nonce: u1,u2←$Zqu_1,u_2\overset{\$}{\leftarrow}\mathbb Z_q X=g1u1⋅g2u2X=g_1^{u_1}\cdot g_2^{u_2}
  2. Redukcja w roli dowodzącego → Przeciwnik w roli weryfikatora: XX Zobowiązanie przed wyzwaniem
  3. Przeciwnik w roli weryfikatora, Dowolny wybór po otrzymaniu X: c∈Zqc\in\mathbb Z_q Może zależeć od całej historii.
  4. Przeciwnik w roli weryfikatora → Redukcja w roli dowodzącego: cc Przeciwnik wybiera wyzwanie
  5. Redukcja w roli dowodzącego, Respond: znana reprezentacja: s1=u1+a1⋅cs_1=u_1+a_1\cdot c s2=u2+a2⋅cs_2=u_2+a_2\cdot c Zużyj oba nonce. Nie potrzebujesz logarytmu baz.
  6. Redukcja w roli dowodzącego → Przeciwnik w roli weryfikatora: (s1,s2)(s_1,s_2) Dwie odpowiedzi skalarne
  7. Przeciwnik w roli weryfikatora, Zapamiętaj rozmowę: τ=(X,c,(s1,s2))\tau=(X,c,(s_1,s_2)) Następna sesja albo koniec treningu.
Każda nowa sesja używa świeżej pary nonce. Redukcja zna reprezentację A i odpowiada bez narzucania wyzwania. Przed próbą podszycia dostęp do tego dowodzącego zostaje zamknięty.

Diagram przedstawia trening w redukcji. Ten sam schemat rozmowy staje się uczciwą identyfikacją, gdy prawa strona losuje wyzwanie jednostajnie. W treningu przeciwnik ma większą swobodę i może wybrać dowolne poprawne wyzwanie po zobaczeniu XX.

Poprawność jest doskonała. Dla każdego dopuszczalnego klucza, każdej pary nonce i każdego wyzwania:

g1s1⋅g2s2=g1u1+a1⋅c⋅g2u2+a2⋅c=X⋅(g1a1⋅g2a2)c=X⋅Ac.g_1^{s_1}\cdot g_2^{s_2} =g_1^{u_1+a_1\cdot c}\cdot g_2^{u_2+a_2\cdot c} =X\cdot(g_1^{a_1}\cdot g_2^{a_2})^c =X\cdot A^c.

To uzasadnia akceptację uczciwego przebiegu. Samo równanie nie dowodzi jeszcze bezpieczeństwa.

2. Co dokładnie wolno przeciwnikowi?

Oznaczmy przeciwnika przez A=(Atr,Aimp)\mathcal A=(\mathcal A_{\mathrm{tr}},\mathcal A_{\mathrm{imp}}). Pierwsza część prowadzi trening, druga próbuje się podszyć. Współdzielą pamięć. Angielskie określenie impersonation under active attack oznacza tutaj podszywanie się po aktywnych sesjach treningowych.

  1. Ustawienie eksperymentu. Uruchom Setup i KeyGen. Przekaż przeciwnikowi pp,App,A. Klucz publiczny jest już wiarygodnie przypisany do użytkownika. Podmiana rejestru kluczy nie jest celem tego eksperymentu.
  2. Trening. Przeciwnik otwiera najwyżej SS kolejnych sesji z uczciwym PP. Otrzymuje XX, sam wybiera cc i otrzymuje (s1,s2)(s_1,s_2). Każda sesja ma świeżą parę nonce. Może uzależniać kolejne decyzje od całej historii, przerwać rozmowę lub zakończyć trening wcześniej.
  3. Zamknięcie dostępu. Wszystkie sesje treningowe są zakończone albo porzucone. Przeciwnik nie ma już dostępu do PP i nie może wznowić porzuconej sesji. Nie otrzymuje sekretu, nonce ani prywatnej pamięci urządzenia.
  4. Podszycie. Przeciwnik wysyła własne X∗X^*, otrzymuje od uczciwego VV niezależne c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q i odpowiada (s1,s2)(s_1,s_2). Wygrywa wtedy i tylko wtedy, gdy Check zwróci 11.

Niech ϵ=Pr⁡[ExpimpA=1]\epsilon=\Pr[\mathsf{Exp}_{\mathrm{imp}}^{\mathcal A}=1]. Prawdopodobieństwo obejmuje parametry, klucz, losowość obu stron i wyzwanie końcowej sesji. Przeciwnik ma jawny wielomianowy limit czasu TT. Brak odpowiedzi w tym limicie oznacza przegraną. Dowód jest klasyczny, nie kwantowy.

Dlaczego zamykamy dostęp do dowodzącego? Gdy oszust mógłby podczas końcowej próby przekazywać wiadomości żywemu użytkownikowi, wykonałby relay, czyli przekazanie rozmowy bez poznania sekretu. Nasz eksperyment nie obiecuje odporności na takie pośrednictwo. Nie utożsamiamy też aktywnego treningu z możliwością resetowania uczciwego urządzenia.

3. Jeden klucz, dokładnie q reprezentacji

Dla Z∈GZ\in G zdefiniujmy zbiór reprezentacji

RZ={(t1,t2)∈Zq2:g1t1⋅g2t2=Z}.\mathcal R_Z=\{(t_1,t_2)\in\mathbb Z_q^2: g_1^{t_1}\cdot g_2^{t_2}=Z\}.

Niech z=log⁡g1Zz=\log_{g_1}Z. Jest to oznaczenie używane w analizie, nie polecenie obliczenia logarytmu przez redukcję. Równanie reprezentacji jest równoważne t1+α⋅t2=zt_1+\alpha\cdot t_2=z. Dla każdego t2t_2 istnieje dokładnie jedno t1=z−α⋅t2t_1=z-\alpha\cdot t_2. Stąd ∣RZ∣=q|\mathcal R_Z|=q.

Jednostajne losowanie pary z Zq2\mathbb Z_q^2 daje jednostajny element ZZ grupy. Warunkowo przy ustalonym ZZ para jest jednostajna na RZ\mathcal R_Z. Odrzucenie neutralnego klucza w KeyGen nie zmienia tego wniosku dla żadnego dopuszczalnego AA. Daje jednostajny A∈G∖{1G}A\in G\setminus\{1_G\} i nadal dokładnie qq równoprawdopodobnych sekretów dla tego AA.

Znajomość jednej poprawnej reprezentacji wystarcza do identyfikacji. Weryfikator nie rozstrzyga, czy jest to para wylosowana przy rejestracji. Ta wielość reprezentacji jest istotą redukcji, a nie błędem w definicji klucza.

4. Dlaczego aktywny trening nie wskazuje sekretnej pary?

Udowodnimy doskonałą nierozróżnialność świadków, po angielsku perfect witness indistinguishability, w skrócie WI. Świadkiem jest tu poprawna reprezentacja AA. Dla dowolnych a,a′∈RA\mathbf a,\mathbf a'\in\mathcal R_A pełny widok złośliwego weryfikatora ma dokładnie ten sam rozkład. To równość rozkładów, nie tylko brak znanego wydajnego testu.

Ustalmy publiczne pp,App,A, dotychczasowy widok ww i całą taśmę losową weryfikatora. Rozpatrzmy następną sesję. Commit wybiera u=(u1,u2)\mathbf u=(u_1,u_2) jednostajnie z Zq2\mathbb Z_q^2. Z poprzedniego punktu wynika Pr⁡[X=Z∣w]=1/q\Pr[X=Z\mid w]=1/q dla każdego Z∈GZ\in G. Warunkowo przy konkretnym XX para u\mathbf u jest jednostajna na RX\mathcal R_X.

Weryfikator widzi XX i wybiera cc. Po ustaleniu jego taśmy oraz w,Xw,X to wyzwanie jest ustalone. Nie musi być losowe. Odwzorowanie

ϕa,c:RX⟶RX⋅Ac,(u1,u2)⟼(u1+a1⋅c,u2+a2⋅c)\phi_{\mathbf a,c}:\mathcal R_X\longrightarrow\mathcal R_{X\cdot A^c}, \qquad (u_1,u_2)\longmapsto(u_1+a_1\cdot c,u_2+a_2\cdot c)

jest bijekcją. Równanie poprawności dowodzi, że wynik należy do wskazanego zbioru. Odwrotność odejmuje (a1⋅c,a2⋅c)(a_1\cdot c,a_2\cdot c). Zatem odpowiedź jest jednostajna na RX⋅Ac\mathcal R_{X\cdot A^c}. Ten zbiór zależy od publicznych A,X,cA,X,c, a nie od wybranego a\mathbf a.

Przy deterministycznej strategii wyzwań każda zgodna ze strategią trójka (X,c,(s1,s2))(X,c,(s_1,s_2)) ma prawdopodobieństwo 1/q21/q^2. Jeden czynnik 1/q1/q pochodzi z XX, drugi z odpowiedzi w zbiorze qq reprezentacji. Nie dokładamy czynnika 1/q1/q za wyzwanie, ponieważ w aktywnym treningu wybiera je przeciwnik.

Niepoprawne wyzwanie lub przerwanie rozmowy również nie rozróżnia świadków. Jest decyzją zależną od tego samego widoku i otrzymuje identyczną obsługę. Stosując argument do kolejnych sesji, otrzymujemy indukcję po całej adaptacyjnej historii. W szczególności widok wraz z prywatną taśmą przeciwnika jest niezależny od tego, którą reprezentację AA zna dowodzący.

WI nie jest tym samym co wiedza zerowa. Dla uczciwego weryfikatora możemy dodatkowo podać symulator: wylosuj c,s1,s2←$Zqc,s_1,s_2\overset{\$}{\leftarrow}\mathbb Z_q i oblicz X=g1s1⋅g2s2⋅A−cX=g_1^{s_1}\cdot g_2^{s_2}\cdot A^{-c}. Bijekcja między (u1,u2,c)(u_1,u_2,c) i (s1,s2,c)(s_1,s_2,c) dowodzi równości rozkładów pełnych transkryptów. Każdy dopuszczalny ma prawdopodobieństwo 1/q31/q^3. Jest to doskonała wiedza zerowa wobec uczciwego weryfikatora. Ten symulator wybiera jednak cc i nie jest naszym sposobem obsługi złośliwego weryfikatora. W dowodzie aktywnego bezpieczeństwa użyjemy WI oraz rzeczywiście znanej reprezentacji.

5. Redukcja zna sekret użytkownika, ale nie rozwiązanie DL

Problem discrete logarithm, czyli logarytmu dyskretnego, oznaczamy DL. Redukcja B\mathcal B otrzymuje G,q,g1,g2=g1αG,q,g_1,g_2=g_1^\alpha, gdzie α←$Zq∗\alpha\overset{\$}{\leftarrow}\mathbb Z_q^* jest nieznane. Jej zadaniem jest zwrócić właśnie α\alpha. Nie dostaje wyroczni logarytmującej ani klucza obliczonego przez inną stronę.

B\mathcal B sama wykonuje KeyGen, otrzymując AA i zapamiętaną parę a\mathbf a. Przekazuje pp,App,A programowi A\mathcal A. Każdą sesję treningową prowadzi uczciwie z użyciem a\mathbf a. Potrafi odpowiedzieć na dowolne dozwolone wyzwanie, bo Respond nie potrzebuje α\alpha. Rozkład parametrów, klucza i rozmów jest dokładnie taki jak w eksperymencie. Na symulacji treningu nie tracimy prawdopodobieństwa.

Znany sekret nie rozwiązuje sam problemu DL. Redukcja umie obliczyć A=g1a1⋅g2a2A=g_1^{a_1}\cdot g_2^{a_2}, lecz nie zna log⁡g1A\log_{g_1}A. Dopiero druga, różna reprezentacja tego samego AA pozwoli wyeliminować tę niewiadomą.

6. Rewinding końcowej próby

Po zakończeniu treningu redukcja uruchamia Aimp\mathcal A_{\mathrm{imp}}. Zapisuje jego stan vv po wysłaniu poprawnego X∗X^*, przed wyzwaniem. Ustala całą taśmę losową przeciwnika, oznaczoną ρ\rho, także część zużywaną po wyzwaniu. Stan vv obejmuje tę taśmę. Przy danym vv odpowiedź na konkretne cc jest więc deterministyczna.

Okamoto: dwa przebiegi i dwie reprezentacjeTen sam stan po treninguPierwsze wyzwanieOdpowiedź z zapisanego stanuPierwsza kontrolaOdtworzenie i nowe wyzwanieOdpowiedź z tego samego stanuDruga kontrolaWydobądź reprezentację, nie logarytmInna reprezentacja: rozwiązanie DL
v:pp,A,X∗,ρv:\quad pp,A,X^*,\rho
  1. Pierwsze wyzwanie: c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q
  2. Odpowiedź z zapisanego stanu: (s1,s2)←Aimp(v,c)(s_1,s_2)\leftarrow\mathcal A_{\mathrm{imp}}(v,c)
  3. Pierwsza kontrola: g1s1⋅g2s2=?X∗⋅Acg_1^{s_1}\cdot g_2^{s_2}\stackrel{?}{=}X^*\cdot A^c
  1. Odtworzenie i nowe wyzwanie: c′←$Zqc'\overset{\$}{\leftarrow}\mathbb Z_q
  2. Odpowiedź z tego samego stanu: (s1′,s2′)←Aimp(v,c′)(s'_1,s'_2)\leftarrow\mathcal A_{\mathrm{imp}}(v,c')
  3. Druga kontrola: g1s1′⋅g2s2′=?X∗⋅Ac′g_1^{s'_1}\cdot g_2^{s'_2}\stackrel{?}{=}X^*\cdot A^{c'} c′≠cc'\ne c

bi=(si−si′)⋅(c−c′)−1(modq)b_i=(s_i-s'_i)\cdot(c-c')^{-1}\pmod q

i∈{1,2},g1b1⋅g2b2=Ai\in\{1,2\},\quad g_1^{b_1}\cdot g_2^{b_2}=A

(b1,b2)≠(a1,a2)(b_1,b_2)\ne(a_1,a_2)

α^=(b1−a1)⋅(a2−b2)−1(modq)\widehat\alpha=(b_1-a_1)\cdot(a_2-b_2)^{-1}\pmod q

g1α^=?g2g_1^{\widehat\alpha}\stackrel{?}{=}g_2

Oba przebiegi pozostają widoczne. Symbol ρ\rho oznacza tę samą pełną taśmę losową przeciwnika. Trening nie jest otwierany ponownie. Nieudana kontrola lub identyczne reprezentacje kończą próbę bez rozwiązania DL.
  1. Wylosuj c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q. Uzyskaj odpowiedź s=(s1,s2)\mathbf s=(s_1,s_2) i sprawdź Check. Przy odrzuceniu zakończ bez wyniku.
  2. Odtwórz vv i tę samą taśmę przeciwnika. Wylosuj niezależne c′←$Zqc'\overset{\$}{\leftarrow}\mathbb Z_q. Nie wykluczaj c′=cc'=c podczas losowania.
  3. Uzyskaj s′=(s1′,s2′)\mathbf s'=(s'_1,s'_2). Wymagaj akceptacji Check i c′≠cc'\ne c. Inaczej zwróć ⊥\bot, oznaczające niepowodzenie.
  4. Oblicz bi=(si−si′)⋅(c−c′)−1b_i=(s_i-s'_i)\cdot(c-c')^{-1} dla i∈{1,2}i\in\{1,2\}. Sprawdź g1b1⋅g2b2=Ag_1^{b_1}\cdot g_2^{b_2}=A i zachowaj b=(b1,b2)\mathbf b=(b_1,b_2).

Odtwarzamy kod przeciwnika w redukcji, nie uczciwe urządzenie. Trening został zakończony i jego transkrypty są takie same w obu gałęziach. Druga gałąź nie dostaje nowej odpowiedzi uczciwego PP pod starymi nonce. Takie ujawnienie zmieniłoby model i zniszczyłoby argument WI.

Dlaczego krok 4 działa? Dwie akceptacje dają

g1s1⋅g2s2=X∗⋅Ac,g1s1′⋅g2s2′=X∗⋅Ac′.g_1^{s_1}\cdot g_2^{s_2}=X^*\cdot A^c, \qquad g_1^{s'_1}\cdot g_2^{s'_2}=X^*\cdot A^{c'}.

Dzielimy równania w grupie, eliminując to samo X∗X^*:

g1s1−s1′⋅g2s2−s2′=Ac−c′.g_1^{s_1-s'_1}\cdot g_2^{s_2-s'_2}=A^{c-c'}.

Ponieważ qq jest pierwsze i c−c′≠0c-c'\ne0, istnieje odwrotność tej różnicy w Zq\mathbb Z_q. Podniesienie obu stron do tej potęgi daje g1b1⋅g2b2=Ag_1^{b_1}\cdot g_2^{b_2}=A. To special soundness, czyli możliwość wydobycia świadka z dwóch akceptujących rozmów ze wspólnym zobowiązaniem i różnymi wyzwaniami. Wydobywamy jakąś reprezentację b\mathbf b, nie obiecujemy odzyskania oryginalnego a\mathbf a.

7. Dokładnie skąd bierze się strata kwadratowa?

Dla ustalonego vv niech Cv⊆ZqC_v\subseteq\mathbb Z_q będzie zbiorem wyzwań, na które przeciwnik odpowiada poprawnie w limicie czasu. Definiujemy kv=∣Cv∣k_v=|C_v| i pv=kv/qp_v=k_v/q. Dla przebiegu, który nie dotarł do poprawnego X∗X^*, przyjmujemy kv=0k_v=0. Nie warunkujemy więc sukcesu na szczęśliwym dojściu do punktu cofnięcia.

Zdarzenie FF oznacza dwie akceptacje z różnymi wyzwaniami. Jest q2q^2 równoprawdopodobnych uporządkowanych par (c,c′)(c,c'). Dokładnie kv⋅(kv−1)k_v\cdot(k_v-1) z nich spełnia FF:

Pr⁡[F∣v]=kv⋅(kv−1)q2=pv2−pvq.\Pr[F\mid v]=\frac{k_v\cdot(k_v-1)}{q^2} =p_v^2-\frac{p_v}{q}.

Sukces pojedynczego podszycia to ϵ=E[pv]\epsilon=\mathbb E[p_v]. Nieujemność wariancji daje E[pv2]≥ϵ2\mathbb E[p_v^2]\ge\epsilon^2, więc

Pr⁡[F]=E[pv2]−ϵq≥ϵ2−ϵq.\Pr[F]=\mathbb E[p_v^2]-\frac\epsilon q \ge\epsilon^2-\frac\epsilon q.

Wynik ujemny zastępujemy zerem. Dwie próby nie są niezależne bezwarunkowo, ponieważ współdzielą vv. Dlatego najpierw liczymy warunkowo przy vv, a dopiero potem uśredniamy. Sam zapis „dwa sukcesy, więc ϵ2\epsilon^2” nie uzasadniałby rachunku.

Próg 1/q1/q ma konkretne znaczenie. Oszust może wybrać c0,s1,s2c_0,s_1,s_2, przygotować X∗=g1s1⋅g2s2⋅A−c0X^*=g_1^{s_1}\cdot g_2^{s_2}\cdot A^{-c_0} i odpowiedzieć tylko na c0c_0. Wtedy pv=1/qp_v=1/q, ale nie ma dwóch różnych akceptowanych wyzwań. To knowledge error, czyli błąd wiedzy protokołu. Nie jest to jeszcze prawdopodobieństwo trafienia w zapamiętaną reprezentację.

8. Dlaczego wydobyta para jest inna z prawdopodobieństwem 1 − 1/q?

Ustalmy pp,App,A. Z KeyGen wiemy, że a\mathbf a jest jednostajna na RA\mathcal R_A. Z dowodu WI wiemy, że cały widok treningu wraz z taśmą przeciwnika jest od niej niezależny. Stan vv, obie odpowiedzi końcowe i wynik ekstrakcji są funkcjami tego widoku, taśmy oraz nowych wyzwań. Nie korzystają już z prywatnej pamięci uczciwego dowodzącego.

Niech Ω\Omega oznacza te wszystkie dane dostępne ekstraktorowi, bez a\mathbf a i bez prywatnych nonce treningowych. Również łączny widok obu gałęzi, a nie tylko każda gałąź z osobna, jest niezależny od a\mathbf a przy ustalonych pp,App,A. Dla każdego ω\omega, dla którego FF zachodzi, wydobyta b(ω)\mathbf b(\omega) należy do RA\mathcal R_A. Stąd

Pr⁡[a=b(ω)∣pp,A,Ω=ω]=1q.\Pr[\mathbf a=\mathbf b(\omega)\mid pp,A,\Omega=\omega]=\frac1q.

Warunkowanie na udanym cofnięciu nie wyróżnia sekretnej pary, bo FF jest już określone przez Ω\Omega. Sumując po tych widokach, otrzymujemy dokładnie

Pr⁡[F ∧ b≠a]=(1−1q)⋅Pr⁡[F].\Pr[F\ \land\ \mathbf b\ne\mathbf a] =\left(1-\frac1q\right)\cdot\Pr[F].

To uzasadnia mnożenie przez 1−1/q1-1/q. Nie wystarczyłoby powiedzieć, że „są różne klucze, więc raczej trafimy na inny”. Gdyby trening ujawniał wybraną parę albo obie gałęzie dostawały różne odpowiedzi z tego samego prywatnego stanu uczciwego urządzenia, powyższa niezależność nie zachodziłaby.

9. Dwie reprezentacje dają logarytm

Na zdarzeniu FF mamy g1a1⋅g2a2=A=g1b1⋅g2b2g_1^{a_1}\cdot g_2^{a_2}=A=g_1^{b_1}\cdot g_2^{b_2}. Podstawiamy g2=g1αg_2=g_1^\alpha i porównujemy wykładniki modulo qq:

a1+α⋅a2=b1+α⋅b2,α⋅(a2−b2)=b1−a1.a_1+\alpha\cdot a_2=b_1+\alpha\cdot b_2, \qquad \alpha\cdot(a_2-b_2)=b_1-a_1.

Jeżeli a2=b2a_2=b_2, pierwsze równanie wymusza a1=b1a_1=b_1. Dlatego z b≠a\mathbf b\ne\mathbf a wynika a2−b2≠0a_2-b_2\ne0. Redukcja oblicza

α^=(b1−a1)⋅(a2−b2)−1(modq)\widehat\alpha=(b_1-a_1)\cdot(a_2-b_2)^{-1}\pmod q

i sprawdza g1α^=g2g_1^{\widehat\alpha}=g_2. Otrzymuje rozwiązanie wejściowej instancji DL. Gdy b=a\mathbf b=\mathbf a, zwraca ⊥\bot. Nie dzieli przez zero i nie ogłasza sukcesu tylko dlatego, że obie rozmowy były poprawne.

10. Twierdzenie, koszt i zakres wniosku

Twierdzenie. Dla każdego klasycznego przeciwnika działającego w opisanym modelu kolejnych aktywnych sesji treningowych, o sukcesie ϵ\epsilon, istnieje redukcja do DL o prawdopodobieństwie sukcesu co najmniej

Pr⁡[B(G,q,g1,g2)=α]≥(1−1q)⋅max⁡{0,ϵ2−ϵq}.\Pr[\mathcal B(G,q,g_1,g_2)=\alpha] \ge\left(1-\frac1q\right)\cdot \max\left\{0,\epsilon^2-\frac\epsilon q\right\}.

Dowód twierdzenia. Redukcja generuje klucz z poprawnego rozkładu i dokładnie obsługuje trening. Rachunek z punktu 7 daje zdarzenie FF z podaną dolną granicą. Punkt 8 mnoży jego prawdopodobieństwo przez 1−1/q1-1/q. Punkt 9 zamienia każdy tak uzyskany przypadek w rozwiązanie DL. Nie ma dodatkowego zgadywania sesji ani pytania do hasza. Wszystkie potrzebne kroki zostały podane jawnie.

Poniższa tabela zbiera wszystkie straty. Symbol QHQ_H oznacza liczbę pytań do hasza, występującą w osobnych dowodach podpisów.

Czynnik Skąd pochodzi?
ϵ2\epsilon^2 Dolna granica na średnią kwadratu warunkowej skuteczności przeciwnika.
ϵ/q\epsilon/q Odjęcie par z tym samym wyzwaniem, które nie dają odwrotności różnicy.
1−1/q1-1/q Wydobyta reprezentacja nie jest jedną konkretną reprezentacją zapamiętaną przez redukcję.
Brak czynnika 1/S1/S Trening obsługujemy w całości. Nie zgadujemy, która sesja będzie ważna.
Brak czynnika 1/QH1/Q_H Wyzwanie jest komunikatem weryfikatora, nie odpowiedzią wyroczni losowej.

Tutaj nie ma ani interfejsu pytań do hasza, ani modelu wyroczni losowej. Używamy prostego rewindingu, a nie lematu o rozwidleniu pytań haszujących.

Koszt. Niech TPT_P ogranicza koszt obsługi jednej sesji treningowej, TVT_V koszt jednej kontroli, a TKT_K koszt wytworzenia klucza. Konserwatywna granica czasu to 2⋅T+2⋅S⋅TP+2⋅TV+TK+Talg2\cdot T+2\cdot S\cdot T_P+2\cdot T_V+T_K+T_{\mathrm{alg}}. Uwzględnia ponowne wykonanie wspólnego prefiksu, gdy nie zapisujemy migawki pamięci. Przy migawce trening wystarczy wykonać raz. W TalgT_{\mathrm{alg}} mieszczą się dwie odwrotności skalarne, stała liczba działań na skalarach, kontrola wydobytej reprezentacji oraz sprawdzenie wyniku DL. Dla obu współrzędnych używamy tej samej odwrotności c−c′c-c'.

Odrzucanie neutralnego AA wymaga średnio q/(q−1)q/(q-1) prób KeyGen. Powyższy czas jest zatem oczekiwany, choć każda próba przeciwnika ma sztywny limit. Aby uzyskać sztywny limit także dla redukcji, przerwij KeyGen po KK próbach. Prawdopodobieństwo niepowodzenia wynosi dokładnie q−Kq^{-K}. Warunkowo przy sukcesie rozkład klucza pozostaje niezmieniony, więc dolną granicę sukcesu mnożymy przez 1−q−K1-q^{-K}. Dla K=λK=\lambda, gdzie λ\lambda jest parametrem bezpieczeństwa, ta dodatkowa strata jest znikoma.

Jeżeli qq rośnie wykładniczo z λ\lambda, a ϵ\epsilon jest nieznikome, dolna granica sukcesu DL też jest nieznikoma. Przy założeniu trudności DL taki przeciwnik nie istnieje. To jest właściwy wniosek o bezpieczeństwie identyfikacji w ustalonym modelu, a nie bezwarunkowa gwarancja dla każdego urządzenia i sieci.

Wcześniejszy dowód Schnorra pod zwykłym założeniem DL obejmował pasywne otrzymywanie transkryptów. Tutaj uzasadniliśmy więcej: przeciwnik sam wybiera wyzwania podczas treningu. Dodatkowa reprezentacja i WI umożliwiają tę zmianę modelu. Nie jest to twierdzenie, że Schnorr nie ma dowodów w innych modelach i przy innych założeniach.

11. Cały rachunek na małych liczbach

Poniższa grupa jest celowo mała i nie zapewnia bezpieczeństwa. Używamy jej wyłącznie do prześledzenia rachunku. Niech G=⟨2⟩⊂Z47∗G=\langle2\rangle\subset\mathbb Z_{47}^* ma rząd q=23q=23, g1=2g_1=2 i g2=32=25mod47g_2=32=2^5\bmod47. W eksperymencie redukcja dostałaby g2g_2, ale nie znałaby α=5\alpha=5.

Wybierzmy zapamiętaną parę a=(7,3)\mathbf a=(7,3). Wtedy A=27⋅323mod47=24A=2^7\cdot32^3\bmod47=24. Inna poprawna reprezentacja to b=(2,4)\mathbf b=(2,4), ponieważ 7+5⋅3≡2+5⋅4≡22(mod23)7+5\cdot3\equiv2+5\cdot4\equiv22\pmod{23}. Dla zobrazowania ekstrakcji przyjmijmy program odpowiadający z użyciem tej drugiej pary i nonce (6,8)(6,8). Nie twierdzimy, że znaleźliśmy atak w dużej grupie.

Wielkość Pierwsza gałąź Druga gałąź
Wspólne zobowiązanie X∗X^* 11 11
Wyzwanie c=4c=4 c′=12c'=12
Pierwsza odpowiedź s1=14s_1=14 s1′=7s'_1=7
Druga odpowiedź s2=1s_2=1 s2′=10s'_2=10
Lewa strona Check, modulo 4747 33 2727
Prawa strona Check, modulo 4747 33 2727

Neutralne zobowiązanie jest w tym profilu dozwolone. X∗=1X^*=1 nie oznacza neutralnego klucza. Tu A=24A=24. Ponieważ 4−12≡154-12\equiv15 i 15−1≡20(mod23)15^{-1}\equiv20\pmod{23}, odzyskujemy

b1=(14−7)⋅20≡2(mod23),b2=(1−10)⋅20≡4(mod23).b_1=(14-7)\cdot20\equiv2\pmod{23}, \qquad b_2=(1-10)\cdot20\equiv4\pmod{23}.

Druga odwrotność dotyczy a2−b2=3−4≡22a_2-b_2=3-4\equiv22. Otrzymujemy

α^=(2−7)⋅(3−4)−1≡18⋅22≡5(mod23),25mod47=32=g2.\widehat\alpha=(2-7)\cdot(3-4)^{-1} \equiv18\cdot22\equiv5\pmod{23}, \qquad 2^5\bmod47=32=g_2.

Przy q=23q=23 pełna skuteczność przeciwnika, czyli ϵ=1\epsilon=1, dawałaby w tej redukcji (22/23)2=484/529(22/23)^2=484/529. Pierwszy czynnik 22/2322/23 usuwa równe wyzwania, drugi trafienie w zapamiętaną reprezentację. Są to różne zdarzenia i wymagają różnych argumentów. Dla rzeczywistych parametrów oba czynniki są bliskie jedności, ale strata kwadratowa w ϵ\epsilon pozostaje.

12. Co trzeba zachować, żeby ten dowód nadal działał?

  • Świeżość obu nonce. Dwie odpowiedzi uczciwego urządzenia z tego samego stanu i na różne wyzwania ujawniają jego własne a1,a2a_1,a_2. W dowodzie cofamy wyłącznie przeciwnika.
  • Jednostajne losowanie. WI opiera się na dokładnych rozkładach na zbiorach reprezentacji. Stronniczy generator lub dodatkowy wyciek wymaga nowej analizy.
  • Ustalony, wiarygodny klucz. Parametry i rejestr tożsamości nie mogą być dowolnie podmieniane przez przeciwnika. Dwa generatory same w sobie nie uwierzytelniają właściciela.
  • Jawny model sesji. Udowodniliśmy wariant z kolejnymi sesjami treningowymi i zamknięciem dostępu przed podszyciem. Nie wyprowadzamy stąd odporności na dowolny atak pośrednika ani reset.
  • Brak automatycznego przenoszenia na inne konstrukcje. Zmodyfikowany Okamoto używa odpowiedzi grupowych i pairingów. Powyższy ekstraktor odejmuje skalary, więc nie stanowi dowodu tej modyfikacji.

Związek z podpisem. W identyfikacji redukcja wybiera drugi komunikat weryfikatora. Po transformacie Fiata–Shamira wyzwanie zależy od hasza wiadomości i zobowiązania. Wtedy trzeba symulować podpisywanie, zadbać o wspólny argument hasza i policzyć skuteczność rozwidlenia. Tych obowiązków nie zastępuje samo WI. Dlatego dowód podpisu Okamoto następuje osobno.

References

Powyżej podaliśmy samodzielne wyprowadzenie dla dokładnie określonego profilu kursowego: wyzwania z całego Zq\mathbb Z_q, nieneutralny klucz i dwa wykonania końcowej próby. Stałe wynikają z jawnego liczenia par wyzwań oraz reprezentacji, a nie z przytoczenia innego twierdzenia bez sprawdzenia jego modelu.

Od identyfikacji Okamoto do podpisu: osobna redukcja EUF-CMA

Powyższa redukcja dotyczy identyfikacji po aktywnym treningu. Podpis musi dodatkowo zastąpić wyzwanie haszem i obsłużyć żądania podpisów. Nie wolno nazwać samej ekstrakcji z dwóch transkryptów pełnym dowodem podpisu.

Schemat, model i miejsce trudnej instancji

Przyjmujemy tę samą grupę, g2=g1αg_2=g_1^\alpha z nieznanym α≠0\alpha\ne0 oraz losową reprezentację A=g1a1⋅g2a2≠1GA=g_1^{a_1}\cdot g_2^{a_2}\ne1_G. Podpisujący losuje u1,u2u_1,u_2, wyznacza X=g1u1⋅g2u2X=g_1^{u_1}\cdot g_2^{u_2}, a następnie

c=ℋ(enc⁡(Okamoto,g1,g2,A,X,m)),s1=u1+a1⋅c,s2=u2+a2⋅c.c=\mathcal H(\operatorname{enc}(\mathtt{Okamoto},g_1,g_2,A,X,m)),\qquad s_1=u_1+a_1\cdot c,\quad s_2=u_2+a_2\cdot c.

Podpis to (X,s1,s2)(X,s_1,s_2), a weryfikacja sprawdza g1s1⋅g2s2=X⋅Acg_1^{s_1}\cdot g_2^{s_2}=X\cdot A^c. Model EUF-CMA, klasyczny ROM i świeżość wiadomości są takie jak w redukcji dla podpisu Schnorra. Redukcja dostaje instancję DL (g1,g2)(g_1,g_2), sama wybiera reprezentację (a1,a2)(a_1,a_2) i przekazuje AA.

Symulator niezależny od zapamiętanej reprezentacji

W tej redukcji celowo nie podpisujemy znaną parą sekretów. Losujemy niezależnie c,s1,s2←$Zqc,s_1,s_2\overset{\$}{\leftarrow}\mathbb Z_q i obliczamy

X=g1s1⋅g2s2⋅A−c.X=g_1^{s_1}\cdot g_2^{s_2}\cdot A^{-c}.

Przerywamy przy zajętym wejściu hasza. W przeciwnym razie zapisujemy cc we wspólnej tabeli i zwracamy podpis. Losowość tego symulatora nie zależy od (a1,a2)(a_1,a_2), gdy AA jest ustalone. To ważne nie tylko dla jednej gałęzi. Przy forku odtwarzamy tę samą prywatną taśmę symulatora, więc obie gałęzie łącznie nadal nie zależą od wybranej reprezentacji.

Dla świeżego wejścia przesunięcie (u1,u2,c)↦(s1,s2,c)(u_1,u_2,c)\mapsto(s_1,s_2,c) jest bijekcją na Zq3\mathbb Z_q^3. Otrzymujemy rozkład uczciwego podpisu. Dla ustalonych s2,cs_2,c jednostajne s1s_1 daje jednostajne XX. Konflikty programowania mają zatem tę samą granicę δS\delta_S co u Schnorra. Sukces bez pytania o świeże wejście ma granicę 1/q1/q, bo AA jest niejednostkowe.

Fork, inna reprezentacja i ostatni czynnik

Stosujemy lemat o rozwidleniu z Q=QHQ=Q_H, h=qh=q i ϵ0=max⁡{0,ϵ−δS−1/q}\epsilon_0=\max\{0,\epsilon-\delta_S-1/q\}. Wspólny istotny indeks ustala g1,g2,A,X,mg_1,g_2,A,X,m. Z odpowiedzi pod różnymi c,c′c,c' wyznaczamy aˉ1,aˉ2\bar a_1,\bar a_2 przez dwa ilorazy skalarne z ekstrakcji Okamoto.

Ustalmy g1,g2,Ag_1,g_2,A. Zapamiętana para jest jednostajna wśród dokładnie qq reprezentacji AA. Wszystkie dane użyte przez symulator i ekstraktor, poza tą zapamiętaną parą, zależą tylko od publicznych parametrów i niezależnych taśm. Warunkowanie na sukces forka nie zmienia tego faktu. Prawdopodobieństwo, że wydobyta para jest właśnie zapamiętaną, wynosi więc 1/q1/q.

W pozostałych przypadkach liczymy α=(aˉ1−a1)⋅(a2−aˉ2)−1\alpha=(\bar a_1-a_1)\cdot(a_2-\bar a_2)^{-1} i sprawdzamy g1α=g2g_1^\alpha=g_2. Cała redukcja ma dolną granicę sukcesu

Pr⁡[B rozwiązuje DL]≥(1−1/q)⋅max⁡{0,ϵ02/QH−ϵ0/q}.\Pr[\mathcal B\text{ rozwiązuje DL}] \ge(1-1/q)\cdot\max\{0,\epsilon_0^2/Q_H-\epsilon_0/q\}.

Dlaczego ten szczegół był potrzebny? Powtarzanie prawdziwego podpisującego z tą samą losowością, ale zmienionymi wyzwaniami, mogłoby ujawnić jego reprezentację między gałęziami. Nie uzasadnialibyśmy wtedy czynnika 1−1/q1-1/q samą nierozróżnialnością jednej rozmowy. Symulator używający tylko publicznego AA usuwa tę lukę w rozumowaniu.

Jest to dydaktyczna redukcja dla jawnie zdefiniowanego podpisu Fiat–Shamir w ROM. Oryginalna konstrukcja i technika reprezentacji pochodzą od Okamoto, CRYPTO 1992. Argument nierozróżnialności świadków omawiają również Bellare–Shoup, §5.3. Ich twierdzenia o podpisach dwupoziomowych mają inny model i nie są nazwą powyższego twierdzenia.