Uno puede generar fácilmente direcciones de vanidad para Bitcoin, pero puede llevar bastante tiempo generarlas. Subcontratar ese proceso a alguien con una sólida plataforma de minería es una opción, pero luego se corre el riesgo de que la persona que genera la dirección la use sin nuestro conocimiento para robar nuestras monedas. ¿Es posible generar direcciones de vanidad de tal manera que sea imposible que alguien robe sus claves privadas?
Por lo que parece, sí, es posible, y bastante simple, subcontratar la creación de direcciones personalizadas a un tercero sin arriesgar nada.
Las direcciones de Bitcoin se crean a partir de pares de claves ECDSA. Su propiedad es que si toma dos claves privadas y las suma (con las operaciones de módulo apropiadas), la suma se asignará a una clave pública que es la misma que se obtendría al sumar las dos claves públicas correspondientes a las claves privadas.
Esto significa que para externalizar la generación de claves personalizadas, se puede crear un par de claves ECDSA, almacenar la clave privada de forma segura y dar la clave pública a otras personas. Luego procederían a generar pares de claves ECDSA, sumando las claves públicas generadas a la proporcionada por usted y verificando si se asignan a la dirección de vanidad adecuada. Si es así, solo necesitan darle la clave privada adecuada, que luego debe agregar a su clave privada secreta para obtener la clave privada que se asigna a la dirección personal.
JoelKatz lo explicó en su publicación , y seguí adelante e implementé un "grupo de vanidad" que permite dicha subcontratación. Además, también creé un conjunto de pruebas simple para jugar con la combinación de los pares de claves ECDSA . Actualmente no hay "mineros de vanidad de clave dividida" disponibles, ni ninguna solución fuera de línea para este problema, pero pueden seguir en breve.
Gracias a la criptografía de Elliptic Curve, un tercero no necesita conocer la clave privada para generar una dirección personalizada, como describe JoelKatz aquí:
Estaré hablando de los detalles.
Una clave pública ECC tiene la forma dG
, donde G
está el punto generador (un parámetro de curva) y d
es su clave privada (debe estar entre 1
e prime order-1
inclusive)
d
no se puede encontrar sin puntos de fuerza bruta, si conoce la clave pública ( dg
).
El objetivo es hacer que alguien encuentre una adecuada dG
que Hash(dG)
esté en el rango esperado.
Por lo tanto, deberá guardar una parte d
para usted y luego combinarla. ¿Cómo?
Para todos los métodos, el comienzo es el mismo:
Calculas algo d_1
y te lo guardas, mientras compartes(d_1)G
Para empezar, repasemos las propiedades de los puntos EC.
Linealidad:
(d_1)G + (d_2)G = (d_1 + d_2)G
(d_1)(kG) = (k * d_1)G
Este es el método utilizado por Vanitygen y es mucho más popular que los demás.
Un cazarrecompensas prueba muchos d_2
valores aleatorios que se Hash((d_2)G + (d_1)G)
encuentran en el rango de patrón esperado. Si el cazador tiene éxito, envía d_2
al dador de recompensas (público o privado). Ahora el "asignador" personalizado puede combinar d_1
y d_2
crear las claves privadas y públicas finales.
Tenga en cuenta que (d_1 + d_2)G
también puede ser calculado por terceros, lo que significa que otras personas podrán rastrear sus pagos. (porque d_2
el cazarrecompensas puede compartirlo, G
ya se conoce y (d_1)G
el asignador lo publicó, por lo que (d_2)G + ((d_1)G)
) Esto también se aplica a todos los métodos conocidos.
Esto se usa raramente.
Ahora que el cazarrecompensas quería Hash((d_1 + d_2)G)
en el rango de patrón esperado, quería algo diferente y usó una forma diferente de hacer una generación de vanidad sin confianza.
El innovador cazarrecompensas calcula un d_2
valor, por fuerza bruta Hash(d_2((d_1)G))
: calcula múltiplos de (d_1)G
y los comprueba.
Ahora, ¿entiendes que d_2
debe estar entre 1
y prime order-1
, también en este método? (Pista: ¿Cuál es el significado del orden primo?)
Utiliza el hecho de que d_2((d_1)G) = (d_2 * d_1)G
(con las operaciones de módulo apropiadas)
Nunca he visto esto mencionado en ninguna parte. No es muy útil.
Simple: el cazarrecompensas encuentra d_2
y d_3
valora tal que Hash((d_1 * d_2)G + (d_3)G)
está en el rango de patrón esperado. Esto es más complejo, porque tiene dos variables. No se ha realizado ninguna investigación al respecto. A primera vista, parece más lento, pero no hay nada que impida que el minero de vanidad arregle d_2
o d_3
.
elpiachu
chris moore
elpiachu
chris moore