消息可能带有数字签名,MAC或消息哈希,以作为某种证明。

每个原语都向接收者提供哪些保证?

需要什么样的键?

评论

似乎是试图创建一个规范的问题来解释通常混淆的操作之间的区别。

确实是个好问题

#1 楼

这些类型的加密原语可以通过它们实现的安全性目标来区分(在“附加到消息”的简单协议中):


完整性:接收者可以确信消息吗未被意外修改吗?
身份验证:收件人可以确定邮件是发件人吗?
不可否认性:如果收件人将邮件和证据传递给第三方,则第三方可以一方有信心该消息源自发件人? (请注意,我所说的是从密码意义上而不是从法律意义上说的不可否认性。)

这个问题也很重要: br />密钥:原语是否需要共享密钥或公私密钥对?

我认为简短的答案最好用表来解释:

br />
请记住,对使用的密钥没有信心的认证是没有用的。对于数字签名,收件人必须确信验证密钥实际上属于发件人。对于MAC,接收者必须确信共享对称密钥仅与发送者共享。

较长的答案:

消息的(无密钥)哈希,如果将其附加到邮件本身,则只能防止对邮件(或哈希本身)的意外更改,因为修改邮件的攻击者可以简单地计算并使用新的哈希而不是原始哈希。因此,这仅提供完整性。有时,这会与非常大的文件(例如ISO映像)的哈希一起使用,其中哈希本身是通过HTTPS传递的,而大文件却可以通过不安全的通道进行传输。

消息身份验证码(MAC)(有时也称为键哈希)可防止未知密钥(由发送者和接收者共享)的任何人伪造消息。

这意味着接收者可以伪造任何消息-因此,我们既具有完整性和身份验证(只要接收者没有分裂的性格),但就不能否认。

此外,攻击者可以重播通过相同的密钥,因此协议应对此采取措施(例如,通过包含消息号或时间戳)。 (此外,在进行双向对话的情况下,请确保双方具有不同的密钥,或者通过另一种方式确保攻击者无法将来自一侧的消息发送回该侧。)

MAC可以从非密钥哈希创建(例如,使用HMAC构造),也可以直接作为MAC算法创建。

使用私有密钥创建(数字)签名,并通过非对称密钥对的相应公钥。只有私钥的持有者才能创建此签名,通常任何知道公钥的人都可以对其进行验证。数字签名不能阻止前面提到的重放攻击。

有一种特殊情况,即指定验证者签名,只有知道其他密钥的人才能验证,但这通常不是在说“签名”。

因此,它提供了完整性,身份验证和不可否认性。而且,它们通常比MAC慢,因此通常仅在还没有共享机密或不可否认属性很重要时才使用。

评论


$ \ begingroup $
一个有趣的变化是使用DH密钥交换的结果作为MAC的密钥。这样,您可以使用非对称密钥,但可以避免不可否认性。
$ \ endgroup $
– CodesInChaos
2012年12月11日12:04

$ \ begingroup $
因此,基本上:MAC是使用“对称”密钥的哈希,签名是使用非对称密钥的哈希。
$ \ endgroup $
– David天宇黄
2014年3月17日下午3:57

$ \ begingroup $
哈希和MAC可以被截断为任意大小。签名不能。
$ \ endgroup $
–ao
16年5月3日在13:25

$ \ begingroup $
请注意,此图不再是正确的。一些密码学家说,MAC更“完整”,而不是认证,因为它更清楚。而散列不提供完整性,而是提供前映像,第二前映像的抗冲突性。
$ \ endgroup $
– David天宇黄
17年2月13日在17:09

$ \ begingroup $
@flimm检查Dan Boneh和Shoup关于密码学的书。 i.imgur.com/j0vL8Rw.png
$ \ endgroup $
– David天宇黄
17年2月14日在18:54



#2 楼

哈希=数学函数的结果,难以逆向工程。
将哈希应用于文本的结果是很长的代码。
哈希示例:MD5,SHA1。
长度的MD5代码的最大长度为128位,SHA1代码的长度为160位。
带有哈希值:您无法还原为原始消息。但是相同的消息将始终给出相同的哈希值。因此,如果您收到消息和哈希。您总是会计算自己的哈希值。如果2个哈希值匹配,则表示消息是原始消息,否则,则表明该消息已被篡改。
关于哈希的重要一点是,对消息的微小更改会对哈希码产生巨大的影响。
这意味着散列可确保消息的完整性。
加密(您没有要求,但在上下文中很重要)=您以不可能或不可能的方式替换消息的文本至少很难解密,除非您拥有密钥。如果将密钥与加密的消息结合使用,则会得到原始消息。
这意味着加密可确保消息的保密性。
有两种加密类型:对称和非对称。
对称更快,但安全性更低。它仅使用1个密钥进行加密和解密。发送者和接收者都需要知道密钥并将其保密。
对称加密中的风险部分是将密钥从一个发送到另一个,因为只有一个密钥,如果妥协了整个会话,
示例:AES,DES。
非同步速度较慢,但​​更安全。它使用4个密钥,每个用户有2个密钥,一个用于加密,一个用于解密,这2个密钥在数学上是链接的。加密密钥是公用密钥,而解密密钥是专用密钥。公钥只能通过与其匹配的私钥来解密。
顾名思义,公共密钥不是秘密,这对密钥的所有者可以将其公共密钥发布到他的网站或任何人都可以选择的东西上,实际上,他必须这样做才能接收可以只能使用他的私钥解密。就像一个地址或邮箱。顾名思义,私钥必须保密。如果这对密钥的所有者的私人密钥遭到破坏,那么任何人都可以知道他收到了什么消息。在这种情况下,最好的做法是生成一对新密钥。
要使用非同步加密进行通信,请交换公共密钥。与对称加密不同,您可以公开进行此操作,如果他只知道您的公共密钥,则没有人可以阅读您的消息。

