在此邮件加密时,判断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加密和签名数据可能还有一些模式可以让我在没有解密的情况下区分加密/签名和加密/未签名数据(如果我没有解密证书,甚至可能这样做)? / p>
答案 0 :(得分:8)
S / MIME很灵活;您可以以任何您想要的组合进行签名和/或加密。但是,电子邮件客户端通常都采用相同的方式:Outlook 2010,Apple的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电子邮件在此时使用附加签名进行签名 邮件是加密的吗?
唯一的办法就是解密它。
这是否意味着我必须解密消息才能判断它是否存在 还签了?
是
答案 1 :(得分:6)
如果目标是确保:
然后正确的顺序是签名,加密,然后再次签名。否则你无论如何都不能相信它。这就是原因。
签名和加密邮件: 发件人首先签署邮件,然后加密。
在这里,收件人可以解密邮件,然后在签名完整的情况下对邮件进行重新加密,并将其发送给第三方(带有欺骗性标题)。当第三方实际上由原始收件人转发时,第三方会相信原作者将邮件直接发送给他。
加密和签名消息: 发件人首先加密消息,然后签名。
任何攻击者都可以删除签名,将其替换为自己的签名,并在不知道其内容的情况下声明该签名的作者身份。
加密,签名和加密邮件: 发件人对邮件进行加密和签名,然后再次对其进行加密。
这里,内部加密确保只有预期的接收者才能阅读该消息。签名意味着作者知道内容并将其打算给收件人。外部加密可防止攻击者知道或篡改该消息。
在这种情况下,收件人在解密之前不会知道邮件是否已签名。
加密邮件两次更多
更糟糕的是,加密然后签名known容易受到攻击。
签名,加密和签名消息: 发件人签名并加密消息,然后重新签名。
这里,内部签名意味着作者知道内容。加密确保只有收件人才能解密它。外部签名意味着作者希望收件人留言。
如果攻击者试图通过删除外部签名并将其替换为自己的签名来声明所有权,则(替换的)外部签名将与内部签名不匹配。
如果收件人将邮件解密并转发给第三方,则他必须保留最内层签名或将其替换为自己的签名。在任何一种情况下,原作者都免除了对该消息的责任。
<强>结论强>
尽管当前(已损坏)标准,如果已在最后一步中签名,您可以验证消息的发件人 。因此,您无需担心首先签名并然后加密的邮件,因为您不能相信所谓的签名者会将邮件发送给您。
例如,想象一下从总统那里接收签名然后加密的消息,邀请你去白宫吃饭。事实上,总统确实写了这个消息,但实际上他把它发给了那个决定对你开玩笑的人。
答案 2 :(得分:3)
通常情况下,邮件首先被加密,然后签名,因此在ASN.1 DER编码的CMS信封中确实很容易看到。有关更多信息,请参阅公共CMS RFC。