Las direcciones de cadena de bloques son un concepto importante en las criptomonedas y cadenas de bloques.
En nuestra guía, te explicamos. Qué son las direcciones, cómo se crean y cuáles son las diferencias entre los diferentes tipos de direcciones en diferentes cadenas de bloques.
¿Qué son las direcciones en las cadenas de bloques? Dirección de Blockchain 101
En los primeros días de Bitcoin, era posible enviar pagos a una dirección IP como 104.25.248.32 (que es blockgeeks.com). Se planeó que este fuera un método conveniente para usar Bitcoins sin tener que lidiar con direcciones y claves públicas no manejables. Sin embargo, después de que los desarrolladores de Bitcoin se dieron cuenta de que esta forma de enviar monedas podría estar sujeta a serios ataques de intermediarios, la opción se desactivó y nunca regresó.
Esta anécdota de los primeros días de Bitcoin parece tener valores principalmente históricos. Pero demuestra lo que es una dirección: no es algo especial o algo escrito en piedra. Es solo un marcador de posición para aceptar y enviar transacciones de blockchain. Como una dirección IBAN o SWIFT.
La dirección en sí no importa, ni su formato. Lo único que importa es que la dirección cumple su propósito: permitir pagos a una entidad que tiene una información única. Por lo general, una clave privada, para acceder exclusivamente a los fondos. La dirección no es más que un identificador seguro.
Sin embargo, aunque las autoridades centrales, como los bancos, asignan los números SWIFT o IBAN, existen direcciones de blockchain. Cada dirección de blockchain posible ya existía, mucho antes de que una billetera la encontrara. La razón es que las direcciones de blockchain son el resultado de una operación matemática.
La clave pública: donde comienza la generación de direcciones Blockchain
Después de que se abandonó Pay to IP en Bitcoin, P2PKH se convirtió en el nuevo formato estándar para direcciones de bitcoin. Puede que lo sepas; se parece a esto:
1K31KZXjcochXpRhjH9g5MxFFTHPi2zEXb
Una dirección P2PKH estándar tiene algo así como 34 signos y comienza con 1. P2PKH es la abreviatura de “Pay To Public Key Hash”. Esto significa que paga a un hash de una clave pública. Para los principiantes, esto puede parecer intimidante y complejo, así que esperemos durante el proceso de construcción de una dirección de este tipo para saber de qué se trata.
Cada software de billetera que use puede crear fácilmente una dirección P2PKH o, para ser más precisos: encontrar tantas como desee. No es una ciencia espacial, sino una combinación de varias operaciones criptográficas no excepcionales.
Primero, su billetera recopila entropía y la usa para generar una clave privada ECDSA. ECDSA es el algoritmo criptográfico en el núcleo de las direcciones bitcoin. Es un algoritmo de firma asimétrico, lo que significa que puede firmar mensajes con la clave PRIVADA y verificar la firma con la clave PÚBLICA. Con ECDSA, puede brindarle al mundo fácilmente la información para demostrar que usted, y solo usted, es el autor de un mensaje al firmarlo. Es muy similar a firmar físicamente una carta.
Entonces, después de crear la clave privada con entropía, la billetera deriva la clave pública de ella. Lo hace seleccionando algunas coordenadas aleatorias en una determinada curva elíptica y haciendo algunos cálculos. Los detalles no son importantes. Lo que importa es que esta clave pública es todo lo que necesita para enviar y cobrar pagos. En los primeros días, la clave pública se utilizó para recibir fondos.
Pero muy pronto el concepto se amplió. La clave pública no solo es muy larga y poco práctica (alrededor de 65 caracteres), sino que también puede estar sujeta a errores tipográficos. Además, exponerlo también puede ponerlo en riesgo si ECDSA alguna vez se rompe, por ejemplo, mediante la computación cuántica. Es por eso que los desarrolladores de bitcoins crearon un método para derivar una dirección de la clave pública.
Creando la dirección de Bitcoin Blockchain
Para crear la dirección, su billetera empuja la clave pública a través de una serie de algoritmos criptográficos. En términos generales, esto es lo que sucede:
El software aplica hash a la clave pública con SHA 256 y el resultado con RIPEMD-160. Luego agrega los bytes 00 como prefijo al comienzo de la cadena resultante; esta es la razón por la que las direcciones P2PKH comienzan con un “1” y cuatro bytes de suma de verificación al final. Los cuatro bytes de suma de comprobación se generan procesando el resultado dos veces con SHA 256 y tomando los primeros cuatro bytes. Luego, su billetera convierte el resultado en una cadena base58. Y voilá: tenemos la dirección de bitcoin que conocemos y nos encanta.
No es necesario que comprenda los detalles criptográficos. Lo importante es que la dirección representa una clave pública de una manera más legible y agrega una suma de verificación que evita que seas víctima de un error de escritura. Siempre que pegue una dirección en su billetera bitcoin, verifica el prefijo y calcula la suma de verificación. Si no coincide, rechaza la dirección. Esto hace que sea imposible enviar fondos a una dirección incorrecta debido a un error de escritura.
Si tiene la clave privada para una dirección, solo usted puede firmar una transacción con el token de criptomoneda asignado a esta dirección, mientras que todos los que conocen su dirección pueden verificar la validez de su firma. Este simple proceso (firmar una transacción, verificar la firma) es más o menos todo lo que hace una transacción de criptomonedas.
Pero bitcoin tiene direcciones más avanzadas: las llamadas direcciones P2SH. Esta abreviatura significa “Pay to Script Hash”. Significa que no paga por el hash de una clave pública, sino por el hash de un script. Para firmar una transacción, no es necesario que proporcione la firma que coincida con una determinada clave pública, sino un script que coincida con un determinado hash. Este tipo de direcciones permite métodos más flexibles para verificar usted mismo, por ejemplo, los que se utilizan en direcciones de firma múltiple, en las que dos partes proporcionan información que se resume en el script necesario. Estas direcciones usan el prefijo 05, razón por la cual comienzan con un “3”.
Sin embargo, necesita otra guía para describir completamente la magia de las direcciones P2SH. Aquí nos enfocamos en las direcciones en sí y dejamos que bitcoin eche un vistazo, cómo otras criptomonedas crean direcciones.
Direcciones en otras criptomonedas
Muchas criptomonedas utilizan casi el mismo formato de dirección que bitcoin. Por ejemplo, Litecoin, Dash y Dogecoin implementan los mismos procedimientos criptográficos para generar una dirección: ECDSA, SHA 256 y RIPEMD 160.
La única diferencia es el prefijo del hash RIPEMD-160. Mientras que el prefijo 00 de Bitcoin da como resultado direcciones que comienzan con un “1”, Altcoins como Dash, Litecoin o Dogecoin usan otros prefijos para que las direcciones comiencen con “L” (Litecoin), “X” (Dash) o “D” (Dogecoin) .
Como estas monedas usan el mismo algoritmo criptográfico, puede usar las mismas claves privadas y públicas para guardar monedas en todas estas criptomonedas. En parte, incluso puede almacenarlos en las mismas direcciones. Por ejemplo, Litecoin y bitcoin usan el mismo prefijo para las direcciones P2SH – 05 – por lo que es posible almacenar tanto Bitcoin como Litecoin en la misma dirección.
Sin embargo, otras criptomonedas utilizan otros esquemas para generar la dirección. Por ejemplo, Monero se basa en el algoritmo Cryptonote. Este algoritmo despliega otro algoritmo de firma criptográfica para generar la clave pública, EdDSA. Las monedas Cryptonote tienen las denominadas firmas de anillo, que brindan más privacidad, ya que no puede determinar qué clave se firmó una transacción. Por esta razón, las direcciones de Cryptonote deben contener dos claves públicas, una vista y una clave de gasto.
Al igual que con las direcciones de bitcoin, Cryptonote agrega un byte de prefijo y hash el resultado. Sin embargo, utiliza Keccak-256 en lugar de SHA 256 doble para generar cuatro bytes de suma de comprobación, que se agregan al final de la cadena. Después de convertir el resultado a base58, obtiene la dirección final, que es más larga que en bitcoin. Se parece a esto:
43ZZViHQKd42X7cajEtc6NUoxG4AvyMu3ZqpGTBP85uhEfYoPVAuGHxJcomMHEPp3NWiKJRUMnuAJ7dfBrPTcfjYMPJzz2a
Esta variedad de direcciones demuestra, nuevamente, que las direcciones son solo un medio para aceptar un pago que se asigna a una determinada clave pública. Para esta función básica, no importa lo que haga con la clave pública, qué algoritmo criptográfico aplique para convertirla en una dirección y cómo se ve la dirección.
Sin embargo, el procedimiento de construcción de una dirección puede tener una implicación importante en la seguridad, la privacidad y la usabilidad. Sin la integración de la suma de comprobación, la dirección de bitcoin podría estar mal escrita, y sin la integración de la clave de vista en la dirección, Monero no sería tan privado como es. Una mirada a las direcciones de Ethereum establece aún más esta información.
Direcciones Ethereum
Como muchas cosas en las criptomonedas, el tema de las direcciones comienza a ser realmente intrigante cuando se trata de Ethereum. Muchas personas que comenzaron con Bitcoin y luego probaron Ethereum están desconcertadas con el formato de dirección, que es una cadena larga hexadecimal que comienza con 0x, por ejemplo, “0x0eb81892540747ec60f1389ec734a2c0e5f9f735”.
Técnicamente, la generación de direcciones de Ethereum es similar a la de Bitcoin, pero no abarca todo el camino. Comienza con una clave privada y usa ECDSA para generar una clave pública de 64 bytes. Como sabemos de bitcoin. Luego, hash esta clave con Keccak-256. El resultado es una cadena de 32 bytes. Los primeros 12 de estos bytes se eliminan, los 20 bytes restantes son una dirección de 40 caracteres, a la que generalmente se agrega el prefijo 0x. Eso es. Aparte de bitcoin o Cryptonote, Ethereum no transforma la dirección a base58, por lo que está en hexadecimal (0-F).
Otra diferencia entre ethereum y otras criptomonedas es que las direcciones de Ethereum no tienen suma de comprobación. Cualquier cadena hexadecimal de 40 caracteres puede ser una dirección ethereum, que es la razón por la que los desarrolladores de ethereum disuaden a los usuarios de escribir manualmente dicha dirección, ya que un solo error de escritura puede resultar en la pérdida de fondos.
En comparación con las direcciones de otras criptomonedas, las direcciones de ethereum parecen estar inacabadas, ser asquerosas e imprudentemente peligrosas para el usuario. Para una criptomoneda que tiene el segundo valor de mercado más grande y se promueve como la criptomoneda más innovadora, este parece ser un nivel sorprendentemente bajo.
La razón inicial de esto fue que, cuando se lanzó la primera versión de Ethereum, Frontier, a nadie realmente le importó. Lo que hoy usamos como direcciones nunca fue pensado para ser usado permanentemente como tal. Desde el principio, los desarrolladores de Ethereum tienen como objetivo crear un registro de nombres basado en contratos inteligentes, con el que los pagos se pueden enviar fácilmente a nombres o dominios, etc. A largo plazo, con ethereum, la criptomoneda puede cerrar el círculo y volver al pago fácil de usar que Satoshi pretendía al implementar Pay to IP.
Sin embargo, como señala Jeff Coleman, hay otra razón, quizás más importante, por la que Ethereum no usa direcciones creadas como bitcoin: los desarrolladores creen que se puede hacer mejor. Recuerde, una dirección es solo un método criptográfico para representar la información necesaria para asignar fondos a una clave privada. Esto se puede hacer con contratos que asignan esta información a los nombres, pero esto también se puede hacer con formatos de dirección más sofisticados que los que usa bitcoin.
El formato favorito de los desarrolladores de Ethereum es actualmente el formato ICAP, que se ve así:
E7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
Al igual que las direcciones de bitcoin, utiliza caracteres base58 e incluye una suma de comprobación.
“¡Pero eso no es todo, amigos! En primer lugar, el ICAP es un número de cuenta bancaria internacional (o IBAN) totalmente válido “, explica Coleman,” eso significa que el software bancario existente puede comprenderlo e interactuar con él “. IBAN es el identificador internacional de cuentas de clientes en la industria bancaria. Consta de 32 caracteres alfanuméricos que no distinguen entre mayúsculas y minúsculas, que contienen un código de país, una suma de comprobación, el número de banco y el número de cuenta. ICAP utiliza un XE como identificador de país y una cadena de 16 a 30 caracteres alfanuméricos que incluye información como cuenta, activo, suma de comprobación o institución.
Colemen continúa: “Por otro lado, el ICAP no tiene que usar direcciones hexadecimales. En cambio, una vez que todos cambiamos a usar contratos de registro de nombre, puede usar su cadena real legible por humanos para terminar con algo como “XE81ETHXREGJEFFCOLEMAN”, que aún coincide con los formatos bancarios, ¡pero podría ser posible recordarlo! ”. A largo plazo, las direcciones de Ethereum podrían volverse memorables y compatibles con el sistema bancario existente.
El soporte para direcciones ICAP está creciendo actualmente. Los clientes habituales ya permiten la generación de direcciones ICAP, pero aún utilizan la dirección heredada como estándar. Para hacer esto más seguro, Vitalik Buterin desarrolló una pequeña mejora para agregar sumas de verificación en forma de mayúsculas. Con las direcciones generadas por EIP55, las mayúsculas sirven como suma de comprobación. Por lo tanto, si una dirección tiene al menos una letra mayúscula, no será válida si comete un error de escritura.
STEEM – donde su nombre de usuario es su dirección
La criptomoneda STEEM ya implementó un sistema similar al que Ethereum pretende lograr. En STEEM, su nombre de usuario es la dirección de su billetera.
STEEM es una criptomoneda basada en el concepto BitShares. Está interconectado con la plataforma social Steemit, donde los usuarios pueden “minar” Steem-monedas mediante la recopilación de votos positivos para las publicaciones. Esta “prueba subjetiva de trabajo” es una inteligente combinación de Prueba de participación y Prueba de trabajo. El sistema en su conjunto es relativamente complejo, ya que contiene “delegados”, que son elegidos para hacer la prueba, y tres formas de token, STEEM, STEEM power y STEEM Dollar; Además, es difícil evaluar si STEEM está tan descentralizado como bitcoin y Ethereum, ya que gran parte de él se basa en la plataforma Steemit alojada de forma privada, que es el principal cliente de Steem. Parece que no hay otras carteras disponibles.
Sin embargo, el concepto de dirección es intrigante. De una manera más centralizada, STEEM implementó lo que ethereum pretende construir con los registradores de nombres de contratos inteligentes: los usuarios obtienen una clave privada, que puede usar para firmar su transacción, como con cualquier otra criptomoneda. Las direcciones, sin embargo, no son una derivación criptográfica de la clave privada, sino solo los nombres de usuario en Steemit. Probablemente estos nombres de usuario estén conectados a la clave pública en una base de datos pública en Steemit, por lo que, al menos, todos los usuarios pueden validar una transacción. Pero aún así, la parte más importante de la validación, la conexión entre la clave pública y la dirección, no se basa en matemáticas, sino en la confianza en la plataforma Steemit.
El esquema de direcciones basado en el nombre de usuario de STEEM es interesante porque proporciona una usabilidad ideal. Pero su naturaleza centralizada y confiable lo hace inadecuado para la mayoría de los casos de uso de blockchain, que tienen como objetivo descentralizar la verificación y sustituir la confianza por matemáticas. Al menos, el sistema carece de transparencia.
Un registrador de nombres basado en contratos inteligentes, como Ethereum, tiene como objetivo construir sobre su cadena de bloques, sin embargo, podría combinar lo mejor de ambos mundos: la naturaleza descentralizada y sin confianza de bitcoin, y la facilidad de uso de las direcciones basadas en nombres STEEM.