Intercambios manuales de claves de sesión
Nota
En el procedimiento descrito en esta sección se supone que los usuarios (o clientes cryptoAPI) ya poseen su propio conjunto de pares de claves públicas y privadas y también han obtenido las claves públicas del otro.
En la ilustración siguiente se muestra cómo usar este procedimiento para enviar un mensaje cifrado.
Este enfoque es vulnerable a al menos una forma común de ataque. Un interceptador puede adquirir copias de uno o varios mensajes cifrados y las claves cifradas. A continuación, en algún momento posterior, el interceptador puede enviar uno de estos mensajes al receptor y el receptor no tendrá forma de saber que el mensaje no provenía directamente del remitente original. Este riesgo se puede reducir mediante la marca de tiempo de todos los mensajes o mediante números de serie.
La manera más fácil de enviar mensajes cifrados a otro usuario es enviar el mensaje cifrado con una clave de sesión aleatoria junto con la clave de sesión cifrada con la clave pública de intercambio de claves del receptor.
A continuación se indican los pasos para enviar una clave de sesión cifrada.
Para enviar una clave de sesión cifrada
- Cree una clave de sesión aleatoria mediante la función CryptGenKey .
- Cifre el mensaje mediante la clave de sesión. Este procedimiento se describe en Cifrado de datos y Descifrado.
- Exporte la clave de sesión a un BLOB de clave con la función CryptExportKey , especificando que la clave se cifre con la clave pública de intercambio de claves del usuario de destino.
- Envíe el mensaje cifrado y el BLOB de clave cifrada al usuario de destino.
- El usuario de destino importa la clave BLOB en su CSP mediante la función CryptImportKey . Esto descifrará automáticamente la clave de sesión, siempre que la clave pública de intercambio de claves del usuario de destino se haya especificado en el paso 3.
- Después, el usuario de destino puede descifrar el mensaje mediante la clave de sesión, siguiendo el procedimiento descrito en Cifrado y descifrado de datos.