Das Komplement von s (wenn s < Kurvenordnung / 2)

Bitcoinlib bezieht sich auf die Anforderung, dass, wenn s > ORDER / 2, dann stattdessen das Komplement von sverwendet werden sollte, da es ein Byte kürzer ist

Das hört sich so an, als würde es sich auf den inversen oder negativen sWert beziehen, aber ich weiß auch, dass Komplement ein Begriff aus der Informatik sein kann.

Den relevanten Code finden Sie hier (vielleicht kann sich jemand mit dem Code von Bitcoin Core auskennen, was der Code tut), also worauf bezieht sich das Komplement von s ?

Antworten (2)

In ECDSA skann es sich auf beiden Seiten der Kurve befinden und die Signatur ist immer noch gültig. Der Begriff „niedrig s“ bezieht sich auf den Wert, der buchstäblich unter der Kurvenreihenfolge liegt ( 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 ). Die Anforderung von Low- sist willkürlich (High shätte auch gut funktioniert) und ist eine der neuen BIP62- Gültigkeitsregeln, die die Veränderbarkeit von Transaktionen bekämpfen sollen.

Ohne diese Regel ist jede Person in der Lage, eine Bitcoin-Transaktion zu nehmen, eine sihrer Signaturen einzugeben und die Transaktion mit einer anderen TXID wieder herauszuschieben. Wenn Sie dies tun können, ändert sich nur der Hash der Transaktion und in keiner Weise ihre Gültigkeit. Die Möglichkeit, Transaktionen zu mutieren, unterbricht eine Reihe potenziell interessanter Transaktionstypen in Bitcoin, wie z. B. Zahlungskanäle, bei denen Transaktionsketten plötzlich ungültig werden, indem ein übergeordnetes Element mutiert und eine alternative Form in einen Block aufgenommen wird.

Indem gültige Transaktionen gezwungen werden, immer niedrig zu sein, swird diese Fähigkeit entfernt, obwohl eine Person mit dem privaten Schlüssel für eine Transaktion immer noch in der Lage ist, ihre eigenen Transaktionen zu mutieren, indem sie sie mit einer neuen Nonce zurückgibt.

Fantastisch! Können Sie einen Pseudocode (oder Python) schreiben, der zeigt, wie der s-Wert umgedreht wird? Es ist nicht nur der negative Wert, oder?
Der Pseudocode ist sehr einfach:s2 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1;
@amaclin oh wow, also habe ich absolut zu viel darüber nachgedacht. Natürlich sehe ich jetzt die Logik dahinter. Tangential, warum ist dieser Code so un-Pythonic ? Ist es im Grunde ein Python-"Port" des C++-Codes?
python-bitcoinlibist unpythonisch, weil es alle Strukturen emuliert, die Sie in der Codebasis von Bitcoin Cores CPP finden. Sie könnten es pythonischer machen, aber auf diese Weise wäre es nicht so nützlich.

Worauf bezieht sich das Komplement von s?

Ich habe diesen Begriff noch nie so verwendet gehört, aber beim Lesen des Codes scheint es zu vergleichen s, ob er mehr als n/2abgerundet ist (wo nist die Reihenfolge der Kurve, FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141.)

Wenn dies der Fall ist, wird dies berechnet n - sund verwendet als s.