Bueno, primero que nada el contexto.
Unos amigos me pidieron el favor de que los ayudara con un programa que necesitaban para un postgrado de la seguridad de la información. El objetivo del programa: "Escriba un programa en Python que permita ocultar un mensaje en un archivo midi".
¿Como lo hago?
Primero que nada, vamos a ver la base conceptual de este asunto.
Esteganografia: Según la wikipedia trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. Es decir, procura ocultar mensajes dentro de otros objetos y de esta forma establecer un canal encubierto de comunicación, de modo que el propio acto de la comunicación pase inadvertido para observadores que tienen acceso a ese canal.
Archivo MIDI: MIDI (Musical Instrument Digital Interface) permite que distintos elementos electrónicos como computadoras, sintetizadores y otros dispositivos musicales se comuniquen y compartan información.
En los archivos MIDI, la información viaja en bytes(es decir 8 bits) [para efectos del programa a escribir esto es sumamente importante], si se han dado cuenta una cadena de caracteres de la tabla ascii de 0 a 127 también tiene 8 bits como lo pueden ver en aquí. Entonces, podemos notar algo interesante con respecto a las notas musicales midi, una nota musical es un número entero de 0 a 127, que permite cubrir la escala musical en 11 octavas. ¿Interesante verdad?
Bueno, entonces si reemplazamos las notas musicales MIDI por números enteros naturales para su representación ASCII. ¿Problema resuelto verdad?
Ahora, la siguiente pregunta es ¿Como leemos el archivo binario y lo modificamos para poder ocultar allí nuestro mensaje? Y sobre todo ¿Como evitamos que sea detectable a los sutiles cambios del oído?
La respuesta a la segunda es: los canales.
MIDI puede direccionar hasta 16 canales (también llamados voces, o instrumentos); por ello, al instalar el sistema MIDI será necesario asignar un número de canal para cada dispositivo.
Considerando esto, podríamos abrir un canal mudo(sin sonido) que tenga la misma longitud de notas que el canal más largo existente en el archivo original.
¿Interesante verdad?
Ahora, vamos a la parte divertida ¿Como lo programamos?
En internet existen varias librerías para trabajar con archivos midi en python. A saber:
- midiutil
- pygame.midi
- pyMIDI
- midi.py
- MIDI.py
Para resolver nuestro ejercicio hicimos uso de python-MIDI.
En una entrada posterior les mostrare la lógica general del programa y las clases que creamos para implementar dicha tarea.
Oye, por cierto. Si te gusto la entrada puedes brindarme una taza de café.
No hay comentarios:
Publicar un comentario