Imprimir esta página
Lunes, 11 Abril 2022 00:00

Cifrado simétrico de Vernam Aplicado a cualquier tipo de archivo

M.Sc.Hebner Mario Olmos Cárdenas 

RNI.96626 

591-76163116 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. 

Abstract. In this article, describes the aplicatión of the Vernam’s encryption, based on this algorithm used an key pseudo-random, to encrypt or decipher any type of file, applying the Object Pascal programming language, is possible show the algorithm operation for didactic pourposes. 

Keywords :PSeudo-random,encrypt,Object Pascal.

Resumen 

Este artículo, es un trabajo que presenta los resultados obtenidos de la implementación del método de cifrado de Vernam, correspondiente a criptografía – tipos y criptografía aplicada. La aplicación de esta investigación arrojó como resultado el cifrado y descifrado de cualquier tipo de archivo, sujeto al lenguaje de programación Objetct Pascal bajo el entorno del Lenguaje Delphi; se implementó un programa que sea capaz de cifrar un archivo y descifrarlo, en base a una clave pseudoaleatoria, de esta manera es posible demostrar dos resultados: por un lado, la vulnerabilidad de la seguridad de los archivos en el sistema operativo y por otro que es concerniente a esta investigación, la aplicación del método Vernam, por medio del programa en ejecución realiza su objetivo, cabe aclarar que este trabajo de investigación, va con fines pedagógicos. 

Palabras.Clave:Pseudoaleatorio,Cifrado,Object Pascal 

1 Antecedente 

En 1917 Gilbert S. Vernam, nativo de Broklyn e ingeniero del MIT, trabajaba en los laboratorios de AT&T, diseñó un dispositivo criptográfico para comunicaciones telegráficas basado en los 32 códigos Baudot de los teletipos desarrollados por su compañía. Los códigos Baudot representan los caracteres del lenguaje con cinco elementos que pueden ser el espacio o la marca( el cero y el uno) diseñado para transmisiones telegráficas. Este cifrador, que tuvo una gran aplicación durante la primera guerra mundial, basa su seguridad en el secreto de una clave aleatoria que se supone tan larga como el mensaje y que luego de usarse debería destruirse. Cada carácter M, se representa con 5 bits en código Baudot que suma OR exclusivo con la correspondiente clave ki de una secuencia binaria aleatoria. De esta forma, el cifrador de Vernam genera un flujo de bits de texto cifrado[1].  

Para la operación de descifrado se utiliza el mismo algoritmo por la propiedad involutiva de la operación OR exclusivo : 

2 Problema  

Con la finalidad de realizar pruebas en base a esta técnica de cifrado Vernam, se logró desarrollar un programa a manera de romper la seguridad en el acceso de los archivos, bajo el sistema operativo Windows, dando a lugar la vulnerabilidad de los archivos a la exposición de un programa capaz de cifrarlos y descifrarlos, poniendo a prueba el cifrado de Vernam. Una semejanza en la operatividad a esta investigación, es el conocido malware: “secuestro de datos” o Rasomware, que restringe el acceso a los archivos solicitando un rescate a cambio de quitar la restricción[2].    

Según el preámbulo el problema se determina con la siguiente interpelación. 

¿Cuál es la manera de implementar el cifrado simétrico de Vernam, para vulnerar el acceso a un archivo común, aplicando el lenguaje de programación Object Pascal? 

3 Objetivo  

Comprobar el cifrado simétrico de Vernam para, vulnerar el acceso de un archivo común, aplicando el lenguaje de programación Object Pascal.  

4 Métodos  

Una herramienta importante para alcanzar el objetivo, es  por medio del lenguaje de programación object Pascal de Delphi2. 

De esta manera se diseñó el programa, empleando el desarrollo de aplicaciones rápidas “RAD”3, para obtener una interfaz adecuada.  

5 Desarrollo  

El código se basa principalmente en el cifrado de Vernam, considerando: 

  • Un array de tipo byte con un tamaño de 4096 K, para el tamaño del archivo. 
  • Un archivo Origen, para obtener su contenido  bit a bit, y un archivo Destino para complementar con el cifrado o descifrado. 
  • Una CLAVE pseudoaleatoria, que asegura el conjunto de números aleatorios que se utilizan en ese rango de 232 números pseudoaleatorios, para codificar o decodificar en binario a partir de los 256 carateres del código ASCII. 

Los Pasos a determinarse en el algoritmo son: 

  1. Apertura y lectura de un archivo 
  2. Cargar al Buffer(Array de tipo byte) el conjunto de caracteres correspondientes del archivo. 
  3. Calcular en el proceso repetitivo hasta el tamaño del archivo, en base a la tabla lógica: Tabla 1: Tabla lógica XOR 

    A XOR B 

  4. Obtener en base a la operación XOR, en el Buffer los caracteres codificados o decodificados correspondientes al rango de la clave pseudoaleatoria, dentro de las estructuras repetitivas. 

  5. Escribir el archivo cifrado o descifrado. 

6. Experimentos 

La interfaz comprende tres botones importantes (Abrir, Cifrar y Descifrar); y un grupo de etiquetas para mostrar las propiedades del archivo e información relevante: 

Imagen 1. GUI principal. 

 

6.1 Lectura y cifrado del archivo 

Archivo de texto Prueba1.txt, mostrando el contenido antes de cifrarlo.  

 

Imagen 2 .Archivo abierto con Bloc de notas

