我了解 MAC 算法将消息和私钥作为输入并将它们散列为一个值。我了解发送者和接收者经常使用 MAC 来验证消息并检查消息的完整性。如果发送方/接收方成功计算出相同的 MAC,则 (1) 接收方可以确保发送方拥有密钥 (2) 接收方可以确保消息在发送过程中没有被篡改(因为否则它会生成一个新的mac 值)。我也了解数字签名与 MAC 有所不同。但似乎两者都验证了消息的发件人和真实性。如果您设置了成功的 MAC 方案,您就知道消息 (1) 来自拥有密钥的人(处理身份验证),并且 (2) 未被篡改(处理篡改)。那么,数字签名有哪些 MAC 没有的功能呢?有什么不同?
mac和数字签名有什么区别
- 生成:给定消息m和密钥K 1,计算 MAC 值或签名s。
- 验证:给定消息m、密钥K 2和 MAC 值或签名s,验证它们是否相互对应(MAC 值或签名对消息m有效,使用验证密钥K 2)
对于 MAC,密钥K 1和K 2是相同的(或者可以相互简单地重新计算)。有了签名,验证密钥K 2与K 1在数学上是有联系的,但并不完全相同,如果只知道K 2 ,就无法从K 2重新计算K 1或生成有效的签名。
因此,签名分离了生成和验证的权力。使用 MAC,任何能够验证 MAC 值的实体都必然有能力生成自己的 MAC 值。通过签名,您可以公开验证密钥,同时将生成密钥保密。签名是指您想要生成可由第三方验证的证明,而无需委托这些第三方提供任何东西。
应用程序: CA(如 Verisign 或 Thawte 或其他)向 SSL 服务器颁发证书。每个人,尤其是您的 Web 浏览器,都可以验证颁发给 SSL 服务器的证书是否确实由 Verisign/Thawte/whatever 签名。但这并不赋予您自己颁发(签名)证书的权力,这看起来好像它们是由 Verisign/Thawte/whatever 颁发的。
与往常一样,Thomas Pornin 的回答非常出色,但我想补充一点,这就是每个验证所代表的不同之处。简而言之,MAC 只能用于验证消息的完整性。签名不仅验证消息的完整性,而且验证发送者的身份。
区别在于算法的对称与非对称结构中所固有的。回到 Thomas 的帖子,MAC 是对称的;他们使用相同的密钥K来生成 MAC 并验证它。因此,他们验证包含 MAC 的消息是另一方最初发送到此对话的消息,因为能够以 MAC 仍然匹配的方式篡改消息被认为是困难的(并且“很难”在密码学中有“几乎不可能”的口语定义)。
然而,因为对称算法的密钥是“共享秘密”,所以它必须被共享,这意味着它并不是真正的秘密。有一些已知的方法可以与一个且仅一个其他特定的人共享此密钥,但正是这种共享过程使您可以积极地识别使用该密钥的其他人;算法本身无法向任何一方证明对方是应该拥有它的人。
数字签名 OTOH 是不对称的;使用了两个不同的密钥,一个用于生成,另一个用于验证。验证密钥是“公开的”;你可以在你的车上喷漆,然后把它开到 DEF CON(黑客大会)的中间,它不会让这个方案变得更弱。同样,在不知道生成密钥的情况下,很难生成或篡改消息和/或其签名并且仍然使一个匹配另一个。
此生成密钥是“私有的”;这是一个真正的秘密,只有一方知道,他们可以实施各种额外的物理和电子安全层来保护这些数据,甚至是他们自己(许多 PKI 是使用硬件安全模块设置的,以实际生成私钥并执行使用它进行加密;密钥永远不会离开该 HSM)。因此,理论上可以根据他们正确签署可以用他们的公钥验证的消息的能力来肯定地识别对话的另一方,因为地球上只有一个实体祈祷这样做.
Mac 和数字签名之间的主要区别在于MAC仅提供完整性和身份验证,而除了完整性和身份验证之外,数字签名还提供不可否认性。
在外行语言中,MAC 检查接收到的信息是否损坏。而数字签名检查真正的发件人,消息的发起者。在我们的日常生活中,不能否认他在任何文件上的签名,同样发送者也不能否认他在附加数字签名时发送的消息。
另一个不同之处在于所讨论的两个函数的算法方法。Mac使用对称密钥,而数字签名 使用非对称密钥。