消息摘要算法与消息认证码简介

消息摘要算法

  • 消息摘要算法,也称为哈希算法或散列算法。消息摘要算法对一组输入数据进行计算,得到一个固定长度的输出摘要。消息摘要算法主要作用不是进行数据的加解密,而是校验数据的完整性。消息摘要算法很难从输出摘要计算出原始数据。
  • 消息摘要算法的要求可总结如下
    • 对于任何一个给定的消息,它都很容易就能运算出消息摘要
    • 给定消息摘要,应该很难求出原先的消息
    • 给定两个不同的消息,求出的消息摘要应该不同

简单实例

  • 下面通过一个简单例子介绍下数据摘要算法。
  • 我们通过这样一个哈希函数 ( 假设哈希函数为 f(x) = x % 3 + 1),对数据作摘要。 假设原文为65536,使用该算法对原文作摘要计算,先对3求余再加1,最后得到的结果为2。可以看到,只要原数据被修改,得到的值就会改变。并且很难从摘要结果计算出原文。当然,实际应用的消息摘要算法不可能这么简单。

1. 消息摘要算法类型

  • 下面介绍下在密码学中比较常用的一些消息摘要算法

1.1 MD5

  • MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

1.2 SHA-1

  • 第一代安全散列算法(Secure Hash Algorithm 1)。是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值。

  • SHA-1与MD5比较

特性 MD5 SHA-1
消息摘要长度(位) 128 160
根据消息摘要寻找初始消息所需操作 2^128次 2^160次
寻找产生相同消息摘要的两个消息所需操作 2^64次 2^80次

1.3 SHA-2

  • 第二代安全散列算法(Secure Hash Algorithm 2)。由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256

  • SHA-1与SHA-2比较

参数 SHA-1 SHA-256 SHA-384 SHA-512
消息摘要长度(位) 160 256 384 512
消息长度(位) <2^64 <2^64 <2^128 <2^128

1.4 SM3

  • SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》。
  • 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。
  • SM3可处理小于2^64位的数据,生成摘要长度为256位。

1.5 SHA-3

  • 第三代安全散列算法(Secure Hash Algorithm 3)。2012年10月,美国NIST选择了Keccak算法作为SHA - 3的标准算法,Keccak拥有良好的加密性能以及抗解密能力。SHA-3并不是要取代SHA-2,因为SHA-2并没有出现明显的弱点。由于对MD5、SHA-1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是SHA-3。

MAC(消息认证码)

  • 消息认证码(Message Authentication Code),又称为密码校验或者MAC,也是一种认证技术,它利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。

  • 消息认证码与消息摘要类似,区别是消息摘要算法只是对数据作摘要计算,而消息认证码涉及到加密过程。

  • 通信双方A和B,共享密钥K。若A向B发送消息时,则A计算MAC,它是消息和密钥的函数,即MAC = C(K,M) 其中,M为输入消息,C为MAC函数,K为共享的密钥,MAC为消息认证码。消息和MAC一起发送给接收方。接收方收到消息后,用相同的密钥进行相同的计算,得到新的MAC,并将接收到的MAC与其计算出的MAC比较。

  • MAC工作原理。
    在这里插入图片描述

    • A与B共享一个对称密钥K,别人是不知道的。A使用K通过MAC函数计算出消息M的MAC值H1
    • A将消息M和H1发给B
    • B收到M,也用K通过MAC函数对M求出MAC值H2
    • B比较H1和H2。如果相等,表明消息M没有被中途改变。
  • 计算MAC与加密过程非常相似,但有一个重要不同,在对称加密过程中,加密过程是可逆的,但在MAC中,发送方与接收方只进行加密过程。因此MAC算法不需要可逆,只要是单向函数(加密)就可以了。

HMAC(基于散列的消息认证码)

  • Hash-bases Message Authentication Code。简单理解就是为计算MAC值设计的一个MAC函数。
  • HMAC的基本思想是复用MD5与SHA-1之类现有的消息摘要算法。HAMC利用消息摘要算法,把消息摘要看成一个黑盒子,用共享密钥加密消息摘要,从而得出MAC。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/new9232/article/details/125824017
今日推荐