Puede que no sea el método más seguro, pero como curiosidad, está muy bien. Vamos a aprovecharnos de que OpenSSL nos deja especificar la fuente de números aleatorios a la hora de generar una clave privada (y para otras cosas también). Aunque dicha característica está pensada para dispositivos externos que generen números aleatorios, como un dispositivo de hardware especial, o un software que genere siempre los mismos de cara a compartirlos... vamos a utilizar como generador de números aleatorios nuestra tarjeta de sonido. Así una palabra dicha por el micrófono puede ser nuestra fuente de números aleatorios para generar nuestra clave privada.
Vamos a probar lo siguiente:
$ openssl genrsa -rand
Con este comando, generamos una clave privada de 4096bit utilizando como fuente de datoa aleatorios el archivo generado por la salida de arecord. Este programa grabará audio directamente de nuestro micrófono, con las siguientes características:
- -d5 : Grabaremos 5 segundos, por lo que la generación de la clave se demorará este tiempo.
- -c1 : Un canal (mono)
- -r 8000 : 8000 muestras por segundo. Para escucharlo es muy mala calidad, podríamos utilizar más muestras por segundo si queremos
De esta forma generaremos una clave, aunque dado que el tiempo a grabar es de 5 segundos y en el audio se generan muchos bytes parecidos en intervalos pequeños, cuando hay silencios hay valores bajos, cuando no, hay valores relativamente altos, podemos intentar comprimir dicho audio para que nuestra muestra sea más aleatoria:
$ openssl genrsa -rand
Un detalle más
A la hora de romper la clave, no estamos en una película, aunque la formemos a partir de una palabra o un sonido especial, los sonidos deben ser idénticos para que las claves resultantes sean iguales, e incluso así, no es el único factor que openssl utiliza para generar dicha clave, lo cual es muy poco probable.