HMAC签署算法
HMAC算法是对称签署中最著名的一个系列,HMAC不是一个算法,而是一类算法,这个算法基于一个hash函数(而且显然,要求是安全的hash函数),根据hash选择不同,HMAC也会有所不同。HMAC的基本想法是,将p拼接在数据d前面,做hash。根据安全的hash函数的性质,攻击者无法从v反推原始数据,即使他们拥有部分的明文(被签署数据d),而在不知道p的前提下,也无法构造出签名v。细节来说,HMAC要求对密钥p进行变形,得到两个密钥,并重复“拼接-hash”过程两次。
CMAC系列
MAC系列的介绍可以看这里:这里我们特别介绍一下CBC-MAC这种算法。这种算法是使用加密算法来完成验证的典型代表,拥有很多衍生,例如OMAC/CMAC/XMAC等。
上面我们简要介绍过CBC,这个模式循环使用前面块的数据来扰乱下一个块,然后再完成加密,而CBC-MAC通过密钥构造一个k1,配合IV=0来计算输出,取最后一个块输出,再用密钥构造一个k2,加密最后一个块,形成MAC数据。基于基本知识我们知道,对任意一个数据输入改变,最后的输出会发生变化,并且在没有密钥时无法构造MAC数据。
HMAC算法是对称签署中最著名的一个系列,HMAC不是一个算法,而是一类算法,这个算法基于一个hash函数(而且显然,要求是安全的hash函数),根据hash选择不同,HMAC也会有所不同。HMAC的基本想法是,将p拼接在数据d前面,做hash。根据安全的hash函数的性质,攻击者无法从v反推原始数据,即使他们拥有部分的明文(被签署数据d),而在不知道p的前提下,也无法构造出签名v。细节来说,HMAC要求对密钥p进行变形,得到两个密钥,并重复“拼接-hash”过程两次。
CMAC系列
MAC系列的介绍可以看这里:这里我们特别介绍一下CBC-MAC这种算法。这种算法是使用加密算法来完成验证的典型代表,拥有很多衍生,例如OMAC/CMAC/XMAC等。
上面我们简要介绍过CBC,这个模式循环使用前面块的数据来扰乱下一个块,然后再完成加密,而CBC-MAC通过密钥构造一个k1,配合IV=0来计算输出,取最后一个块输出,再用密钥构造一个k2,加密最后一个块,形成MAC数据。基于基本知识我们知道,对任意一个数据输入改变,最后的输出会发生变化,并且在没有密钥时无法构造MAC数据。