Saltar al contenido

Frase mnemónica, ¿12 o 24 palabras?

Tiempo de lectura aprox: 4 minutos, 5 segundos

En muchas ocasiones, debido a que se ha convertido en el estándar que utilizan la mayoría de las wallets, nos preguntamos si son necesarias 24 palabras para generar la semilla de nuestra wallet o si con 12 es suficiente. La respuesta corta es que 12 palabras son suficientes. La respuesta larga, a continuación.

Seguridad criptográfica en bitcoin

De forma intuitiva, asumimos que una frase mnemónica más larga nos va a proporcionar mayor seguridad a la hora de generar nuestra semilla. Sin embargo, no existe un beneficio real por encima de 12 palabras. Para demostrarlo tenemos que entender cómo funciona la criptografía en bitcoin.

Bitcoin utiliza la denominada criptografía asimétrica o de clave pública. Esto quiere decir que el usuario cuenta con un par de llaves, privada y pública. La llave privada es un número aleatorio muy largo, entre 1 y 2²⁵⁶, esto es, un número de 256 bits. La clave pública se deriva a partir de ésta, utilizando criptografía de curva elíptica, ECDSA, en el caso de bitcoin la curva empleada es secp256k1, de 256 bits. La operación de generación de la clave pública es irreversible, o lo que es lo mismo, no se puede obtener la clave privada a partir de la clave pública.

Para hacerse una idea del tamaño del espacio de 256 bits, 2²⁵⁶ es:

115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.913.129.639.936.

Este valor es similar al número de átomos en el universo observable.

Fuente: https://www.flickr.com/photos/embajadaeeuu-chile/6988021563

Representada en formato hexadecimal, una clave privada tiene el siguiente aspecto:

3aba4162c7251c891207b747840551a71939b0de081f85c4e44cf7c13e41daa601

En lugar de memorizar la clave privada como tal, la propuesta de mejora de bitcoin BIP39 introdujo en 2013 lo que se conoce como frase mnemónica. La frase mnemónica no es más que un subconjunto de palabras escogidas de un conjunto de 2048 palabras, a partir de las cuales se deriva la semilla y de ésta la clave privada maestra extendida.

Así, una frase mnemónica de 12 palabras se vería como:

tattoo various away despair aware mercy recycle permit deal insane shift mango

Mientras que 12 palabras proporcionan 128 bits de entropía, 24 palabras proporcionan 256 bits. Entonces, ¿por que se afirma al principio del artículo que 12 palabras son suficientes? Para responder a esto, hay que entender que hay dos formas de tratar de llegar a descubrir una clave privada. Una de ellas es tratar de llegar a la clave privada a partir de una clave pública. La otra es tratar de adivinar las palabras de la frase mnemónica.

Primer ataque: clave privada de una dirección

El primer ataque no busca atacar la semilla o clave privada maestra extendida, sino que se busca atacar una dirección o su clave pública correspondiente, la cual se expone al hacer un gasto.

Para entender esto, vamos vamos a ver el proceso que se sigue desde la entropía hasta hasta llegar a las direcciones, descendiendo en la ruta de derivación. Para ello, partimos de 128 bits de entropía y 4 bits de checksum, los cuales, divididos en bloques de 11 bits forman la frase mnemónica de 12 palabras. A esta frase mnemónica se le aplica el algoritmo PBKDF2 (2048 rondas del hash HMAC-SHA512), obteniendo así una semilla de 512 bits.

Generación de la semilla a partir de 128 bits de entropía

A partir de la semilla, tomando los 256 bits izquierdos se genera la clave privada maestra y con los 256 bits derechos el código de cadena maestro. Así, combinando ambos, se genera la clave privada maestra extendida:

Clave privada maestra extendida a partir de la semilla

Finalmente, a partir de la clave privada maestra extendida y siguiendo la derivación jerárquica descrita en BIP44, BIP49 o BIP84, se generan las direcciones de recepción y cambio, con sus pares de claves privadas y públicas correspondientes:

Derivación de direcciones a partir de la clave privada maestra extendida

