Wie von Maxwell hier in HD-Wallets beschrieben, können wir unter der Annahme, dass wir ein Schlüsselpaar mit privatem Schlüssel SK.a
und öffentlichem Schlüssel PK.a
sowie einen Seed- s
und einen Generatorpunkt haben , ein neues Schlüsselpaar wie folgt G
generieren :(SK.b, PK.b)
PK.b = PK.a + sG
SK.b = SK.a + s
Der Vorteil bei dieser Methode besteht darin, dass ein Dienstanbieter neue öffentliche Schlüssel generieren kann, ohne den privaten Schlüssel des Kunden zu kennen. Meine Frage ist, warum wir den Seed und den privaten Schlüssel nicht multiplizieren, anstatt sie hinzuzufügen?
PK.b = PK.a * s
SK.b = SK.a * s
Gibt es ein Problem mit der späteren Methode, die ich vorgeschlagen habe?
Ein früherer Entwurf von BIP0032 tat dies tatsächlich. (Entschuldigung für die Verlinkung zum Bitcoin-Wiki - diese Änderung wurde vorgenommen, bevor wir für die BIP-Verfolgung auf Git umgestellt haben.)
Laut Changelog geschah dies aus Geschwindigkeitsgründen.
- [30. Apr. 2013] Umstellung von Multiplikation mit I L auf Addition von I L (schnellere, einfachere Implementierung)
Es ist viel schneller, wenn ein untergeordneter privater Schlüssel von einem übergeordneten privaten Schlüssel abgeleitet wird. Das neue Verfahren erfordert nur eine normale Addition (mod n) anstelle einer ECDSA-Punktmultiplikation.
Es ist nicht schneller, wenn ein untergeordneter öffentlicher Schlüssel von einem übergeordneten öffentlichen Schlüssel abgeleitet wird. Das erfordert immer noch eine ECDSA-Multiplikation gefolgt von einer ECDSA-Addition. (Tatsächlich ist es etwa 2 % langsamer. )
Die Verwendung von Addition fügt keine Sicherheitsprobleme hinzu. Es ist möglich, einen übergeordneten privaten Schlüssel aus einem untergeordneten privaten Schlüssel und einem erweiterten öffentlichen Schlüssel zu erhalten, aber das würde auch zutreffen, wenn eine Multiplikation verwendet würde.
abeikverdi
Pieter Wuille
abeikverdi
Nick Odell