cadena de bloques

Bitcoin interno: clave y dirección


Este artículo es el primero de una serie de ideas sobre la parte más puramente técnica de Bitcoin, incluso para aquellos que no están familiarizados con la codificación.

Este artículo también es una guía para explicar gradualmente lo que muchas personas llaman un "agujero de conejo".

En términos de libros, es necesario mencionar el "Mastering Bitcoin" de Andreas Antonopoulos, que es una referencia regular, y las imágenes en este artículo se extraen de estos documentos.

Introducción

Primero, es necesario definir Bitcoin y Bitcoin como:

Bitcoin [en letras minúsculas]: el primer activo descentralizado digitalizado, transferible y no replicable; Bitcoin [en mayúsculas como sistema de transferencia de valores]: un protocolo que genera una red de igual a igual, lo que permite que se componga Cada nodo es libre de intercambiar el valor del valor a otros nodos en la red en un seudónimo. Este valor, o más precisamente, la representación numérica del valor es generada por el protocolo para garantizar la escasez, la seguridad de la secuencia de transacciones y la seguridad del sistema en sí.

En la visión de Andreas Antonopoulos, el sistema y su unidad de cuenta original fueron posibles gracias a cuatro innovaciones clave, que se originaron en décadas de investigación en el campo de la criptomoneda y los sistemas distribuidos. , reunidos en una potente solución:

Red descentralizada de igual a igual [protocolo Bitcoin, aunque este término se puede usar para referirse ampliamente a los cuatro puntos]; libro mayor de transacciones públicas [blockchain]; emisión de monedas descentralizadas, matemáticas y deterministas [ Minería distribuida]; Sistema de verificación de transacción descentralizada [script de transacción].

Unirse al sistema con una cuenta local es tan simple como descargar una aplicación de billetera [para PC, tabletas, teléfonos inteligentes, relojes inteligentes, etc.] o usar una aplicación web. Las tres formas principales de los clientes de Bitcoin son:

Un cliente completo, o "nodo completo", un cliente que mantiene una copia completa de la cadena de bloques, administra la cartera del usuario [y la minería originalmente administrada]; un cliente ligero o "nodo ligero" que registra la billetera del usuario pero se basa en un tercero El servidor accede a la red, se puede acceder al cliente web a través de un navegador web y almacenar los datos del usuario en un servidor de terceros [no debe confundirse con aplicaciones como Coinbase].

En los párrafos siguientes, se debe tener en cuenta que los cambios realizados por SegWit [partes específicas se dedicarán a esto] no se han abordado.

Clave y direccion

El botón

La propiedad de Bitcoin está determinada por los siguientes factores:

Tecla numérica; dirección Bitcoin; firma digital.

La clave no se almacena en la red, pero el usuario [el archivo o la base de datos utilizada para crear y almacenar la clave] se almacena en la cartera. Estos son pares de claves que consisten en una clave privada y una clave pública. La representación única de la clave que ve el usuario es la dirección de bitcoin, que normalmente [pero no exclusivamente] la genera la clave pública y corresponde a la clave pública. Bitcoin utiliza la multiplicación de curvas elípticas como base para su criptomoneda de clave pública: un par de claves consiste en una clave privada [para pagar bitcoin] y una clave pública única derivada de una clave privada [para recibir bitcoin]. La relación matemática entre las dos claves permite que la clave privada se use para generar una firma en el mensaje, mientras que la clave pública se usa para verificar la firma sin revelar la clave privada.

La cartera contiene un conjunto de pares de claves, donde:

La clave privada [k] es un número [generalmente elegido al azar antes de que aparezca la billetera determinista, ahora constituye la mejor solución y se analizará con más detalle]; la clave pública [K] se multiplica por k por la curva elíptica [función de criptomoneda de una vía] Generado; la dirección Bitcoin [A] es generada por K a través de un algoritmo hash [función de moneda encriptada unidireccional].

