Ein Zero-Knowledge-Beweis erlaubt Ihnen zu beweisen, dass eine Aussage wahr ist, ohne zu verraten, warum sie wahr ist.
Das kanonische Beispiel: Stellen Sie sich einen farbenblinden Freund vor, der zwei optisch identische Bälle hält – einen roten und einen grünen. Sie können ihm beweisen, dass die Bälle wirklich verschiedene Farben haben, ohne ihm je zu sagen, welcher welcher ist. Sie tun das, indem er die Bälle hinter dem Rücken vertauscht (oder nicht), und Sie ihm danach sagen, ob er sie vertauscht hat. Nach genügend Runden ist er überzeugt, dass Sie Rot von Grün unterscheiden können, weiß aber immer noch nicht, welcher Ball welche Farbe hat.
Das ist die ganze Idee. SolMask nutzt Zero-Knowledge-Beweise für eine spezifische Aussage:
„Ich kenne ein Geheimnis, das einer der Einzahlungen in diesem abgeschirmten Pool entspricht, und ich habe eine Auszahlung von N Tokens an Wallet X autorisiert."
Der Beweis sagt nichts darüber aus, welche Einzahlung. Die Chain sieht eine gültige Auszahlung, kann sie aber keiner spezifischen Einzahlung zuordnen.
Was in den Beweis hineingeht
Als Sie eingezahlt haben, hat SolMask ein Commitment berechnet:
commitment = Poseidon(secret, nullifier_secret, amount, unlock_slot)
Nur das Commitment landet on-chain. Die vier Eingaben – Ihr Secret, der Nullifier, der Betrag und die Zeit, die Sie zu warten zugestimmt haben – verlassen Ihren Browser nie. Sie werden nicht in eine Datei geschrieben, die Sie hüten müssten: Ihre Wallet leitet sie bei Bedarf erneut ab, indem sie eine feste Nachricht signiert, und das Deposit veröffentlicht einen Wallet-verschlüsselten Wiederherstellungs-Blob on-chain, sodass dieselbe Wallet die Note überall wiederfinden kann.
Beim Auszahlen erzeugt Ihr Browser einen Groth16-Beweis, der mathematisch besagt:
- Das Commitment ist eines der Blätter im Merkle-Baum des Pools (ohne zu sagen, welches Blatt).
- Der Nullifier, den Sie jetzt offenlegen, ist der Hash des Nullifier-Secrets, an das Sie sich gebunden haben.
- Es ist genug Zeit vergangen (
current_slot >= unlock_slot). - Der Betrag, den Sie abheben, ist konsistent mit dem Wert des Commitments.
- Jegliches Rückgeld wird in ein neues Commitment gehasht, das Sie dem Baum hinzufügen.
Der Beweis ist etwa 200 Bytes groß. Das Solana-Programm verifiziert ihn in wenigen Millisekunden.
Warum Nullifier?
Jede Einzahlung kommt mit einem einzigartigen Secret. Beim Auszahlen legen Sie einen Hash dieses Secrets offen – den Nullifier. Die Chain hält jeden bisher gesehenen Nullifier fest; wenn Sie versuchen, dieselbe Einzahlung zweimal abzuheben, legt der zweite Versuch denselben Nullifier offen und wird abgelehnt.
Entscheidend ist: Der Nullifier wird aus Ihrem privaten Secret erzeugt – nur Sie können ihn also für Ihre Einzahlung erzeugen, aber die Chain kann ihn verifizieren, ohne das Secret selbst zu erfahren.
Warum Poseidon?
Standard-Hashes wie SHA-256 sind extrem teuer, als Zero-Knowledge-Beweise ausgedrückt zu werden (denken Sie: Hunderttausende von Constraints). Poseidon ist ein Hash, der so entworfen wurde, dass er innerhalb von ZK-Schaltungen günstig ist – etwa 5× weniger Constraints als Keccak bei gleichem Sicherheitsniveau. Der Trade-off: Auf einer CPU direkt gerechnet ist er langsamer als SHA-256, was für unseren Anwendungsfall keine Rolle spielt.
Warum Groth16?
Groth16 ist das in Produktion am meisten erprobte Beweissystem in ZK. Seine Beweise sind winzig (3 Punkte auf einer elliptischen Kurve, etwa 200 Bytes) und verifizieren in konstanter Zeit. Der Haken: Es braucht eine einmalige Trusted-Setup-Zeremonie, um öffentliche Parameter zu erzeugen. SolMasks Zeremonie ist in unseren Trusted-Setup-Notizen dokumentiert.
Wem Sie nicht vertrauen müssen
Sie müssen den Betreibern von SolMask nicht vertrauen. Der Verifier-Code liegt on-chain und ist öffentlich. Die Schaltung ist öffentlich und reproduzierbar. Der Relayer kann sich weigern, Ihre Auszahlung zu broadcasten, aber er kann Ihre Mittel nicht stehlen – der Beweis bindet die Empfängeradresse, sodass jeder Umleitungsversuch ihn ungültig machen würde.
Wem Sie vertrauen müssen
Dem Trusted Setup. Wenn jemand, der an der Zeremonie teilgenommen hat, das geheime „toxische Material" behalten hat, könnte er Beweise fälschen und den Pool leeren. SolMasks Zeremonie nutzt ein öffentliches Bitcoin-Block-Beacon als Zufalls-Anker; eine öffentliche mehrparteiige Zeremonie ist geplant, während das Protokoll reift.