加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 教程 > 正文

单向散列函数的价值和具体实现的具体使用

发布时间:2021-12-09 18:03:41 所属栏目:教程 来源:互联网
导读:关于术语 不同的参考书使用的术语有所不同: 单向散列函数(one-way hash function)、消息摘要函数(message digest function)、哈希函数、杂凑函数 输入的是消息(message)也称为原像(pre-image) 输出的是散列值(hash value),或消息摘要(message dig

关于术语
不同的参考书使用的术语有所不同:
 
单向散列函数(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: <http://www.gnu.org/software/coreutils/>
 
General help using GNU software: <http://www.gnu.org/gethelp/>
 
For complete documentation, run: info coreutils 'md5sum invocation'
 
 
 
PS:
 
$ openssl dgst -md5  test.enc
 
MD5(test.enc)= 9a8ca202880547463da5796c6d29f611
 
$ md5sum test.enc
 
9a8ca202880547463da5796c6d29f611  test.enc

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读