¿Se usa el mismo valor R para dos direcciones diferentes? encontrar el valor z1 y z2 y la clave privada

txid1

txid2

guion de entrada 1

304502206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022100a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe601 
0428f3c7982219bf067d9723a54bef8e0ae7d970b4285a148685ce98819bd59c993da6945a85ba67249e96534f3cb93af144301e3ef03f848ebf17fedd55addd14

r = 6bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a

s1 = a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe6

guion de entrada 2

304402206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022075e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e01
04c69b120facc137ad7ecf7407b97f3e1bcecec27ed6617ad1e3bb4f5a265c2230dab461d8de9d194b9aae05cf3fc361e31b0cd172985720a9963a1fd9cb4dab13

s2 = 75e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e

transmisión sin procesar 1

010000000169590a9c08ea4d2f4d1b5e3acb216b9cee78e8378a7a5b223aff7e85f70eab77000000008b48304502206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022100a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe601410428f3c7982219bf067d9723a54bef8e0ae7d970b4285a148685ce98819bd59c993da6945a85ba67249e96534f3cb93af144301e3ef03f848ebf17fedd55addd14ffffffff0224aece00000000001976a914b4d245551501f7f443ea507494ef00b8ed739f6888ac9def0b0f000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88ac00000000

calculando z1

reemplace la entrada con el script de salida correspondiente

010000000169590a9c08ea4d2f4d1b5e3acb216b9cee78e8378a7a5b223aff7e85f70eab77000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88acffffffff0224aece00000000001976a914b4d245551501f7f443ea507494ef00b8ed739f6888ac9def0b0f000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88ac0000000001000000

luego haz sha256(sha256(transacción modificada))

z1 = 9ffb92bc05a398e3177b12fcdac5308d316b6bd6cc00365177711dc4e3f10e64

tx crudo 2

0100000001cc41959d96ce6147b93fe00a8fca25ce99ec1a09dc175d27113db36f6e398d1c010000008a47304402206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022075e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e014104c69b120facc137ad7ecf7407b97f3e1bcecec27ed6617ad1e3bb4f5a265c2230dab461d8de9d194b9aae05cf3fc361e31b0cd172985720a9963a1fd9cb4dab13ffffffff02f4351000000000001976a91485ba872014004c8e4de29d94b4d7ad415297955f88acc0d06100000000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88ac00000000

calculando z2

reemplace la entrada con el script de salida correspondiente

0100000001cc41959d96ce6147b93fe00a8fca25ce99ec1a09dc175d27113db36f6e398d1c010000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88acffffffff02f4351000000000001976a91485ba872014004c8e4de29d94b4d7ad415297955f88acc0d06100000000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88ac0000000001000000

luego haz sha256(sha256(transacción modificada))

z2 = 539bcbcddc3fff95aa262d01b8a909504958b371b813cb71a457efebb41c398e

Cálculo de clave privada, no se le dio la dirección correcta y privó algo incorrecto

publicando la r , s1 , s2 , z1 , z2 a continuación

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

dio la dirección 18MRDftXYkGqzo9hvcdnUs7yaPXrD1DXsq

pero

dirección trans 1 = 19owWJcPbTEe1mVYer1ymnbduJDza9jpRH

dirección trans 2 = 1FRDgmxVrUUNiiB7GN3NNcJDEEXtFB22rm

¿qué ocurre?

Toda la codificación/descodificación/matemática que muestra arriba me parece correcta, al igual que los valores z que calculó. Aunque no entiendo tu pregunta final. ¿Está tratando de derivar una clave privada solo de la información anterior (lo que no es posible a pesar de los valores k reutilizados porque las claves privadas difieren)?

Respuestas (3)

Calcular la clave privada de una firma (r y s) requiere que conozca el mensaje (para calcular el valor "z") y el valor "k" (que utiliza el firmante para derivar el valor r a través de una función de trampilla ) .

Calcular el valor "k" (necesario arriba) requiere dos firmas (necesita dos valores s) que firmen dos mensajes diferentes (necesita dos valores z) usando la misma clave privada y el mismo valor r (por lo tanto, el mismo k).

