Las billeteras son herramientas esenciales que permiten a los usuarios gestionar sus cuentas de blockchain, almacenar sus activos de forma segura y firmar transacciones para realizar cambios en el estado de la blockchain.
En esta publicación, cubriremos qué es una billetera, cómo se hacen las billeteras y cómo utilizan la criptografía de curva elíptica para generar y asegurar pares de claves privadas-públicas, derivar frases de semilla y facilitar interacciones seguras en la cadena de bloques.
Una billetera es una aplicación que te permite ver e interactuar con tu(s) cuenta(s) de blockchain; estas cuentas te permiten enviar transacciones para realizar acciones como enviar tokens o interactuar con contratos inteligentes.
Cada cuenta en la cadena de bloques se compone de un par de claves criptográficas; un conjunto de 2 claves que están vinculadas entre sí. En el contexto de las cadenas de bloques, este tipo de cuenta se llama típicamente Cuenta Propia Externa (EOA) y consta de una clave pública y una clave privada:
Este par de claves tiene una característica poderosa, llamada función de puerta trampa; lo que significa que es:
Las billeteras se utilizan para firmar mensajes o transacciones utilizando la clave privada de la billetera para enviarlas a una cadena de bloques.
Las billeteras proporcionan una forma de saber qué mensajes o transacciones ha aceptado una billetera; ya que la clave pública del remitente de la transacción se puede recuperar de la firma de la transacción. Esto es esencial para evitar que se acepten transacciones falsas/maliciosas en la cadena de bloques.
Por ejemplo, Jarrod podría enviar una transacción afirmando que Abril le envió 5 ETH, incluso si ella nunca estuvo de acuerdo con esta transacción. Sin embargo, dado que la cadena de bloques verifica la firma de cada transacción, rápidamente rechazará la transacción, ya que la dirección recuperada de la firma no coincide con el "remite" de la transacción (es decir, Abril).
Blockchains como Ethereum utilizan ECDSA (Algoritmo de Firma Digital de Curva Elíptica) para comprobar si la clave pública recuperada de la firma de la transacción coincide con la clave pública de la persona que envió la transacción a la red.
Para crear una billetera, necesitas crear un par de claves pública-privada. Sin embargo, los valores de este par de claves necesitan seguir algunas reglas para que funcione en un blockchain.
Este proceso de 3 pasos es el flujo principal de cómo se generan las cuentas en la cadena de bloques.
A continuación, profundizaremos en cómo se deriva una clave pública utilizando una curva elíptica y una clave privada. Pero antes de eso, responderemos algunas otras preguntas que puedas tener sobre billeteras, como:
Si bien es posible generar un valor aleatorio de 64 hexadecimales como acabamos de demostrar, por lo general, las claves privadas se generan utilizando estándares específicos que se originaron a partir de Bitcoin. Estos estándares permiten a los usuarios recordar una frase semilla, que es una frase de 12 a 24 palabras que se puede utilizar para crear cualquier cantidad de nuevas cuentas asociadas a ella.
Esto permite a los usuarios recordar un solo conjunto de palabras para acceder a todas sus cuentas; cada una con un par de claves público-privadas individuales. Cualquier número de claves privadas nuevas se pueden derivar de una frase semilla única utilizando una función de derivación de claves específica (KDF).
Entonces, primero cubramos cómo se generan las frases semilla a través de la entropía aleatoria y cómo se pueden derivar las claves privadas de una frase semilla, antes de volver a visitar cómo se derivan las claves públicas de las claves privadas.
Cuando instala por primera vez una aplicación de billetera, normalmente le pedirá que escriba y guarde en algún lugar una frase semilla segura; generalmente una combinación de 12 o 24 palabras. Puede ver una lista de ejemplo de posibles palabras en inglés.aquí, que notarás tiene una longitud de 2048 palabras (volveremos a ese número en breve).
Esta idea de almacenar frases semilla mnemónicas fue introducida en 2013 con un BIP (Propuesta de Mejora de Bitcoin); BIP-39. Esta propuesta proporciona una forma estandarizada de generar entropía aleatoria y traducirla en una serie de palabras fáciles de recordar.
Primero, debemos asegurarnos de que nuestra frase de recuperación se genere de forma aleatoria, después de todo, no queremos que alguien más acceda accidentalmente a nuestra billetera y tenga acceso a nuestros fondos.
Para hacer esto, se genera un número aleatorio utilizando CSPRNG (Generador de números pseudoaleatorios criptográficamente seguro), que puedes hacer en tu navegador:
Este número aleatorio se llama entropía. Esta entropía se utiliza para crear el conjunto de palabras que forman una frase de inicio. En nuestro caso, 128 bits se traducen en 12 palabras, pero también es posible utilizar otras longitudes, como:
Entonces, ¿cómo usamos estos bits para crear una frase de semilla? ¿Cuál es la relación entre los bits y las palabras? Primero, se crea un checksum para la entropía y se le agrega a los 128 bits; este es un hash de 4 bits de la entropía creado para asegurar su integridad.
Entonces, ahora tenemos 128 bits de entropía + 4 bits del checksum, para hacer un total de 132 bits. A continuación, los 132 bits se convierten en binario; específicamente, se dividen en trozos de 11 bits.
Ahora tenemos un conjunto de 12 números binarios, cada uno de los cuales tiene una longitud de 11 bits. Pista: ¡tenemos 12 números y nuestra frase de semilla va a tener 12 palabras!
Recuerde que tenemos 2048 palabras en nuestra lista y que se eligió 2048 porque 2048 es 2^11, ya que hay 2048 números binarios diferentes posibles que se pueden hacer con 11 bits.
Ahora solo tenemos que convertir estos números binarios en palabras de nuestra lista de palabras. Esto se realiza utilizando el número binario como índice para buscar una palabra en la lista de palabras. es decir, si el número binario es 10, usamos la 9ª palabra de la lista (ya que comenzamos en el índice 0), por ejemplo:
Repite esto 12 veces, una por cada número de 11 bits para formar una frase semilla que contenga 12 palabras.
Generando un valor de entropía aleatorio, dividiéndolo en fragmentos binarios y usando esos valores binarios como un índice para buscar palabras en una lista de palabras, llegamos a una frase de semilla aleatoria.
Tu reacción inmediata a esto podría ser: “Si solo hay 2048 palabras posibles, ¿alguien no podría adivinar mi frase semilla?” Bueno, técnicamente sí, pero es realmente... realmente improbable. ¿Qué tan improbable preguntas?
Imagina que olvidamos el paso de generación aleatoria de 128 bits y simplemente seleccionamos manualmente 12 palabras de la lista. Cada vez que seleccionamos una palabra, estamos seleccionando una opción en un conjunto de 2048 palabras.
Entonces, podemos decir que para que alguien más también adivine esta misma secuencia de palabras, necesita adivinar correctamente la misma palabra que nosotros con una probabilidad de 1/2048, 12 veces seguidas. En este momento, probablemente estás pensando, "ok, eso no suena tan difícil...", ¿verdad??Pero, juguemos esto:
Esto es 2048 x 2048 x 2048… 12 veces. O, 2048^12. Lo cual es... un número absurdamente grande. Aproximadamente, 5 septillones, o 5 cuatrillones de billones. Eso es incomprensible para nosotros, pero intentemos...
Imagina que comenzaste a adivinar en este momento, usando una computadora increíblemente potente que puede adivinar 1 billón de frases semilla por segundo. A esta máquina le llevaría 159 billones de años adivinar una frase semilla. O, (dependiendo en lo que creas), aproximadamente 11,000 veces más que la edad actual del universo.
¿Son mejores las frases de semilla de 24 palabras que las de 12?
Algunas billeteras optan por 128 bits (12 palabras), ¡pero las billeteras más modernas te piden que recuerdes 24 palabras para tu frase de semilla! ¡Lo cual es de nuevo, ridículamente grande!
Ahora tenemos una frase de semilla de 12 palabras, ¿cómo se utiliza para crear claves privadas para las cuentas? Para hacer esto, necesitamos convertir nuestra frase de semilla en una semilla binaria que se pueda usar para generar billeteras. Este proceso implica los siguientes pasos:
Este proceso (denominado función de derivación de claves) genera un valor hash de 64 bytes, denominado semilla binaria, utilizando otro algoritmo denominado HMAC-SHA512 como función pseudoaleatoria.
El valor hash de 64 bytes de salida se puede utilizar para generar cuentas utilizando la lógica que se originó en otros estándares de Bitcoin; a saber, BIP-32 y, opcionalmente, una extensión de BIP-32, BIP-44.
BIP-32 presenta billeteras deterministas jerárquicas (HD); donde se pueden derivar muchas billeteras de una sola semilla, y se pueden derivar más billeteras de esas billeteras, creando un "árbol" de billeteras.
BIP-44 proporciona una forma estandarizada de crear una jerarquía para las estructuras de billetera a partir de una única semilla binaria mediante la implementación de una ruta de derivación específica siguiendo la estructura: m / purpose' / coin_type' / account' / change / address_index:
No todas las billeteras utilizan BIP-44, pero es una forma común de estandarizar cómo se derivan las cuentas a partir de una semilla binaria.
Como mencionamos anteriormente, las claves privadas constan de 64 caracteres hexadecimales, lo que equivale a 32 bytes. Y acabamos de generar una semilla binaria de 64 bytes a través del proceso PBKDF2. Entonces, ¿cómo usamos este valor hash de 64 bytes para crear claves privadas?
Primero, el hash se divide en dos mitades, cada una de 32 bytes de tamaño:
Ahora entendemos cómo se ven las claves privadas, cómo se generan aleatoriamente y cómo se pueden derivar múltiples claves de una sola frase de semilla. A continuación, exploremos cómo se derivan las claves públicas a partir de las claves privadas.
Usando criptografía de curva elíptica (ECC), podemos averiguar la clave pública para una clave privada determinada. Hay diferentes tipos de curvas elípticas, pero la utilizada tanto por Bitcoin como por Ethereum se llama secp256k1.
La especificación de esta curva elíptica incluye un punto base, G, que se utiliza como punto de partida para crear otros puntos en la curva. A partir de este punto de partida, nos "movemos" alrededor de la curva un cierto número de veces (determinado por nuestra clave privada), de una manera específica. El punto de la curva en el que terminamos cuando detenemos este proceso será nuestra clave pública.
La forma en que nos “movemos” alrededor de la curva se llama multiplicación escalar. Al trabajar con curvas elípticas, un escalar se refiere a un número utilizado para escalar un punto en la curva. Tomamos el punto base G y aplicamos el número escalar para llegar a un nuevo punto en la curva al “estirar” ese punto.
El número escalar que aplicamos al punto base es nuestra clave privada; en pocas palabras, tomamos nuestro punto de partida G y lo multiplicamos escalarmente por nuestra clave privada para obtener nuestra clave pública.
En realidad, dado que la curva está definida sobre el campo primo ℤp, parece más bien un montón de puntos dispersos... pero todavía tiene las mismas propiedades de la curva elíptica.
Al final de este proceso de multiplicación escalar (saltando alrededor del número de
Las claves públicas, como su nombre indica, se pueden compartir públicamente con cualquier persona. Son útiles para:
Las billeteras son un componente esencial de las blockchains que utilizan criptografía de curva elíptica para permitir a los usuarios enviar transacciones y firmar mensajes desde sus cuentas.
Sin embargo, algunas blockchains como Abstract también admiten nuevos tipos de billeteras, llamadas cuentas de contratos inteligentes, que brindan más funcionalidades y permiten una seguridad más fuerte, mecanismos de recuperación y más.
Este artículo ha sido reimpreso de [https://abs.xyz/blog], Reenviar el título original '¿Qué es una billetera?', Todos los derechos de autor pertenecen al autor original [Jarrod Watts]. Si hay objeciones a esta reimpresión, por favor contactar alAprendizaje de Gateel equipo y ellos lo manejarán rápidamente.
Renuncia de responsabilidad: Las opiniones y puntos de vista expresados en este artículo son exclusivamente los del autor y no constituyen ningún consejo de inversión.
Las traducciones del artículo a otros idiomas son realizadas por el equipo de Gate Learn. A menos que se indique lo contrario, está prohibido copiar, distribuir o plagiar los artículos traducidos.
Las billeteras son herramientas esenciales que permiten a los usuarios gestionar sus cuentas de blockchain, almacenar sus activos de forma segura y firmar transacciones para realizar cambios en el estado de la blockchain.
En esta publicación, cubriremos qué es una billetera, cómo se hacen las billeteras y cómo utilizan la criptografía de curva elíptica para generar y asegurar pares de claves privadas-públicas, derivar frases de semilla y facilitar interacciones seguras en la cadena de bloques.
Una billetera es una aplicación que te permite ver e interactuar con tu(s) cuenta(s) de blockchain; estas cuentas te permiten enviar transacciones para realizar acciones como enviar tokens o interactuar con contratos inteligentes.
Cada cuenta en la cadena de bloques se compone de un par de claves criptográficas; un conjunto de 2 claves que están vinculadas entre sí. En el contexto de las cadenas de bloques, este tipo de cuenta se llama típicamente Cuenta Propia Externa (EOA) y consta de una clave pública y una clave privada:
Este par de claves tiene una característica poderosa, llamada función de puerta trampa; lo que significa que es:
Las billeteras se utilizan para firmar mensajes o transacciones utilizando la clave privada de la billetera para enviarlas a una cadena de bloques.
Las billeteras proporcionan una forma de saber qué mensajes o transacciones ha aceptado una billetera; ya que la clave pública del remitente de la transacción se puede recuperar de la firma de la transacción. Esto es esencial para evitar que se acepten transacciones falsas/maliciosas en la cadena de bloques.
Por ejemplo, Jarrod podría enviar una transacción afirmando que Abril le envió 5 ETH, incluso si ella nunca estuvo de acuerdo con esta transacción. Sin embargo, dado que la cadena de bloques verifica la firma de cada transacción, rápidamente rechazará la transacción, ya que la dirección recuperada de la firma no coincide con el "remite" de la transacción (es decir, Abril).
Blockchains como Ethereum utilizan ECDSA (Algoritmo de Firma Digital de Curva Elíptica) para comprobar si la clave pública recuperada de la firma de la transacción coincide con la clave pública de la persona que envió la transacción a la red.
Para crear una billetera, necesitas crear un par de claves pública-privada. Sin embargo, los valores de este par de claves necesitan seguir algunas reglas para que funcione en un blockchain.
Este proceso de 3 pasos es el flujo principal de cómo se generan las cuentas en la cadena de bloques.
A continuación, profundizaremos en cómo se deriva una clave pública utilizando una curva elíptica y una clave privada. Pero antes de eso, responderemos algunas otras preguntas que puedas tener sobre billeteras, como:
Si bien es posible generar un valor aleatorio de 64 hexadecimales como acabamos de demostrar, por lo general, las claves privadas se generan utilizando estándares específicos que se originaron a partir de Bitcoin. Estos estándares permiten a los usuarios recordar una frase semilla, que es una frase de 12 a 24 palabras que se puede utilizar para crear cualquier cantidad de nuevas cuentas asociadas a ella.
Esto permite a los usuarios recordar un solo conjunto de palabras para acceder a todas sus cuentas; cada una con un par de claves público-privadas individuales. Cualquier número de claves privadas nuevas se pueden derivar de una frase semilla única utilizando una función de derivación de claves específica (KDF).
Entonces, primero cubramos cómo se generan las frases semilla a través de la entropía aleatoria y cómo se pueden derivar las claves privadas de una frase semilla, antes de volver a visitar cómo se derivan las claves públicas de las claves privadas.
Cuando instala por primera vez una aplicación de billetera, normalmente le pedirá que escriba y guarde en algún lugar una frase semilla segura; generalmente una combinación de 12 o 24 palabras. Puede ver una lista de ejemplo de posibles palabras en inglés.aquí, que notarás tiene una longitud de 2048 palabras (volveremos a ese número en breve).
Esta idea de almacenar frases semilla mnemónicas fue introducida en 2013 con un BIP (Propuesta de Mejora de Bitcoin); BIP-39. Esta propuesta proporciona una forma estandarizada de generar entropía aleatoria y traducirla en una serie de palabras fáciles de recordar.
Primero, debemos asegurarnos de que nuestra frase de recuperación se genere de forma aleatoria, después de todo, no queremos que alguien más acceda accidentalmente a nuestra billetera y tenga acceso a nuestros fondos.
Para hacer esto, se genera un número aleatorio utilizando CSPRNG (Generador de números pseudoaleatorios criptográficamente seguro), que puedes hacer en tu navegador:
Este número aleatorio se llama entropía. Esta entropía se utiliza para crear el conjunto de palabras que forman una frase de inicio. En nuestro caso, 128 bits se traducen en 12 palabras, pero también es posible utilizar otras longitudes, como:
Entonces, ¿cómo usamos estos bits para crear una frase de semilla? ¿Cuál es la relación entre los bits y las palabras? Primero, se crea un checksum para la entropía y se le agrega a los 128 bits; este es un hash de 4 bits de la entropía creado para asegurar su integridad.
Entonces, ahora tenemos 128 bits de entropía + 4 bits del checksum, para hacer un total de 132 bits. A continuación, los 132 bits se convierten en binario; específicamente, se dividen en trozos de 11 bits.
Ahora tenemos un conjunto de 12 números binarios, cada uno de los cuales tiene una longitud de 11 bits. Pista: ¡tenemos 12 números y nuestra frase de semilla va a tener 12 palabras!
Recuerde que tenemos 2048 palabras en nuestra lista y que se eligió 2048 porque 2048 es 2^11, ya que hay 2048 números binarios diferentes posibles que se pueden hacer con 11 bits.
Ahora solo tenemos que convertir estos números binarios en palabras de nuestra lista de palabras. Esto se realiza utilizando el número binario como índice para buscar una palabra en la lista de palabras. es decir, si el número binario es 10, usamos la 9ª palabra de la lista (ya que comenzamos en el índice 0), por ejemplo:
Repite esto 12 veces, una por cada número de 11 bits para formar una frase semilla que contenga 12 palabras.
Generando un valor de entropía aleatorio, dividiéndolo en fragmentos binarios y usando esos valores binarios como un índice para buscar palabras en una lista de palabras, llegamos a una frase de semilla aleatoria.
Tu reacción inmediata a esto podría ser: “Si solo hay 2048 palabras posibles, ¿alguien no podría adivinar mi frase semilla?” Bueno, técnicamente sí, pero es realmente... realmente improbable. ¿Qué tan improbable preguntas?
Imagina que olvidamos el paso de generación aleatoria de 128 bits y simplemente seleccionamos manualmente 12 palabras de la lista. Cada vez que seleccionamos una palabra, estamos seleccionando una opción en un conjunto de 2048 palabras.
Entonces, podemos decir que para que alguien más también adivine esta misma secuencia de palabras, necesita adivinar correctamente la misma palabra que nosotros con una probabilidad de 1/2048, 12 veces seguidas. En este momento, probablemente estás pensando, "ok, eso no suena tan difícil...", ¿verdad??Pero, juguemos esto:
Esto es 2048 x 2048 x 2048… 12 veces. O, 2048^12. Lo cual es... un número absurdamente grande. Aproximadamente, 5 septillones, o 5 cuatrillones de billones. Eso es incomprensible para nosotros, pero intentemos...
Imagina que comenzaste a adivinar en este momento, usando una computadora increíblemente potente que puede adivinar 1 billón de frases semilla por segundo. A esta máquina le llevaría 159 billones de años adivinar una frase semilla. O, (dependiendo en lo que creas), aproximadamente 11,000 veces más que la edad actual del universo.
¿Son mejores las frases de semilla de 24 palabras que las de 12?
Algunas billeteras optan por 128 bits (12 palabras), ¡pero las billeteras más modernas te piden que recuerdes 24 palabras para tu frase de semilla! ¡Lo cual es de nuevo, ridículamente grande!
Ahora tenemos una frase de semilla de 12 palabras, ¿cómo se utiliza para crear claves privadas para las cuentas? Para hacer esto, necesitamos convertir nuestra frase de semilla en una semilla binaria que se pueda usar para generar billeteras. Este proceso implica los siguientes pasos:
Este proceso (denominado función de derivación de claves) genera un valor hash de 64 bytes, denominado semilla binaria, utilizando otro algoritmo denominado HMAC-SHA512 como función pseudoaleatoria.
El valor hash de 64 bytes de salida se puede utilizar para generar cuentas utilizando la lógica que se originó en otros estándares de Bitcoin; a saber, BIP-32 y, opcionalmente, una extensión de BIP-32, BIP-44.
BIP-32 presenta billeteras deterministas jerárquicas (HD); donde se pueden derivar muchas billeteras de una sola semilla, y se pueden derivar más billeteras de esas billeteras, creando un "árbol" de billeteras.
BIP-44 proporciona una forma estandarizada de crear una jerarquía para las estructuras de billetera a partir de una única semilla binaria mediante la implementación de una ruta de derivación específica siguiendo la estructura: m / purpose' / coin_type' / account' / change / address_index:
No todas las billeteras utilizan BIP-44, pero es una forma común de estandarizar cómo se derivan las cuentas a partir de una semilla binaria.
Como mencionamos anteriormente, las claves privadas constan de 64 caracteres hexadecimales, lo que equivale a 32 bytes. Y acabamos de generar una semilla binaria de 64 bytes a través del proceso PBKDF2. Entonces, ¿cómo usamos este valor hash de 64 bytes para crear claves privadas?
Primero, el hash se divide en dos mitades, cada una de 32 bytes de tamaño:
Ahora entendemos cómo se ven las claves privadas, cómo se generan aleatoriamente y cómo se pueden derivar múltiples claves de una sola frase de semilla. A continuación, exploremos cómo se derivan las claves públicas a partir de las claves privadas.
Usando criptografía de curva elíptica (ECC), podemos averiguar la clave pública para una clave privada determinada. Hay diferentes tipos de curvas elípticas, pero la utilizada tanto por Bitcoin como por Ethereum se llama secp256k1.
La especificación de esta curva elíptica incluye un punto base, G, que se utiliza como punto de partida para crear otros puntos en la curva. A partir de este punto de partida, nos "movemos" alrededor de la curva un cierto número de veces (determinado por nuestra clave privada), de una manera específica. El punto de la curva en el que terminamos cuando detenemos este proceso será nuestra clave pública.
La forma en que nos “movemos” alrededor de la curva se llama multiplicación escalar. Al trabajar con curvas elípticas, un escalar se refiere a un número utilizado para escalar un punto en la curva. Tomamos el punto base G y aplicamos el número escalar para llegar a un nuevo punto en la curva al “estirar” ese punto.
El número escalar que aplicamos al punto base es nuestra clave privada; en pocas palabras, tomamos nuestro punto de partida G y lo multiplicamos escalarmente por nuestra clave privada para obtener nuestra clave pública.
En realidad, dado que la curva está definida sobre el campo primo ℤp, parece más bien un montón de puntos dispersos... pero todavía tiene las mismas propiedades de la curva elíptica.
Al final de este proceso de multiplicación escalar (saltando alrededor del número de
Las claves públicas, como su nombre indica, se pueden compartir públicamente con cualquier persona. Son útiles para:
Las billeteras son un componente esencial de las blockchains que utilizan criptografía de curva elíptica para permitir a los usuarios enviar transacciones y firmar mensajes desde sus cuentas.
Sin embargo, algunas blockchains como Abstract también admiten nuevos tipos de billeteras, llamadas cuentas de contratos inteligentes, que brindan más funcionalidades y permiten una seguridad más fuerte, mecanismos de recuperación y más.
Este artículo ha sido reimpreso de [https://abs.xyz/blog], Reenviar el título original '¿Qué es una billetera?', Todos los derechos de autor pertenecen al autor original [Jarrod Watts]. Si hay objeciones a esta reimpresión, por favor contactar alAprendizaje de Gateel equipo y ellos lo manejarán rápidamente.
Renuncia de responsabilidad: Las opiniones y puntos de vista expresados en este artículo son exclusivamente los del autor y no constituyen ningún consejo de inversión.
Las traducciones del artículo a otros idiomas son realizadas por el equipo de Gate Learn. A menos que se indique lo contrario, está prohibido copiar, distribuir o plagiar los artículos traducidos.