¿Es este un método seguro de cifrado de firma digital +?

2

Estoy tratando de envolver mi cabeza en torno a las firmas digitales y cómo RSA Encryption las admite. Y qué orden hacer con ellos y qué cifrar específicamente.

Digamos que tenemos a Alice y Bob y un mensaje secreto M

Alice tiene: Clave pública de Bob (B_pk), Clave secreta de Alice (A_sk), Clave pública de Alice (A_pk)

Bob tiene: la clave pública de Bob (B_pk), la clave secreta de Bobs (B_sk), la clave pública de Alice (A_pk)

  1. Alice genera un hash SHA256 del mensaje M. SHA256 (M)
  2. Cifre el hash resultante con la clave secreta de Alice usando RSA. C1 = RSA (A_sk, SHA256 (M))

  3. Luego Encripta M con la clave pública de Bob. C2 = RSA (B_pk, M)

  4. Enviar C1 a Bob

  5. Envía C2 a Bob
  6. Bob obtiene C1, descifra con la clave pública de Alice lo que resulta en SHA256 (M) _received
  7. Bob obtiene C2, se desencripta con su clave secreta, lo que resulta en M_received
  8. Bob ejecuta SHA256 (M_received) y verifica si SHA256 (M_received) == SHA256 (M) _received

¿Hay algún defecto en este método? ¿Está protegida la confidencialidad, la integridad y la autenticidad?

Actualizar: Tengo curiosidad por saber cuáles son las debilidades en el método anterior.

    
pregunta user2327195 01.12.2015 - 22:50
fuente

2 respuestas

1

El orden es importante. Cifre el mensaje al receptor y luego firme el mensaje. El receptor puede verificar la firma y luego descifrarla.

La otra forma (firmar y luego cifrar) significa que Bob (receptor) puede enviar el mensaje firmado a otra persona de Alice (el remitente) sin su conocimiento o acuerdo como si fuera de otra persona (se desencripta con su clave, se encripta con la 3ra. clave).

Al cifrar y firmar, está claro que Alice significó el mensaje para Bob.

La idea es que nadie más puede firmar el mensaje cifrado y nadie más puede descifrar el mensaje firmado.

Además, si Bob necesita mostrar lo que firmó Alice (el mensaje es un contrato), el algoritmo de cifrado debe ser simétrico como AES y Bob revela la clave. Es la clave simétrica que Alice cifra con la clave pública de Bob. Entonces, hay dos encriptaciones: simétrica, asimétrica y una firma.

    
respondido por el Andrew Philips 02.12.2015 - 00:37
fuente
1

Primero, incluya una marca de tiempo con cada mensaje (use el formato JSON para simplificar) junto con cualquier otra información con la que desee verificar con fines de seguridad o identificación. Luego, encripta el hash de cada mensaje usando la clave privada. Añade el hash al final del mensaje. Digamos que Alice le envía su mensaje firmado a Bob. Bob toma el hash cifrado e intenta descifrarlo con la clave pública de Alice. Si el descifrado falla, no se puede confiar en el mensaje. Además, si el hash descifrado no coincide con un hash recalculado, no confíe en el archivo. Solo confía si todos los cheques pasan.

Si desea que todo el mensaje esté cifrado, cifrelo utilizando un algoritmo de cifrado simétrico utilizando un CSPRNG generado como clave. Luego tome el CSPRNG y cifrelo usando la clave pública del destinatario. Incluya CSPRNG cifrado con el mensaje cifrado que se firmará. Después de que el destinatario verifique la firma, simplemente pueden descifrar la clave de cifrado utilizando su clave privada y, por lo tanto, pueden descifrar el mensaje dentro de él también. Pero asegúrese de cifrar siempre antes de firmar. Mejores prácticas y todo.

También me gustaría señalar que cuanto más use una clave privada para firmar algo que tiene el potencial de estar comprometido, aumenta el potencial de que su clave privada se vea comprometida también (dependiendo del CSPRNG utilizado internamente para encriptación). Por lo tanto, si tiene muchas comunicaciones, recomendaría implementar un esquema HMAC en la parte superior y usarlo siempre que sea posible (en lugar de utilizar puramente firmas digitales que utilizan cifrado asimétrico). Si no fuera por seguridad, al menos por eficiencia.

    
respondido por el Jonathan Gray 02.12.2015 - 00:53
fuente

Lea otras preguntas en las etiquetas