anterior | índice | siguiente |
Lo primero de todo: EVP_BytesToKey() está obsoleta. Esta función se implementó en SSLeay para derivar claves a partir de passwords introducidas por el usuario. Pese a que la función sigue formando parte de las distribuciones de la librería (incluso muchas de las aplicaciones del intérprete la utilizan) las PBE routines deben utilizarse en su lugar.
Veamos el prototipo:
|
Esta función está basada en el PKCS#5 (Password-Based Cryptography Standard). Si se siente con fuerzas puede pegarle una leída, pero tampoco es esencial para comprender el funcionamiento de la función.
La idea es generar una clave (key) y un vector de inicialización (iv) si procede, a partir de unos datos de entrada (data), de una función hash (md) y, opcionalmente, de un salt (un vector de 8 bytes).
EVP_BytesToKey() devuelve siempre la longitud de la clave correspondiente al algoritmo especificado en type. Además, si data es NULL, devuelve este valor sin realizar ninguna otra operación. Por otro lado, el parámetro salt es opcional. Veamo, a nivel de curiosidad, el algoritmo de la función. Pero antes un inciso sobre la notación empleada:
md_buf = H (data + salt)
|
Algoritmo 1. Algoritmo de la función EPV_BytesToKey().
A la vista del algoritmo uno puede entender perfectamente los parámetros que se pasan a la función. Como se puede apreciar, la clave y el vector de inicialización se crean calculando repetidas veces la función hash que se especifica como parámetro de entrada hasta que tenemos el número de bytes suficientes tanto en key como en iv. Obviamente si el parámetro salt es NULL, no se tiene en cuenta, siendo el parámetro data fundamental para la función.
|
Ejemplo 1. Generamos clave y vector de inicialización para triple DES.
Este ejemplo genera una clave y un vector de inicialización para el algoritmo triple DES en modo ofb. Si recuperara el valor devuelto por EVP_BytesToKey() comprobará que la longitud de dicha clave es de 24 bytes. Con esto queremos decir que no va a ser necesario realizar tres llamadas a EVP_BytesToKey() para obtener las tres claves utilizadas por el algoritmo puesto que estas ya se han introducido en el buffer clave.
Lo que hemos visto únicamente nos va a permitir derivar claves para algoritmos con longitud de clave fija y para los algoritmos de clave variable únicamente para las longitudes de clave por defecto.