¿Es esta una estrategia segura para enviar un mensaje cifrado de gran tamaño usando el RSA 2048 híbrido, AES 256 y autenticado con HMAC SHA-256:
Dado que Alice ya tiene la clave pública RSA de Bob, Alice:
- Genera un nuevo IV (PRNG fuerte) de 128 bits
- Genera una nueva clave de cifrado AES de 256 bits / CBC / PKCS7 (Kc)
- Genera una nueva clave de autenticación AES de 256 bits / CBC / PKCS7 (Ka)
- Encripta su Mensaje + marca de tiempo con (Kc) y IV = > (M) e
- Autentica IV + (M) e con (Ka) utilizando HMAC SHA-256 = > IV + (M) e + etiqueta
- Cifra (Ka) + (Kc) con la clave pública RSA de Bob rellena con OAEP = > (Kc + Ka + P) e
- Autentica (Kc + Ka + P) e con (Ka) utilizando HMAC SHA-256 = > IV + (Kc + Ka + P) e + Tag
- Envía Bob RSA encriptado IV + (Kc + Ka + P) e + Tag y AES HMAC-256 Mensaje IV + (M) e + Tag
Bob luego procede a:
- Extractos IV de IV + (Kc + Ka + P) e + Tag
- Comprueba IV contra el caché nonce, rechazando los mensajes con IV repetidas
- Extractos y descifrados (Kc + Ka + P) e con su clave privada RSA = > (Ka) + (Kc)
- Verifica IV + (Kc + Ka + P) e + Tag con (Ka) , rechazando mensajes inválidos
- Verifica IV + (M) e + Tag con (Ka) , rechazando mensajes inválidos
- Descifra IV + (M) e + Tag con (Kc)
- Extrae la marca de tiempo y el mensaje
- Verifica que la marca de tiempo no es más antigua que la edad máxima de solicitud, rechazando mensajes caducados
¿Básicamente, me gustaría saber si hay alguna debilidad obvia con el enfoque híbrido RSA / AES / HMAC SHA-256 anterior o algo que alguien haría de manera diferente?
La estrategia anterior se ha revisado para incluir comentarios de @ puzzlepalace de crear claves AES separadas para encriptar y autenticar de derivarlos del hash SHA-512 de la clave maestra.
¡Cualquier otro comentario o sugerencia de mejora son bienvenidos!