Introducción a la EVP
La librería EVP proporciona una serie de funciones
de alto nivel que sirven de interfaz a los algoritmos criptográficos
implementados en OpenSSL. En la librería se pueden identificar varios grupos
de funciones:
- Digest routines. Este grupo de funciones implementan la
interfaz a los message digests.
- Cipher routines. Implementan una interfaz a los
algoritmos de cifrado de clave simétrica.
- PBE routines. Password Based Encryption basado en el
estándar PKCS#5 y PKCS#12.
- Envelope encryption routines. Nos permiten cifrar/descifrar claves
de sesión y al mismo tiempo encriptar/desencriptar información con un algoritmo
simétrico.
- Funciones de firma/verificación.
EVP proporciona una interfaz homogénea que
facilita, en gran medida, su aprendizaje. La estructura de datos
fundamental es el contexto. Sobre ésta se añaden los datos que van a
ser procesados (encriptados, hasheados, etc).
Sobre los contextos se pueden realizar básicamente
tres tipos de operaciones:
- Inicialización (init). Paso previo a realizar cualquier
operación. Por ejemplo, cuando queremos obtener un message
digest de un mensaje, en la rutina de inicialización del contexto
(EVP_DigestInit) se especifica la función hash a utilizar.
- Actualización (update). Esta operación permitirá añadir
el/los objetos que queremos procesar. En el caso de la encriptación
(EVP_EncryptUpdate) nos permite añadir los mensajes que queremos
encriptar, entre otras cosas que veremos más en detalle en la sección
pertinente.
- Finalización (final). Sirve para obtener el resultado
final de las operaciones realizadas.
Además existen otras estructuras de datos
fundamentales para la librería. A lo largo del tutorial ejemplificaremos
su uso.