Lesson Nº3 – Firmas digitales en Bitcoin
Firmas digitales en Bitcoin
El documento técnico de Bitcoin describe una moneda electrónica como una cadena de firmas digitales. Estas firmas digitales confieren control práctico y, en la mayoría de los casos, propiedad sobre las monedas contenidas en cualquier secuencia de comandos, y se pueden usar como un registro de control de custodia para rastrear las transferencias de control a través de la historia del libro mayor.
Una firma digital no es simplemente un mensaje firmado con un par de claves dado, sino que es un enlace a una identidad. La legislación de la Unión Europea sobre Firmas Digitales establece que las firmas corresponden a «datos en forma electrónica que se adjuntan o asocian lógicamente con otros datos electrónicos y que sirven como método de autenticación». Para obtener más información, consulte este artículo del Dr. Craig Wright.
El script de Bitcoin permite a los usuarios bloquear / desbloquear su bitcoin de diferentes maneras.
Algoritmo de firma digital de curva elíptica (ECDSA)
El algoritmo de firma digital de curva elíptica es el tipo de firma más utilizado en Bitcoin. Utiliza los pares de claves de criptografía de curva elíptica a los que se hace referencia en las direcciones de Bitcoin para generar firmas seguras a partir de un hash de mensaje dado.
Con Bitcoin Script, es posible crear sistemas novedosos que utilizan firmas digitales de curva elíptica, incluidos R-Puzzles , scripts de múltiples firmas y firmas de umbral .
Umbral de firmas
También ha habido implementaciones prácticas de firmas de umbral en billeteras y bibliotecas de Bitcoin que extienden las firmas de la curva elíptica para permitir que múltiples partes participen en la creación de una firma creada a partir de una clave privada que nunca se calculó o existió explícitamente. Cuando se utiliza en una transacción, una firma de umbral no es diferente de una firma ECDSA normal y puede validarse utilizando OP_CHECKSIG y códigos de verificación de firma relacionados.
Rabin Firmas
Los investigadores de nChain han comenzado a desarrollar métodos para validar las firmas de Rabin en el script de Bitcoin. En teoría, estas firmas podrían permitir que los datos recopilados fuera del libro mayor de Bitcoin SV se evalúen y firmen, lo que permite la funcionalidad de Oracle en las transacciones de Bitcoin. Actualmente no existe una implementación práctica de una firma Rabin en Bitcoin Script.
Algoritmo de firma digital de curva elíptica
El algoritmo de firma digital de curva elíptica o ECDSA es un algoritmo criptográfico utilizado por Bitcoin para garantizar el control efectivo y seguro de la propiedad de los fondos.
Algunos conceptos relacionados con ECDSA:
- clave privada : un número secreto, conocido solo por la persona que lo generó. Una clave privada puede ser un número generado aleatoriamente, pero en 2019 la mayoría de las billeteras usan esquemas de claves deterministas derivados de BIP 0032 . En Bitcoin, alguien con la clave privada que corresponde a los fondos en la cadena de bloques puede gastar los fondos. En Bitcoin, una clave privada es un único entero de 256 bits sin signo (32 bytes).
- clave pública: una coordenada que corresponde a una clave privada, pero no necesita mantenerse en secreto. Una clave pública se puede calcular a partir de una clave privada, pero no al revés. Se puede usar una clave pública para determinar si una firma es genuina mediante el uso de ECDSA para validar que la firma generó una firma que corresponde a la clave pública que se ha ofrecido, sin requerir la divulgación de la clave privada. En Bitcoin, las claves públicas están comprimidas o sin comprimir. Las claves públicas comprimidas son 33 bytes, que consisten en un prefijo 0x02 o 0x03, y un entero de 256 bits llamado x . Las claves sin comprimir son de 65 bytes, que consisten en un prefijo constante (0x04), seguido de dos enteros de 256 bits llamados x e y (2 * 32 bytes). El prefijo de una clave comprimida permite que el valor y se derive del valor x .
- firmas : una cadena de bytes que prueba que se usó una clave privada para firmar un mensaje. Una firma se genera matemáticamente a partir de un hash del mensaje que se firma y una clave privada. La firma en sí es dos números conocidos como r y sy el mensaje que se firma es la transacción de Bitcoin (menos los datos de la firma). Con la clave pública, se puede utilizar un algoritmo matemático (verificación de firma) en la firma para determinar que se produjo originalmente a partir del hash y la clave privada, sin necesidad de conocer la clave privada. Las firmas suelen tener 71, 72 o 73 bytes de longitud, con probabilidades de aproximadamente 25%, 50% y 25% respectivamente.
En Bitcoin, todas las firmas incluyen banderas SIGHASH que le indican al validador de la transacción qué partes del mensaje se han utilizado en el hash del mensaje que está firmado.
Ver también
Enlaces externos
Atribución
Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.
Llaves privadas
Una clave privada es un número secreto que puede usarse para transferir bitcoins, cifrar datos y más. Cada clave privada corresponde a una clave pública que es una coordenada en la curva elíptica de Bitcoin .
Cada billetera Bitcoin contiene una o más claves privadas, que generalmente se generan a partir de una clave raíz, y que se guardan en el archivo de la billetera. Tener conocimiento de una clave privada permite gastar cualquier moneda que se pueda desbloquear con esa clave, por lo que es importante que se mantenga en secreto y seguro.
El usuario casi nunca maneja las claves privadas, en su lugar, al usuario generalmente se le dará una frase inicial de la cual se puede derivar la clave raíz de su billetera.
Rango de claves privadas ECDSA válidas
Casi todos los enteros de 256 bits son una clave privada ECDSA válida. Específicamente, cualquier número de 256 bits de 0x1 a 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 es una clave privada válida.
El rango de claves privadas válidas se rige por el estándar secp256k1 ECDSA utilizado por Bitcoin.
Claves de billetera deterministas jerárquicas (HD)
El software Wallet puede usar una semilla mnemónica para generar muchas claves privadas y claves públicas correspondientes a partir de un único valor secreto. Esto se llama billetera determinista jerárquica , o billetera HD para abreviar. El valor de inicialización, o clave extendida maestra , consiste en una clave privada de 256 bits y un código de cadena de 256 bits, para 512 bits en total. El valor inicial no debe confundirse con las claves privadas utilizadas directamente para firmar transacciones de Bitcoin.
Se recomienda encarecidamente a los usuarios que utilicen billeteras HD, por razones de seguridad: solo es necesario hacer una copia de seguridad de una billetera HD una vez que normalmente se usa una frase semilla ; a partir de entonces, en el futuro, esa copia de seguridad única siempre puede regenerar determinísticamente las mismas claves privadas. Por lo tanto, puede recuperar de forma segura todas las direcciones y todos los fondos enviados a esas direcciones. Las billeteras que no son HD generan una nueva clave privada seleccionada al azar para cada nueva dirección; por lo tanto, si el archivo de la billetera se pierde o se daña, el usuario perderá irremediablemente todos los fondos recibidos en las direcciones generadas después de la copia de seguridad más reciente.
Formato de importación de cartera Base58
Al importar o barrer claves privadas de ECDSA, a menudo se usa un formato más corto conocido como formato de importación de Wallet , que ofrece algunas ventajas. El formato de importación de billetera es más corto e incluye códigos de verificación de errores incorporados para que los errores tipográficos puedan detectarse y / o corregirse automáticamente (lo que es imposible en formato hexadecimal) y bits de tipo que indican cómo se debe usar. El formato de importación de billetera es la forma más común de representar claves privadas en Bitcoin.
Para las claves privadas asociadas con claves públicas sin comprimir, tienen 51 caracteres y siempre comienzan con el número 5 en mainnet (9 en testnet). Las claves privadas asociadas con las claves públicas comprimidas tienen 52 caracteres y comienzan con una L o K mayúscula en la red principal (c en la red de prueba). Esta es la misma clave privada en el formato de importación de billetera (mainnet):
5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF
Cuando se importa una clave privada WIF, siempre corresponde exactamente a una dirección de Bitcoin. Cualquier utilidad que realice la conversión puede mostrar la dirección de Bitcoin correspondiente. La conversión matemática es algo compleja y es mejor dejarla en una computadora, pero es notable que el WIF garantice que siempre corresponderá a la misma dirección sin importar qué programa se use para convertirla.
La dirección de Bitcoin implementada con el ejemplo anterior es: 1CC3X2gu58d6wXUWMffpuzN9JAfTUWu4Kj
Resumen
Cualquier bitcoins enviados a la dirección 1CC3X2gu58d6wXUWMffpuzN9JAfTUWu4Kj puede ser gastado por cualquiera que conozca la clave privada que lo implementa en cualquiera de los tres formatos, independientemente de cuándo se enviaron los bitcoins, a menos que la billetera que los recibió haya utilizado las monedas generadas. La clave privada solo es necesaria para gastar los bitcoins, no necesariamente para ver su valor.
Si una clave privada que controla bitcoins no gastados se ve comprometida o robada, el valor puede protegerse si se gasta inmediatamente en una salida diferente que sea segura. Debido a que los bitcoins en una salida de transacción no gastada solo se pueden gastar una vez, cuando se gastan usando una clave privada, la clave privada deja de tener valor. A menudo es posible, pero desaconsejable e inseguro, utilizar la dirección implementada por la clave privada más de una vez, en cuyo caso se reutilizaría la misma clave privada.
Ver también
Atribución
Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Private_key bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.
SHA-256
SHA-256 es miembro de las funciones hash criptográficas SHA-2 diseñadas por la NSA. SHA significa algoritmo de hash seguro. Las funciones hash criptográficas son operaciones matemáticas ejecutadas en datos digitales; Al comparar el «hash» calculado (el resultado de la ejecución del algoritmo) con un valor de hash conocido y esperado, una persona puede determinar la integridad de los datos. Se puede generar un hash unidireccional a partir de cualquier pieza de datos, pero los datos no se pueden generar a partir del hash.
SHA-256 se usa en varias partes diferentes de la red Bitcoin:
- La minería utiliza SHA-256 como algoritmo de Prueba de trabajo .
- SHA-256 se utiliza en la creación de direcciones de bitcoin para mejorar la seguridad y la privacidad.
Ver también
Atribución
Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/SHA-256 bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.
Dirección de Bitcoin
Una dirección de Bitcoin, o simplemente una dirección, es un identificador de 26-35 caracteres alfanuméricos, que comienza con el número 1 que representa un hash de clave pública que se utilizará en una salida P2PKH para crear un pago de Bitcoin . Actualmente, Bitcoin SV utiliza un formato de dirección delineado con el prefijo número 1. por ejemplo: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
.
Preocupaciones sobre la privacidad
Si un usuario de Bitcoin recibe todos sus pagos en una sola dirección de Bitcoin, es muy fácil para cualquiera descubrir cuánto dinero tiene y qué está haciendo con ese dinero. Para proteger la privacidad del usuario, se desaconseja la reutilización de direcciones . Esta idea es parte del plan original para la protección del usuario en Bitcoin y se menciona en la Sección 10: Privacidad del documento técnico de Bitcoin donde se establece:
Como firewall adicional, se debe usar un nuevo par de claves para cada transacción para evitar que se vinculen a un propietario común.
Creación fuera de línea
La creación de direcciones se puede hacer sin conexión a Internet y no requiere ningún contacto o registro con la red Bitcoin. Es posible crear grandes lotes de direcciones sin conexión utilizando herramientas de software disponibles gratuitamente. Generar lotes de direcciones es útil en varios escenarios, como los sitios web de comercio electrónico donde se distribuye una dirección pregenerada única a cada cliente que elige la opción «pagar con Bitcoin». Las nuevas «billeteras HD» pueden generar un token de «clave pública maestra» que se puede utilizar para permitir que los sistemas no confiables (como los servidores web) generen un número ilimitado de direcciones sin tener acceso o poder crear las claves privadas correspondientes.
Las direcciones son a menudo sensibles a mayúsculas y minúsculas
Las direcciones de Bitcoin de estilo antiguo distinguen entre mayúsculas y minúsculas. Las direcciones de Bitcoin deben copiarse y pegarse utilizando el portapapeles de la computadora siempre que sea posible. Si copia una dirección de Bitcoin volviendo a escribir la dirección ‘carácter por carácter’, y cada carácter no se transcribe exactamente, incluidas las mayúsculas, es probable que el software de la billetera Bitcoin SV rechace la dirección incorrecta. Deberá verificar su entrada e intentar nuevamente.
Debido a la presencia de una suma de verificación de 4 bytes, la probabilidad de que una dirección mal escrita se acepte como válida es 1 en 2 32 , es decir, aproximadamente 1 en 4,29 mil millones. Es importante destacar que, en este raro caso, un beneficiario que proporcione a un pagador una dirección incorrecta conducirá al beneficiario a que nunca pueda desbloquear los fondos enviados a dicha dirección incorrecta.
Probar que recibes con una dirección
La mayoría de las billeteras de Bitcoin tienen la función de «firmar» un mensaje, lo que demuestra que la entidad que recibe fondos con una dirección ha aceptado el mensaje. Esto se puede utilizar para, por ejemplo, finalizar un contrato de forma criptográfica comprobable antes de realizar el pago.
Algunos servicios también aprovecharán esta capacidad al dedicar una dirección específica solo para autenticación, en cuyo caso la dirección nunca debe usarse para transacciones reales de Bitcoin. Cuando inicie sesión o use su servicio, proporcionará una firma que demuestre que es la misma persona con la dirección negociada previamente.
Los estándares actuales para las firmas de mensajes solo son compatibles con las direcciones de Bitcoin «versión cero» (que comienzan con el número 1).
Validación de dirección
Si desea validar una dirección de Bitcoin en una aplicación, es recomendable utilizar un método de este hilo en lugar de simplemente verificar la longitud de la cadena, los caracteres permitidos o que la dirección comience con un 1. La validación también se puede hacer usando código fuente abierto disponible en varios idiomas o con una herramienta de validación en línea .
¿Qué hay en una dirección?
La mayoría de las direcciones SV de Bitcoin tienen 34 caracteres. Consisten en dígitos aleatorios y letras mayúsculas y minúsculas, con la excepción de que la letra mayúscula «O», la letra mayúscula «I», la letra minúscula «l» y el número «0» nunca se utilizan para evitar la ambigüedad visual.
Algunas direcciones de Bitcoin SV pueden tener menos de 34 caracteres (tan solo 26) y seguir siendo válidas. Un porcentaje significativo de direcciones de Bitcoin tiene solo 33 caracteres, y algunas direcciones pueden ser aún más cortas. Cada dirección de Bitcoin representa un número. Estas direcciones más cortas son válidas simplemente porque representan números que comienzan con ceros, y cuando se omiten los ceros, la dirección codificada se acorta.
Varios de los caracteres dentro de una dirección de Bitcoin se usan como una suma de verificación para que los errores tipográficos se puedan encontrar y rechazar automáticamente. La suma de verificación también permite que el software de Bitcoin confirme que una dirección de 33 caracteres (o más corta) es de hecho válida y no es simplemente una dirección con un carácter faltante.
Testnet
Las direcciones en Bitcoin SV Testnet se generan con una versión de dirección diferente, lo que da como resultado un prefijo diferente.
Conceptos erróneos
Reutilización de dirección
Las direcciones no están destinadas a ser utilizadas más de una vez, y hacerlo tiene numerosos problemas asociados. Consulte el artículo dedicado sobre la reutilización de direcciones para obtener más detalles.
Saldos de direcciones
Es importante tener en cuenta que las direcciones no son billeteras ni cuentas, y no tienen saldos. Las direcciones solo reciben fondos, la transferencia de fondos no debe verse en ningún momento ya que los fondos se envían ‘desde’ una dirección. Desafortunadamente, los servicios y el software han contribuido a esta confusión al mostrar ‘bitcoins recibidos con una dirección – bitcoins enviados en transacciones aleatorias no relacionadas’ como un «saldo de dirección». Sin embargo, este valor de «saldo de dirección» no es significativo; no implica que el destinatario de los bitcoins enviados a la dirección los haya gastado, ni que dicho destinatario haya retenido los bitcoins recibidos.
Como un ejemplo de donde tal malentendido puede ser problemático, hay ocasiones en que el individuo creería que su «dirección contiene 3BSV». Presentan una transacción que gasta 0.5BSV creyendo que la ‘dirección ahora contenía 2.5BSV’ cuando, en realidad, contenía cero. El 2.5BSV ausente habría sido transferido a una dirección de cambio para la cual no se habían hecho esfuerzos para hacer una copia de seguridad de esta dirección de cambio, causando o arriesgando una pérdida permanente de fondos. Esto ha sucedido en algunas ocasiones a los usuarios de billeteras de papel.
Direcciones «de»
Las transacciones de Bitcoin SV no tienen ningún tipo de dirección de origen, origen o «de».
Ver también
- Antecedentes técnicos de las direcciones de Bitcoin
- Algoritmo de firma digital de curva elíptica
- Carteras y gestión de llaves
- Codificación Base58Check
Atribución
Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Address bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.
Actualización de Génesis
Algoritmo de firma digital de curva elíptica
Algoritmo de hash de bloque
Algoritmo Sighash heredado
Antecedentes técnicos de las direcciones de Bitcoin
API de comerciante
Arquitectura de red punto a punto
Ataques a Bitcoin
Banderas SIGHASH
Bibliotecas de billetera Bitcoin
Billetera de papel
Billetera determinista
Bitcoin hasta hoy
Bitcoin Test Blockchains
Blockchain
Bloque de Génesis
Bloque de subsidio
Bloque huérfano
Bloquear
Brainwallet
BSVAlias
Cadena de bloque
Cadena de tiempo
Cambio
Canales de pago
CODESEPARATOR OP
Codificación Base58Check
Codificación de números en el script de Bitcoin
Coinbase
Confirmación
Consenso de Nakamoto
Construyendo sobre Bitcoin
Contratos inteligentes
DEVOLUCIÓN OP
Dificultad
Dirección de Bitcoin
Doble gasto
Ejemplos de guiones complejos
El caso de uso minero
El problema de los generales bizantinos
En construcción
Explorador de bloques
Falso retorno
Firmas digitales en Bitcoin
Formato de importación de billetera
Frase semilla
Gráfico casi completo
Historia de Bitcoin
Historia de OP RETURN
ID de minero
Interfaz GetBlockTemplate
La metanet
La red de Bitcoin
Libro blanco de Bitcoin
Llaves privadas
Malleabilidad de transacciones
Marca de tiempo de bloque
Métricas de capacidad
Mientras tanto
Minería
N secuencia
NLocktime
NLocktime y nSequence
Objetivo
OP CHECKSIG
OP PUSHDATA
Opcodes utilizados en el script de Bitcoin
P2SH
Pagina principal
Pagos en Bitcoin
Paymail
Piscinas de transacciones
Protocolo
Protocolo de capa de aplicación
Protocolo de igual a igual
Protocolo de segunda capa
Protocolo Metanet
Prueba de trabajo
Pushdata Opcodes
Red Mandala
Red P2P
Reorganizar
Reutilización de dirección
RIPEMD-160
Rompecabezas R
Satoshi Nakamoto
Satoshis
Scripting avanzado de Bitcoin
Scripts con control de flujo (cláusulas condicionales)
Secp256k1
SHA-256
Small World Network
sol
Subsidio minero
Tarifas de transacción
Transacciones de Bitcoin
Transacciones instantaneas
Transacciones IP
TXID
UTXO
Verificación de pago simplificada
Versión Handshake
Visión de Bitcoin Satoshi
VOUT
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!