Por anónimo

Lectura previa recomendada:

El otro día me encontré con un nuevo SPC que me consiguió fastidiar un poquito. Su rendimiento me indicó que en unos 2376 años aproximadamente habría podido probar a fuerza bruta una clave de 8GB, así que tomé la determinación de usar 16GB, pero no contento con que el tiempo sea de 5645376 años, decidí cambiar de idea y no usar sólo 16GB de clave, sino más bien 32GB, así que en ese nuevo SPC, probar todas las combinaciones le llevaría 31870270181376 años.

Sé que TrueCrypt usa sólo el primer mega, pero no hablo de eso:

Quien use un esquema basado sólo en un encriptador lo hace mal, antes o después puede encontrarse un fallo al algoritmo de encriptación o romperlo de alguna manera, por muy irrompible que ahora parezca.

Lo que jamás nadie podrá romper es el algoritmo maestro, el que cifra cada bit con su homónimo de clave y por cada bit de dato hay un bit único de clave, vamos que un bit de clave se usa una sola vez, para un sólo bit de dato y hay tantos o más bits de clave que de datos...

En concreto pongo un ejemplo muy simple (básico):

* Primero encriptamos todo el disco con TrueCrypt, la clave basada en varios archivos y en tener que teclear una passphrase. Montamos dicho disco encriptado para tener acceso a él.

* Luego en él metemos algún archivo de Pismo, con su correspondiente encriptación y lo montamos como carpeta virtual.

* Por último y como método de por si seguro al 110%, ponemos un archivo encriptado "LLP".

Paso a explicar por encima mi encriptación, la que llamo LLP (mis iniciales):

- Imaginemos que tenemos un fichero comprimido 7z, para ocultar la estructura de directorios y archivos además de comprimir.

- Imaginemos ahora que dicho fichero es de X bytes de tamaño.

- Pues bien creamos una clave única para él que consta de X bytes; sí, el mismo tamaño que el archivo comprimido.

- Dicha clave la tendremos siempre a buen recaudo: seguridad física de nivel militar o similar.

- Con dicha clave hacemos byte a byte un simple XOR entre el archivo 7z y la clave.

- Ese archivo resultante es el que meteríamos en el Pismo, dentro del disco encriptado por TrueCrypt.

De esta manera si se pierde el PenDrive, jamás y repito, jamás nadie por mucha CPU que disponga y por mucho tiempo que tenga podrá desencriptarlo.

Paso a explicar por qué:

- Imaginemos que es capaz de romper la criptografía de TrueCrypt, difícil pero con un SPC grande quizás no tanto, al fin y al cabo son pocos bits de clave y pocos algoritmos a probar.

- Imaginemos también que consigue romper la clave del archivo Pismo.

- Lo que se encuentra es un archivo que no reconocerá (recordemos que es un 7z pero cifrado con un XOR byte a byte con una clave de igual longitud).

- Bien ahora biene la parte buena, aunque tenga un SPC todo lo grande que quiera, no le queda más remedio que probar con todas las posibles claves.

- Esto dará lugar a que se generen tantos archivos supuestamente descifrados como 2 elevado al número de bits que forman la clave, lo que es igual a 8*el número de bytes, que como es la longitud del archivo ... En definitiva, tendrá como resultado todos y cada uno de los posibles archivos que se pueden formar con esa longitud, pero claro ¿cuál era el bueno? No lo podrá saber jamás. ¿Por qué? un ejemplo lo explicará mejor:

Imaginemos que el archivo es de Xbytes de longitud, luego es de 8*X bits de longitud, si probamos la funcion XOR, veremos que si tengo una sequencia de 8*X bits y aplicamos una clave de 8*X bits obtenemos un resultado de 8*X bits de longitud, obvio el XOR no hace más que cambiar el valor de los bits, no la cantidad que hay.

Bien, al tener que probar todas las posibles claves, se puede demostrar que independientemente de los datos encriptados salen todas las posibles combinaciones, por lo que es más rápido generar todas las posibles secuencias, que andar descifrando.

Ejemplo con 3 bits, para no hacerlo muy largo, es extensible a tanto bits como queráis:

ABC -> Dato en claro (cada letra es un bit del que no digo su valor)
XYZ -> Clave usada (cada letra es un bit del que no digo su valor)

Resultado: A xor X, B xor Y, C xor Z -> *+·

Posibles claves usadas, 2 elevado a 3 = 8 posibles claves:
000, 001, 010, 011, 100, 101, 110, 111

Recordemos *+· es el dato encriptado, intentemos desencriptarlo con cada clave:

Si la clave suese 000, el resultado de dato encriptado XOR clave (000) da:
000 -> 000, 001 -> 001, 010 -> 010, 011 -> 011, etc...
Obtenemos todas las posibles combinaciones de tres bits si la clave original fuese 000

Si la clave suese 001, el resultado de dato encriptado XOR clave (000) da:
000 -> 001, 001 -> 000, 010 -> 011, 011 -> 010, etc...
Obtenemos todas las posibles combinaciones de tres bits si la clave original fuese 000

Y así sucesivamente, de forma que sin conocer el dato original ni la clave, lo que obtenemos es que son posibles todas las combinaciones de bits.

Este método no hay quien lo rompa, es matemáticas, si tienes que desencriptar un archivo de N bytes, tendrás que adivinar cuál de entre todos los posibles de N bytes es.

