[003] 密码学 - 数字摘要算法

简述

        我们经常在网上下载一些软件,怎么能验证下载到的文件和官方提供的文件是否一致?就引入了数据完整性验证的问题。

        利用散列函数的特性,比如单向性,常用于验证数据的完整性。主要包含MD、SHA、MAC 共三大系列。

MD算法家族

        MD5算法是典型的消息摘要算法,由MD2、MD3、MD4算法改进而来的。

        MD系列算法,对数据生成一个128位的二进制信息摘要,转换为十六进制,可得到一个32位的十六进制字符串。

$ echo "hello md5" | md5
94988405d319a361bd6424b82ab6740d

        虽然MD5算法的漏洞越来越多,已不再安全,但也没有MD6算法的出现,而是基于MD4算法改进的SHA算法可能将是MD系列算法的主要替换者。

        2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证。推荐使用SHA-2系列算法。

      

SHA算法家族

        SHA算法是基于MD4基础之上,作为MD算法的继任者,成为了新一代消息摘要算法的代表。SHA与MD算法的不同之处主要在于摘要的长度,SHA算法的摘要长度更长,安全性更高。

        包含SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 (后4中,成为SHA-2系列)

        但随着时间的推移,MD5、SHA-1都已经被破解. 目前SHA-2还未被破解

$ echo "hello sha-1" | shasum -a 1
8a3f6579a8b81799130d14fb7355e730dbb723cd  -

$ echo "hello sha-224" | shasum -a 224
5989b1e7ab12c5453e460c118439ef7ccddd55be4ce83d47c94abd42  -

$ echo "hello sha-256" | shasum -a 256
f1be587c28efc8b25ab42dbb287f211f7294369cc1644cd8a9066845f24b8936  -

$ echo "hello sha-384" | shasum -a 384
af7d06face2be735ada9ef9b30fec1596646676d764ba9ff28e78d91dbeac922d1794d0a6d63d980b1f637c56ebeae64  -

$ echo "hello sha-512" | shasum -a 512
1e60c690bd7529dbb72bbf7a66f82196ec1445ec0255f4552e46ab527c2746c459949a6d4ad0b5b44d807724abbd5faa9208172df135ea1e657ad453aa42f2e5  -

$ echo "hello sha-512224" | shasum -a 512224
1cf2281d3e39ee4d4b600c5c31677e5938a7c0071479f35f4f71de9d  -

$ echo "hello sha-512256" | shasum -a 512256
725ef40941d4c04491d79fcf4a50f439e6046149f3f02c5cca0748fad56d8651  -

MAC算法家族

        MAC算法结合了MD5和SHA算法的优势,并加入了密钥的支持,是一种更加安全的消息摘要算法。也常称为HMAC

        MAC+MD系列算法        

  • HmacMD2
  • HmacMD4
  • HmacMD5

        MAC+SHA系列算法       

  • HmacSHA1
  • HmacSHA224
  • HmacSHA256
  • HmacSHA384
  • HmacSHA512

版权声明:本文为Dream1248120122原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。