Protokoły Sigma i identyfikacja Schnorra
Zaimplementować protokół Sigma i prześledzić działanie dowodu Schnorra
Protokoły Sigma i identyfikacja Schnorra to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Struktura protokołu Sigma
Protokół Sigma składa się z 3 komunikatów: (1) Zobowiązanie: dowodzący wysyła zobowiązanie do losowej wartości. (2) Wyzwanie: weryfikator wysyła losowe wyzwanie. (3) Odpowiedź: dowodzący wysyła odpowiedź obliczoną na podstawie wyzwania i sekretu. Weryfikator akceptuje dowód albo go odrzuca.
Identyfikacja Schnorra
Dowodzący zna sekret x (klucz prywatny); klucz publiczny = g^x mod p (lub punkt X = x*G na krzywej eliptycznej). Celem jest udowodnienie znajomości x bez jego ujawniania. Jest to dowód znajomości logarytmu dyskretnego.
Etapy protokołu Schnorra
(1) Dowodzący wybiera losowe r i wysyła zobowiązanie R = r*G. (2) Weryfikator wysyła wyzwanie c (losową liczbę całkowitą). (3) Dowodzący wysyła odpowiedź s = r + c*x. (4) Weryfikator sprawdza, czy s*G == R + c*X. Jeśli tak, akceptuje dowód. Dowodzący zna x; odpowiedź s można obliczyć wyłącznie znając x.
Analiza bezpieczeństwa
Zupełność: uczciwy dowodzący zawsze spełnia s*G = r*G + c*x*G = R + c*X. Solidność: dwa transkrypty z tym samym R, ale różnymi wyzwaniami c i c', dają s i s', z których można odzyskać x = (s-s')/(c-c') — oszust nie może więc utworzyć dwóch poprawnych odpowiedzi dla tego samego R.
Wiedza zerowa protokołu Schnorra
Symulator (nieznający x): wybiera losowe s i c, a następnie ustawia R = s*G - c*X. (R, c, s) ma rozkład poprawnego transkryptu. Weryfikator nie może odróżnić rzeczywistych transkryptów od symulowanych — protokół Schnorra zapewnia wiedzę zerową względem uczciwego weryfikatora.
Transformacja Fiat-Shamir
Aby uczynić protokół Schnorra nieinteraktywnym, należy zastąpić wyzwanie weryfikatora wartością c = Hash(R || message). Dowodzący sam oblicza c i wysyła odpowiedź. W rezultacie powstaje dwuelementowy dowód (R, s), który każdy może zweryfikować. Jest to schemat podpisu Schnorra.
Podpisy Schnorra
Sign(x, m): r ← losowe; R = r*G; c = Hash(R||m); s = r + c*x. Podpis = (R, s). Verify: s*G == R + Hash(R||m)*X. Kompaktowe (64 bajty dla P-256), możliwe do weryfikacji wsadowej i uzasadnione bezpieczeństwem w ROM. Zastosowane w Bitcoin Taproot (BIP-340).
Zobowiązania Pedersena
C = r*G + v*H, gdzie H jest drugim niezależnym generatorem. Zobowiązanie do wartości v z użyciem losowości r. Wiążące: nie można otworzyć zobowiązania dla innej wartości v (logarytm dyskretny). Ukrywające: C ma rozkład jednostajny. Stosowane w opartych na Schnorrze dowodach zakresu i w Bulletproofs.
Kompozycja: dowody AND
Jednoczesne udowodnienie znajomości x1 AND x2: należy uruchomić dwa protokoły Schnorra z tym samym wyzwaniem (współdzielić wyzwanie za pomocą Fiat-Shamir). Weryfikator akceptuje dowód tylko wtedy, gdy oba poddowody są poprawne. Umożliwia to udowadnianie wielu twierdzeń w ramach jednej interakcji.
Kompozycja: dowody OR
Udowodnienie znajomości x1 OR x2 bez ujawniania, którego sekretu dotyczy dowód: należy użyć symulatora dla jednej gałęzi, aby obliczyć fałszywy transkrypt, a następnie podzielić wyzwanie między obie gałęzie. Weryfikator widzi dwa wiarygodnie wyglądające transkrypty, których suma daje rzeczywiste wyzwanie. Nazywa się to „podpisami pierścieniowymi”.
Zastosowania
Identyfikacja Schnorra: elektroniczne paszporty (protokół PACE). Podpisy Schnorra: Bitcoin Taproot, Monero (RingCT używa dowodów OR Schnorra), Signal Protocol (uzgadnianie kluczy X3DH). Zobowiązania Pedersena: Confidential Transactions, Bulletproofs, szyfrowanie notatek Sapling w Zcash.
Szybkie sprawdzenie
Co weryfikator sprawdza w ostatnim kroku protokołu identyfikacji Schnorra?
Podsumowanie
Protokoły Sigma: zobowiązanie–wyzwanie–odpowiedź. Schnorr pozwala udowodnić znajomość logarytmu dyskretnego. Fiat-Shamir czyni protokół nieinteraktywnym (podpis Schnorra). Dalej: zk-SNARK, czyli zwarte nieinteraktywne dowody.
Często zadawane pytania
Czy lekcja „Protokoły Sigma i identyfikacja Schnorra” jest bezpłatna?
Tak — pełny tekst „Protokoły Sigma i identyfikacja Schnorra” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Protokoły Sigma i identyfikacja Schnorra”?
Zaimplementować protokół Sigma i prześledzić działanie dowodu Schnorra Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Protokoły Sigma i identyfikacja Schnorra”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Intuicja ZKP: jaskinia Ali Baby
- Protokoły Sigma i identyfikacja Schnorra
- zk-SNARK: zwięzłe nieinteraktywne argumenty
- Zastosowania ZKP: ZK Rollups i monety prywatności