En su pregunta, hace referencia a dos transacciones firmadas por diferentes claves privadas (que sabe al notar que sus claves públicas difieren) y, por lo tanto, no tiene suficiente información para calcular correctamente el valor k.

En la otra pregunta similar que hizo recientemente , las dos transacciones se firmaron con la misma clave privada (y tienen el mismo r & k), por lo que en ese caso es posible calcular la clave privada. (El servicio al que se vinculó parece calcularlo correctamente, sin embargo, no muestra la dirección sin comprimir).

k=5930f1a23e39c1a223ea2fb086cbcabbdf0d09e70ba0aed342ff0f5318a542f0 priv1=5JbfQE5fTXHZxWZ8qBDRR1z6S9hAvdzPEGEWGQgn1LJRTuNtaqG priv2=5JEzySX3zHQyH4ccLNMjNzmZNJ9MoHXBfW8g4MRaPBJ3u6dH1V2
Sí, pero estás "haciendo trampa" :). Está utilizando firmas rotas adicionales de la cadena de bloques, estoy respondiendo solo la pregunta específica formulada. (También su k está mal, k = a6cf0e5dc1c63e5ddc15d04f79343542dba1d2ffa3a7f1687cd34f39b790fe51.)

Respondiendo a tu pregunta: "¿Qué pasa?"

Para cada transacción puedes escribir una ecuación:

x*r + m = s*k

donde x es la clave privada, r y s la firma. m el mensaje hash, k el secreto de firma. Todos los cálculos son módulos del orden del grupo.

Está viendo dos transacciones con la misma 'r'. Podrías escribir ecuaciones para esos dos así:

x1*R + M1 = S1*k
x2*R + M2 = S2*k

Aquí utilizo letras MAYÚSCULAS para indicar los valores conocidos y minúsculas para indicar las incógnitas.

El problema es que terminas con dos ecuaciones con tres incógnitas. Esto no se puede resolver en este momento.

Sin embargo, hay una solución para este caso particular:

gráfico de valores de R y pub.x

Aquí creé un gráfico donde cada nodo tiene los primeros 8 dígitos del valor r y la coordenada x de la clave pública.

El nodo rojo indica el valor r que le interesa. Los cuadros cuadrados indican una clave pública, los nodos redondos/ovalados son los valores r. Las flechas indican una firma que usa esa clave pública.

Puede ver que las flechas verdes forman un bucle en el diagrama.

Estos forman cuatro transacciones de la siguiente manera:

t1: r1, pub1
t2: r1, pub2
t3: r2, pub2
t4: r2, pub1

a partir de ahí puedes derivar cuatro ecuaciones con cuatro incógnitas, que puedes resolver:

x1*R1+M1=S1*k1
x2*R1+M2=S2*k1
x2*R2+M3=S3*k2
x1*R2+M4=S4*k2

Luego, desde allí, puede seguir todas las cadenas y encontrar todas las demás claves.

Tenga en cuenta que esto es solo una pequeña parte de esta red, en total hay 1814 transacciones relacionadas.

Una nota al margen, ese enlace 2coin.org ya no funciona, pero puede hacer los mismos cálculos en esta página (por mí): https://rawcdn.githack.com/nlitsme/bitcoinexplainer/aa50e86e8c72c04a7986f5f7c43bc2f98df94107/ecdsacrack.html

He encontrado lo siguiente:

p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
r = 0x6bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a
s1 = 0xa044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe6
s2 = 0x75e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e
z1 = 0x9ffb92bc05a398e3177b12fcdac5308d316b6bd6cc00365177711dc4e3f10e64
z2 = 0x539bcbcddc3fff95aa262d01b8a909504958b371b813cb71a457efebb41c398e

K = FG(p)

K((z1 s2 - z2 s1)/(r*(s1-s2)))

resultado diciembre: 8921113496817264148701652880922087877926656286340189747525982520215619494205

resultado hexadecimal: 13b92bda88a3f2dbac6032865bf56eed68eea22d4461c77404ad79c49697e13d

Sería útil si agregara un par de oraciones para explicar lo que hizo de manera diferente al autor de la pregunta.