¿Cuál es la relación entre una clave privada / clave pública / dirección de Bitcoin?

¿Cuál es la relación entre una clave privada / clave pública / dirección de Bitcoin? Veo que se genera un par clave privada/clave pública, pero ¿existe la posibilidad de generar una clave privada ya en uso? Y, ¿también asumo que una dirección de billetera es una dirección de bitcoin? ¿Cada dirección de billetera tiene una relación uno a uno con una clave privada?

Gracias

Respuestas (4)

claves privadas

Las billeteras antiguas usaban una clave privada generada aleatoriamente por la billetera cuando se ejecutaba por primera vez.

En carteras modernas "deterministas jerárquicas" (HD). Una clave privada se genera aleatoriamente o se deriva de una frase llamada frase inicial o frase de recuperación, que a su vez se genera a partir de un número aleatorio. Luego, muchas otras claves privadas se generan a partir de esto utilizando una "ruta de derivación" que puede diferir entre diferentes marcas de billetera. La ruta de derivación la eligen los desarrolladores y algunos desarrolladores diferentes eligieron diferentes rutas de derivación. Esto afecta la recuperación de la billetera.

Claves públicas

Se genera una clave pública a partir de (¿junto con?) cada clave privada.

direcciones

Las direcciones se construyen a partir de claves públicas para ciertos tipos comunes de transacciones. No todas las transacciones involucran direcciones.

Los tipos más comunes de transacciones crean direcciones como un prefijo seguido de un hash de una clave pública seguido de una suma de verificación (para que se puedan detectar errores de tipeo).

Debido a que las billeteras HD generan una nueva dirección para cada transacción, detrás de escena están utilizando la ruta de derivación fija para generar nuevas claves privadas y públicas a partir de las cuales crear la dirección.

Entonces, las billeteras HD tienen muchas direcciones, no es sensato pensar en una "dirección de billetera".


Relaciones y probabilidades

¿Cuál es la relación entre una clave privada / clave pública / dirección de Bitcoin?

Algo no del todo diferente a esto:

entropy --> random number  --> phrase --> private key --> public key --> address
                   |                        ^   |
                   '------------------------'   +--> private key --> pubkey --> addr
                                                +--> private key --> pubkey --> addr
                                                :
                                                '--> private key --> pubkey --> addr

¿Existe la posibilidad de generar una clave privada ya en uso?

Es tan probable como que tu casa se transforme espontáneamente en una maceta de petunias. Lo que los físicos podrían decirle es teóricamente posible pero nunca va a ocurrir debido a su improbabilidad. El punto es que estamos hablando de probabilidades estadísticas que involucran números que son mucho más vastos de lo que la mayoría de nosotros tenemos la esperanza de comprender porque son mucho más grandes que cualquier número que nos encontremos de forma rutinaria o que podamos imaginar.

Y, ¿también asumo que una dirección de billetera es una dirección de bitcoin?

Sí.

¿Cada dirección de billetera tiene una relación uno a uno con una clave privada?

Hasta el momento si.

Se pueden inventar nuevos tipos de transacciones e imagino que se podrían inventar nuevos tipos de direcciones.

¡Gracias @redgrittybrick!. Lo explica bien. Entonces, ¿la primera clave privada en su diagrama es esencialmente la parte crucial de este escenario? Si tengo esto (dado que es mi propia cuenta de bitcoin), entonces simplemente puedo usarlo en otro proveedor de billetera, y simplemente agregar mi clave privada allí, y los bitcoins estarán allí para que los envíe.
@Chris: Sí. Pero la nueva billetera debe usar la misma ruta de derivación. Muchas billeteras le permiten elegir la ruta de derivación. Algunos no.

Con el algoritmo de firma digital de curva elíptica (ECDSA), la clave privada se usa para generar la clave pública, luego se aplica una función hash segura a la clave pública y se agrega una suma de verificación para producir una dirección de bitcoin con formato Base58.

Una colisión de claves privadas es teóricamente posible, pero prácticamente imposible debido a la gran cantidad de ellas disponibles en la red (cuatrillones+).

Solo para agregar un poco de color: la cantidad de claves privadas es mucho más grande que un cuatrillón. Son más de 115 cuatrillones cuatrillones cuatrillones cuatrillones. El límite en el número de claves privadas es el orden "n" del Generador, que es "bastante cercano" a 2 elevado a la potencia 256. El valor real de "n" es: 115792089237316195423570985008687907852837564279074904382605163141518161494337

¿Cuál es la relación entre una clave privada / clave pública / dirección de Bitcoin?

La clave pública (un punto de curva) es igual al generador (un punto de curva fijo) multiplicado por la clave privada (un número entero).

Hay varios tipos diferentes de direcciones. Pero, un tipo común de dirección es un hash codificado de la clave pública. (En la práctica, lo que se codifica es la representación de bytes de la coordenada x de la clave pública con 0x02 o 0x03 agregados al frente para dar cuenta del signo de la coordenada y, y además hay algunos datos de suma de verificación, solo otro tipo de hash: agregado antes de la codificación).