Clave privada La clave privada es un número aleatorio y no debe filtrarse [o perderse en cualquier caso, de lo contrario, el bitcoin asociado se perderá], por lo que la forma más segura de generar una clave privada es encontrar la fuente de entropía o aleatoriedad. El cliente de Bitcoin usa el generador de números aleatorios del sistema operativo [generalmente inicializado por una fuente aleatoria, en el caso de una billetera HD determinista, el generador se usa para crear una semilla que genera la clave] para producir una entropía de 256 bits. La clave privada puede ser cualquier número entre 1 y n-1, donde n es una constante [1, 158 * 1077, ligeramente menor que 2256], definida como el orden de la curva elíptica de bitcoin. Cuando se genera un número aleatorio de 256 bits [generalmente al enviar una cadena de bits aleatoria más larga al algoritmo hash SHA256], si el resultado es menor que n-1, entonces la clave es suficiente.

La siguiente es una clave privada [k] generada al azar que se muestra en notación hexadecimal [256 dígitos se muestran como 64 dígitos hexadecimales, cada dígito es de 4 dígitos]:

1E99423A4AND27608A15A2616A2B0E9AND52CEDED330AC530ANDCC32C8FFC6A526AEDD

Clave pública. La clave pública se genera a partir de la clave privada mediante la multiplicación de la curva elíptica, irreversible, K = k * G donde:

k es la clave privada; G es una constante llamada punto generador.

La operación inversa, llamada "encontrar logaritmo discreto", calcula que K de K tiene la misma dificultad que encontrar el valor de k mediante un ataque de fuerza bruta.

Bitcoin usa una curva elíptica específica y un conjunto de constantes matemáticas definidas por el estándar del Instituto Nacional de Estándares y Tecnología [NIST] secp256k1.

Partiendo de la clave privada k y multiplicándola por un punto predeterminado de la curva llamado punto generador G, se genera otro punto en la curva que corresponde a la clave pública K. El punto generador G se designa como parte del estándar. Secp256k1 y bitcoin son iguales para todas las claves, por lo que multiplicar la clave privada k por G siempre producirá la misma clave pública K. La relación entre k y K es fija, pero solo se puede calcular en una dirección. De k a k.

Al implementar la multiplicación de curvas elípticas, tome la k que se muestra arriba y multiplique G para obtener K:

K = 1E99423A4AND27608A15A2616A2B0AND9AND52CEDED330AC530ANDCC32C8FFC6A526AEDD * G

La clave pública está definida por las coordenadas del punto K = [x, y]:

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

Para mostrar la multiplicación de un punto y un entero, la curva elíptica más simple se usa para números reales [las matemáticas son las mismas]. El objetivo es encontrar un múltiplo de kG, G, que es equivalente a sumar G a sí mismo por k veces consecutivas. En una curva elíptica, agregar un punto a sí mismo equivale a dibujar una tangente en la curva en ese punto y encontrar dónde se cruza la curva nuevamente, y luego reflejar ese punto en relación con el eje x.

Dirección de la llave de Bitcoin dentro

Dirección

La dirección generada por la clave pública consiste en una serie de números y letras que comienzan con 1 [hasta que se active SegWit]. Este es un ejemplo: 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

La dirección de Bitcoin es donde se envía el valor en la transacción. La dirección de bitcoin puede representar:

El propietario del par de clave privada / pública, el script de pago.

Anteriormente, se ha dicho que una dirección bitcoin [A] se genera a partir de K mediante un algoritmo hash [función de criptomoneda de una vía]. Un "algoritmo hash" es una función unidireccional que produce una huella digital [resumen o código] o "hash" de una entrada de cualquier tamaño. Estas características son la base de Bitcoin y existen en diferentes partes del sistema. Los algoritmos utilizados para crear direcciones de bitcoins a partir de claves públicas son el algoritmo de hash seguro [SHA] y el Compendio de evaluación de primitivos de integridad de RACE [RIPEMD], específicamente SHA256 y RIPEMD160. El hash SHA256 se calcula primero a partir de la clave pública K, y luego el hash RIPEMD 160 se calcula para generar 160 bits [20 bytes].

Las direcciones de Bitcoin casi siempre se presentan en una codificación llamada Base58Check, que utiliza 58 caracteres [sistema digital Base58] y sumas de verificación [bech32 se explicará más adelante] para evitar la ambigüedad y evitar errores en la transcripción y el registro de direcciones.