如果要发送消息,请使用其他人的公共密钥来发送消息。加密邮件并将其发送给他们,只有他们才能使用私钥将邮件解锁并阅读。
如果您要接收邮件,则其他人必须已使用您的公钥来加密您的邮件邮件,这意味着只有您的私钥才能解密该邮件。

示例:RSA,DSA。
当然,大多数情况下,这是通过电子邮件或其他形式的邮件自动完成的消息传递。您可能已经使用非对称或对称加密进行通信,而无需手动加密和解密消息。
现在,在数字签名中,情况恰好相反。您不使用他人的公共密钥加密,而是使用您自己的私有密钥加密。因此,任何人都可以使用公开的公开密钥来解密该消息。这怎么签名?因为只有您才可以访问您的私钥,这意味着如果仅解密就可以发送该消息。为什么也要选择后者2?
因为数字签名实际上使用私钥加密的是您要发送的整个邮件的哈希值。

如果您的邮件是:“您好,格里夫将军!”所有这些文本都使用一个哈希来生成代码,然后使用您自己的私钥对该代码进行加密。
接收消息的人使用您自己的公钥解密签名,然后他得到一个代码。他对整个消息应用了相同的哈希算法(例如MD5 pe SHA1),您应该提及消息中使用的哈希算法,并且如果他得到的哈希结果与他得到的代码/哈希结果匹配用您的公钥解密您的数字签名,这不仅意味着该消息是由您发送的,因为您是拥有加密数字签名的私钥的人,而且这意味着他收到的消息是您的原始意思发送,因为其哈希值与签名中的哈希值匹配。由于签名的原因,您不能否认消息和您自己的真实性。

但是如何确保公开发送的公钥不能被篡改,或者有人可以对其进行验证,自己的公开密钥,并声称这是您的密钥?这样,他们就可以解密发送给您的消息,而您却不能。这就是数字证书的来源。数字证书确保您姓名中张贴的公共密钥确实是您的公共密钥。
数字证书包括有关公共密钥的信息,有关其所有者的信息(称为主题)和验证证书内容的实体的数字签名,称为签发者的第三方。如果签名有效,并且检查证书的软件信任发行者,则它可以使用该公钥与数字证书的主题进行安全通信。
您为什么不做一个简单的散列来保证消息的完整性?因为攻击者可以接收您的消息,所以请创建一个新消息,然后进行新的哈希处理,然后将其发送给接收者。哈希将匹配,并且接收者无法分辨接收来自您还是来自攻击者的消息。就像数字签名一样,攻击者没有您的私钥去进行非对称密钥加密。他可以使用自己的私钥对其进行加密,但是接收者将无法使用您的公钥对其进行解密,并且会意识到签名不是来自您的。
但是如果您要确保签名的完整性消息,但不一定是消息的作者,您只是希望消息能更快地工作?您不在工作场所或在公共机构中,没有与朋友聊天,也没人在乎确保消息彼此之间的法律约束。这就是HMAC出现的地方,与数字签名不同,HMAC使用对称密钥对消息的哈希进行加密。
通过对称密钥进行加密,由于您是不是唯一可以访问该对称密钥的人。接收者也具有相同的密钥,他本可以亲自发出该消息。当然,他们是仅有的两个有权使用对称密钥的人,因此,除非其中一个破坏了密钥,即收到的消息,如果您知道自己不是该密钥的编写者,则可以确定
HMAC中的H代表哈希,而MAC则代表消息认证代码,这意味着该代码可通过允许观看者观看者来保证数据完整性和真实性拥有秘密密钥以检测对消息内容的任何更改。 MAC通常包含三个部分:密钥生成算法,签名算法和验证算法。
简而言之:
数字签名=使用发送者的私钥对邮件的哈希进行加密。
HMAC =使用对称密钥对邮件的哈希进行加密。

评论


$ \ begingroup $
欢迎使用crypto.SE。这个答案有多个问题。一些:当带有散列的标准假设是其构造是公开的时,“逆向工程师”正在从示例或代码中找到规范;您想要:很难“反转”,但这只是哈希的所需属性之一。 “将散列应用于文本的结果是长代码”,这具有误导性:输出通常比输入短;您需要“固定大小的位串”。 “如果2个哈希匹配,则表示消息是原始消息”是错误的,哈希也可以更改!
$ \ endgroup $
–fgrieu♦
20-6-29在8:43