认证
Hash与MAC
Hash
- Hash函数是一种单向函数,在可承受时间内无法逆向破解。
- Hash函数只用来做摘要,来验证数据的完整性。
MAC
MAC主要分为两种,CMAC(基于块密码)和HMAC(基于Hash函数)。CMAC
CMAC往往使用AES作为对称密码,在这个过程中,往往将原数据分为若干个大小相同的块(通常为128位),然后对每个块进行加密。在一种算法下,我们可能会通过对所有的块进行异或操作得到最终的MAC,而在其他的情况下我们可能通过其他方式来获取MAC值。HMAC
HMAC是一种基于Hash函数的MAC.在一些算法下,我们会使用一个双方共享的秘钥K分别与内外两层填充值进行异或操作,将内层填充值接在元数据之后,然后对其进行HASH运算,得到内部哈希值。随后,将外层填充值接在内部哈希值之后,再次进行HASH运算,得到最终的MAC值。即:HMAC(K,m)=H((K⊕opad)||H((K⊕ipad)||m))
区别
MAC是用来做消息认证的,即验证数据的完整性和真实性,即接收方可以确认消息是由真正的发送方所发出。而Hash函数只用来做摘要,来验证数据的完整性。但是这依然无法避免接收方伪造消息,并声称这是由发送方发出的,以及发送方声称消息不是由自己发出的情况,因此,我们就引出了签名的概念。
数字签名
发送方使用自己的私钥来对消息进行签名,接收方使用发送方的公钥来验证签名。
由于私钥只由发送方持有,而任何人都可以用公钥来验证签名,因此发送方无法抵赖,相似的,接收方也无法伪造签名。
在保密程度最高的情况下,我们采取: 认证 + 签名 + 保密的方式来维护数据的私有性:
即先计算摘要,随后对摘要进行签名,附在元数据之后,最后再对整个数据进行对称或者非对称的加密。