0

1人の受信者に2通のメール(SMIME暗号化)があります。1つのメールは3DESを使用して暗号化され、もう1つのメールはAES256を使用して暗号化されます。

C#EnvelopedCmsクラスを使用して作成されたメール。

を使用して3DESメッセージを正常に復号化できます

openssl smime -decrypt -in trippledes.eml -inkey keyfile.pem

ただし、AES暗号化ファイルでこれを試してみると、OpenSSLはぎこちない出力を出力し、次のコメントで失敗します。

Error decrypting PKCS#7 structure 4128:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.\crypto\evp\evp_enc.c:539:

Thunderbirdもメールを開くことができません。ただし、Outlook2010はメッセージを開くのに問題はありません。

問題をトラブルシューティングするための最良の方法は何ですか?オンにできるロギングはありますか?

http://lapo.it/asn1js/でASN.1Decoderを使用して、両方のメールのASN.1構造をすでに調べました。どちらのメッセージも私には問題ないように見えるので、原因は暗号化されたコンテンツ自体にあると思います。

4

1 に答える 1

2

これは何年も遅れていることは知っていますが、他の人にとっては役立つかもしれません...

私は EnvelopedCms を数年間非常にうまく、そして楽しく使用し、他の多くの実装とメッセージを交換していました。今年誰かが AES の使用を要求することを決定したとき、少なくとも 1 つの Java ベースのシステムが私のメッセージを処理できていないことに気付きました。(彼らのエラーは「PKCS #7 MIME コンテンツを作成できません」でした)

ASN 情報ユーティリティを使用して送信内容を分析したところ、コンテンツの暗号化が AES に設定されているときに、EnvelopedCms が KeyEncryptionAlgorithm を RSA-OAEP に強制していることを発見しました。(コンテンツが他のもので暗号化されている場合、KeyEncryptionAlgorithm は単純な RSA でした。)

この動作を説明しているドキュメントや RFC は見つかりませんでした。変更する方法もないようです。

この問題に対する私の解決策は、BouncyCastle CmsEnvelopedDataGenerator クラスを使用することでした。これまでのところ、少なくとも EnvelopedCms と同様に機能し、RSA-OAEP キー暗号化の問題を回避しているようです。ほとんどのドロップイン置換 (使用される証明書クラス以外)。

受信者の Java ライブラリが RSA-OAEP アルゴリズムを使用できないことを具体的に述べたドキュメントは見つかりませんでしたが、それを削除すると、エラーはなくなり、メッセージは正常に送信されました。

BouncyCastle を使用したコード例:

private byte[] CmsEncrypt(byte[] message, string contentEncryptionOid, Org.BouncyCastle.X509.X509Certificate recipCertificate)
{
    var cmsGenerator = new CmsEnvelopedDataGenerator();
    var cmsData = new CmsProcessableByteArray(message);

    cmsGenerator.AddKeyTransRecipient(recipCertificate);

    var cmsEnvelope = cmsGenerator.Generate(cmsData, contentEncryptionOid);

    return cmsEnvelope.GetEncoded();
}
于 2015-12-10T15:02:14.703 に答える