什么是基于AES的CMAC算法?

采用AES加密算法,使用密钥K,对明文P进行加密,得到的密文C,作为明文P的认证码,和明文P一起传输给接收方。接收方收到后,再使用自己的密钥,对明文再做一次AES加密,生成新的认证码,与接收到的发送方的认证码进行对比验证。如果相等,说明明文没有被篡改,接收方就可以接收明文并处理;如果不相等,说明明文被篡改,数据不安全,则丢弃!

这就是基于AES的CMAC算法,多用于消息数据的正确性认证,生成的认证码,叫作message authentication code,消息认证码,简称MAC。

什么是Hash?

简单来说,把任意长度的输入数据通过散列算法变换成固定长度的输出数据(Hash值)。输入值的长度通常比输出值大,这是一种压缩映射。不同的输入可能会有相同的Hash值,所以你无法通过Hash值来逆向解出输入值。所以Hash值不能用在数据的加解密上,因为不可逆!

那可以用在哪呢?可以用在文件的数字签名上。

什么是签名?

当我们在手写一份文件或合同时,为了确认这份文件的正确性,会签上自己的姓名。别人拿到这份文件,想确认其真伪,不需要辨别里面的内容的真实性,只需要鉴定文件签名的真实性即可。签名正确,即代表文件真实。签名是假的,那么这份文件就是假的。

同样地,数字签名是互联网中用来替代人工签名的方式。通过对互联网中文件进行数字签名,来确保其真实性。具体操作如下:

  1. 发送者按双方约定的Hash算法对报文或文件进行计算,得到一个固定长度的Hash值。
  2. 然后用自己的密钥对这个Hash值进行加密,得到的密文就是签名。签名连同明文一起,发送给接收者。
  3. 接收者收到后,首先对明文进行Hash值计算,然后再用自己的密钥对密文部分进行解密,得到发送者的Hash值。两个Hash值进行比较,如果相等,说明数据为真。

以上可以看出:

  • 数字签名和CMAC算法很相似,都是为了实现明文的真实性,防止被篡改。
  • 数字签名是由明文的Hash值加密得到的密文。
  • 数字签名和CMAC不同的是:CMAC是对MAC值进行比较,而数字签名是对Hash值进行比较。
  • 由于CMAC里不管是发送方还是接收方,都只用到了加密,没有用到解密,所以它一般采用对称密钥。而数字签名中发送方用到加密,接收方用到解密,所以它一般采用非对称密钥。发送方保管的是私钥,接收方使用的是公钥。