23 oct 2020

[PoC] Cifrado AES256 mediante audio: AESTube (Parte 2)


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

Esas eran las dudas que me hicieron llegar a lo que se ha convertido. Por si os perdisteis el último artículo, venimos de aquí.

Una vez diseñado el algoritmo que me permitía procesar el audio para obtener las notas, la idea era usarlas como passphrase del algoritmo de cifrado AES. Durante el desarrollo del software me fui dando cuenta de algunas cosas:

  1. Es complicado generar un sonido idéntico, si las fuentes son distintas, y sobre todo si una de ellas es la voz.
  2. Si pensamos en melodías cantadas no sería demasiado útil si la persona que usase el algoritmo no afinase correctamente, aunque más bien debería hacerlo "muy correctamente".
  3. Si agrandamos los márgenes de error para solucionar lo anterior (es viable), estaríamos empeorando  la complejidad de la clave que usaremos en el algoritmo de cifrado.
  4. Es bueno limpiar frecuencias, tanto las que se obtienen por debajo como por encima de lo audible.
  5. No siempre tenemos un dispositivo cerca con entrada de sonido. Puede que un portátil o un smartphone nos solucionen esto, pero si estamos en un sobremesa, o mejor, una máquina en cloud, probablemente no tengamos acceso a ningún tipo de hardware de audio.
Pasé varias horas dándole vueltas porque el software era funcional. Cifraba y descifraba texto, pero la tasa de fallo era demasiado alta como para que fuese algo que pudiera usarse de forma habitual. Sin embargo, hablando sobre lo que estaba investigando con algunas personas con menos habilidades técnicas en ciberseguridad, pero infinitamente más conocimiento que yo en música, me dieron una idea. La respuesta era más sencilla de lo que parecía.

Todo el rato lo había tenido delante. Si es posible descargar audio desde YouTube, !podía usarlo para cifrar cosas!. Así que, me puse delante del VSCode, porque había que hacer bastantes modificaciones. Entre otras cosas, uno de los problemas es que YouTube no almacena la música en WAV, por lo que era necesario compilar, instalar y utilizar FFMpeg para convertir el audio descargado en waveform, ya que si no, no es posible aplicar todo el procesamiento a la onda para extraer las notas.

Mientras intentaba generar las llamadas a FFMpeg desde Python 3, se me ocurrió que sería interesante añadir la posibilidad de cortar el audio. El algoritmo que había programado separaba el audio porcentualmente siempre en las mismas partes a la hora de extraer las notas, por lo que, si cortaba el audio haciéndolo más pequeño, para poder descifrar datos, sería necesario conocer tanto el enlace al audio, como los segundos de inicio y final del corte personalizado en la pista. También consideré la posibilidad de variar la velocidad de reproducción, o cambiar el tono, pero la idea es que fuera algo fácil de usar para todos. Dicho esto, solo quedaba concatenar las notas del audio muestreado, para generar la clave que usaríamos para cifrar con AES.

Con todo esto era capaz de cifrar texto, el problema es que quería que sirviese también para cifrar archivos de forma binaria, y para esto tuve que modificar la forma que había elegido para usar AES256 CBC, porque aparte de tener que usar padding (AES utiliza un cifrado por bloques, así que los datos a cifrar tienen que ser del tamaño del bloque, por defecto 16 bytes), cuando cifras en binario, hay que tener bastante cuidado con el encoding.

Una vez modificada la librería, no sin algún que otro dolor de cabeza, el programa era capaz de cifrar cualquier archivo aportando solamente el link del audio en YouTube, y en caso de querer aumentar la seguridad, añadiendo los parámetros de inicio y final del corte que se desea.

Sin más dilación, os presento a AESTube.
No dudéis en probarlo, eso sí, seguid las instrucciones, porque YouTube últimamente está muy tricky!

1 comentario:

  1. Es una idea brillante, y abre un abanico de aplicaciones de este método. Sin embargo el tema de poder aplicarlo usando la voz me parece divertido. Tal vez haciendo un filtrado de la onda y quedándose simplemente con el patrón para poder estudiar simplemente las diferencias de frecuencia base en las componentes de Fourier solucionaría muchos problemas.

    Aunque sigue estando el problema de que hace falta un sensor de voz.

    Solo de pensar en aplicar esto con otras variables físicas basadas en EDPs me da escalofríos >:)

    ¡Enhorabuena por el increíble hilo!

    ResponderEliminar