Cómo insertar un mensaje secreto en un texto con Python

Usa este script para insertar un mensaje en código binario en un mensaje y que sea indetectable.

Dos robots con sombrero
Se supone que era un robot mandando un mensaje secreto a otro robot

Es un chisme que no he podido verificar. Se supone que en alguna ocasión Elon Musk utilizó un sistema muy ingenioso para detectar a la persona que filtró correos electrónicos de la empresa.

El sistema funciona así: cada miembro de una lista de correos recibe un correo diferente de una manera imperceptible a simple vista. Según los espacios en el correo, se usa código binario para asignar un número de identificación a cada uno de los correos.

No tengo idea de si es verdad, si sea buena idea o si de verdad sea imperceptible, pero me parece interesante cómo ejercicio para intentar hacerlo por mi cuenta a como yo entendí que podría hacerse.

📖
En este post
* Cómo usar el código binario para encriptar un mensaje secreto en un texto
* Un script para introducir un mensaje con código binario en un texto

Usando el binario para cifrar un correo

El código binario es la base con la que funcionan todas nuestras computadoras. La idea básica de la transmisión de información es que es posible codificar y decodificar lo que sea a partir de sólo unos y ceros.

Esto es muy útil si lo único que tienes a la mano para comunicarte son pulsaciones eléctricas. En tal caso, un paso de electricidad puede significar un 1 y la falta de la misma se codifica como un 0. Lo mismo si estás transmitiendo a través de ondas en el aire, donde una onda larga puede que traducirse como un 1 y una onda corta es un 0.

Diagramas de ondas
Cómo se mandan señales por ondas

Usando el código binario

Yo uso el sistema decimal. Eso quiere decir que cada diez dígitos tengo que volver a usar los símbolos anteriores para seguir contando. Pero esta no es la única forma de crear números. Existe por ejemplo el sistema hexadecimal, con 16 dígitos en total (se usan las letras para completar los números faltantes).

Saber cómo funcionan los sistemas de números hace relativamente sencillo comprender que el sistema decimal

¿Cómo poner binario en un texto?

Hagamos un ejercicio para entender cómo ocultar un código corto en un texto. Supongamos que deseas escribir el número 42 en el siguiente texto.

🌳
Quien a buen árbol se arrima, buena sombra le cobija.

El número 42 es 101010 en binario. Para ocultarlo en el texto usaremos un sólo espacio como un cero y doble espacio como un uno (bien podría ser al revés, lo importante es que sepas cuál es cuál al decodificar). El texto codificado quedaría así

🌳
Quien a buen árbol se arrima, buena sombra le cobija.

Como puedes ver, los dobles espacios son poco visibles y podrían pasar por un pequeño error tipográfico para alguien desapercibido. Veamos si podemos hacer un script en python que lo haga.

Primeros pasos

📖
En esta sección haremos que un script de python coloque los espacios donde los necesitamos. Recuerda que puedes descargar gratis la guía para comenzar con python si tienes alguna duda.

Lo primero que haremos será definir un texto para que sea nuestro correo a encriptar. Yo elegí un extracto del Quijote para comenzar, pero puedes usar cualquier texto que te parezca interesante. Usa el código siguiente en Python para almacenar ese texto en una variable de nombre text.

text = ''' En un lugar de la Mancha, cuyo nombre no quiero acordarme, vivía un hombre llamado Alonso Quijano, que estaba fascinando con los caballeros andantes. Le encantaba leer los libros sobre sus aventuras y vendió una parte de su tierra para comprar más libros sobre caballería.
    
    Las hazañas increíbles de los caballeros andantes y gigantes fueron más verdaderas que su propio mundo. Él creía que para su honor y el de su país, debía ser un caballero andante. Decidió que se llamaría don Quijote de la Mancha'''
Define el texto

Lo primero que quiero hacer es asegurarme de que no hayamos puesto doble espacio en ninguna parte. Como dijimos podría bien ser un error genuino. El siguiente código hace esta tarea por nosotros.

t = ' '.join(text.split())

Ahora toca encontrar las posiciones en las que podemos encontrar espacios y guardarlos en una lista. Usamos una técnica que se llama list comprehention para crear la lista en una sola línea de código. Como sólo usaremos 6 dígitos para nuestro número binario, podemos cortar la lista a los elementos que necesitamos únicamente.

¡Genial! Te has registrado exitosamente.

¡Bienvenido de vuelta! Has iniciado sesión correctamente.

Te has suscrito correctamente a Escribe tu primer paper de Economía.

¡Éxito! Revisa tu correo electrónico para obtener el enlace mágico para iniciar sesión.

¡Éxito! Se ha actualizado la información de facturación.

No se actualizó tu información de facturación.

Sígueme en Mastodon