MD(消息摘要)、MAC(消息认证码)、数字签名的区别
1.MD(消息摘要)-散列算法
摘要是哈希值,我们通过散列算法⽐如MD5算法就可以得到这个哈希值。摘要只是⽤于验证数据完整性和唯⼀性的哈希值,不管原始数据是什么样的,得到的哈希值都是固定长度的。
不管原始数据是什么样的,得到的哈希值都是固定长度的,也就是说摘要并不是原始数据加密后的密⽂,只是⼀个验证⾝份的令牌。所以我们⽆法通过摘要解密得到原始数据。
2.MAC(消息认证码)
hash算法只能验证数据的完整性,不能防⽌数据被篡改。⽐如:遇见中间⼈攻击,你会发现攻击者对消息进⾏篡改了,但是通过hash算法计算摘要值,你是⽆法知道消息被改动过的。因此这个时候就需要MAC算法了。
MAC值 = mac(消息+密钥)
MAC的特点
跟hash算法⼀样,可以验证数据的完整性。可以验证数据确实是由原始发送⽅发出的。
MAC值⼀般和原始消息⼀起传输,原始消息可以选择加密,也可以选择不加密,通信双⽅会以相同的⽅式⽣成MAC值,然后进⾏⽐较,⼀旦两个MAC值相同表⽰MAC验证正确,否则验证失败。
消息认证码与消息摘要类似,区别是消息摘要算法只是对数据作摘要计算,而消息认证码涉及到加密过程。
通信双方A和B,共享密钥K。若A向B发送消息时,则A计算MAC,它是消息和密钥的函数,即MAC = C(K,M) 其中,M为输入消息,C为MAC函数,K为共享的密钥,MAC为消息认证码。消息和MAC一起发送给接收方。接收方收到消息后,用相同的密钥进行相同的计算,得到新的MAC,并将接收到的MAC与其计算出的MAC比较。
mac工作原理
- A与B共享一个对称密钥K,别人是不知道的。A使用K通过MAC函数计算出消息M的MAC值H1
- A将消息M和H1发给B
- B收到M,也用K通过MAC函数对M求出MAC值H2
- B比较H1和H2。如果相等,表明消息M没有被中途改变。
计算MAC与加密过程非常相似,但有一个重要不同,在对称加密过程中,加密过程是可逆的,但在MAC中,发送方与接收方只进行加密过程。因此MAC算法不需要可逆,只要是单向函数(加密)就可以了。
2 HMAC(基于散列的消息认证码)
Hash-bases Message Authentication Code。简单理解就是为计算MAC值设计的一个MAC函数。
HMAC的基本思想是复用MD5与SHA-1之类现有的消息摘要算法。HAMC利用消息摘要算法,把消息摘要看成一个黑盒子,用共享密钥加密消息摘要,从而得出MAC。
3.数字签名
MAC不能保证消息的不可抵赖性,⽽数字签名可以保证。因为数字签名使⽤的是公钥密码体制,私钥只有你⾃⼰才知道;⽽MAC使⽤对称加密,既然⼀⽅能够验证你的MAC,就能够伪造你的MAC,因为发送⽅和接收⽅的秘钥是⼀样的。当然如果你在MAC中绑定⼀些关键信息,并通过某些⼿段,让⼀⽅只能⽣成MAC,另⼀⽅只能验证MAC,其实也是可以实现签名效果的。