El cifrado PGP con BouncyCastle C # hace que la advertencia de tecla no válida en la verificación de la firma

StackOverflow https://stackoverflow.com/questions/517635

  •  21-08-2019
  •  | 
  •  

Pregunta

Es necesario cifrar archivos PGP y enviarlos a través de FTP a un tercero. Los archivos se cifran con el DH / SCD clave pública del tercero y firmaron con nuestra clave privada.

El tercero tiene nuestra clave pública y su propia clave privada. funciona el cifrado / descifrado, pero el tercero están recibiendo advertencias cuando tratan de verificar nuestra firma.

Cuando tratamos de descifrar y verificar archivos cifrados de forma similar usando PGP Desktop verificar los archivos sin previo aviso.

El tercero está utilizando "McAfee E-Business Server"

La advertencia exacta es: ADVERTENCIA: Bad firma, no coincide con el contenido del archivo! Mal firma del usuario "nombre de usuario"

El código es un poco complicado, pero he publicado en mi blog . Puedo publicar aquí en lugar de un enlace si ello resulta más apropiado.

Cualquier penetración en cuanto a la forma de resolver este problema es apreciado.

¿Fue útil?

Solución

Si bien no puedo dar una explicación detallada en cuanto a los detalles del problema, aquí es una solución que funciona. En primer lugar, parece que las diferentes implementaciones de PGP son muy sensibles a la que se utilizó el programa a genereate las llaves en uso.

El escenario no:

  1. Crear claves de PGP Desktop (RSA v4, 2048/2048)
  2. Cifrar en BouncyCastle (DH / DSS, Elgamal)
  3. Acceder BouncyCastle (con la clave RSA)
  4. El descifrado y el éxito de verificación de firma en PGP Desktop.
  5. éxito descifrado, pero falla en la verificación de firmas de McAfee Business Server.

Con el fin de hacer que McAfee Business Server tener éxito en la verificación de las teclas o bien crear las claves en BouncyCastle utilizando el código del código fuente BouncyCastle. (Org.BouncyCastle.Bcpg.OpenPgp.Examples.RsaKeyRingGenerator) Este código se puede cambiar si es necesario propiedades clave específicas.

Otra alternativa es utilizar McAfee Business Server para generar las claves. Para eso se necesita el acceso al software. Hice mis pruebas con una versión de prueba. (Que por cierto era un dolor en el cuello para poner en marcha)

Actualización: Me hice todos mis ensayos sobre E-Business Server 8.5.3 (ensayo). Llegué a un punto en el que podía encriptar y firmar en la Bounty y descifrar y verificar en E-Business Server. Resulta que el tercero está utilizando E-Business Server 7.0 que se negó a verificar la firma. Con el fin de conseguir que todo funcione necesitamos para crear firmas V3.

Hemos cambiado de:

PgpSignatureGenerator pgpSignatureGenerator = new PgpSignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);

a

PgpV3SignatureGenerator pgpV3SignatureGenerator = new PgpV3SignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top