Im aktuellen BIP über die Standardisierung von Schnorr stellt Pieter Wuille einen Algorithmus zur Batch-Validierung vor. Nach meinem Verständnis ist die Multiplikation mit einem Skalar die schwerste Operation: Um die Batch-Validierung sicher zu machen, müssen wir jede öffentliche Nonce mit einem zufälligen Faktor multiplizieren, sodass wir wieder auf zwei Multiplikationen pro Signatur (plus eins) zurückkommen. Ich verstehe nicht, warum es die Beschleunigung gibt, die in der Abbildung zu Beginn des BIP dargestellt wird. Könnte jemand helfen?
Danke im Voraus für eure Antworten!
Sie haben Recht, dass die Multiplikation der elliptischen Kurve tatsächlich die teuerste Operation im Validierungsalgorithmus ist. Und da sowohl die Einzelsignaturvalidierung als auch die Batchvalidierung zwei EC-Multiplikationen pro Signatur erfordern, scheint es, dass durch Batching keine Beschleunigung erzielt werden kann.
Es sind jedoch mehrere Algorithmen bekannt, um die Summe mehrerer EC-Multiplikationen schneller zu berechnen als die einzelnen Multiplikationen zu summieren. Der Algorithmus von Straus (auch als Shamir-Trick bekannt), der Algorithmus von Bos-Coster und der Algorithmus von Pippenger bieten alle Beschleunigungen und sind in verschiedenen Szenarien anwendbar. In der Grafik in unserem BIP-Entwurf werden Straus und Pippenger verwendet (abhängig von der Größe der Charge; Pippenger gewinnt nur für Chargen über ~100 Schlüssel). Für ausreichend große Chargen sind Bos-Coster und Pippenger O(log n) -mal schneller als einzelne Multiplikationen.
Um Ihnen eine Vorstellung davon zu geben, wie dies möglich ist, ist hier eine Zusammenfassung des Bos-Coster-Algorithmus (obwohl er in der Praxis nicht der schnellste ist, ist er am einfachsten zu erklären):
Die Intuition hier ist, dass, wenn Sie sagen wir 100 Multiplikationen durchführen müssen, eine 1 - eine 2 im Durchschnitt 100 Mal kleiner ist als die Zahl, die sie ersetzt ( eine 1 ), also teilen wir in jedem Schritt einen der Koeffizienten durch 100 , während nur eine einzige EC-Addition durchgeführt wird. Dies steht im Gegensatz zur naiven EC-Multiplikation, bei der Sie im Allgemeinen eine Addition für jedes Bit in der Eingabe durchführen müssen.
G. Maxwell