2009-02-05 4 views
4

Nous devons crypter les fichiers PGP et les envoyer par FTP à un tiers. Les fichiers sont cryptés avec la clé publique DH/DSS du tiers et signé avec notre clé privée.Cryptage PGP avec BouncyCastle C# provoque un avertissement de clé non valide lors de la vérification de signature

Le tiers a notre clé publique et sa propre clé privée. Le cryptage/décryptage fonctionne, mais les tiers reçoivent des avertissements lorsqu'ils essaient de vérifier notre signature.

Lorsque nous essayons de décrypter et de vérifier des fichiers cryptés de manière similaire à l'aide de PGP Desktop, les fichiers vérifient sans avertissement.

Le tiers utilisent "McAfee E-Business Server"

L'avertissement est exact: AVERTISSEMENT: signature Bad, ne correspond pas le contenu du fichier! Mauvaise signature de l'utilisateur "nom d'utilisateur"

Le code est un peu impliqué, mais I posted it on my blog. Je peux poster ici au lieu d'un lien si c'est plus approprié.

Un aperçu de la façon de résoudre ce problème est apprécié.

Répondre

2

Bien que je ne puisse pas donner une explication complète sur les détails du problème, voici une solution qui fonctionne. Tout d'abord, il semble que les différentes implémentations de PGP sont très sensibles à quel programme a été utilisé pour générer les clés en cours d'utilisation.

Le scénario défaillant:

  1. créer des clés dans PGP Desktop (RSA v4, 2048/2048)
  2. Crypter à BouncyCastle (DH/DSS, Elgamal)
  3. Connexion BouncyCastle (Avec le RSA clé)
  4. Succès de la vérification du cryptage et de la signature dans PGP Desktop.
  5. Le succès du décryptage, mais la vérification de la signature échoue dans McAfee Business Server.

Afin de réussir McAfee Business Server pour vérifier les clés, soit créer les clés BouncyCastle en utilisant le code à partir du code source BouncyCastle. (Org.BouncyCastle.Bcpg.OpenPgp.Examples.RsaKeyRingGenerator) Ce code peut être modifié si vous avez besoin de propriétés clés spécifiques. Une autre alternative consiste à utiliser McAfee Business Server pour générer les clés. Pour cela, vous devez avoir accès au logiciel. J'ai fait mes tests avec une version d'essai. (Qui d'ailleurs était une douleur dans le cou pour se lever et courir)

Mise à jour: J'ai fait tous mes tests sur E-Business Server 8.5.3 (essai). J'ai atteint le point où je pouvais crypter et signer en Bounty et décrypter et vérifier dans E-Business Server. Il s'avère que le tiers utilise E-Business Server 7.0 qui a refusé de vérifier la signature. Pour que tout fonctionne, nous avions besoin de créer des signatures V3.

Nous avons changé de:

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

à

PgpV3SignatureGenerator pgpV3SignatureGenerator = new PgpV3SignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1); 
Questions connexes