Angenommen, ich habe zwei Eingänge, die zur selben Adresse gehören.
Muss ich für jede Eingabe ein Signaturskript bereitstellen, das beweist, dass sie mir gehört?
Signaturen nur einmal für jeden öffentlichen Schlüssel zu signieren und zu überprüfen, vorausgesetzt, dass er mit SIGHASH_ALL signiert ist, scheint sicher zu sein, aber ich glaube nicht, dass es eine solche Optimierung im Bitcoin-Code gibt. Wenn jedoch etwas mit SIGHASH_SINGLE signiert wurde, wäre es nicht in Ordnung anzunehmen, dass der Besitzer des Schlüssels auch alle anderen Ausgaben genehmigt.
Würde das nicht Platz verschwenden?
Ja, und Signaturen sind die größte einzelne Komponente einer Bitcoin-Transaktion, also ist es auch ein nicht zu vernachlässigender Raum. Gleichzeitig sind Ausgaben von zwei UTXOs, die an dieselbe Adresse gesendet wurden, wahrscheinlich nicht die häufigste Art von Transaktionen.
Sind die Signaturen im Standard-Client genau gleich oder handelt es sich um zwei unterschiedliche, aber gültige Signaturen?
Wenn man sich den SignatureHash
Code ansieht, werden die Eingaben scripSig
alle geleert und dann wird nur diejenige, die der zu signierenden Eingabe entspricht, mit dem vorherigen scriptPubKey gefüllt (aus etwas seltsamen Gründen).
// Blank out other inputs' signatures
for (unsigned int i = 0; i < txTmp.vin.size(); i++)
txTmp.vin[i].scriptSig = CScript();
txTmp.vin[nIn].scriptSig = scriptCode;
Dadurch ist der zu signierende Hash (das Ergebnis von SignatureHash
) für jede Eingabe unterschiedlich. Da also unterschiedliche Daten signiert werden, werden die Signaturen mit Sicherheit unterschiedlich sein. Selbst wenn die zu signierenden Daten gleich wären, sind ECC-Signaturen nicht deterministisch (mit einer Zufallszahl) und daher von Signierung zu Signierung nicht gleich.
BEARBEITEN: Das lange und kurze daran ist, dass der doppelte Hash, der signiert werden muss, für jede Eingabe in der neuen Transaktion unterschiedlich ist. Selbst wenn dasselbe Schlüsselpaar verwendet wird, muss eine neue Signatur berechnet werden.
Nick Odell
hash that needs to be signed ... is different for each input
Ernsthaft? Bedeutet das, dass spätere Signaturen von früheren Signaturen abhängen?Nick Odell
Morsecoder
Nick Odell
Morsecoder