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 marcando el tiempo todos los mensajes o usando 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 de de intercambio de claves del receptor.
A continuación se indican los pasos para enviar una clave de sesión cifrada.
Enviar una clave de sesión cifrada
- Cree una clave de sesión de aleatoria mediante la funcióndeCryptGenKey.
- 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 en una clave BLOB 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óndeCryptImportKey. Esto descifrará automáticamente la clave de sesión, siempre que se especificó la clave pública de intercambio de claves del usuario de destino en el paso 3.
- A continuación, el usuario de destino puede descifrar el mensaje mediante la clave de sesión, siguiendo el procedimiento descrito en cifrado de datos y descifrado.