Rijndael es una familia de nueve algoritmos criptográficos, que ofrece todas las combinaciones de tamaños de bloque y tamaño de clave en el conjunto de 128/192/256 bits. Los tres algoritmos con bloques de 128 bits (y claves de 128, 192 y 256 bits) se conocen colectivamente como AES . Las otras seis combinaciones han sido definidas por los autores de Rijndael, pero fueron mucho menos investigadas por los criptógrafos, ya que no eran parte del objetivo de la competencia AES.
Lo que representan las constantes MCRYPT_RIJNDAEL_*
está mal documentado, por lo tanto, no está claro. Esta página de manual sobre una biblioteca llamada "mcrypt" indica que:
RIJNDAEL: Rijndael es un cifrado de bloque, diseñado por Joan Daemen y Vincent Rijmen, y fue aprobado para el Estándar de cifrado avanzado NIST de EE. UU., FIPS-197. El cifrado tiene una longitud de bloque variable y una longitud de clave. Rijndael se puede implementar de manera muy eficiente en una amplia gama de procesadores y en hardware. El diseño de Rijndael fue fuertemente influenciado por el diseño del bloque de cifrado Square. Existen tres versiones de este algoritmo, a saber: RIJNDAEL-128 (el ganador de AES), RIJNDAEL-192, RIJNDAEL-256 Los números 128, 192 y 256 representan la longitud del tamaño del bloque.
La última oración parece implicar que "128" sería el tamaño del bloque, no la longitud de la clave. Sin embargo, esto solo sería cierto en la medida en que el módulo mcrypt de PHP traduzca fielmente las convenciones de nomenclatura de la biblioteca de mcrypt subyacente, que no es un hecho.
En cualquier caso, la documentación para mcrypt_encrypt()
establece que:
La clave con la que se cifrarán los datos. Si es más pequeño que el tamaño de clave requerido, se rellena con '\ 0'. Es mejor no usar cadenas ASCII para las claves.
Entonces, si solo proporciona 8 "caracteres fuertes", entonces estos caracteres se convierten de alguna manera a bytes (Rijndael no funciona con caracteres, funciona con bytes) de alguna manera no especificada, y si esto no produce suficientes bytes, luego se agregan bytes extra de valor 0. Lo que sucede si hay demasiados bytes no se especifica (el truncamiento es plausible, pero esto es PHP, cualquier cosa puede suceder).
Si realmente desea utilizar estas funciones , tendrá que realizar algunas pruebas, comparando los resultados de encriptación con lo que otra biblioteca mejor documentada produciría (en algún idioma donde los bytes son bytes, por ejemplo, C o Java). Entre las cosas a probar están:
- Tamaño de bloque y longitud de clave.
- Conversión de una cadena PHP en bytes (especialmente en presencia de caracteres no ASCII).
- Comportamiento en la falta de coincidencia de la longitud de la clave (relleno, truncamiento, ...).
Confiar en una función de seguridad tan poco documentada es similar al paracaidismo sin verificar el paracaídas. Si, a la hora de abrir la bolsa, el paracaídas resulta ser la ropa de su semana, entonces tendrá unos segundos para reflexionar, mientras se cae libremente en medio de una nube de calcetines sucios en expansión, de lo que realmente debería haber sido más cauteloso. p>