randomp2p/CRYPTO-UPDATE.md
Niels Göttsch fc414239f8
All checks were successful
Pin to IPFS / pin (push) Successful in 12s
[IMP] add next cryto task
2026-06-14 18:52:31 +02:00

2.6 KiB
Raw Blame History

KONTEXT Vanilla-ECMAScript-Projekt. Mein aktuelles Protokoll committet Geheimnisse per H(secret) und teilt einen Schlüssel n-of-n auf. Ich ersetze das durch ein 2-von-3 Threshold-Schema: Pedersen-DKG + Threshold-ElGamal mit verifizierbarer verteilter Entschlüsselung (Chaum-Pedersen-Beweise statt blankem Hash). Die fertige npm-Library threshold-elgamal scheidet aus: sie funktioniert zuverlässig nur mit threshold == Teilnehmerzahl, nicht mit 2-von-3.

AUFGABE

  1. Inspiziere zuerst das Repo: finde den bestehenden Commit-/Keypart-Code, bestimme die öffentliche Schnittstelle (welche Funktionen rufen Aufrufer auf), und liste sie mir auf, BEVOR du etwas änderst.

  2. Füge @noble/curves als Fundament hinzu (auditiert, dependency-frei). Verifiziere die aktuelle Version aus dem npm-Registry, bevor du pinst. KEINE selbstgebaute Feldarithmetik, KEIN eigenes BigInt-Modular-Inverse alles über noble.

  3. Implementiere mit threshold=2, parties=3 auf einer Prime-Order-Gruppe (Ristretto255 via @noble/curves bevorzugt):

    • Pedersen-VSS / Pedersen-DKG: zwei Polynome Grad 1, Koeffizienten- Commitments C_k = g^a_k · h^b_k, h mit unbekanntem log_g(h).
    • Verteilte Schlüsselerzeugung: jede Partei dealt einen Beitrag, jede verifiziert jeden empfangenen Share gegen die Commitments.
    • Threshold-ElGamal als KEM: Payload NICHT direkt mit ElGamal. Rekonstruiere per 2 partiellen Entschlüsselungen das gemeinsame Gruppenelement, leite daraus per HKDF-SHA256 einen 256-bit Key ab, verschlüssele das Payload mit AES-256-GCM (WebCrypto subtle, nicht selbst gebaut).
    • Jede partielle Entschlüsselung trägt einen Chaum-Pedersen-Beweis der DL-Gleichheit; verifiziere VOR der Lagrange-Kombination.
  4. Behalte die bestehende öffentliche Schnittstelle bei (gleiche Signaturen), damit Aufrufer unverändert bleiben. Markiere den alten Code deprecated statt ihn zu löschen.

  5. Tests: (a) 2 von 3 entschlüsseln erfolgreich, (b) 1 allein scheitert, (c) manipulierte partielle Entschlüsselung wird durch die Verifikation abgelehnt, (d) manipulierter VSS-Share fliegt bei der DKG-Verifikation auf, (e) echtes Payload Round-Trip.

EINSCHRÄNKUNGEN / WARNUNG

  • Das ist selbstgebaute Threshold-Krypto. Setze einen unübersehbaren Kommentar an den Kern: nicht auditiert, Komposition über noble ist ungeprüft.
  • Nutze ausschließlich noble + WebCrypto für alle Primitiven. Erfinde keine Kurven-, Hash- oder Symmetrie-Operationen selbst.
  • Konstante-Zeit-Verhalten kannst du in reinem JS nicht garantieren halte das im Kommentar fest.
  • Ändere nichts an meiner Geheimnis-/Key-Persistenz, ohne vorher zu fragen.