Destrucción Controlada. Tus archivos, sólo para ti.

Si queremos alojar algún archivo en la red, si alguien se lo descarga tendrá un tiempo ilimitado para poder hackear su cifrado.
Si el archivo es de nuestra propiedad, no solo lo podemos proteger con un cifrado estandar aes256 (o similar), sino que para aumentar dramáticamente su nivel de cifrado de forma muy sencilla. Usando estos dos métodos no tendremos nada que envidiar, a los niveles de encriptación militar.
Este método es para archivos privados donde no transmitiremos nuestra clave a nadie, ya que no es necesario.
La fortaleza de este método se basa, en romper una de las leyes del  cifrado,  una clave una sola solución. En nuestro caso haremos una clave con millones de millones de soluciones y además crearemos una clave, no de 128 bits, no de 256 bits, no de 512 bits sino de varios Kb o Megas. (Por que tu lo vales)

Consideraciones Importantes:

También es aconsejable si el archivo esta expuesto, usar un cifrado simétrico previo, consiguiendo así algo muy, muy desagradable de crackear.

El programa posterior leer archivos de modo binario, por lo que a pesar de ser imágenes en el ejemplo, en la realidad sirve para cualquier tipo de archivos.

Por último, para aumentar la seguridad al absurdo, no se debe usar siempre el mismo archivo de cifrado, han de ser parejas monogámicas. Quiero decir que cada archivo tendrá su pareja de cifrado única, impidiendo el posterior análisis criptográfico si subimos un numero grande de archivos con el mismo cifrado.

En el ejemplo hay una condición para simplificar el código y que sea más fácil de entender, El archivo de cifrado ha de ser mayor que el que se cifra. Con un par de lineas adicionales esta limitación desaparecería.

En el siguiente vídeo probaré el programa de ejemplo, para la imagen del logo de Antergos y posteriormente con un archivo cifrado mediante aescrypt. El código lo podéis modificar para vuestra conveniencia y recordar cuanto más aleatorio es el archivo de cifrado mas cerca del imposible esta su descifrado.

Ejemplo de cifrado/decifrado con Imágenes.

Ingredientes para la destrucción controlada:

  • Archivo a cifrar.
  • Archivo para cifrado de mayor tamaño al anterior.
  • Programa de cifrado y descifrado.

El ejemplo sera muy sencillo, lo mostraremos para una imagen,  que es más visual e intuitivo. Pero lo ideal es cifrar el archivo primero por un cifrado simétrico estándar y luego añadir muestra capa de destrucción controlada.

  • Archivo Foto.jpg, archivo Original en mi caso usare una de Antergos mi S.O.
    Foto.jpg
    Foto.jpg

     

  • Archivo para cifrar FotoKey.jpg
FotoKey.png
FotoKey.png

 

  • Programa Cifrado/descifrado.(Al usar XOR es prácticamente lo mismo)
#include<iostream>
#include<fstream>
using namespace std;
// El programa encripta origen mediante cifrado XOR con origen2
// origen 2 debe ser mayor que origen en esta versión
// El resultado se escribirá en destinoint
main(){// Abrimos los ficheros origen y origen2 en modo lectura
// Abrimos destino en modo estritura
// puedes cambiar Foto.jpg , FotoKey.png, CopiaSegura.jpg por los que tu quieras
ifstream origen(“Foto.jpg”,ios::binary);
ifstream origen2(“FotoKey.png”, ios::binary);
ofstream destino(“CopiaSegura.jpg”,ios::binary);
// Defino las Variables Byte (origen) key(origen2)
// a,b,c se usarán para el cálculo XOR
char byte;
char key;
int a,b,c;
// Creamos un bucle para la lectura de datos
while( !origen.eof() && !origen.fail() && !origen2.eof() && !origen2.fail()){
origen.read((char *) & byte, sizeof(char));
origen2.read((char *) & key, sizeof(char));
if (origen.good()){
//Creo la máscara con XOR
a = int(byte);
b = int(key);
c = a ^ b ;
byte = char(c);
// Escribimos en el archivo de salida
destino.write((char *) & byte, sizeof(char));
}
}
// Cerramos los tres archivos
destino.close();
origen2.close();
origen.close();
return 0;
}

 

El programa esta en C++, para compilarlo y ejecutarlo desde el terminal:

 

[nukebull ]$ c++ -o CifradoXOR CifradoBinario.cpp
[nukebull]$ chmod +x CifradoXOR
[nukebull]$ ./CifradoXOR

 

Para descifrar es el mismo programa cambiando [Foto.jpg por CopiaSegura.jpg ) y (CopiaSegura.jpg por CopiaDescifrada.jpg), FotoKey.png no se altera

 

#include<iostream>
#include<fstream>
using namespace std;
// El programa encripta origen mediante cifrado XOR con origen2
// origen 2 debe ser mayor que origen en esta versión
// El resultado se escribirá en destino
int main(){
// Abrimos los ficheros origen y origen2 en modo lectura
// Abrimos destino en modo estritura
// puedes cambiar Foto.jpg , FotoKey.png, CopiaSegura.jpg por los que tu quieras
ifstream origen(“CopiaSegura.jpg”,ios::binary);
ifstream origen2(“FotoKey.png”, ios::binary);
ofstream destino(“CopiaDescifrada.jpg”,ios::binary);
// Defino las Variables Byte (origen) key(origen2)
// a,b,c se usarán para el cálculo XOR
char byte;
char key;
int a,b,c;
// Creamos un bucle para la lectura de datos
while( !origen.eof() && !origen.fail() && !origen2.eof() && !origen2.fail()){
origen.read((char *) & byte, sizeof(char));
origen2.read((char *) & key, sizeof(char));
if (origen.good()){
//Creo la máscara con XOR
a = int(byte);
b = int(key);
c = a ^ b ;
byte = char(c);
// Escribimos en el archivo de salida
destino.write((char *) & byte, sizeof(char));
}
}
// Cerramos los tres archivos
destino.close();
origen2.close();
origen.close();
return 0;
}

 

El programa esta en C++, para compilarlo y ejecutarlo desde el terminal:

 

[nukebull ]$ c++ -o CifradoXORInv CifradoBinarioInverso.cpp
[nukebull]$ chmod +x CifradoXORInv
[nukebull]$ ./CifradoXORInv

 

Programa

Conclusión.

Usar esta segunda capa de cifrado produce una destrucción de los datos del programa, si el original estaba cifrado, reconstruirlo es prácticamente imposible. Para archivos sensibles que estén expuestos es ideal, ya que el criptoanálisis que le pudieran hacer, se lo hacen a un archivo incompleto del que no saben que tipo de cifrado se ha usado o con que  programa se ha encriptado.

El código se puede mejorar pidiendo los archivos desde consola, o añadiendo algún tipo de GUI. Pero en lo básico seguirá siendo similar.

Espero que les sirva de ayuda y deja un comentario si deseas alguna aclaración. Gracias

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s