30 sept 2020

[PoC] Cifrado AES256 mediante audio: La Teoría

Todo empezó con una idea que llevaba tiempo rondándome la cabeza. En mi vida tengo dos pasiones. Una es la seguridad, y la otra la música, así que muchas veces me apetece investigar sobre cosas en las que ambas cohesionen.

La idea inicial fue "Necesito crear alguna herramienta relacionada con passwords musicales". Cuando te planteas realizar este tipo de proyecto ya sabes que vas a trabajar con frecuencias, y eso significa que probablemente el planteamiento matemático no es trivial. Así que para entender todo lo que va a explicarse a continuación, os recomiendo echarle un vistazo al post Teleco in a nutshell v3.0: Señales y espectros de mi compi Helena.

Me puse manos a la obra y empecé a recopilar información relativa al espectro en frecuencia. Mi idea era usar música como contraseña, para poder descifrarlo a posteriori repitiendo una melodía. Para ello, se necesita saber cuales son las frecuencias que componen el audio y a que notas corresponden.


Para que se entienda mejor he cogido una referencia de las notas musicales representadas sobre un piano. Partimos de que la frecuencia audible, o campo tonal, para el ser humano está comprendida entre 19Hz y 19KHz. Obviamente el margen varía según la persona y se estrecha con la edad. Equivale aproximadamente a 10 octavas de un piano. Cada octava, dobla los valores en su homónima siguiente. Es decir, si nos fijamos en la primera escala (obviamos la 0 porque no todos sus valores son audibles), vemos que el Do1, equivale a una frecuencia de 16.35 Hz por tanto el Do2, estaría en 32.70 Hz, Do3 en 65,40 y así sucesivamente. Esto radica en que si podemos obtener las frecuencias que componen un archivo de audio, es posible transcribirlo en notas musicales como tal. 

De la imagen anterior, podemos también asumir dos cosas. La primera es que en el caso de que no quisiéramos diferenciar escalas, para nosotros cualquiera de las notas,independientemente de la escala en la que se encuentre, podría ser la misma. La segunda es que existiría la posibilidad de trabajar usando el espacio entre frecuencias de tal forma que daría igual que el audio cambiase de tono (puede que si intentas repetirlo cantando no empieces siempre en la misma frecuencia), ya que seguiría habiendo la misma distancia entre las frecuencias existentes.

Hasta aquí todo bien. El problema es que una onda de audio se representa en 2 dimensiones, amplitud en función del tiempo. Y es aquí donde entra el post de Helena y mi reciente reconciliación con mi antiguo archienemigo Fourier. Su transformada, nos permite convertir una onda del dominio del tiempo al dominio de la frecuencia. Para mostrároslo he elegido un audio con el sonido del Sinsajo, que consta de solo 4 notas.

Forma de onda del audio del Sinsajo

A partir de la forma de onda, podemos ver que existen 4 "bloques" de sonido diferenciados. El 1º y el 3º con más amplitud (volumen) que el 2º y el 4º, pero no tenemos forma de saber cuales son las frecuencias que predominan en esos puntos, y por tanto no podemos asociarlo a ninguna nota.

Sin embargo, si aplicamos la transformada de Fourier, obtendremos el espectro de onda, donde pueden verse las frecuencias asociadas a cada instante de tiempo.

Espectrograma del audio de Sinsajo

Es complicado que un audio esté tan limpio como para que se dibujen solo y exactamente la información que buscamos, pero si podemos visualizar para cada instante de tiempo, cual es la frecuencia que aparece con más potencia. En este caso, si hacemos zoom sobre el espectro...


Si buscamos la correspondencia de estas frecuencias predominantes, en la primera imagen, podemos obtener las notas.

Notas obtenidas aproximadas:
  • 1.55-1.6KHz -> Sol6
  • 1.85-1.9KHz -> La#6
  • 1.75-1.82KHz -> La6
  • 1.10 - 1.2KHz -> Re6
Siendo el audio original un silbido, tenemos que asumir la inexactitud del mismo, pero si tocamos las notas en un piano, la melodía es, efectivamente, el sinsajo.


Ya está bien de mates por hoy. Nos vemos en la 2ª parte de esta PoC pero no sin antes añadir la pregunta que surgió, y que cambió el curso de esta investigación. 

¿Y si no sabes cantar?¿Y si no tienes forma de crear el audio?

3 comentarios:

  1. Muy buen post ¡ aguardo proxima parte.
    Que usaste para generar el analizador de espectro y las furier ?

    ResponderEliminar
  2. Usé PyAudio y Wave para manejar el audio y Numpy para análisis de Fourier. El código íntegro estará disponible en el siguiente artículo! :)

    ResponderEliminar
  3. muy bueno.
    sólo una apreciación "vemos que el Do1, equivale a una frecuencia de 16.35 Hz "... has cambiado a "one-based array index" ;-)

    ResponderEliminar