MAC
消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。
安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要【hash】所获得的一个值,可用于数据源发认证和完整性校验。
1. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
2. 收信者用同样的MAC算法计算收到的消息的MAC值,并对比两者。
HMAC
介绍:
Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
a specific construction for calculating a message authentication code (MAC) involving a cryptographic hash function in combination with a secret cryptographic key. As with any MAC, it may be used to simultaneously verify both the data integrity and the authenticity of a message.【主要是为了能让人对对方身份正确性和消息有效性进行验证,与消息摘要的最大不同,就是有签名密钥!】
方法:
HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))
【opad重复0x36,ipad重复0x5C】
通过两次hash两个不同的key来生成。 还没有发现有任何的方法来产生碰撞。
步骤:
First-Hash: H(Ko XOR Ipad || (data to auth))
Second-Hash: H(Ko XOR Opad || First-Hash)
1. 字符含义
H 代表所采用的HASH算法(如SHA-256)
K 代表认证密码
B 代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小 【SHA-1和SHA-256 B = 64,SHA-384和SHA-512 B = 128 】
Ko 代表HASH算法的密文 【在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)
Opad 用0x5a重复B次
Ipad 用0x36重复B次
2. Ko与ipad做异或运算。
3. 将数据流text填充至第2步的结果字符串中
4. 用H作用于第3步生成的数据流。
5. Ko与opad做异或运算。
6. 再将第4步的结果填充进第5步的结果中。
7. 用H作用于第6步生成的数据流,输出最终结果
应用:
HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中
1. 客户端向服务器发出一个验证请求
2. 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)
3. 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
4. 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户
安全性:
HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法
1. 使用的密钥是双方事先约定的,第三方不可能知道。能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。
2. HMAC与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效