Enviando mensajes cifrados con RSA híbrido, AES y HMAC SHA-256

5

¿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:

  1. Genera un nuevo IV (PRNG fuerte) de 128 bits
  2. Genera una nueva clave de cifrado AES de 256 bits / CBC / PKCS7 (Kc)
  3. Genera una nueva clave de autenticación AES de 256 bits / CBC / PKCS7 (Ka)
  4. Encripta su Mensaje + marca de tiempo con (Kc) y IV = > (M) e
  5. Autentica IV + (M) e con (Ka) utilizando HMAC SHA-256 = > IV + (M) e + etiqueta
  6. Cifra (Ka) + (Kc) con la clave pública RSA de Bob rellena con OAEP = > (Kc + Ka + P) e
  7. Autentica (Kc + Ka + P) e con (Ka) utilizando HMAC SHA-256 = > IV + (Kc + Ka + P) e + Tag
  8. Envía Bob RSA encriptado IV + (Kc + Ka + P) e + Tag y AES HMAC-256 Mensaje IV + (M) e + Tag

Bob luego procede a:

  1. Extractos IV de IV + (Kc + Ka + P) e + Tag
  2. Comprueba IV contra el caché nonce, rechazando los mensajes con IV repetidas
  3. Extractos y descifrados (Kc + Ka + P) e con su clave privada RSA = > (Ka) + (Kc)
  4. Verifica IV + (Kc + Ka + P) e + Tag con (Ka) , rechazando mensajes inválidos
  5. Verifica IV + (M) e + Tag con (Ka) , rechazando mensajes inválidos
  6. Descifra IV + (M) e + Tag con (Kc)
  7. Extrae la marca de tiempo y el mensaje
  8. 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!

    
pregunta mythz 18.07.2015 - 02:00
fuente

1 respuesta

1

Voy paso a paso y luego el sistema criptográfico general, me parece lo más lógico.

  
  1. Genere una nueva clave maestra AES de 256 bits / CBC / PKCS7 (km)
  2.   
  3. Genere un nuevo 128bit IV (PRNG fuerte)
  4.   

CBC está bien aquí ya que no hay ningún tipo de oráculo al que el atacante tendría acceso y la etiqueta descarta los ataques de volcado de bits. Random IV es correcto, 256 bits es más que suficiente para el tamaño de la clave.

  
  1. Genere el Hash SHA-512 de (Km) = > (Hm)
  2.   
  3. Divisiones (Hm) en Crypt Key = > (Kc) y clave de autenticación = > (Ka)
  4.   

Esto debería estar bien. Un comentario, en realidad no estoy familiarizado con la expansión del secreto maestro a través de un hash (por lo tanto, si esto se considera una buena práctica, corríjame), ¿hay alguna razón por la que no genere dos claves de 256 bits? Diría que, a menos que realmente necesite conservar los tamaños de paquete en la red, ¿por qué no generar dos claves de 256 bits, una para AES y otra para el HMAC? Solo hay 256 bits más en la red.

  
  1. Encripta su Mensaje + marca de tiempo con (Kc) y IV = > (M) e
  2.   
  3. Signos (IV) + (M) e con (Ka) usando HMAC SHA-256 = > (IV + (M) e + Tag)
  4.   

Esto es bueno, Encrypt-then-MAC es IND-CCA (es decir, la mejor construcción genérica). Una nota delicada: un HMAC no es una firma, sino una etiqueta. (una etiqueta proporciona integridad y autenticidad, una firma también proporciona no repudio).

  
  1. Cifrado (IV + Km) con la clave pública RSA de Bob rellena con OAEP = > (IV + Km + P) e
  2.   
  3. Envía la clave AES encriptada RSA de Bob (IV + Km + P) y el mensaje AES firmado (IV + (M) e + Tag)
  4.   

OAEP es una buena opción para el relleno RSA, y es IND-CCA, no veo problemas aquí.

Me parece que tanto sus esquemas simétricos como asimétricos no son susceptibles a un ataque de texto cifrado elegido, lo cual es muy seguro. Como tal, no creo que tener el mismo IV cifrado en los textos cifrados RSA y AES sea un problema. Especialmente porque la IV ni siquiera tiene que ser secreta en el modo CBC (¡simplemente no debe ser predecible o reutilizada!), Por lo que podría enviarse de forma clara (tal vez agregando el texto en claro IV al texto cifrado AES y calculando el MAC de ese). Entonces tampoco tendría que estar cifrado bajo la clave pública del destinatario.

¡Espero que eso ayude, feliz de aclarar o ampliar cualquier tema sobre el que tenga preguntas!

    
respondido por el puzzlepalace 18.07.2015 - 10:02
fuente

Lea otras preguntas en las etiquetas