Funciones EVP de OpenSSL, más específicamente EVP_SealInit

4

Referencia: enlace

Quiero compartir de forma segura una clave simétrica entre dos puntos finales utilizando la interfaz EVP de OpenSSL. Transferir la clave simétrica cifrada y descifrarla en el otro extremo funciona bien, pero eso me deja solo con el remitente, ya que la función SealInit genera una clave simétrica aleatoria y la cifra inmediatamente con la clave pública del receptor.

Entonces, mi pregunta es, ¿cómo se supone que debo usar estas funciones?

Podría resolverlo por:

a) Generar una clave simétrica de antemano y cifrarla con la clave pública del receptor, lo que hace que parte de la operación de sellado sea inútil

o

b) Usar una clave simétrica separada tanto para el remitente como para el receptor, que parece innecesariamente complejo

Dado que ninguna de las dos opciones me parece una buena solución, creo que debo estar perdiendo algo o entendiendo mal algunos conceptos básicos, ya que el cifrado es nuevo para mí.

Gracias por leer mi pregunta.

    
pregunta Just a guest 30.03.2016 - 16:41
fuente

1 respuesta

1

Sí, EVP_{Seal,Open}* do cifrado "híbrido": cifre simétricamente los datos con una clave única, y publique de forma cifrada esa clave a los destinatarios, y descifre según corresponda. ( EVP_Digest{Sign,Verify}* de manera similar hace la firma híbrida: hash simétrico de los datos y clave pública firma el hash.) Si no desea esta funcionalidad, no use estas rutinas.

Si desea publicar y cifrar y descifrar una pequeña cantidad de datos, como una clave simétrica, use EVP_PKEY_{encrypt,decrypt}{_init,} . La mayoría de las claves simétricas son solo bytes aleatorios (o bits) y puede generar con RAND_bytes . Suponiendo que posteriormente desea cifrar y descifrar simétricamente los datos con esa clave, consulte EVP_{Encrypt,Decrypt}* o EVP_Cipher* , que tiene una marca para seleccionar la dirección.

    
respondido por el dave_thompson_085 31.03.2016 - 07:46
fuente

Lea otras preguntas en las etiquetas