Decoy-Auswahl
Woher die 15 fremden Outputs in einem Ring kommen – und warum das schwieriger ist, als es aussieht
Die Wallet wählt 15 Decoys aus allen Outputs der Blockchain so, dass ihr Alter verteilt ist wie das Alter echter Ausgaben: viele neue, wenige alte. Sie verwendet dafür eine Gammaverteilung über den Logarithmus des Alters. Weicht die Verteilung der Decoys vom Verhalten der Menschen ab, fällt der echte Input statistisch auf.
Warum nicht einfach „zufällige Outputs“
Stell dir vor, die Decoys würden gleichverteilt aus der ganzen Blockchain gewählt. Dann wäre ein typischer Decoy Jahre alt. Menschen geben aber meist Geld aus, das sie vor Kurzem bekommen haben: vor Tagen oder Wochen. In einem Ring aus 16 mit einem frischen Output und 15 alten – rate mal, welcher echt ist.
Genau das passierte im frühen Monero: Eine Studie von 2017 (Miller, Möser u. a., „An Empirical Analysis of Traceability in the Monero Blockchain“) zeigte, dass die Heuristik „der neueste Input ist der echte“ bei Ringen jener Zeit meistens richtiglag.
Die Gammaverteilung
Seit 2018 wählt die Wallet das Alter eines Decoys so:
Das Alter wird dann in eine Blockhöhe umgerechnet (unter der Annahme von 2-Minuten-Blöcken), und aus diesem Block wird ein zufälliger Output gewählt. Dazu ein paar Regeln:
- Outputs, die jünger als 10 Blöcke sind, werden nicht verwendet (sie können auch nicht ausgegeben werden – das ist die Sperrregel);
- die Auswahl berücksichtigt, wie viele Outputs jeder Block hat (sonst würden Outputs aus „leeren“ Blöcken zu oft gewählt);
- Duplikate und bereits gewählte Outputs werden verworfen.
Was schiefgehen kann
Fehler in der Implementierung
2021 wurde ein Fehler in der Decoy-Auswahl von wallet2 gefunden: Für manche Outputs war die Wahrscheinlichkeit, neue Decoys zu wählen, zu niedrig, sodass Transaktionen, die sehr neue Outputs ausgaben, auffielen. Er wurde behoben, aber Transaktionen von vor der Korrektur bleiben mit dieser Eigenheit für immer auf der Blockchain. Auch Wallets von Drittanbietern mit eigener Decoy-Auswahl stellten sich wiederholt als „erkennbar“ heraus.
Das Verhalten passt nicht zum Modell
Das Modell wurde an Bitcoin-Daten von 2017 angepasst. Echte Monero-Nutzer verhalten sich anders, und je größer der Unterschied, desto mehr Information verrät das Alter. Verbesserungen wurden vorgeschlagen (z. B. die Verteilung an Moneros eigene Daten anzupassen), aber mit FCMP++ verschwindet das Problem an der Wurzel.
Flooding
Erzeugt jemand eine riesige Menge eigener Outputs (solche Episoden wurden 2021 und 2024 beobachtet), landen sie massenhaft in den Ringen anderer Leute. Der Angreifer weiß, dass seine eigenen Outputs nicht die echten sind, und streicht sie gedanklich – die effektive Ringgröße schrumpft.
Die Decoy-Auswahl ist keine Kryptografie, sondern Statistik. Die Kryptografie der Ringsignatur garantiert, dass die Signatur den echten Input nicht verrät. Aber alles, was man aus der Wahl der Ringmitglieder selbst lernen kann, schützt sie nicht. Bei FCMP++ ist der „Ring“ jeder Output, und es gibt nichts auszuwählen.