Quiero crear una firma ECDSA {r,s}
donde r
sea muy baja (por ejemplo 1
) y se pueda codificar en formato DER en un byte.
¿Cómo calcular el k
valor? Me parece que no depende de nada. ¿Cuál es el valor de k
lo que produce r=1
?
Nota: No me preocupo por la seguridad de mi clave privada mientras publico esta firma.
¿Cuál es el valor de
k
lo que producer=1
?
Es imposible saber eso. Si pudiera derivar r
valores arbitrarios, entonces ECDSA se rompería fundamentalmente. Lo mejor que puede hacer es moler k
hasta que obtenga una r
que tenga una codificación corta.
Por el bien del ejercicio:
k: 55573144136627188774517374788342221967869962622835886499477787746883063622036
r: 771676860789419846973923839003663416737624455477806040640071960112246091
Este nonce será un poco más pequeño que la mayoría cuando esté codificado, pero, por supuesto, si intenta usarlo en una firma, habrá expuesto su clave privada . Si genera esto en secreto, solo puede usar el k
valor una vez y el resultado podría ser, en el mejor de los casos, una diferencia de un par de bytes en la transacción codificada.
Apenas parece valer la pena para ser honesto.
las salidas ecdsa secp256k1 más cortas que he visto tienen
x value = 3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0x3f3979bf72ae8202983dc989aec7f2ff2ed91bdd69ce02fc0700ca100e59ddf3
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c
en su función ecdsa, si usa
p = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
entonces puedes derivar los resultados anteriores usando
((p-1)/2) = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
o
((p+1)/2) = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1
Si hay algo más pequeño, me gustaría verlo.
Editar
debido a los comentarios, he sido dirigido a un testnet tx que sugiere que tal vez pueda obtener R = 1. gracias a amaclin.
testnet tx c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433
este tx parece validar, tambien hay otros, c42bea01f1387072772759f32ad860a680e0eea5664732bf2057a66780e7a25d 23202c2534be0567d4b339142f8a9a53545123eb61f61717cdedbef08
tal vez incluso más, por favor agregue a los comentarios si es así.
si valido la firma de clave pública
026d2204a9535443657a88a0724fbd49a0e78d305f50a82f2cc9dd9bea10a6c5cd
tomado de testnet tx
c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433
da este punto donde x = 1
(0x01, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)
Si bien no puedo verificar que este punto esté realmente en la curva sep256k1, parece comportarse como lo está, por lo que es muy interesante.
si multiplico este punto varias veces por 0x5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72 ( valor lambda de aquí )
produce este ciclo de puntos (3 puntos con la misma Y)
(0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)
(0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)
(0x01, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)
si hago lo mismo con el inverso del punto, obtengo estos (inversos de arriba)
(0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)
(0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)
(0x1, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)
el valor x
0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee
en algunos de esos resultados, también pasa a ser el valor beta de aquí
claris
r=1
es "imposible" en el mismo contexto que la mayoría de las suposiciones criptográficas con respecto a los espacios de búsqueda. Podría ser posible encontrar ese valor si convirtieras cada pieza de materia en el universo cercano en una computadora, pero el esfuerzo para hacerlo es tan irracionalmente grande que no es práctico que alguien lo intente. También es posible crear una billetera que reutilice una solak
tanto como sea posible (y tendría una aceleración no trivial al firmar transacciones), pero esto es demasiado peligroso para usar y, por lo tanto, nunca se sugiere en una conversación seria.amaclin
claris
amaclin
k
valor específico para firmar mis transaccionesclaris
amaclin
Marcos Lundeberg