8

このメッセージが暗号化されているときに、s / mime電子メールメッセージが添付された署名で署名されているかどうかを判断する(コンピューティングリソースの観点から)最も簡単な方法は何ですか?

メッセージに署名したばかりの場合、それは簡単です。それは幾分似ています:

添付署名用

   Content-Type: application/x-pkcs7-mime; smime-type=signed-data;
    name="smime.p7m"

または:

分離された署名用

   Content-Type: multipart/signed; protocol="application/x-pkcs7-signature";
    micalg=SHA1; boundary="----=_NextPart_000_00D2_01CD5850.61030BF0"

そのヘッダーで。

ただし、メッセージが暗号化されている場合、Content-Typeヘッダーはどちらの場合も同じであるため(暗号化と暗号化/署名のみ)、メッセージも署名されているかどうかはわかりません。

  Content-Type: application/x-pkcs7-mime;
    smime-type=enveloped-data;
    boundary="----=_NextPart_000_000D_01CDC82B.98454D80";
    name="smime.p7m"

メッセージが署名されているかどうかを確認するためだけに、メッセージを復号化する必要があるということですか?今のところ、メッセージを復号化する前に、メッセージが署名されているかどうかさえわからないようです(署名は暗号化されたデータ内にあるため)。または、S / MIMEで暗号化および署名されたデータには、復号化せずに暗号化/署名されたデータと暗号化/署名されていないデータを区別できるパターンがまだあります(復号化用の証明書がない場合でも可能です)?

4

2 に答える 2

11

S/MIMEは柔軟です。署名および/または暗号化を任意の組み合わせで行うことができます。ただし、電子メールクライアントは通常、すべて同じように動作します。Outlook2010、Apple's Mail、およびThunderbird 17はすべて、署名してから暗号化します。これら3つの結果はほぼ同じです。メッセージヘッダーには、次の3つのヘッダーが含まれます。

Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
    name="smime.p7m"
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64

メッセージの本文全体を暗号化してbase64エンコードします。

あなたの質問に答えるには:

このメッセージが暗号化されているときに、s / mime電子メールメッセージが添付された署名で署名されているかどうかを判断する(コンピューティングリソースの観点から)最も簡単な方法は何ですか?

唯一の方法はそれを復号化することです。

メッセージが署名されているかどうかを確認するためだけに、メッセージを復号化する必要があるということですか?

はい。

于 2013-09-12T16:40:35.820 に答える
7

目標が次のことを確認することである場合:

  1. 受信者のみがメッセージを復号化でき、
  2. 受信者は、誰がメッセージを書いたかを知っています。

次に、適切な順序は、署名し、暗号化してから、再度署名することです。そうでなければ、とにかくそれを信頼することはできません。これが理由です。

署名および暗号化され たメッセージ:送信者は最初にメッセージに署名し、次にメッセージを暗号化します。
ここで、受信者はメッセージを復号化してから、署名をそのままにして再暗号化し、(なりすましのヘッダーを使用して)サードパーティに送信できます。そのサードパーティは、元の受信者によって実際に転送されたときに、元の作成者がメッセージを直接彼に送信したと信じます。

暗号化および署名され たメッセージ:送信者は最初にメッセージを暗号化し、次に署名します。
攻撃者は誰でも、署名を削除して自分の署名に置き換え、メッセージの内容を知らなくてもメッセージの作成者であると主張することができます。

暗号化、署名、および暗号化 されたメッセージ:送信者はメッセージを暗号化して署名してから、再度暗号化します。
ここで、内部暗号化により、目的の受信者のみがメッセージを読み取ることができます。署名とは、作成者がコンテンツを認識しており、受信者がそれを意図していることを意味します。外部暗号化は、攻撃者がメッセージを知ったり改ざんしたりするのを防ぎます。

  • この場合、受信者は、メッセージが復号化されるまで、メッセージが署名されていることを知りません。

  • メッセージを2回暗号化する方が多い

  • さらに悪いことに、encrypt-then-signは攻撃に対して脆弱であることが知られています。

署名済み、暗号化済み、および署名済みメッセージ: 送信者はメッセージに署名して暗号化し、再度署名します。
ここで、内部署名は、作成者がコンテンツを認識していることを意味します。暗号化により、受信者のみが復号化できるようになります。また、外部署名は、作成者が受信者へのメッセージを意図したことを意味します。

  • 攻撃者が外部の署名を削除して自分の署名に置き換えて所有権を主張しようとすると、(置き換えられた)外部の署名は内部の署名と一致しません。

  • 受信者がメッセージを復号化してサードパーティに転送する場合、受信者は最も内側の署名をそのままにするか、自分の署名に置き換える必要があります。いずれの場合も、元の作成者はメッセージに対する責任を免除されます。

結論

現在の(壊れた)標準にもかかわらず、メッセージの送信者を確認できるのは、メッセージが最終ステップで署名されている場合のみです。したがって、最初に署名されてから暗号化されたメッセージについて心配する必要はありません。これは、署名者とされる人物がメッセージを送信したことを信頼できないためです。

たとえば、大統領から署名されて暗号化されたメッセージを受け取り、ホワイトハウスでの夕食に招待することを想像してみてください。大統領は実際にそのメッセージを書いたが、彼は実際にあなたに冗談を言うことに決めた誰かにそれを送った。

于 2012-11-22T15:52:31.380 に答える