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.
Comunicación de proyectos en proceso de licitación proyecto mejoramiento del aeropuerto de Rurrenabaque navegación aérea y aeropuertos bolivianos
Diseño y contrucción del complejo y aprovechamiento de residuos sólidos urbanos para el proyecto "Implementación de gestión integral de los residuos sólidos de El Alto
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:
- Apertura y lectura de un archivo
- Cargar al Buffer(Array de tipo byte) el conjunto de caracteres correspondientes del archivo.
- 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
B
A XOR B
0
0
0
0
1
1
1
0
1
1
1
0
-
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.
-
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
- 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.
- 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.
- Introducción a la Programación Object Pascal con RAD Studio Delphi XE, Ofimega Academies.(Septiembre 2019).pp 41-42.
- Hernandez, R., Fernandez, C.,Baptista, M. Metodología de la Investigación. México D.F.Mc Graw Hill.W. 2017.