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

48 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.