¿Dónde puedo encontrar un código que me permita calcular Z1 y Z2 a partir de una firma ECDSA?

Al seguir Recuperación de claves privadas de Bitcoin usando firmas débiles de la cadena de bloques , puedo hacer otros cálculos, pero no tengo idea de cómo calcular Z1o Z2. Había un código público disponible por Sean Bradley :

http://2coin.org/tx.asmx?op=GetTXExtended

Pero parece que ahora no funciona. Hay algun otro codigo publico para calcular Z1y Z2en algun idioma. Puedo convertirlo al idioma de mi preferencia. Cualquier ayuda es apreciada.

¿Podrías describir para qué quieres esto? No quiero ayudar a alguien sin querer a robar los bitcoins de otras personas.
@DavidA.Harding Soy investigador de seguridad y quiero replicar este ataque. Todas las direcciones vulnerables ya están en internet y vacías. Y las aplicaciones vulnerables ya están arregladas. Solo quiero replicar esto nada más.
Proporcioné una respuesta. Sin embargo, el ataque que describe Nils es solo un ataque básico de valor reutilizado k. Si realmente quiere replicarlo, le resultará mucho más sencillo deshacerse del equipaje de Bitcoin y hacer los cálculos para sus propios datos arbitrarios. Incluso Wikipedia tiene instrucciones para hacer esto .

Respuestas (2)

Según la publicación de Nils, los zvalores son los valores hash que se firman en la fórmula ECDSA. Los antecedentes sobre qué datos van en estos hashes se pueden encontrar en la página wiki de OP_CHECKSIG y en el excelente PDF de referencia para desarrolladores de Krzysztof Okupski .

El código de Bitcoin Core para generar los hashes está aquí . Cualquier otra aplicación de Bitcoin que firme transacciones (o verifique firmas) debe tener una función compatible (al menos para el SIGHASH_ALL predeterminado), por lo que debería poder encontrar una implementación en prácticamente cualquier lenguaje de programación popular.

pegue su transacción en esta página https://2xoin.com/getRSZfromRawTX/

le dará todos los R, S y Z si pudo decodificar el TX.

por ejemplo,0100000002f64c603e2f9f4daf70c2f4252b2dcdb07cc0192b7238bc9c3dacbae555baf701010000008a4730440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1022044e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e014104dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ffffffffff29f841db2ba0cafa3a2a893cd1d8c3e962e8678fc61ebe89f415a46bc8d9854a010000008a4730440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad102209a5f1c75e461d7ceb1cf3cab9013eb2dc85b6d0da8c3c6e27e3a5a5b3faa5bab014104dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ffffffffff01a0860100000000001976a91470792fb74a5df745bac07df6fe020f871cbb293b88ac00000000

dará salida

[
  {
    "sigR": "d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1",
    "sigS": "44e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e",
    "sigZ": "c0e2d0a89a348de88fda08211c70d1d7e52ccef2eb9459911bf977d587784c6e",
    "pubKey": "04dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff",
    "N": 0
  },
  {
    "sigR": "d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1",
    "sigS": "9a5f1c75e461d7ceb1cf3cab9013eb2dc85b6d0da8c3c6e27e3a5a5b3faa5bab",
    "sigZ": "17b0f41c8c337ac1e18c98759e83a8cccbc368dd9d89e5f03cb633c265fd0ddc",
    "pubKey": "04dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff",
    "N": 1
  }
]
`