Una clave de 128 bits para AES solo debe tener una longitud de 128 bits. Ninguna otra propiedad es requerida , aunque otras propiedades pueden ser deseadas .
Si elige una cadena de 16 caracteres, entonces realmente no está utilizando esos 128 bits al máximo. ASCII solo admite 7 bits por carácter (el primer bit de cada byte es siempre cero), y su entropía real alcanza un máximo de aproximadamente 6 bits por carácter de texto ASCII. Por lo tanto, una contraseña de 16 caracteres si se usa directamente para AES de 128 bits tiene el mismo nivel de seguridad que una clave de 96 bits, en lugar de una clave de 128 bits.
Para una clave de cifrado, desea utilizar esos bits preciosos al máximo; quieres que cada bit sea igualmente impensable.
La mejor manera de hacerlo es usar un hash. Lo bueno de usar un hash es que su contraseña no tiene que ser exactamente con 16 caracteres; puede ser más corto o más largo, y aún así obtendrá una distribución aleatoria y consistente de bits en su clave resultante.
MD5 producirá una salida de 128 bits, por lo que es conveniente. Pero en realidad, MD5 está bastante dañado y su salida de hash no necesita ser exactamente del mismo tamaño que su clave, solo tiene que ser al menos tan grande como su llave. Podrías usar SHA-256 y luego tomar los primeros 128 bits de hash de salida para tu clave. O los últimos 128 bits. O los 128 bits medios. Mientras seas consistente, no importa.
Lo que, mientras no importa, ¿qué tal si ejecutamos el hash varias veces? De esa manera, un atacante tendrá que ejecutar el hash varias veces para cada suposición si quiere adivinar nuestra contraseña.
En realidad, alguien ya lo ha pensado, y hay una lista de "Funciones de derivación de claves" específicamente diseñadas para tomar una entrada arbitraria de cualquier tipo y tamaño y producir una clave de al menos X bits, a menudo con la propiedad agregada de que derivar la clave de la contraseña lleva mucho tiempo (y quizás MUCHA memoria).
Se han discutido de forma bastante exhaustiva aquí, así que busque PBKDF2 o scrypt para obtener más detalles.
Entonces, para resumir, la respuesta es sí, funciona , pero no, no deberías hacerlo porque hay mejores opciones listas para usar que hacen que tu teclas mejor en todos los sentidos .