復号化する必要がある暗号化された要素を含む xml ドキュメントがあります。以下のxmlとxmlencについて読んだことから、この要素は送信者によって生成された対称キーでAES256-CBCを使用して暗号化されます(暗号化されたデータは2番目のCipherValue要素にあります)。次に、送信者は AES キーを RSA で暗号化しました。送信者は私の公開鍵を使用して、この RSA 暗号化を行う必要があります。暗号化された鍵は、以下の xml の最初の CipherValue に入れられました。
したがって、データを復号化するには、次のことを行う必要があります。 1. Base64 デコードし、送信者が使用する公開 RSA キーに対応する RSA 秘密キーを使用して AES キーを復号化します。2. 手順 1 で復号化された AES キーを使用して、2 番目の CipherValue 要素の暗号化されたデータを Based64 で復号化し、復号化します。
これは正しいです?
さて、これが私の問題です...送信者に公開鍵を渡していません。代わりに、送信者は公開鍵を含む証明書を私に提供し、それらを使用して復号化できると主張しています-私は彼らが秘密鍵で暗号化したので、公開鍵で復号化できることを暗示していると思います. 私が読んだすべてのことから、これはどのように機能するかではありません。代わりに、公開鍵で暗号化して、秘密鍵でデータを復号化できるようにする必要があります。
ここで正しいのは誰ですか? 秘密鍵で暗号化してから公開鍵で復号化できますか?
価値があるので、JCEでこれを試してみましたが、公開鍵でAESキー(最初にbase64でデコード)を復号化しようとすると、BadPadding例外が発生します。
XML 要素からいくつかの詳細を除いたものを次に示します...
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<e:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</e:EncryptionMethod>
<KeyInfo>
<X509Data>
<X509IssuerSerial>
<X509IssuerName> // issuer name removed </X509IssuerName>
<X509SerialNumber>11411601377033481249</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</KeyInfo>
<e:CipherData>
<e:CipherValue>
LLq+NfgwVF/qbMzTPtVnGfaaBxIFc5fmNeAk2dBHaPqb+Hti9Nre7dK+3MOyzucNSYwF76Be0zKZnIeAsQQoKgiU34/BZURq9uFHt8uUYA4dPtcYOIg6F5KR3r7KXBilT/QXYP3UicIcsY2NCA6g0Mp4PrF8b2Yi80Gn2oyZd30=
</e:CipherValue>
</e:CipherData>
</e:EncryptedKey>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>
// encrypted data removed
</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
ありがとう、トロイ