Como se ha mencionado anteriormente, bitcoin utiliza la curva elíptica secp256k1, con llaves de 256 bits. Pues bien, una ECDSA de n bits proporciona n/2 bits de seguridad, o lo que es lo mismo, la curva secp256k1 proporciona 128 bits de seguridad. Por lo que, un observador de la cadena de bloques puede buscar una dirección de la que se haya realizado un gasto (revelando su clave pública) pero que aún contenga fondos considerables, y tratar de resolver el problema de logaritmo discreto (ECDLP) para llegar a su clave privada correspondiente y gastar los fondos. Para ello, el atacante tendría que realizar 2¹²⁸, o lo que es lo mismo, 340.282.366.920.938.463.463.374.607.431.768.211.456 operaciones.

Para entender la escala de este número, vamos a realizar unos cálculos rápidos. La red de minería de bitcoin es capaz de realizar alrededor de 350×10¹⁸ hashes por segundo (350EH/s), que son 2,31×10³², o aproximadamente 2¹⁰⁸ hashes al año. Para realizar 2¹²⁸ operaciones necesitaría 2²⁰ años, esto es, alrededor de 1 millon de años. Por ello, puede decirse, que la criptografía de bitcoin es segura.

Segundo ataque: frase mnemónica

El segundo ataque buscaría llegar a la clave privada maestra extendida. Para ello, el atacante tendría que acertar, por fuerza bruta, todas palabras de la frase mnemónica (vamos a obviar la passphrase por simplificar) que dan lugar a la semilla que genera esta clave. Teniendo en cuenta que la lista de palabras es de 2048 y tomando una frase mnemónica de 12 palabras, tendríamos 2048¹² combinaciones posibles, de las cuales algunas pueden descartarse, ya que no proporcionan el checksum correcto, llegando a 2¹²⁸ combinaciones posibles, o como hemos descrito anteriormente, 128 bits de entropía.

Como puede verse, es el mismo número de operaciones que en el primer ataque, por lo que el nivel de seguridad es equivalente. Por ello, utilizar 24 palabras se considera redundante, ya que, aunque proporciona el doble de seguridad que el uso de 12 palabras, el cuello de botella sigue siendo la curva secp256k1, que es el objetivo del primer ataque descrito. Además, a mayor número de palabras a escribir y almacenar, mayor es la probabilidad de cometer un error humano. En definitiva, 12 palabras serían lo óptimo desde el punto de vista práctico y de seguridad.

¿Por qué se utilizan 24 palabras normalmente?

Entonces, ¿por qué la mayoría de las wallets utilizar 24 palabras como estándar?

Al parecer, la clave esta en un problema que tuvo Trezor allá por 2015 como muestran esta respuesta y esta otra en un hilo de Reddit en el que el OP precisamente preguntaba sobre la necesidad de utilizar 12 o 24 palabras para la frase menmónica.

Como explican las respuestas citadas, Trezor One requería introducir las palabras en el ordenador para recuperar una semilla, lo cual no es seguro. Para evitar posibles ataques de keylogging, se pedía al usuario introducir las palabras en orden aleatorio. Con 12 palabras, un posible atacante con acceso a la lectura del teclado de usuario, tendría que testear 12! o 479.001.600 permutaciones, algo trivial para un atacante con el equipo adecuado. Al duplicar el número de palabras de la frase mnemónica, el número de permutaciones pasa a 24! o 620.448.401.733.239.439.360.000, haciendo así el ataque muchísimo más costoso.

Conclusiones

En resumen, aunque 24 palabras tienen mejor seguridad que 12 desde el punto de vista de protección de la llave privada maestra extendida, un atacante buscará el eslabón más débil de la cadena, que en este caso sería la clave privada de una dirección dada, la cual tiene un nivel de seguridad equivalente al que proporciona una frase mnemónica de 12 palabras.

Por lo tanto, cuando vayas a crear una nueva semilla para tus fondos, sigue el principio KISS y utiliza 12 palabras. 12 palabras son suficientes.

You don’t need 24. Just do 12.

Andreas Antonopoulos