Lo explicaré de otra forma, a ver si queda claro: Si para un mismo archivo en claro usas cada una de las claves posibles (son 2 elevado a 8*número de bytes de la longitud del archivo) obtendras tantos archivos diferentes como 2 elevado a 8*número de bytes de la longitud del archivo, vamos tantos resultados diferentes como claves posibles, en otras palabras, con que no sepas un bit de la clave, no podrás saber cuál es el dato original, tendrás dudas.

Ejemplo: Si te falta sólo por conocer un bit de la clave (milagro que te has conseguido hacer con el resto) tendrás dos dudas, vamos habrá sólo dos posibles datos en claro, cuál será? bien como era comprimido por 7z el que no falle al descomprimir; si te faltan dos bits de clave, tendrás cuatro posibilidades, si te faltan 3 tendrás 8, etc... si te falan todos tendrás tantos como posibles archivos diferentes se pueden generar con esa longitud.

Bien al ser comprimido por 7z y saber que es así, se restringe la búsqueda, pero para qué buscar la clave, si al final obtendrás todos los posibles archivos 7z que se puedan generar con esa longitud. Lo que jamás sabrás es cuál de entre todos ellos es.

Ahora imagina que el archivo (sin comprimir) es de 8GB, que encima no das indicios de si lo comprimiste o no, no hay indicios de qué tipo de información puede haber, ...

Imagina que lo encriptas con tu clave de 8GB, cada bit de dato con su omónimo de clave, ues bien la cantidad de posibles archivos resultantes es de 2^68719476736, claramente no hay partículas suficientes en el universo conocido para poder representar el resultado de dicho valor en decimal.

Con esto quiero decir que si algo se quiere esconder bien, se puede. Nadie jamás podrá saber cuál de los posibles es.

¿Que alguien sigue sin creerselo?, que haga la prueba:

Generar un número al azar de ocho bits binarios (un byte) -> DatoEnClaro.
Generar las 256 posibles claves.
Generar los 256 de resultados: DatoEnClaro XOR clave.

Ahora prestad atención al set de resultados, veréis que contiene todos los números del 0 al 255, es puras matemáticas. Da igual que valor tenga el dato, se le está modificando de todas las formas posibles, luego se generan todos los posibles valores.

El usar TrueCrypt y Pismo simplemente es para que el que intente desencriptarlo crea que lo ha logrado y se frustre al ver que cada vez encuentra una nueva criptografía, al final con lo que dará es con una imposible de romper y verá que el tiempo que ha invertido lo ha tirado a la basura, más le habría valido contratar a un adivino. De este modo se ve tan frustrado que le dará por volverse loco.

Por ende, este método es tan bueno y seguro, que ni tan siquiera esos ataques de fuerza bruta física podrán hacer nada, la clave está a buen recaudo en una zona segura, seguridad militar o similar, pro ejemplo en una zona en la que es imposible que entren más de una persona a la vez, que se entre con micros, sistemas de escucha, etc... y que dispone de los medios necesarios para garantizar la seguridad física del que esté dentro durante años, bunquer o similar, ... además de disponer de los medios necesarios para delatar a los captores, por si ha secuestrado a un familiar, etc...

Lo que se debe es dejar muy claro a los captores que te intenten hacer darles es dato en claro, que ni tan siquiera tú mismo podrías obtener ese dato en claro fuera del área segura.

Obviamente la pega es la necesidad de los medios físicos necesarios, aparte de una gran capacidad de almacenamiento.

Ahora bien con 500GB en un HDD de 3.5" USB que se venden por unos 100 euros, te da para unas 62 claves de 8GB. vamos que proteger la información apenas cuesta, otro disco duro más y otras tantas claves. Eso sí, jamás uses una clave más de una vez y nunca tengas la clave y el dato encriptado juntos fuera del área segura.

Se que a nivel doméstico es pasarse un montón o mucho más, pero más seguro no es posible. Es el TOP de seguridad.

Ahora por contra los criptoanalistas lo que están intentando es el lado opuesto, en lugar de usar claves enormes y algorítmos ultra-rápidos, usan algoritmos ultra-lentos y claves ultra-pequeñas, intentando garantizar la seguridad del método usado.

Bien imaginad que usáis uno de esos algoritmos de 4096 bits de clave, si disponéis de 2^4096 ordenadores (núcleos en un SPC), tan sólo llevará el tiempo de una prueba el probar todas las combinaciones posibles. La potencia de cálculo está aumentando mucho, y el tamaño de los núcleos de procesamientos disminuyendo una barvaridad, más aún cuando se termine de implementar los nanoprocesadores, que podremos llevar un SPC en la muñeca. Esto lleva a que 4096 bits de clave se puedan probar a fuerza bruta en unos pocos segundos, actualmente hay un SPC capaz de probar todas las combinaciones de 32768 bits en tan sólo un segundo, eso bienen a ser frases de 4096 letras/byes, si pensais que con 20 estais a salvo...!

Pobre gente la que piense que con unos pocos bytes de clave está a salvo... Lo que asegura que el método por fuerza bruta tampoco sirva es que la cantidad de posibles resultados desencriptados aparentemente coherentes sean tan alta que la probabilidad de acertar con el correcto sean infima.

Suerte y al toro!

Relacionada: