Este trabajo se ha centrado en la implementación de un sistema de cifrado llamado Rasterschlüssel 44 (RS-44). Desarrollado por la Wehrmacht alemana durante la Segunda Guerra Mundial, el RS-44 se basaba en un tablero de celdas y se utilizaba para transmitir mensajes de manera segura. La principal motivación fue adaptar este algoritmo histórico al entorno digital utilizando el lenguaje de programación Python. El RS-44, inicialmente creado en el Reino Unido por John H. Tiltman, presentaba muchas similitudes con el sistema utilizado por el ejército alemán posteriormente, el cual lo adoptó para sustituir el cifrado Double Playfair utilizado entre 1941 y 1944. El RS-44 se empezó a utilizar en 1944, además de Alemania, otros países como Países Bajos e Italia comenzaron a utilizarlo. El RS-44 es un algoritmo de cifrado simétrico que utiliza una cuadrícula de 600 celdas (24 filas y 25 columnas). En cada fila, 15 celdas se tachan aleatoriamente, dejando 10 celdas vacías para el mensaje. Las columnas se identifican con números del 1 al 25, y las filas y columnas con bigramas de las letras “a” a “e”. El mensaje se escribe en las celdas vacías de izquierda a derecha y se lee por columnas de arriba a abajo. La celda de inicio y la columna de lectura se eligen al azar, y el destinatario conoce la celda de inicio a través del encabezado del mensaje cifrado, que incluye la hora de cifrado y la longitud del mensaje. El sistema también utiliza sustituciones monoalfabéticas para cifrar topónimos y denominaciones de zonas en lenguas extranjeras. El proceso de cifrado del RS-44 comienza con la selección aleatoria de una celda de inicio. Luego, se determina la clave del mensaje a partir de los bigramas de la primera fila y la última columna que coinciden con la celda de inicio. Esta clave se cifra utilizando una tabla 5×5 y, si es necesario, se cifran los topónimos usando un alfabeto toponímico. A continuación, se redacta el mensaje en las celdas blancas del tablero. Posteriormente, se extrae el mensaje cifrado utilizando la hora del cifrado y el tamaño del mensaje para calcular el desplazamiento inicial, y se ordenan las letras de manera descendente por columnas según el índice numérico. Finalmente, el mensaje cifrado se compone de dos partes: la primera línea con la hora del cifrado, el tamaño del mensaje y la clave cifrada; y la segunda línea con el mensaje cifrado en bloques de cinco letras. El proceso de descifrado del RS-44 requiere un mensaje cifrado completo y la clave utilizada para cifrarlo. Primero, se descifra la celda de inicio utilizando la tabla 5×5 de la clave. Luego, se delimita el tamaño del mensaje en el tablero, mar cando las celdas blancas necesarias según la longitud del mensaje. A continuación, se introduce el mensaje cifrado en el tablero, comenzando desde la celda determinada por el desplazamiento calculado. El orden de las columnas se determina observando los índices numéricos de la segunda fila de la clave. Después, se extrae el mensaje descifrado horizontalmente desde la celda de inicio. Finalmente, se procesa el mensaje descifrado, transformando los signos de puntuación y transcribiendo cualquier abreviatura o notación especial a su forma original. Para la implementación en Python, la generación de claves seguras en el RS-44 utiliza la librería “secrets” para asegurar una aleatoriedad criptográficamente segura de los tres componentes principales: el tablero de celdas, la tabla para cifrar la celda y el alfabeto toponímico. Se permite crear claves originales o personalizadas, con tamaños entre 5×5 y 150×150 filas y columnas. Las celdas se marcan con ‘_’ (blancas) y ‘X’ (negras) para diferenciarlas. La clave se exporta en formato PDF o Excel, incluyendo la fecha de generación y ajustando las celdas según el tamaño del mensaje y la tabla de cifrado. Para el cifrado, se necesita un mensaje y un tablero en formato “.xlsx”, que puede ser introducido manualmente o mediante un archivo “.txt”. La clave “.xlsx” define los límites de las celdas blancas y negras. Luego, se procesa el mensaje y se verifica su tamaño. Si cumple con los límites, se cifra normalmente; si es demasiado grande, se divide en partes que se cifran por separado. La celda de inicio se elige aleatoriamente usando la librería “secrets”, y el mensaje se cifra y se puede mostrar por pantalla o guardar en archivos “.txt”. Para descifrar, se requiere el mensaje cifrado y la clave usada. Se introduce el tablero “.xlsx” y el mensaje cifrado, se descifra la celda de inicio, y el mensaje cifrado se coloca en el tablero y se extrae horizontalmente. Finalmente, el mensaje descifrado puede procesarse usando una clase independiente y se puede mostrar por pantalla o guardar. Para verificar el funcionamiento de los programas, se creó un tester con casos de generación de claves, cifrado, descifrado, preprocesamiento y postprocesamiento de mensajes. Utilizando la técnica de “mocking”, el tester simula comportamientos para evaluar reacciones del sistema. Las pruebas de generación de claves variaron en tamaño, mostrando tiempos de ejecución de 0,5 segundos para claves originales y hasta 10 segundos para claves de 150×150. Las pruebas de preprocesado, cifrado, descifrado y postprocesado se realizaron en un promedio de 0,5 segundos por prueba.
ABSTRACT
This work has focused on the implementation of a cipher system called Rasterschlüssel 44 (RS-44). Developed by the German Wehrmacht during World War II, the RS-44 was based on a grid of cells and was used to transmit messages securely. The main motivation was to adapt this historical algorithm to the digital environment using the Python programming language. RS-44, initially created in the United Kingdom by John H. Tiltman, had many similarities with the system later used by the German army, which adopted it to replace the Double Playfair cipher used between 1941 and 1944. RS-44 began to be used in 1944, and besides Germany, other countries like the Netherlands and Italy also adopted it. RS-44 is a symmetric encryption algorithm that uses a grid of 600 cells (24 rows and 25 columns). In each row, 15 cells are randomly crossed out, leaving 10 empty cells for the message. Columns are identified by numbers from 1 to 25, and rows and columns are identified by bigrams of the letters “a” to “e”. The message is written in the empty cells from left to right and read by columns from top to bottom. The starting cell and the reading column are chosen randomly, and the recipient knows the starting cell through the header of the encrypted message, which includes the encryption time and the length of the message. The system also uses monoalphabetic substitutions to encrypt place names and designations of areas in foreign languages. The encryption process of RS-44 begins with the random selection of a starting cell. Then, the message key is determined from the bigrams of the first row and the last column that coincide with the starting cell. This key is encrypted using a 5×5 table, and if necessary, place names are encrypted using a toponymic alphabet. The message is then written in the white cells of the grid. Subsequently, the encrypted message is extracted using the encryption time and the size of the message to calculate the initial offset, and the letters are ordered descending by columns according to the numerical index. Finally, the encrypted message consists of two parts: the first line with the encryption time, the message size, and the encrypted key; and the second line with the encrypted message in blocks of five letters. The decryption process of RS-44 requires a complete encrypted message and the key used to encrypt it. First, the starting cell is decrypted using the 5×5 table of the key. Then, the size of the message is delimited on the grid by marking the necessary white cells according to the message length. Next, the encrypted message is entered into the grid, starting from the cell determined by the calculated offset. The order of the columns is determined by observing the numerical indices of the second row of the key. The decrypted message is then extracted horizontally from the starting cell. Finally, the decrypted message is processed, transforming punctuation marks and transcribing any abbreviations or special notations to their original form. For the implementation in Python, the generation of secure keys in RS-44 uses the secrets library to ensure cryptographically secure randomness of the three main components: the cell grid, the table to encrypt the cell, and the toponymic alphabet. It allows creating original or custom keys with sizes ranging from 5×5 to 150×150 rows and columns. The cells are marked with ‘_’ and ‘X’ for differentiation. The key is exported in PDF or Excel format, including the generation date and adjusting the cells according to the message size and encryption table. For encryption, a message and a grid in .xlsx format are needed, which can be entered manually or via a .txt file. The .xlsx key defines the limits of the white and black cells. The message is then processed and its size verified. If it meets the limits, it is encrypted normally; if it is too large, it is divided into parts that are encrypted separately. The starting cell is randomly chosen using the secrets library, and the message is encrypted and can be displayed on the screen or saved in .txt files. For decryption, the encrypted message and the key used are required. The .xlsx grid and the encrypted message are entered, the starting cell is decrypted, and the encrypted message is placed on the grid and extracted horizontally. Finally, the decrypted message can be processed using an independent class and displayed on the screen or saved To verify the functionality of the programs, a tester was created with cases of key generation, encryption, decryption, pre-processing, and post-processing of messages. Using the “mocking” technique, the tester simulates behaviors to evaluate system reactions. The key generation tests varied in size, showing execution times of 0.5 seconds for original keys and up to 10 seconds for 150×150 keys. The preprocessing, encryption, decryption, and post-processing tests were performed in an average of 0.5 seconds per test.
Este trabajo se ha centrado en la implementación de un sistema de cifrado llamado Rasterschlüssel 44 (RS-44). Desarrollado por la Wehrmacht alemana durante la Segunda Guerra Mundial, el RS-44 se basaba en un tablero de celdas y se utilizaba para transmitir mensajes de manera segura. La principal motivación fue adaptar este algoritmo histórico al entorno digital utilizando el lenguaje de programación Python. El RS-44, inicialmente creado en el Reino Unido por John H. Tiltman, presentaba muchas similitudes con el sistema utilizado por el ejército alemán posteriormente, el cual lo adoptó para sustituir el cifrado Double Playfair utilizado entre 1941 y 1944. El RS-44 se empezó a utilizar en 1944, además de Alemania, otros países como Países Bajos e Italia comenzaron a utilizarlo. El RS-44 es un algoritmo de cifrado simétrico que utiliza una cuadrícula de 600 celdas (24 filas y 25 columnas). En cada fila, 15 celdas se tachan aleatoriamente, dejando 10 celdas vacías para el mensaje. Las columnas se identifican con números del 1 al 25, y las filas y columnas con bigramas de las letras “a” a “e”. El mensaje se escribe en las celdas vacías de izquierda a derecha y se lee por columnas de arriba a abajo. La celda de inicio y la columna de lectura se eligen al azar, y el destinatario conoce la celda de inicio a través del encabezado del mensaje cifrado, que incluye la hora de cifrado y la longitud del mensaje. El sistema también utiliza sustituciones monoalfabéticas para cifrar topónimos y denominaciones de zonas en lenguas extranjeras. El proceso de cifrado del RS-44 comienza con la selección aleatoria de una celda de inicio. Luego, se determina la clave del mensaje a partir de los bigramas de la primera fila y la última columna que coinciden con la celda de inicio. Esta clave se cifra utilizando una tabla 5×5 y, si es necesario, se cifran los topónimos usando un alfabeto toponímico. A continuación, se redacta el mensaje en las celdas blancas del tablero. Posteriormente, se extrae el mensaje cifrado utilizando la hora del cifrado y el tamaño del mensaje para calcular el desplazamiento inicial, y se ordenan las letras de manera descendente por columnas según el índice numérico. Finalmente, el mensaje cifrado se compone de dos partes: la primera línea con la hora del cifrado, el tamaño del mensaje y la clave cifrada; y la segunda línea con el mensaje cifrado en bloques de cinco letras. El proceso de descifrado del RS-44 requiere un mensaje cifrado completo y la clave utilizada para cifrarlo. Primero, se descifra la celda de inicio utilizando la tabla 5×5 de la clave. Luego, se delimita el tamaño del mensaje en el tablero, mar cando las celdas blancas necesarias según la longitud del mensaje. A continuación, se introduce el mensaje cifrado en el tablero, comenzando desde la celda determinada por el desplazamiento calculado. El orden de las columnas se determina observando los índices numéricos de la segunda fila de la clave. Después, se extrae el mensaje descifrado horizontalmente desde la celda de inicio. Finalmente, se procesa el mensaje descifrado, transformando los signos de puntuación y transcribiendo cualquier abreviatura o notación especial a su forma original. Para la implementación en Python, la generación de claves seguras en el RS-44 utiliza la librería “secrets” para asegurar una aleatoriedad criptográficamente segura de los tres componentes principales: el tablero de celdas, la tabla para cifrar la celda y el alfabeto toponímico. Se permite crear claves originales o personalizadas, con tamaños entre 5×5 y 150×150 filas y columnas. Las celdas se marcan con ‘_’ (blancas) y ‘X’ (negras) para diferenciarlas. La clave se exporta en formato PDF o Excel, incluyendo la fecha de generación y ajustando las celdas según el tamaño del mensaje y la tabla de cifrado. Para el cifrado, se necesita un mensaje y un tablero en formato “.xlsx”, que puede ser introducido manualmente o mediante un archivo “.txt”. La clave “.xlsx” define los límites de las celdas blancas y negras. Luego, se procesa el mensaje y se verifica su tamaño. Si cumple con los límites, se cifra normalmente; si es demasiado grande, se divide en partes que se cifran por separado. La celda de inicio se elige aleatoriamente usando la librería “secrets”, y el mensaje se cifra y se puede mostrar por pantalla o guardar en archivos “.txt”. Para descifrar, se requiere el mensaje cifrado y la clave usada. Se introduce el tablero “.xlsx” y el mensaje cifrado, se descifra la celda de inicio, y el mensaje cifrado se coloca en el tablero y se extrae horizontalmente. Finalmente, el mensaje descifrado puede procesarse usando una clase independiente y se puede mostrar por pantalla o guardar. Para verificar el funcionamiento de los programas, se creó un tester con casos de generación de claves, cifrado, descifrado, preprocesamiento y postprocesamiento de mensajes. Utilizando la técnica de “mocking”, el tester simula comportamientos para evaluar reacciones del sistema. Las pruebas de generación de claves variaron en tamaño, mostrando tiempos de ejecución de 0,5 segundos para claves originales y hasta 10 segundos para claves de 150×150. Las pruebas de preprocesado, cifrado, descifrado y postprocesado se realizaron en un promedio de 0,5 segundos por prueba.
ABSTRACT
This work has focused on the implementation of a cipher system called Rasterschlüssel 44 (RS-44). Developed by the German Wehrmacht during World War II, the RS-44 was based on a grid of cells and was used to transmit messages securely. The main motivation was to adapt this historical algorithm to the digital environment using the Python programming language. RS-44, initially created in the United Kingdom by John H. Tiltman, had many similarities with the system later used by the German army, which adopted it to replace the Double Playfair cipher used between 1941 and 1944. RS-44 began to be used in 1944, and besides Germany, other countries like the Netherlands and Italy also adopted it. RS-44 is a symmetric encryption algorithm that uses a grid of 600 cells (24 rows and 25 columns). In each row, 15 cells are randomly crossed out, leaving 10 empty cells for the message. Columns are identified by numbers from 1 to 25, and rows and columns are identified by bigrams of the letters “a” to “e”. The message is written in the empty cells from left to right and read by columns from top to bottom. The starting cell and the reading column are chosen randomly, and the recipient knows the starting cell through the header of the encrypted message, which includes the encryption time and the length of the message. The system also uses monoalphabetic substitutions to encrypt place names and designations of areas in foreign languages. The encryption process of RS-44 begins with the random selection of a starting cell. Then, the message key is determined from the bigrams of the first row and the last column that coincide with the starting cell. This key is encrypted using a 5×5 table, and if necessary, place names are encrypted using a toponymic alphabet. The message is then written in the white cells of the grid. Subsequently, the encrypted message is extracted using the encryption time and the size of the message to calculate the initial offset, and the letters are ordered descending by columns according to the numerical index. Finally, the encrypted message consists of two parts: the first line with the encryption time, the message size, and the encrypted key; and the second line with the encrypted message in blocks of five letters. The decryption process of RS-44 requires a complete encrypted message and the key used to encrypt it. First, the starting cell is decrypted using the 5×5 table of the key. Then, the size of the message is delimited on the grid by marking the necessary white cells according to the message length. Next, the encrypted message is entered into the grid, starting from the cell determined by the calculated offset. The order of the columns is determined by observing the numerical indices of the second row of the key. The decrypted message is then extracted horizontally from the starting cell. Finally, the decrypted message is processed, transforming punctuation marks and transcribing any abbreviations or special notations to their original form. For the implementation in Python, the generation of secure keys in RS-44 uses the secrets library to ensure cryptographically secure randomness of the three main components: the cell grid, the table to encrypt the cell, and the toponymic alphabet. It allows creating original or custom keys with sizes ranging from 5×5 to 150×150 rows and columns. The cells are marked with ‘_’ and ‘X’ for differentiation. The key is exported in PDF or Excel format, including the generation date and adjusting the cells according to the message size and encryption table. For encryption, a message and a grid in .xlsx format are needed, which can be entered manually or via a .txt file. The .xlsx key defines the limits of the white and black cells. The message is then processed and its size verified. If it meets the limits, it is encrypted normally; if it is too large, it is divided into parts that are encrypted separately. The starting cell is randomly chosen using the secrets library, and the message is encrypted and can be displayed on the screen or saved in .txt files. For decryption, the encrypted message and the key used are required. The .xlsx grid and the encrypted message are entered, the starting cell is decrypted, and the encrypted message is placed on the grid and extracted horizontally. Finally, the decrypted message can be processed using an independent class and displayed on the screen or saved To verify the functionality of the programs, a tester was created with cases of key generation, encryption, decryption, pre-processing, and post-processing of messages. Using the “mocking” technique, the tester simulates behaviors to evaluate system reactions. The key generation tests varied in size, showing execution times of 0.5 seconds for original keys and up to 10 seconds for 150×150 keys. The preprocessing, encryption, decryption, and post-processing tests were performed in an average of 0.5 seconds per test. Read More