Cryptology Academy · Lekcja

Współdzielenie sekretu Shamira: matematyka wielomianów

Konstruować wielomiany nad ciałami skończonymi, aby dzielić i odzyskiwać sekrety

Lekcja 2 z 413 kroki

Współdzielenie sekretu Shamira: matematyka wielomianów 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.

Kluczowa idea

Schemat Shamir's Secret Sharing (1979) koduje sekret jako punkt przecięcia z osią y (f(0)) losowego wielomianu stopnia (k-1) nad ciałem skończonym. Dowolne k punktów jednoznacznie wyznacza wielomian (interpolacja Lagrange’a); mniej niż k punktów nie ujawnia niczego.

Konstrukcja wielomianu

Aby podzielić sekret S z progiem k między n stron: wybierz liczbę pierwszą p > S i n. Wylosuj współczynniki a_1, ..., a_{k-1}. Zdefiniuj f(x) = S + a_1*x + a_2*x^2 + ... + a_{k-1}*x^{k-1} (mod p). Strona i otrzymuje udział (i, f(i)).

Przykład: schemat 2-z-3

Sekret S=7, p=17, k=2 (wielomian liniowy). Wybierz a_1=3. f(x)=7+3x mod 17. Udziały: (1,10), (2,13), (3,16). Dowolne dwa punkty wyznaczają prostą. f(0)=7. Jeden punkt z osobna: nieskończenie wiele możliwych prostych, zero informacji o S.

Interpolacja Lagrange’a

Mając k punktów (x_1,y_1),...,(x_k,y_k), odtwórz f(0) za pomocą interpolacji Lagrange’a: S = sum_i y_i * prod_{j≠i} (0-x_j)/(x_i-x_j) mod p. Wszystkie działania są modularne. Bez liczb zmiennoprzecinkowych — dokładne odtworzenie w ciele skończonym.

Implementacja w Pythonie

from functools import reduce def lagrange(shares, p): xs = [s[0] for s in shares] ys = [s[1] for s in shares] result = 0 for i, (xi, yi) in enumerate(shares): num = reduce(lambda a,b: a*b%p, [(-xj)%p for j,xj in enumerate(xs) if j!=i], 1) den = reduce(lambda a,b: a*b%p, [(xi-xj)%p for j,xj in enumerate(xs) if j!=i], 1) result = (result + yi * num * pow(den, p-2, p)) % p return result

Szkic dowodu doskonałego bezpieczeństwa

Dla k-1 udziałów istnieje dokładnie jeden wielomian stopnia k-1 przechodzący przez te k-1 punktów dla każdej możliwej wartości sekretu S. Zatem znając k-1 udziałów, każda wartość S z [0, p-1] jest jednakowo prawdopodobna — nie zostaje ujawniona żadna informacja.

Wybór liczby pierwszej

p musi być większe od sekretu i n. Typowy wybór: p = 2^127-1 (liczba pierwsza Mersenne’a) dla sekretów 128-bitowych. Dzięki temu wszystkie udziały mieszczą się w 128 bitach, a działania arytmetyczne są wydajne. Alternatywnie można użyć p=2^521-1 dla sekretów 512-bitowych.

Weryfikacja udziałów

Podstawowy SSS nie zapewnia integralności udziałów: złośliwy posiadacz udziału może przesłać fałszywy udział, powodując błędną rekonstrukcję sekretu. Feldman VSS (Verifiable Secret Sharing) publikuje zobowiązania g^{a_i} mod p, dzięki czemu można zweryfikować udziały bez ujawniania wielomianu.

Proaktywne współdzielenie sekretu

Udziały można okresowo odświeżać: wygenerować nowy wielomian z tym samym sekretem S i rozdzielić nowe udziały, dzięki czemu stare udziały tracą ważność. Atakujący, który po odświeżeniu przejmie kontrolę nad jednym z posiadaczy udziałów, uzyska bezużyteczny stary udział. Stosuje się to w systemach zarządzania kluczami o długim cyklu życia.

Implementacje

ssss (wiersz poleceń systemu Linux), python-secret-sharing, hashicorp/vault używa SSS do mechanizmu zapieczętowania, a portfel sprzętowy Trezor używa SSS do tworzenia kopii zapasowej ziarna portfela (SLIP-39). Wszystkie działają w ciałach o dużej charakterystyce pierwszej.

Ograniczenia

SSS wymaga zaufanego dealera do wygenerowania i rozdzielenia udziałów (dealer zna sekret). Scenariusz bez dealera wymaga DKG (Distributed Key Generation). Rekonstrukcja ujawnia sekret każdemu, kto posiada k udziałów — można tego uniknąć za pomocą MPC lub podpisów progowych.

Szybkie sprawdzenie

W schemacie współdzielenia sekretu Shamir’s (3,5) jaka jest minimalna liczba udziałów potrzebnych do odtworzenia sekretu?

Podsumowanie

SSS Shamira koduje sekrety jako wyrazy wolne wielomianów. Interpolacja Lagrange’a odzyskuje sekret z k udziałów. Zapewnia doskonałe bezpieczeństwo w sensie teorii informacji dla mniej niż k udziałów. Dalej: wizualne i addytywne współdzielenie sekretu.

Bezpłatny start

Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
67
Lekcje
261

Często zadawane pytania

Czy lekcja „Współdzielenie sekretu Shamira: matematyka wielomianów” jest bezpłatna?

Tak — pełny tekst „Współdzielenie sekretu Shamira: matematyka wielomianów” 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 „Współdzielenie sekretu Shamira: matematyka wielomianów”?

Konstruować wielomiany nad ciałami skończonymi, aby dzielić i odzyskiwać sekrety Ć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 „Współdzielenie sekretu Shamira: matematyka wielomianów”?

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

  1. Problem współdzielenia sekretu
  2. Współdzielenie sekretu Shamira: matematyka wielomianów
  3. Wizualne współdzielenie sekretu i schematy addytywne
  4. Podpisy progowe i zastosowania w praktyce
← Powrót do Cryptology Academy