2009-10-08 16 views
8

Necesito seguridad implementada para la comunicación cliente-servidor. He implementado la siguiente hybrid cryptosystemCómo comunicar la inicialización de AES Vector al cliente para el criptosistema híbrido

Para cifrar un mensaje dirigido a Alicia en un criptosistema híbrido, Bob hace lo siguiente:

  1. Obtiene la clave pública de Alice.
  2. Genera una nueva clave simétrica para el esquema de encapsulación de datos.
  3. Encripta el mensaje en el esquema de encapsulación de datos, utilizando la clave simétrica que acaba de generar.
  4. Encripte la clave simétrica bajo el esquema de encapsulación de clave, utilizando la clave pública de Alice.
  5. Envía estas dos encriptaciones a Alice.

para descifrar este texto cifrado híbrido, Alice hace lo siguiente:

  1. utiliza su clave privada para descifrar la clave simétrica contenida en el segmento clave de la encapsulación.
  2. usa esta clave simétrica para descifrar el mensaje contenido en el segmento de encapsulación de datos.

Estoy usando RSA para un criptosistema de clave pública, y AES para criptosistema de clave simétrica. Todo funciona bien, pero no estoy seguro de cómo manejar el vector de inicialización AES. Actualmente, concateno la clave AES y el vector de inicialización encriptando con la clave pública y enviándola al servidor.

Solo quería obtener algunas opiniones sobre este enfoque. Cómo se resuelve este problema mediante otros protocolos de comunicación SSL, etc.

Gracias.

Respuesta

9

No encripta el IV. Agréguelo con la clave encriptada y envíelo (en claro) al destinatario.

Estándares para esto existen. Este esquema se denomina "KeyTransRecipientInfo" en CMS (en el que se basa S/MIME) y PGP ofrece un modo similar. TLS también incluye el vector de inicialización como un parámetro en el identificador de algoritmo de cifrado de clave, utilizando la misma sintaxis ASN.1 que CMS. Una sólida biblioteca de código abierto para realizar esta operación está disponible para muchas, muchas plataformas.

Por lo menos, estudiar la especificación de CMS podría ayudar a evitar algunos de los muchos escollos en una implementación doméstica. Ver §6.1 and §6.2.1 of RFC 3369.

2

He hecho lo mismo, y lo manejé de la misma manera: concatene la clave AES con el IV y encripte ambas.

También podría simplemente enviar la clave y usar la clave para generar un IV, por ejemplo, utilizando los primeros 128 bits de un hash de la clave como IV. Eso debería estar bien en cuanto a seguridad, siempre y cuando genere una nueva clave AES para cada sesión y no reutilice la misma clave AES una y otra vez con la misma IV.

2

No hay ninguna razón para encriptar el IV; puede enviarlo sin problemas. Solo asegúrese de elegir uno nuevo cada vez (de la misma manera que lo hace con la tecla AES).

Dicho esto, a menudo es conveniente empaquetar juntos la llave AES y IV. El cifrado de 16 bytes no es tan caro.

Cuestiones relacionadas