0Pricing
Cryptology Academy · Lektion

Shamir Secret Sharing: Polynommathematik

Konstruieren Sie Polynome über endlichen Körpern, um Geheimnisse aufzuteilen und wiederherzustellen.

Shamir Secret Sharing: Polynommathematik ist eine kostenlose Cryptology Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cryptology Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.

Zentrale Erkenntnis

Shamir's Secret Sharing (1979) codiert das Geheimnis als y-Achsenabschnitt (f(0)) eines zufälligen Polynoms vom Grad (k-1) über einem endlichen Körper. Beliebige k Punkte bestimmen das Polynom eindeutig (Lagrange-Interpolation); weniger als k Punkte verraten nichts.

Konstruktion des Polynoms

Um das Geheimnis S mit dem Schwellenwert k auf n Parteien aufzuteilen: Wählen Sie eine Primzahl p > S und n. Wählen Sie zufällige Koeffizienten a_1, ..., a_{k-1}. Definieren Sie f(x) = S + a_1*x + a_2*x^2 + ... + a_{k-1}*x^{k-1} (mod p). Partei i erhält den Anteil (i, f(i)).

Beispiel: 2-von-3-Schema

Geheimnis S=7, p=17, k=2 (lineares Polynom). Wählen Sie a_1=3. f(x)=7+3x mod 17. Anteile: (1,10), (2,13), (3,16). Zwei beliebige Punkte bestimmen die Gerade. f(0)=7. Ein einzelner Punkt: unendlich viele mögliche Geraden, keinerlei Information über S.

Lagrange-Interpolation

Gegeben k Punkte (x_1,y_1),...,(x_k,y_k), rekonstruieren Sie f(0) mit Lagrange: S = sum_i y_i * prod_{j≠i} (0-x_j)/(x_i-x_j) mod p. Alle Berechnungen erfolgen modular. Keine Gleitkommaarithmetik — exakte Rekonstruktion über dem endlichen Körper.

<p>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</p>

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

Skizze des Beweises der perfekten Sicherheit

Für k-1 Shares gibt es für jeden möglichen Geheimniswert S genau ein Polynom vom Grad k-1, das durch diese k-1 Punkte verläuft. Wenn Sie k-1 Shares kennen, ist daher jeder Wert von S in [0, p-1] gleich wahrscheinlich — es werden keinerlei Informationen preisgegeben.

Auswahl der Primzahl

p muss größer als das Geheimnis und n sein. Eine gängige Wahl ist p = 2^127-1 (Mersenne-Primzahl) für 128-Bit-Geheimnisse. Dadurch passen alle Shares in 128 Bit und die Arithmetik ist effizient. Alternativ können Sie p=2^521-1 für 512-Bit-Geheimnisse verwenden.

Überprüfung von Shares

Das einfache SSS bietet keine Integritätsschutz für Shares: Ein böswilliger Teilnehmer kann einen falschen Share übermitteln und dadurch eine falsche Rekonstruktion des Geheimnisses verursachen. Feldman VSS (Verifiable Secret Sharing) veröffentlicht Commitments g^{a_i} mod p, sodass Shares überprüft werden können, ohne das Polynom offenzulegen.

Proaktives Secret Sharing

Shares können regelmäßig aufgefrischt werden: Erzeugen Sie ein neues Polynom mit demselben Geheimnis S und verteilen Sie neue Shares. Die alten Shares werden dadurch ungültig. Ein Angreifer, der nach der Auffrischung den Share eines Teilnehmers kompromittiert, erhält nur einen nutzlosen alten Share. Dieses Verfahren wird in langlebigen Schlüsselverwaltungssystemen eingesetzt.

Implementierungen

ssss (Linux-Kommandozeile), python-secret-sharing, hashicorp/vault verwendet SSS für seinen Seal-Mechanismus, und die Trezor-Hardware-Wallet verwendet SSS für die Sicherung des Wallet-Seeds (SLIP-39). Alle arbeiten über großen Primkörpern.

Einschränkungen

SSS erfordert einen vertrauenswürdigen Dealer, der Shares erzeugt und verteilt (der Dealer kennt das Geheimnis). Ein Szenario ohne Dealer erfordert DKG (Distributed Key Generation). Bei der Rekonstruktion wird das Geheimnis allen offengelegt, die k Shares besitzen — durch MPC/Schwellenwertsignaturen lässt sich dieses Problem vermeiden.

Kurze Überprüfung

Beim (3,5)-Secret-Sharing nach Shamir: Wie viele Shares werden mindestens benötigt, um das Geheimnis zu rekonstruieren?

Zusammenfassung

Shamirs SSS kodiert Geheimnisse als y-Achsenabschnitte von Polynomen. Die Lagrange-Interpolation rekonstruiert das Geheimnis aus k Shares. Für weniger als k Shares besteht perfekte informationstheoretische Sicherheit. Als Nächstes folgen visuelles und additives Secret Sharing.

Häufig gestellte Fragen

Ist die Lektion „Shamir Secret Sharing: Polynommathematik“ kostenlos?

Ja — der vollständige Text von „Shamir Secret Sharing: Polynommathematik“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cryptology Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Shamir Secret Sharing: Polynommathematik“?

Konstruieren Sie Polynome über endlichen Körpern, um Geheimnisse aufzuteilen und wiederherzustellen. Du übst Cryptology Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cryptology Academy zu starten?

Keine Vorkenntnisse erforderlich. Cryptology Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Shamir Secret Sharing: Polynommathematik“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cryptology Academy-Lektion Code schreiben und ausführen?

Ja. Jede Cryptology Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Problem der Geheimnisaufteilung
  2. Shamir Secret Sharing: Polynommathematik
  3. Visuelles Secret Sharing und additive Verfahren
  4. Schwellwertsignaturen und Praxisanwendungen
← Zurück zu Cryptology Academy