Pregunta

He la tarea de transferir pequeños mensajes binarios (1 o 2 kb de longitud) entre una aplicación de escritorio y dispositivos móviles. Los mensajes deben ser encriptados de forma asimétrica (RSA por ejemplo). Por lo que he aprendido que uno debe utilizar un sistema de cifrado híbrido para este tipo de tareas:

  1. Generar clave simétrica aleatoria
  2. Cifrar texto plano con clave simétrica (usando AES por ejemplo)
  3. Cifrar clave simétrica con la clave pública
  4. Transmitir texto cifrado y la clave simétrica cifrada

Me gustaría no inventar un formato propio para almacenar el texto cifrado y la clave simétrica cifrada. Así que me tropecé con estándar de CMS (sintaxis de mensajes criptográficos). A primera vista se ve exactamente como lo que necesito. Si he entendido correctamente la norma que incorpora el texto cifrado y la clave simétrica cifrada, así como información sobre los algoritmos utilizados.

¿Alguien puede decir si se debe utilizar el estándar de CMS para la tarea se describe? ¿Son compatibles con CMS de OpenSSL es suficiente para mis necesidades?

Saludos, Christian

¿Fue útil?

Solución

CMS definitivamente apoya la secuencia de operaciones que busca. En el lado negativo, tanto el formato CMS en sí y la API de OpenSSL para ello son bastante complejos.

Una arruga es menor CMS opera principalmente en términos de certificados X.509 en lugar de claves públicas. Se podría hacer frente a esto en su sistema, ya sea por hecho el despliegue de una PKI, o simplemente el uso de certificados con firma (que son básicamente equivalente a pasar claves RSA alrededor de desnudos, pero tienen la ventaja de ser un formato genérico para la unión de la clave y metadatos que a veces es muy útil disponer de todos modos).

OpenSSL tiene casi nada de la documentación de la API CMS; la mejor referencia para ello he podido encontrar es cms.c en las aplicaciones / directorio de la distribución de la fuente de OpenSSL; el código está estructurado como función principal una línea de 1000, que es un poco molesto, pero no realizar el cifrado con una clave pública por lo que probablemente puede usar eso como una guía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top