Gestión de claves públicas

Hay algo que no estoy seguro de entender sobre las claves y direcciones privadas/públicas de bitcoin.

Un nuevo usuario de bitcoin "U" primero genera una clave privada. Puede calcular varias claves públicas a partir de esta clave privada.

Cuando quiera recibir bitcoins, el usuario debe generar una dirección. No entiendo si esta dirección es una clave pública o si son 2 cosas diferentes.

Si mi usuario "U" debe recibir bitcoins de 10 personas diferentes, puede generar una sola dirección común para estas 10 personas, pero podrán ver el saldo "U" y ver que recibe 10 transacciones. La solución es generar 10 direcciones diferentes. Con esta solución, cada remitente solo verá su propia transacción y no verá las otras 9. Estoy equivocado ?

Entonces, para abreviar, ¿podemos decir que "U" genera 10 "cuentas virtuales", vinculadas a su clave privada?

Si es así, no entiendo cómo "U" puede calcular su propio saldo: ¿hay alguna forma de que recupere todas las direcciones públicas que genera a partir de su clave privada? ¿O debería el usuario guardar todas las direcciones que genera en un archivo?

Gracias

Respuestas (2)

Un programa de billetera Bitcoin moderno puede generar muchas claves privadas, cada clave privada tiene una clave pública. Para los tipos de transacciones más comunes, una dirección de Bitcoin se deriva de la clave pública.

Como dices, es normal generar una nueva dirección (es decir, un nuevo conjunto de claves) para cada transacción. Esto se debe a que todos los datos de las transacciones son de conocimiento público: están en el diario de transacciones replicado que llamamos blockchain. Cualquiera puede ver todas las transacciones de una dirección específica, por lo que si diez personas le pagan 1 BTC a la misma dirección, todas pueden ver que ha recibido 10 BTC en total en esa dirección. Este es un problema de privacidad. Si las direcciones son todas diferentes, no pueden saber cuáles pertenecen a la misma persona.

En la red Bitcoin no hay cuentas, ni cuentas virtuales ni saldos.

Una billetera puede leer todo el diario de transacciones y sumar todos los montos no gastados en transacciones en las que la dirección de recepción es una para la cual la billetera sabe que tiene la clave privada correspondiente. De esa manera puede presentar una cantidad total al usuario. La gente se refiere a este total como un saldo, pero eso es engañoso. La red Bitcoin no lleva un registro de los saldos de las personas. La red Bitcoin no sabe cuánto dinero tiene alguien en total. La Casa de la Moneda de EE. UU. no sabe cuántas monedas de un centavo de EE. UU. tengo en una bolsa de plástico en mi estante, no realiza un seguimiento de mi saldo ni tiene una cuenta a mi nombre.

La terminología de Bitcoin es un poco confusa. Bitcoin fue diseñado como efectivo digital. Las cuentas y los saldos están asociados con los bancos, no con montones de billetes de dólar debajo de su colchón o en su billetera de cuero. Si estuviera hablando de efectivo en forma de papel moneda y monedas de metal, no pensaría en cuentas y saldos. Solo querrá saber la cantidad total de dinero que tiene en billetes de papel y monedas de metal.

Las billeteras modernas son lo que se llama billeteras deterministas jerárquicas (HD). A partir de la clave privada inicial (o frase semilla) es posible generar todas las claves y direcciones subsidiarias de forma predecible y repetible. No necesita hacer una copia de seguridad de cada clave generada y dirección generada.

Un nuevo usuario de bitcoin "U" primero genera una clave privada. Puede calcular varias claves públicas a partir de esta clave privada.

El tipo de clave privada a la que se refiere es una clave privada extendida que se describe en la Propuesta de mejora de Bitcoin 0032 (BIP32) o, como explicó RedGrittyBrick, lo que impulsa las billeteras HD.

Una clave privada extendida contiene solo una clave privada "regular" y puede generar directamente solo una clave pública extendida.

Sin embargo, estas claves privadas extendidas también contienen otra información que les permite generar otra gran cantidad de claves privadas extendidas secundarias que también contienen claves privadas "normales", y estas claves privadas extendidas secundarias pueden tener su propia gran cantidad de claves privadas secundarias. claves privadas extendidas, y esto puede seguir y seguir.

Cuando quiera recibir bitcoins, el usuario debe generar una dirección. No entiendo si esta dirección es una clave pública o si son 2 cosas diferentes.

Son 2 cosas diferentes. También hay diferentes tipos de direcciones, pero excluyendo el tipo de direcciones de firma múltiple, todas se calculan codificando el hash de la clave pública. Entonces, una dirección no es una clave pública, sino que se deriva de ella (P2PKH, P2WPKH). El tipo de dirección le permite saber qué tipo de tecnología Bitcoin está utilizando para bloquear los BTC.

Si mi usuario "U" debe recibir bitcoins de 10 personas diferentes, puede generar una sola dirección común para estas 10 personas, pero podrán ver el saldo "U" y ver que recibe 10 transacciones. La solución es generar 10 direcciones diferentes. Con esta solución, cada remitente solo verá su propia transacción y no verá las otras 9. Estoy equivocado ?

Esta es exactamente la razón por la que se propuso BIP32. Una clave privada extendida también se denomina clave privada maestra que puede generar todas las claves secundarias necesarias para garantizar la privacidad. Dado que puede generar con la clave maestra una cantidad infinita de claves privadas y, por lo tanto, claves públicas, puede generar una cantidad infinita de direcciones.

Entonces, para abreviar, ¿podemos decir que "U" genera 10 "cuentas virtuales", vinculadas a su clave privada?

Sí, pero recuerda que estarían vinculados a la clave privada maestra / ampliada . Cada dirección tiene su propia clave privada, y la clave privada es generada por la clave maestra.

Si es así, no entiendo cómo "U" puede calcular su propio saldo: ¿hay alguna forma de que recupere todas las direcciones públicas que genera a partir de su clave privada? ¿O debería el usuario guardar todas las direcciones que genera en un archivo?

Creo que RedGrittyBrick hace un trabajo increíble al explicar por qué no deberíamos usar el término "saldo" o "cuenta virtual", etc. Pero supongo que su pregunta es cómo puede saber a cuántos BTC tiene acceso con su maestro privado. clave, ¿verdad? bueno, ese es el trabajo de la billetera. Una billetera debe poder almacenar o generar las direcciones que ha utilizado, y luego escanear la cadena de bloques en busca de Salidas de transacciones no gastadas (UTXO) o, en otras palabras, Bitcoins no gastados relacionados con esas direcciones. Luego, la billetera suma todos estos BTC para presentarle esta cantidad final única que algunas personas llaman erróneamente "saldo".

Muchas gracias por tu respuesta. Hay algo que no entiendo: imagina perder mi billetera. He leído que puedo recuperar mis bitcoins si conservo mi clave privada. Entonces, cómo funciona ? ¿Debería también respaldar mis UTXO en alguna parte?
Intente buscar BIP32, BIP44 y BIP39. Entonces, básicamente, las billeteras intentan usar estándares para la creación de direcciones, lo que significa que es bastante fácil saber qué direcciones intentará usar primero la billetera del árbol de jerarquía (BIP32) que se deriva de la clave privada maestra. Entonces, si tiene su clave privada maestra o su frase mnemotécnica, cualquier billetera puede escanear las direcciones derivadas siguiendo el patrón BIP44 para descubrir sus UTXO. No todas las billeteras son iguales. Intente ceñirse a uno que siga los BIP o al menos le permita saber qué protocolo para la creación de direcciones utilizan.