5

JAVA で SMIME ベースのアプリケーションを開発するとします。これらは、SMIME の暗号化/復号化についてより明確にする必要がある特定の領域です。単一の受信者の場合のメッセージの暗号化と復号化の方法を理解しました。

受信者が 1 人だけの場合

  • メッセージ コンテンツの暗号化に使用される、ランダムに生成されたセッション キー。
  • 次に、このランダムなセッション キーが受信者の公開キーを使用して暗号化され、SMIME メッセージが送信されます。
  • 暗号化されたメッセージは受信者の秘密鍵を使用して復号化され、受信者側でメッセージの暗号化に使用されたセッション キーが取得されます。

複数の受信者がそこにいる場合は、

  • メッセージ コンテンツの暗号化に使用される、ランダムに生成されたセッション キー。
  • メッセージが複数の受信者に送信される場合、対称キーはすべての受信者の公開キーによって個別に暗号化されます。エンベロープ メッセージとすべての暗号化された対称キーは、PKCS#7 形式を使用して一緒にパッケージ化されます。
  • 次に、このランダムなセッション キーは、各受信者の公開キーを使用して暗号化され、SMIME メッセージが送信されます。

複数の受信者の暗号化されたセッション キーが同じメッセージに付属している場合、

  • 受信側での復号化はどのように行われますか?
  • 受信者はすべての暗号化されたセッション キーを反復処理し、セッション キーの復号化を試みていますか?
  • 受信者が 50 人いる場合、受信者はすべての受信者の暗号化されたテキストをセッション キー用に復号化する必要がありますか?

役立つリソースを見つけたり、質問に対する回答を提供したりできる人はいますか?

4

1 に答える 1

4

メッセージが複数の受信者に送信される場合、対称キーはすべての受信者の公開キーによって個別に暗号化されます。

対称セッション キーは、必要に応じて、送信者に対して非対称に暗号化されます。

暗号化されたすべての対称キーが一緒にパッケージ化されます

受信者ごとに、暗号化されたキー、使用された証明書のシリアル番号などを持つブロックがあります。

次に、このランダムなセッション キーは、各受信者の公開キーを使用して暗号化され、SMIME メッセージが送信されます。

これはそうではありません。上記の手順で十分です。生成された対称セッション キーは、受信者 (および送信者) ごとに非対称に暗号化する必要があります。

CMS RFC5652およびS/MIME RFC5751で定義されています。S/MIME メッセージは、MIME ボディと CMS コンテンツ タイプで構成されます。受信者 (および送信者) ごとに CMS が必要RecipientInfo Typeです。このタイプには、どの暗号鍵がどの受信者に属しているかという情報があります。

openssl cms -inform smime -in Test_enc.mbox -cmsout -print
CMS_ContentInfo: 
  contentType: pkcs7-envelopedData (1.2.840.113549.1.7.3)
  d.envelopedData: 
    version: <ABSENT>
    originatorInfo: <ABSENT>
    recipientInfos:
      d.ktri: 
        version: <ABSENT>
        d.issuerAndSerialNumber: 
          issuer: C=.., ST=.., L=.., O=.., OU=.., CN=..
          serialNumber: 16756039346226544442
        keyEncryptionAlgorithm:
          algorithm: rsaEncryption (1.2.840.113549.1.1.1)
          parameter: NULL
        encryptedKey:
          0000 - 07 b9 dc b8 97 ed ea b0-8f 9c 30 fa 0c f6 a0   ..........0....
          ...
          01fe - f0 62                                          .b
        
      d.ktri: 
        version: <ABSENT>
        d.issuerAndSerialNumber: 
          issuer: C=.., ST=.., L=.., O=.., OU=.., CN=..
          serialNumber: 16756039346226544442
        keyEncryptionAlgorithm:
          algorithm: rsaEncryption (1.2.840.113549.1.1.1)
          parameter: NULL
        encryptedKey:
          0000 - 07 b9 dc b8 97 ed ea b0-8f 9c 30 fa 0c f6 a0   ..........0....
          ...
          01fe - f0 62                                          .b

このメールは自分用に暗号化されているため、ブロックは送信者と受信者として 2 回含まれています。

  • 受信側での復号化はどのように行われますか?
  • 受信者はすべての暗号化されたセッション キーを反復処理し、セッション キーの復号化を試みていますか?
  • 50 人の受信者がいる場合、受信者はすべての受信者の暗号化されたテキストをセッション キー用に復号化する必要がありますか?

受信者は、正しい暗号化キーを見つけるために、リストissuerserial numberの適切なものを検索するだけで済みます。recipientInfos

于 2016-02-05T10:55:34.913 に答える