Archivo de texto Prueba1 cifrado.4 

 

Imagen 3 .Archivo cifrado, abierto con Bloc de notas 

Experimento con un archivo ImagenPrueba.png, mostrando en el visualizador de Windows. 

Archivo ImagenPrueba.png cifrado, mostrando con el visor de Windows.

 

Imagen 5 . Archivo cifrado en vista previa.

7. Conclusión 

Al comprender la analogía del  cifrado de Verman e implementarlo de manera correcta en el lenguaje de programación; se puede observar la eficiencia del método, en base a las pruebas el programa puede ser capaz de cifrar sin  importar el tipo de archivo, pues como se opera a nivel de bit, los archivos no pierden contenido y tampoco son susceptibles los metadatos del archivo, pues al descifrarlos vuelven a su contenido original, de esta manera la estructura se mantiene. Si el programa se opera de mala manera es posible cifrar archivos del sistema operativo dañando la estabilidad del S.O por completo, es por ello que el trabajo se orienta, más, de manera didáctica. En este sentido las funciones que corresponden al cifrado y descifrado, respectivamente, se exponen en los apéndices I y II  del presente trabajo. 

Apéndice I  

Código del evento del Botón cifrar, que contiene el código fuente aplicando el cifrado de Vernam. 

procedure TForm1.cifrarClick(Sender: TObject); 

procedure Cifra(Ori,Dest: string; CLAVE:integer);   

{ Ori: Ruta y Nombre del Archivo original   

  Dest: Ruta y Nombre del Archivo encriptado }   

const 

     MAXBUFFER        = 4096;  //4k de buffer;

    var 

     Buffer           : array[1..MAXBUFFER] of byte;     

     Origen, Destino  : TFileStream;     

     n, Leidos        : integer;   

     begin 

     Origen 

    := TFileStream.Create(Ori,fmOpenRead+fmShareDenyWrit

    e); 

     Destino :=TFileStream.Create(Dest,fmCreate); 

     RandSeed:=Clave; 

     try 

       repeat 

         Leidos:=Origen.Read( Buffer[1],MAXBUFFER );         

         for n:=1 to Leidos do begin 

           Buffer[n]:=Buffer[n] XOR Random(256); 

         end; 

         Destino.Write(Buffer[1],Leidos);//Escribiendo el archivo       

         until (Leidos < MAXBUFFER); 

     finally       

        Origen.Free;       

        Destino.Free;     

     end;     

        DeleteFile(ori); 

       RenameFile(RUTA+'V'+NOMBRE,ori); 

     end;

begin 

       //Origen , V-Destino    V Vernam 

   Cifra(Archivo,RUTA+'V'+NOMBRE,CLAVE); 

   LMsg.Caption:='Archivo Cifrado'; 

   Limpiar;

end; 

Apéndice II  

Evento del Botón descifrar, que contiene el código fuente. 

Procedure TForm1.descifrarClick(Sender: TObject); 

   procedure Descifra(NombreCifrado: 

string;CLAVE:integer); 

   type 

     ByteBuffer       = array[0..9999999] of Byte; 

   var 

     PByteBuffer      : ^ByteBuffer;      Origen           : TMemoryStream; 

     n                : integer;    begin 

     Origen:=TMemoryStream.Create; 

     try 

       Origen.LoadFromFile(NombreCifrado); 

       RandSeed:=CLAVE;        PByteBuffer:=Origen.Memory;        for n:=0 to Origen.Size do begin 

      //Decodificando según la clave y cargando al puntero asociado al Buffer 

         PByteBuffer^[n]:=(PByteBuffer^[n] xor 

Random(256)); 

       end; 

       Origen.Seek(0,soFromBeginning);     

    finally     

      Origen.Free;     

    end; 

   end;

   begin 

   Descifra(Archivo,CLAVE);    EncriptarClick(Sender); 

   LMsg.Caption:='Archivo Descifrado'; 

   Limpiar;

end;  

Apéndice III 

Mostrando los archivos: Prueba1.txt e Imagenprueba.png cifrados en el Explorador de archivos, se observa por la presentación previa el archivo de imagen no muestra el contenido como corresponde. 

 

Bibliografía 

  1. Aguirre, J.R. Aplicaciones Criptográficas: Libro Guía de la Asignatura Seguridad Informática. Escuela Universitaria de Informática Universidad Politécnica de Madrid . (Enero 1998), pp.180-182. 
  2. Castellote M. y Ruiz de Angeli G. y Podestá A. y Lamperti S.Ransomware:Seguridad, investigación y tareas foresnses. SID, Simposio Argentino de Informática y Derecho. Universidad FASTA, Ministerio Público de Provincia de Buenos Aires, Argentina.(Noviembre 2017).pp.135-148. 
  3. Introducción a la Programación Object Pascal con RAD Studio Delphi XE, Ofimega Academies.(Septiembre 2019).pp 41-42. 
  4. Hernandez, R., Fernandez, C.,Baptista, M. Metodología de la Investigación. México D.F.Mc Graw Hill.W. 2017. 

El contenido y los conceptos emitidos en los artículos son de exclusiva responsabilidad de sus autores y no necesariamente reflejan la posición de la Sociedad de Ingenieros de Bolivia. 

Utilizamos Cookies para mejorar nuestro sitio web . Al continuar utilizando este sitio web, usted da su consentimiento a las cookies que se utiliza. More details…