您现在的位置是:首页 > 技术笔记 > 密码学密码学
单向散列函数
冰山2019-09-28【密码学】人已围观
简介1. 单向散列函数
1.1 定义
1.2 关于术语
1.3 单向散列函数的性质
1.4 单向散列函数的实际应用
1.4.1检测软件是否被篡改
1.4.2消息认证码
1.4.3数字签名
1.4.4伪随机数生成器
1.4.5一次性口令
1.5 常用的单向散列函数
1.5.1 MD4、MD5
1.5.2 Golang中使用MD5
1.5.3 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512标准
1. 单向散列函数
1.1 定义
在说单向散列函数是什么之前,让我们先看一下生活中的案例,在刑事侦查中,侦查员会用到指纹。通过将某个特定人物的指纹与犯罪现场遗留的指纹进行对比,就能够知道该人物与案件是否存在关联。
同样针对计算机所处理的消息,当我们需要比较两条消息是否一致时,我们也需要检测其“指纹",我们不必直接对比消息本身的内容,只需要对比它们的“指纹”,就可以知道了,所以可以这样理解"单向散列函数 --- 获取消息的指纹"。
单向散列函数(one-wayftnction)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hashvalue)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。

这里的消息不一定是人类能够读懂的文字,也可以是图像文件或者声音文件。单向散列函数不需要知道消息实际代表的含义。无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。
散列值的长度和消息的长度无关。无论消息是1比特,还是100MB,甚至是I00GB,单向散列函数都会计算出固定长度的散列值。以SHA-I单向散列函数为例,它所计算出的散列值的长度永远是160比特(20字节)。

1.2 关于术语
单向散列函数的相关术语有很多变体,不同参考资料中所使用的术语也不同,我只总结了其中的几个。
单向散列函数也称为消息摘要函数(message digest function)、哈希函数或者杂凑函数。输入单向散列函数的消息也称为原像(pre-image)。单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)。完整性也称为一致性。
顺便说一句,单向散列函数中的“散列”的英文"hash一词,原意是古法语中的“斧子”,后来被引申为“剁碎的肉末",也许是用斧子一通乱剁再搅在一起的那种感觉吧。单向散列函数的作用,实际上就是将很长的消息剁碎,然后再混合成固定长度的散列值。
1.3 单向散列函数的性质
通过使用单向散列函数,即便是确认几百MB大小的文件的完整性,也只要对比很短的散列值就可以了。那么,单向散列函数必须具备怎样的性质呢?我们来整理一下。
根据任意长度的消息计算出固定长度的散列值
首先,单向散列函数的输入必须能够是任意长度的消息。
其次,无论输入多长的消息,单向散列函数必须都能够生成长度很短的散列值,如果消息越长生成的散列值也越长的话就不好用了。从使用方便的角度来看,散列值的长度最好是短且固定的。
能够快速计算出散列值
计算散列值所花费的时间必须要短。尽管消息越长,计算散列值的时间也会越长,但如果不能在现实的时间内完成计算就没有意义了。
消息不同散列值也不同
为了能够确认完整性,消息中哪怕只有1比特的改变,也必须有很高的概率产生不同的散列值。
如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数也就无法被用于完整性的检查。两个不同的消息产生同一个散列值的情况称为碰撞(collision)。如果要将单向散列函数用于完整性的检查,则需要确保在事实上不可能被人为地发现碰撞。

难以发现碰撞的性质称为抗碰撞性(collisionresistance)。密码技术中所使用的单向散列函数,都需要具备抗碰撞性。
强抗碰撞性,是指要找到散列值相同的两条不同的消息是非常困难的这一性质。在这里,散列值可以是任意值。密码技术中的单向散列函数必须具备强抗碰撞性。

微信扫一扫~
支付宝扫一扫~
很赞哦! ()
随机图文
单向散列函数
1. 单向散列函数 1.1 定义 1.2 关于术语 1.3 单向散列函数的性质 1.4 单向散列函数的实际应用 1.4.1检测软件是否被篡改 1.4.2消息认证码 1.4.3数字签名 1.4.4伪随机数生成器 1.4.5一次性口令 1.5 常用的单向散列函数 1.5.1 MD4、MD5 1.5.2 Golang中使用MD5 1.5.3 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512标准SSL/TLS
1.SSL/TLS 1.1客户端与服务器 1.2 用SSL/TLS承载HTTP 1.3 HTTPS 1.3.1 HTTP和HTTPS 1.3.2 HTTPS优缺点对称加密之DES、三重DES、AES
1.DES加密 1.1定义 1.2 DES的加密与解密 2.三重DES 2.1定义 2.2 三重DES的加密与解密 3.AES加密 3.1AES的加密和解密非对称加密
1.非对称加密 1.1 非对称加密通信流程 1.2 RSA 1.2.1 RSA加密 1.2.2 RSA解密 1.3Go语言中实现生成公钥和私钥 1.3.1生成私钥操作流程 1.3.2生成公钥操作流程 1.4Go语言中使用RSA进行加密、解密 1.4.1公钥加密操作步骤 1.4.2私钥解密操作步骤