Denkst du, dass die Implementierung von Nonces einfach ist? Denk nochmal nach. Egal, ob du Onchain-Protokolle oder Offchain-Infrastrukturen entwickelst, die richtige Implementierung von Nonces ist einer der kniffligsten Aspekte der kryptografischen Sicherheit. Lass uns eintauchen, warum Replay-Schutz schwieriger ist, als es aussieht 👇
2/ Zuerst lassen Sie uns digitale Signaturen verstehen. In der Public-Key-Kryptografie (wie BLS) haben Sie einen privaten Schlüssel, der Nachrichten signiert, und einen öffentlichen Schlüssel, der sie verifiziert. In Ethereum: address = Hash des öffentlichen Schlüssels message = Transaktionshash signature = 64 Bytes kryptografischer Nachweis
3/ Hier ist das Problem: Die Mathematik in den meisten Public-Key-Krypto-Protokollen begrenzt nicht, wie oft eine Signatur gegen dieselbe Nachricht überprüft werden kann. Sobald Sie eine gültige Signatur haben, können Sie sie unendlich oft wiederholen. Dies öffnet die Tür für Replay-Angriffe.
4/ Geben Sie die Nonce ein: eine "einmal verwendete Zahl", die Replay-Angriffe verhindert. Wenn ein Verbraucher eine Nachricht mit einer Nonce erhält, überprüft er, ob diese Nonce zuvor verwendet wurde. Wenn ja → ablehnen. Ethereum-Transaktionen verwenden dieses Muster.
5/ Aber die Implementierung von Nonces ist täuschend komplex. Wichtige Anforderungen: - Nonces dürfen NIEMALS wiederverwendet werden (auf dieser oder anderen Ketten) - Sie müssen Replay-Angriffe dauerhaft verhindern - Es sind Mechanismen erforderlich, um das Wachstum des Speichers zu handhaben - Sie müssen resistent gegen Front-Running-Angriffe sein
6/ Die naive Lösung: Alle Nonces für immer in einer Datenbank speichern. Das hat zwei große Probleme: a) Unbegrenztes Speicherwachstum (insbesondere bei Spam-Angriffen) b) Anfälligkeit für Front-Running-Angriffe Problem (a) ist einfacher zu lösen als (b). Lassen Sie uns zuerst das Speicherproblem angehen...
7/ Zeitstempelbasierte Nonces lösen das Speicherwachstum! Verwenden Sie Zeitstempel + Ablaufzeitraum. Nonces, die älter als 5 Minuten sind, werden aus der Datenbank gelöscht. Aber was ist mit gleichzeitigen Nachrichten vom selben Konto? Sie teilen sich einen Zeitstempel. Lösung: Zeitstempel + random_bytes für granulare Einzigartigkeit.
8/ Front-Running ist der knifflige Teil. Böswillige Akteure können gültige Signaturen abfangen, sie vorab ausführen, um Nonces als verwendet zu markieren, und dann wird der Aufruf des legitimen Benutzers abgelehnt. Dies ist onchain problematisch bei gebündelten Operationen, wenn eine schlechte Signatur eine gesamte Charge ablehnt. Für offchain: Verwenden Sie TLS-Verschlüsselung! Lassen Sie keinen böswilligen Akteur jemals die Nonce oder Signatur sehen.
9/ Vergessen Sie nicht die Persistenz! Wenn Ihr Nonce-Cache nur im Speicher ist, können Angreifer alte Nonces nach einem Systemneustart wiederverwenden. Speichern Sie immer den Nonce-Zustand in einem dauerhaften Speicher und laden Sie ihn beim Start. Nur im Speicher befindliche Caches = Fenster für Replay-Schwachstellen.
10/ Einzigartige Nonces pro Verbraucher! Wenn Sie an mehrere Benutzer senden, sollte jeder eine andere Nachricht/Unterschrift erhalten. Andernfalls sind Sie anfällig für Man-in-the-Middle-Angriffe, bei denen ein Empfänger die Nachricht weiterleitet und sich als der ursprüngliche Absender ausgibt.
11/ Inkrementelle Nonces (wie bei Ethereum, nonce = vorherige nonce + 1) haben ihren Platz, aber Vorsicht! Sie schaffen massive Herausforderungen für die Offchain-Infrastruktur: Nachrichten in falscher Reihenfolge, Synchronisationsprobleme und komplexe Wiederherstellungsszenarien. Verwenden Sie sie nur, wenn Sie sicher sind, dass Nachrichten (oder müssen) in der richtigen Reihenfolge ankommen.
Zusammenfassung - Nonce-Implementierungscheckliste: ✅ Verwenden Sie Nonces, um Replay-Angriffe zu verhindern ✅ Bewahren Sie den Nonce-Zustand über Neustarts hinweg ✅ Implementieren Sie Ablaufmechanismen (Zeitstempel + Bereinigung) ✅ Machen Sie Nonces pro Empfänger einzigartig ✅ Schützen Sie sich vor Front-Running mit verschlüsselten Kanälen ✅ Vermeiden Sie inkrementelle Nonces, es sei denn, die Reihenfolge ist garantiert Sicherheit liegt im Detail! 🛡️
1,36K