消息认证码

1. 消息认证码

  消息认证码是一种确认完整性并进行认证的技术,Message Authentication Code,简称MAC。

  消息认证码的输入是任意长度的消息,一个发送者和接收者之间共享的密钥。输出是固定长度的MAC值。

 

2. 消息认证码的特点

  消息认证码是一种与密钥相关联的单向散列函数。消息认证码需要预先共享密钥。

  消息认证码也存在密钥配送问题,解决方案与对称密码相似:公钥密码,Diffie-Hellman,密钥分配中心等。

  消息认证码可以判断消息是否被篡改,是否有人伪装成发送者发送了该消息。

 

3. 应用实例

  SWIFT:国际组织,为国际银行间的交易保驾护航,使用了消息认证码技术。

  IPsec:对消息的认证和完整性校验都通过消息认证码来完成。

  SSL/TLS:通信内容的认证和完整性校验也使用了消息认证码。

 

4. 消息认证码的实现

  消息认证码的实现方式有很多种。

  使用单向散列函数实现

    使用SHA-2之类的单向散列函数可以实现消息认证码,其中一种叫做HMAC。

  使用分组密码实现

    分组密码的密钥作为消息认证的共享密钥来使用,用CBC模式将消息全部加密。

    将最后一个密文做MAC值。由于CBC模式的最后一个分组会受整个消息和密钥的双重影响,因此可以将它作为消息认证码。

 

5. 认证加密

  认证加密是把对称密码和消息认证码结合,同时满足了机密性,完整性和认证三大功能。

  步骤是先把明文进行对称加密,计算密文的MAC值,通过MAC值可以判断“这段密文是由知道明文和密钥的人生成的”。

  GCM,一种认证加密方式,使用AES等128比特分组密码的CTR模式,并使用一个反复进行加法和乘法运算的散列函数计算MAC值。

      专门用于消息认证码的GCM称为MMAC。

 

6. HMAC

  使用单向散列函数构造消息认证码的方式,任何高强度的散列函数都可被用于HMAC,HMAC的H就是hash的意思。

  HAMC的步骤:

  消息认证码

 

  ipad是将00110110这一比特序列不断反复循环,直到达到分组长度所形成的比特序列。

  opad是将01011100这一比特序列不断反复循环 ,直到达到分组长度形成的比特序列。

 

7. 对消息认证码的攻击

  重放攻击:截获消息和MAC值,不破解消息认证码,把正确的消息+MAC重复利用。

         抵御重放攻击:

       ①序号:约定每次都对发送的消息赋予一个递增的编号,计算MAC时将序号也包含在消息里。

       ②时间戳:消息中包含当前的时间。

          ③nonce:通信之前,接收者先向发送者发一个一次性随机数nonce,发送者在消息中包含nonce并计算MAC值,每次通信nonce都会变化。

  密钥推测攻击:

       对单向散列函数的攻击一样,对消息认证码也可以进行暴力破解和生日攻击。

       对消息认证码来说,不能根据MAC值推测出通信双方所使用的密钥。

 

8. 消息认证码不能解决的问题

  对第三方证明:对于第三方,无法证明消息是对方生成的,而不是自己生成的。解决方法是数字签名。

  防止否认:发送方对已经发送消息进行否认,消息认证码无法防止否认。解决方法是数字签名。

消息认证码

上一篇:unable to get repr for class ‘torch.tensor’


下一篇:burpsuite抓包-手机端配置