¿Existe la posibilidad de generar una clave privada ya en uso?

Sí hay. Por ejemplo, si elige que su clave privada sea el número 1, entonces habrá elegido una clave privada incorrecta (la clave privada 1 ya está en uso, ¡vea si puede encontrarla!).

However, if you choose your private key at random from integers greater than zero and less than 115792089237316195423570985008687907852837564279074904382605163141518161494337, then you will have a valid key and the chance of a key collision is very very low (because 115792089237316195423570985008687907852837564279074904382605163141518161494337 is very very large).

Dos nits: (1) hay múltiples tipos de direcciones (algunas codifican un hash de una clave pública, algunas de un script y las nuevas P2TR codifican una clave pública directamente), sin embargo, ninguna de ellas es un hash de solo la coordenada x (Las direcciones P2PKH también codifican la paridad de la coordenada Y). (2) El número 0 no es una clave privada válida (y tampoco lo es el orden de la curva, como mod n son iguales).
Re (2): Sí, estoy de acuerdo, eso fue incorrecto, actualicé la respuesta para indicar mayor que 0 y menor que n. Re (1): Dado que no especifiqué la función hash, la parte en nit (1) sobre el hash no se aplica técnicamente. (Una función hash que es la acción de ripemd160 en el sha256 de '\x02'+coordenada x sigue siendo una función hash. De manera similar, agregar la suma de comprobación sigue siendo una función hash). Dado que la función se puede aplicar a entradas arbitrarias y produce una salida de tamaño fijo, sigue siendo una función hash.
La parte en Nit (1) sobre direcciones múltiples es una liendre válida, pero ¿tal vez demasiada información para que OP la maneje? De todos modos, actualicé la respuesta para reflejar el nit 1 también.
¡Seguro! Quizás no estaba claro, mi problema no es que debas mencionar otros tipos, sino el hecho de que lo que afirmas actualmente es incorrecto: las direcciones P2PKH son un hash de claves públicas, pero no solo de su coordenada X.
OK, creo que tal vez entiendo a lo que te refieres... Pero diría que, en cierto sentido, es "principalmente" la coordenada x la que se codifica, y solo "un poco" la coordenada y (solo efectivamente el signo de y--el valor de y está implícito). En otras palabras, en la práctica, la clave pública (un punto de curva) debe convertirse en una cadena de bytes para que la función hash la procese. Esta conversión a bytes se realiza convirtiendo la coordenada x en una cadena de bytes y luego agregando 0x02 o 0x03 al frente de la cadena de bytes para tener en cuenta el signo de la coordenada y.
Actualicé la respuesta. Supongo que esto probablemente también se responda en otro lugar de este foro ...
Solo para que vea de dónde vengo: el par (paridad y, coordenada x) identifica un punto de manera única y, por lo tanto, un hash de eso es efectivamente lo mismo que hash (x coord, y coord). Si bien el simple hash de la coordenada x tendría un resultado distinguible: implicaría que negar una clave privada no cambiaría el hash (porque solo cambiaría la coordenada y).
sí, sí, ¡entendido!

Una clave privada es un número entero kdel rango (0, n ), 0 y n excluidos, donde n es el orden del generador G, que es 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, un número ligeramente menor que 2 256 . La clave pública Kes el punto de la curva elíptica correspondiente en secp256k1: K = k×G, donde Ges el punto base o generador de secp256k1.

Una dirección Pay to Public Key Hash (P2PKH) se deriva de la clave pública aplicando primero un hash SHA256 y luego un hash RIPEMD-160. Luego, la dirección se codifica con Base58Check. Esto significa que solo hay 2 160 direcciones para aproximadamente 2 256 claves privadas. Por lo tanto, aproximadamente 2 96 claves privadas se asignan a cada dirección. Dado que no existe un registro central de direcciones después de que se generan, no existe un mecanismo para evitar colisiones de claves, pero como ya explicó Travis , el tamaño del espacio numérico hace que las colisiones sean astronómicamente improbables. La pregunta ¿Cada dirección de Bitcoin es única? entra en más detalles.

Por ahora, hay varios tipos de direcciones diferentes que se pueden derivar de las mismas claves privadas. Estrictamente hablando, puede haber múltiples direcciones asociadas con la misma clave privada, pero para la mayoría de los propósitos prácticos, puede asumir que cada dirección es única y tiene una relación de uno a uno con una clave privada.

Sin más contexto, tomaría "dirección de billetera" y "dirección de bitcoin" para referirse al mismo concepto.

Creo que el rango de la clave privada en realidad está limitado al orden "n" del generador, que está cerca de 2**256, pero no igual. El pedido es 115792089237316195423570985008687907852837564279074904382605163141518161494337
Consulte la sección 2.4.1 aquí: secg.org/sec2-v2.pdf
Gracias por la nota, @hft, espero que esto sea mejor.
de nada. Otro detalle: es solo SHA256, no SHA256 d , lo que se aplica antes del hash RIPEMD-160 cuando se forma el hash de dirección sin comprobar.
De hecho, gracias por señalarlo. He corregido mi publicación.