Utilia

Podział sekretu Shamira

Podziel hasło lub frazę odzyskiwania na N udziałów tak, by dowolne M z nich je odtworzyło – schemat Shamira w GF(256), lokalnie w twojej przeglądarce.

Dzielenie i łączenie działa w całości w twojej przeglądarce. Sekret i udziały nigdy nie są nigdzie wysyłane; liczby losowe pochodzą z crypto.getRandomValues.

Podziel sekret

    Połącz udziały

    Jak podzielić sekret

    1. Wpisz lub wklej tekst do ochrony w pole Sekret (tekst): frazę odzyskiwania portfela, hasło główne, klucz szyfrujący…
    2. Ustaw Liczba udziałów (N) i Udziały potrzebne do odtworzenia (M). Na przykład N = 5 i M = 3 oznacza, że dowolne 3 z 5 udziałów odtworzą sekret, a 2 udziały nie zdradzą o nim nic.
    3. Kliknij Podziel sekret. Każdy udział pojawia się w osobnej linii z przyciskiem Kopiuj; możesz też użyć Kopiuj wszystkie udziały albo Pobierz udziały (.txt).
    4. Kliknij Test: połącz pierwsze M udziałów, aby sprawdzić, czy udziały działają, zanim je komuś przekażesz.
    5. Każdy udział daj innej osobie albo przechowuj w innym miejscu. Nie trzymaj wszystkich razem – inaczej podział nie ma sensu.

    Jak odtworzyć sekret

    1. Wklej co najmniej M udziałów w pole Udziały, po jednym w linii, w dowolnej kolejności. Puste linie są pomijane.
    2. Kliknij Połącz udziały. Tekst pojawi się w polu Odtworzony sekret, a komunikat stanu poda, których numerów udziałów użyto.
    3. Jeśli udział ma literówkę, pochodzi z innego podziału albo występuje dwa razy z różną treścią, narzędzie wskaże, który to udział i dlaczego, zamiast zwracać bezsensowne dane.

    Jak działa schemat Shamira

    Adi Shamir opublikował ten schemat w 1979 r. Aby podzielić jeden bajt s z progiem M, losuje się wielomian stopnia M − 1, którego wyraz wolny to s: f(x) = s + a₁x + … + a₍M−1₎x^(M−1). Udział numer x to wartość f(x). Dowolne M punktów wyznacza wielomian, więc interpolacja Lagrange’a w punkcie x = 0 zwraca s; przy mniej niż M punktach każda wartość s jest tak samo prawdopodobna, dlatego udziały nie ujawniają niczego o sekrecie.

    Narzędzie działa w ciele skończonym GF(256) (tym samym, którego używa AES, z wielomianem redukcji x⁸ + x⁴ + x³ + x + 1), więc każdy bajt sekretu w UTF-8 dostaje własny wielomian, a udziały są dokładnie tak długie jak sekret. Losowe współczynniki pochodzą z crypto.getRandomValues, kryptograficznego generatora liczb losowych przeglądarki. Wszystko działa lokalnie: sekret i udziały nigdy nie opuszczają twojego urządzenia. Polskie znaki, takie jak „ą” czy „ż”, zajmują w UTF-8 po dwa bajty i są odtwarzane bez zmian.

    Format udziału

    Udział wygląda tak: 3-2-5f1c… – najpierw próg M, potem numer udziału X (od 1 do 255), a dalej dane szesnastkowe. Dane zawierają wartości wielomianu dla sekretu, po których następuje 4-bajtowe CRC-32 sekretu, a na końcu 4-bajtowa suma kontrolna CRC-32 samego udziału. Suma kontrolna wyłapuje błędy przy przepisywaniu, a wewnętrzne CRC pokazuje, że pomieszano udziały różnych sekretów. Udziały utworzone innymi narzędziami do schematu Shamira mają inne formaty i nie można ich tu połączyć.

    Najczęściej zadawane pytania

    Jak dobrać N i M?

    M to liczba osób lub miejsc, które muszą współpracować, a N − M to liczba udziałów, które możesz stracić. Popularny wybór to 3 z 5: dwa udziały mogą zaginąć lub ulec zniszczeniu, a żadna para posiadaczy nie odtworzy sekretu samodzielnie.

    Czy mogę bezpiecznie trzymać jeden udział w chmurze?

    Pojedynczy udział, a także każda grupa mniejsza niż M, nie zdradza niczego o sekrecie. Mimo to w jednym koncie czy miejscu trzymaj mniej niż M udziałów – inaczej samo to miejsce zawiera sekret.

    Czy to narzędzie szyfruje sekret?

    Nie w zwykłym sensie: nie ma tu hasła. Ochronę zapewnia próg. Możesz połączyć oba podejścia, np. dzieląc hasło do zaszyfrowanego pliku.

    Co się stanie, jeśli podam więcej niż M udziałów?

    Pierwsze M udziałów odtwarza sekret, a dodatkowe są z nimi porównywane. Udział, który nie pasuje, zostaje zgłoszony, co pomaga wykryć uszkodzony lub obcy udział.

    Czy mogę podzielić plik?

    Narzędzie dzieli tekst o długości do 10 000 bajtów. Plik zaszyfruj mocnym, losowym hasłem i podziel to hasło.