480 / 7362^N

Brute Force Search Space

Espacio de búsqueda por fuerza bruta

¿Cuánto se tardaría en adivinar el secreto de una cartera? La longitud de una contraseña o clave no basta para responder. Importa qué posibilidades son reales y cuánto trabajo exige comprobar cada una.

Brute Force Search Space es el conjunto de posibilidades que se pueden probar al intentar adivinar un secreto. Imagina que olvidaste la contraseña de tu propia copia cifrada: cada intento es un candidato y necesitas saber si la desbloqueó correctamente. Cuantas más posibilidades igualmente probables haya y más costosa sea su comprobación, más difícil suele ser la búsqueda. En una cartera real, primero hay que precisar qué se está buscando.

La contraseña de una copia, la clave privada que permite gastar bitcoins y la entrada del generador que creó esa clave son cosas distintas. Cambian tanto los candidatos como la forma de comprobarlos. Si un generador defectuoso elegía entre pocas entradas, la búsqueda puede ser más fácil de lo que sugiere la longitud de la clave resultante. El atacante puede probar esas entradas limitadas sin recorrer todas las claves matemáticamente posibles. Antes de contar posibilidades, hay que entender cómo nació el secreto. [1] [3]

Imaginemos 16 posibilidades igualmente probables y una sola respuesta correcta. Las comprobamos por orden, sin repetir ninguna. A veces acertamos pronto y otras al final; la media es de 8,5 intentos comprobados. Para un número general N, la relación es E = (N+1)/2. A una velocidad constante de 2 intentos por segundo, son 4,25 segundos de media. La fracción de intento corresponde al promedio, no a una búsqueda concreta. Es una explicación sencilla, no una medición del tiempo de recuperación de una cartera Bitcoin. [1]

Las palabras favoritas, los nombres y los patrones fáciles de recordar se repiten más que las combinaciones aleatorias. Por eso un atacante puede empezar por los candidatos más probables. Un generador defectuoso que favorece ciertos resultados crea un problema parecido. La media del ejemplo anterior deja de ser aplicable. La min-entropía describe la probabilidad del mejor primer intento, pero no determina por sí sola el trabajo total ni garantiza cuándo se acertará. Contar posibilidades sin conocer sus probabilidades deja la explicación incompleta. [1] [2]

Comprobar una contraseña puede requerir tiempo. PBKDF2 es una función que deriva una clave a partir de una contraseña y otras entradas; repite cálculos para aumentar el trabajo necesario por intento. Otra entrada es el salt, normalmente un dato público que distingue las derivaciones. Con salts distintos no se puede reutilizar sin más la misma tabla de resultados precalculados. El salt no es otra contraseña secreta ni sustituye una entrada robusta. Para estimar la velocidad hay que conocer la función concreta, su configuración y el hardware. [3]

BIP39 convierte las palabras de recuperación y una passphrase opcional, una contraseña adicional, en una seed: el valor secreto inicial del que se derivan las claves. Utiliza PBKDF2 con HMAC-SHA512 como función interna y 2048 iteraciones, es decir, repeticiones, para producir una seed de 512 bits. Aquí el parámetro salt es el texto «mnemonic» seguido de la passphrase; el secreto adicional lo aporta la propia passphrase. Cualquier passphrase produce una seed válida, así que la suma de comprobación de las palabras no confirma que hayas introducido la correcta. Al recuperar tu propia cartera puedes reconocerla, por ejemplo, mediante una dirección conocida y la configuración correcta de derivación de claves. Un resultado largo no convierte una contraseña débil en una fuerte. [4]

Algunos métodos matemáticos hacen algo más que probar valores uno tras otro. En la criptografía de curva elíptica (ECC), una clave privada permite calcular una pública; recorrer el camino inverso para hallar el valor privado es la difícil tarea llamada problema del logaritmo discreto. SEC 2 describe los parámetros de secp256k1, la curva de Bitcoin. Contar todas las cadenas de 256 bits no contempla, por tanto, todas las vías de ataque. NIST SP 800-57 distingue la longitud de clave de la fortaleza de seguridad: el esfuerzo estimado para romper la protección bajo ciertos supuestos. Que exista una vía matemática no significa que resulte fácil en la práctica. [5] [6]

Varios procesadores pueden repartirse intentos independientes, pero la mejora también depende de la memoria y de cómo se organice el cálculo. El hashrate minero mide cálculos de minería, no el rendimiento de PBKDF2 ni las operaciones ECC. También hay que distinguir el acceso a una web de una copia de seguridad. Un servicio puede limitar el acceso tras varios fallos. Quien consiga una copia del archivo cifrado, en cambio, puede comprobar candidatos sin conexión en su propio equipo. Los límites de acceso de la web no detienen por sí solos esos intentos. [3] [6]

Quien obtiene la seed completa no necesita recorrer un espacio enorme de posibilidades. El software malicioso o un fallo del programa que maneja las claves puede lograr lo mismo. La seguridad no termina al elegir un secreto impredecible: también importan su almacenamiento y uso. Ante una afirmación sobre el tiempo de descifrado, pregunta qué ataque supone, qué sabe ya el atacante y cómo se midió la velocidad. Una cifra grande no garantiza la seguridad de un dispositivo, ni este modelo promete recuperar una cartera perdida. [6]

Para obtener la imagen más completa, lee esta entrada junto con Cryptographic Entropy, Entropy Bit, Private Key, Seed Phrase. También enlazan con esta entrada Entropy Bit, Random Number Generator.

DOC · 001RFC 4086 — Secret distributions and guessingEspecificación DOC · 002NIST SP 800-90B — Min-entropy and guessing costEspecificación DOC · 003RFC 8018 — Salt, derivation cost and offline searchEspecificación DOC · 004BIP39 — Passphrase derivation and valid seedsEspecificación DOC · 005SEC 2 v2 — secp256k1 parametersEspecificación DOC · 006NIST SP 800-57 Part 1 Rev. 5 — Security strength and key protectionEspecificación
Revisado: Fuentes primero · No es asesoramiento financiero