Dirección de la llave de Bitcoin dentro

Formato de clave privada. Las claves privadas se pueden representar en diferentes formatos, que corresponden al mismo número de 256 bits. Los binarios hexadecimales y sin procesar son utilizados internamente por el software y rara vez se muestran al usuario, mientras que WIF se utiliza para la importación / exportación de claves, generalmente para la representación del código QR [código de barras]. El estándar BIP 38 permite el uso de la criptomoneda para cifrar las claves privadas de la moneda [compatible con múltiples carteras y clientes de bitcoin] y codificarlas con Base58Check para que puedan almacenarse de forma segura en dispositivos de respaldo para una transmisión segura entre carteras o Las condiciones bajo las cuales las llaves pueden estar expuestas en cualquier otro dispositivo. El estándar de criptomoneda utiliza el Estándar de Moneda Encriptada Avanzada [AES], un estándar establecido por el Instituto Nacional de Estándares y Tecnología [NIST], que se usa ampliamente para la implementación de criptomoneda de datos para aplicaciones comerciales y militares. El esquema de criptomoneda BIP0038 acepta la clave privada de bitcoin como entrada y generalmente se codifica en WIF, como el tipo de cadena Base58Check con el prefijo "5" [para las claves públicas sin comprimir, la clave pública utilizada durante muchos años es una clave pública comprimida que indica La clave privada comienza con "L" o "K". Además, el esquema de criptomoneda BIP0038 acepta la criptomoneda, la criptomoneda larga, que generalmente consta de varias palabras o cadenas alfanuméricas complejas. El resultado del esquema de criptomoneda BIP0038 es la criptomoneda La clave privada, criptomoneda Base58Check comienza con el prefijo 6P.

El hash de script pagado [P2SH] y la dirección Multisig. La dirección de bitcoin que comienza en la tercera es la dirección de hash [BIP 16] que se paga al script. Definen el destinatario de la transacción de bitcoin como el hash del script en lugar del propietario de la clave pública. A diferencia de las transacciones que asignan fondos a direcciones de Bitcoin 1 tradicionales [Hash Paid Public Keys o P2PKH], los fondos enviados a Address 3 requieren algo más que la presentación de hashes de claves públicas y firmas de claves privadas como prueba de propiedad. El requisito se define cuando la dirección se crea en el script, y todas las entradas a esa dirección serán "caóticas" con los mismos requisitos. Cree una dirección hash de script de pago con un script de transacción que defina quién puede usar UTXO. La codificación de la dirección P2SH se realiza mediante la misma función de doble hash utilizada durante la creación de la dirección de bitcoin, y solo se aplica al script en lugar de la clave pública: script hash = RIPEMD160 [SHA256 [script]]

El script de hash generado se codifica utilizando el prefijo de la versión 5 utilizando Base58Check para generar una dirección codificada que comienza con 3. El ejemplo de la dirección P2SH es 32M8andnmuyZ2zVbes4puqe44NZumgG92sM

La implementación más común de la función P2SH es una dirección de script multi-firma [multi-firma]. La secuencia de comandos requiere varias firmas para probar la propiedad [ergo cuesta UTXO]. La función de señal múltiple de Bitcoin está diseñada para requerir M firmas [también conocidas como "umbrales"] de un total de N teclas, llamadas M-on-N multi-sig, donde M es igual o menor que N.

Dirección de vanidad

Estas son direcciones de bitcoin personalizadas que los humanos pueden leer, como 1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33, que contiene las letras que forman la palabra "Love" como las primeras cuatro letras Base-58. Crear una dirección de vanidad requiere probar miles de millones de claves privadas hasta que la dirección generada tenga las características requeridas. Este proceso es solo una repetición [violación]: seleccione aleatoriamente una clave privada, exporte la clave pública, exporte la dirección y verifique si el resultado es elegible. Como cualquier otra dirección, la vanidad depende de la misma criptomoneda de curva elíptica [ECC] y del algoritmo hash seguro [SHA].

Fuente: compilado a partir de información 0x de CRYPTONOMIST. Los derechos de autor son propiedad del autor Alessio Salvetti y no pueden reproducirse sin permiso.