单向散列函数的价值和具体实现的详细使用-演道网

关于术语

不同的参考书使用的术语有所不同:

  • 单向散列函数(one-way hash function)、消息摘要函数(message digest function)、哈希函数杂凑函数
  • 输入的是消息(message)也称为原像(pre-image)
  • 输出的是散列值(hash value),或消息摘要(message digest),或指纹(fingerprint)
  • 完整性(integrity)/ 一致性
digest [da'dest] vt. 消化;吸收;融会贯通 n. 文摘;摘要
hash n. 剁碎的食物;混杂,拼凑;重新表述 vt. 搞糟,把…弄乱;切细;推敲
integrity n. 完整;正直;诚实;廉正
fingerprint n. 指纹;手印 vt. 采指纹

1. 什么是单向散列函数?

1.1 这个文件是不是真的?

场景:

  • 文件的内容是通过比特序列来表现的
  • 主动攻击者Mallory(无论人为还是病毒入侵)是否篡改了文件内容?
  • 目标:确认文件”是不是真的” ,即完整性
  • 方法:
      • 回家之前事先将文件拷贝到一个安全的地方保存起来,第二天将保存的文件和使用的这个文件进行对比
      • 缺点1. 毫无意义,事先已经把文件进行安全保存,何必校验完整性,直接使用事先保存的文件来工作不就行了?
      • 缺点2:效率问题。如果文件非常巨大,那么文件的拷贝、保存以及比较都将非常耗时。
  • 单向散列函数: 获取文件的“指纹”
    • 优点:效率高(较小的指纹直接比较),用散列值对比代替文件对比 
刑事侦查 文件完整性
犯罪嫌疑人的“指纹”与犯罪现场遗留的“指纹”比较 当前文件的“指纹” 与 过去文件的“指纹”
身份标识(人变了/基因变了,身份也就变了) 内容标识(衡量内容状态是否变化,防篡改;内容变了,指纹也就变了)

1.2 定义: 根据消息的内容计算(compute)散列值

  • 消息的类型: 任何类型(无论文本还是二进制),单向散列函数都将它作为单纯的比特序列来处理,即根据比特序列计算出散列值
  • 散列值的长度和消息的长度无关

1.3 性质:

  • 定长输出: 无论原始数据多长,散列值都是短且固定
  • 能够快速计算出散列值,所花费的时间必须要短,如果不能在现实的时间内完成计算就没有意义了。
  • 消息不同散列值也不同

    • 雪崩效应: 输入的微小改变,将会引起结果的巨大不同。(抗碰撞性(collision resistance):难以发现碰撞的性质)
    • 弱碰撞性:要找到和该条消息具有相同的散列值的另外一条消息是非常困难的
    • 强碰撞性:要找到散列值相同的两条不同的消息是非常困难的。 
  • 具备单向性: 无法通过散列值反算出消息(就像玻璃杯砸的粉碎很容易,却无法将碎片还原成完整的玻璃一样)

    • 并不是一种加密,无法通过解密将散列值还原为原来的消息

散列:hash:,愿意是古法语中的“斧头”,后来被引申为“剁碎的肉末”,也许是用斧子一通乱剁再搅在一起的感觉。 单向散列函数的作用,实际上就是将很长的消息剁碎,然后再混合成固定长度的散列值。

1.4 实际应用

  • 检测软件是否被篡改

    • 为了减轻服务器的压力,很多软件作者都会借助多个网站(镜像站点)来发布软件。
    • 用户将下载到的软件,自行计算散列值,然后与官方网站公布的散列值进行对比,从而确保自己下载的文件是完整的。
  • 基于口令的加密(Password Based Encryption,PBE)

    • 原理:将口令和盐(salt,通过伪随机数生成器产生的随机值)混合后计算其散列值(KEK),然后将这个散列值用作加密的秘钥。(防御字典攻击)
    • 利用单向性生成KEK(密钥加密秘钥)秘钥,使用对称密���加密CEK(内容加密秘钥),用于保护CEK
  • 消息认证码
  • 数字签名: 对消息的散列值签名而不是对消息内容签名,处理速度快。
  • 伪随机数生成器: 利用单向性构造
  • 一次性口令(one-time password)

2. 具体例子

  • MD4,MD5

    • 由Rivest设计,均能够产生128比特的散列值
    • 强抗碰撞性已经被攻破
  • SHA-1,SHA-224,SHA-256,SHA-384, SHA-512

    • 由NIST(National Institute of Standards and Technology,美国国家标准技术研究所)设计
    • SHA-1 产生160比特的散列值,强抗碰撞性已于2005年被攻破
    • SHA-2 (SHA-224,SHA-256,SHA-384, SHA-512)分别可产生对应比特数的散列值,尚未被攻破
  • RIPEMD-160: 欧盟RIPE项目设计
  • AHS(Advanced Hash Standard) 与SHA-3: NIST已着手制定用于取代SHA-1的下一代单向散列函数SHA-3

3. 尚未解决的问题

  • 能够辨认出“篡改”,但无法辨别出“伪装”,我们还需要认证(消息认证码和数字签名)。

 

—–工具使用举例——–(MD5,SHA-1,SHA-256,SHA-512等等使用方法相同)

MD5SUM(1)                        User Commands                       MD5SUM(1)

Usage: md5sum [OPTION]… [FILE]…

compute and check MD5 (128-bit) message digest

1.打印(计算)MD5(128位)校验和

2.检查MD5(128位)校验和

With no FILE, or when FILE is -, read standard input. 如果没有FILE或者FILE为‘-’,将从标准输入读入

-b, –binary            read in binary mode  以二进制模式读入

-c, –check             read MD5 sums from the FILEs and check them  从FILES读取MD5 sums,然后校验他们

-t, –text              read in text mode (default) 以文本模式读入(默认)

Note: There is no difference between binary and text mode option on GNU system.

提示: 如果在GUN 系统上,binary和text模式无任何区别。

—————————————

The following three options are useful only when verifying checksums: 仅仅当查证校验和的时候,下面3个选项非常有用!

–quiet             don’t print OK for each successfully verified file 被查证的文件如果成功,不打印OK(即仅仅显示错误信息,屏蔽验证正确的文件

–status            don’t output anything, status code shows success 不输入任何东西,状态码显示success (即无论正确与否,都不输出任何信息,echo $?看最后结果

-w, –warn        warn about improperly formatted checksum lines 关于非合法的格式的checksum行,抛出warning,如此之外,不予显示

–help     display this help and exit

–version  output version information and exit

The sums are computed as described in RFC 1321.  When checking, the input

should be a former output of this program.  当检查时,输入的应该是之前程序的输出。

The default mode is to print a line with checksum, a character indicating type a character indi-cating type (‘*’ for binary, ‘ ’ for text), and name for each FILE.

默认的mode和checksum合并为一行打印,一个字符指出mode的类型(* 为二进制,空为text),每个FILE为name

Report md5sum bugs to bug-coreutils@gnu.org

GNU coreutils home page:

General help using GNU software:

For complete documentation, run: info coreutils ‘md5sum invocation’

 

PS:

$ openssl dgst -md5  test.enc

MD5(test.enc)= 9a8ca202880547463da5796c6d29f611

$ md5sum test.enc

9a8ca202880547463da5796c6d29f611  test.enc

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn