¿Se pueden comprar de forma segura direcciones personalizadas de un tercero sin correr el riesgo de que le roben las monedas?

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?

Respuestas (3)

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í:

Hmm, muy interesante y un poco alucinante...
Creo que hay algunos errores en la publicación de Joel, por ejemplo, "reducirlo módulo el generador SECP256k1". Nunca use el generador de esa manera, sino que debe reducirlo módulo el orden del campo subyacente, p. Además, no hay necesidad de elegir números más pequeños que el generador. Finalmente, puede no estar claro que al sumar puntos en la curva (x1,y1) y (x2,y2), su suma no es (x1+x2,y1+y2), sino que utiliza una función de suma especial, descrita en la página 12 de cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf
@ChrisMoore En realidad, creo que podría ser N, el orden del generador. He estado jugando con esos conceptos recientemente y N parecía estar dándome los resultados adecuados...
@ThePiachu eso tiene sentido. También he estado jugando con estos conceptos, y usar el orden del campo subyacente me ha dado resultados erróneos ;)

Estaré hablando de los detalles.

Una clave pública ECC tiene la forma dG, donde Gestá el punto generador (un parámetro de curva) y des su clave privada (debe estar entre 1e prime order-1inclusive)

dno se puede encontrar sin puntos de fuerza bruta, si conoce la clave pública ( dg).

El objetivo es hacer que alguien encuentre una adecuada dGque Hash(dG)esté en el rango esperado.

Por lo tanto, deberá guardar una parte dpara usted y luego combinarla. ¿Cómo?

Para todos los métodos, el comienzo es el mismo:

Calculas algo d_1y 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


Método 1) Aditivo

Este es el método utilizado por Vanitygen y es mucho más popular que los demás.

Un cazarrecompensas prueba muchos d_2valores 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_2al dador de recompensas (público o privado). Ahora el "asignador" personalizado puede combinar d_1y d_2crear las claves privadas y públicas finales.

Tenga en cuenta que (d_1 + d_2)Gtambién puede ser calculado por terceros, lo que significa que otras personas podrán rastrear sus pagos. (porque d_2el cazarrecompensas puede compartirlo, Gya se conoce y (d_1)Gel asignador lo publicó, por lo que (d_2)G + ((d_1)G)) Esto también se aplica a todos los métodos conocidos.

Método 2) Multiplicativo

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_2valor, por fuerza bruta Hash(d_2((d_1)G)): calcula múltiplos de (d_1)Gy los comprueba.

Ahora, ¿entiendes que d_2debe estar entre 1y 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)

Método 3: Combinado

Nunca he visto esto mencionado en ninguna parte. No es muy útil.

Simple: el cazarrecompensas encuentra d_2y d_3valora 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_2o d_3.