主要是根据北京大学肖臻老师讲的《区块链技术与应用》公开课所撰写的笔记
哈希(Hash)
简介
密码学中用的哈希函数被称为
密码散列函数(Cryptographic hash function),又被称为加密散列函数,是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。这种散列函数的输入数据,通常被称为消息(Message),而它的输出结果,经常被称为消息摘要(Message digest)或摘要(Digest)。在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码。密码学中要求的两个重要的性质:抗碰撞性(Collision resistance)和隐蔽性(Hiding),以及比特币(BTC)要求的第三个特性:Puzzle friendly
抗碰撞性(Collision resistance)
"哈希碰撞"是指输入不相等的值
X和Y,使得X和Y的求出哈希值相等
即:X≠Y ,H(X)=H(Y) , H()表示哈希函数
到目前为止,没有哪个哈希函数能够在数学上证明是抗碰撞性(Collision resistance)的,也就是说从理论上是无法证明的,只能通过实践中的经验。
有些哈希函数经过长期的实践检验,我们认为它是抗碰撞性(Collision resistance)的,可是后来被世人找到了人为制造哈希碰撞的方法,比如像比较著名的哈希函数:MD5。
用途
比如有一个消息
(M),取它的哈希值:M → H(M),求得哈希值结果假如是:Digest,用Digest来检测对M的篡改;
举例:有人修改了消息M,就会使得哈希值H(M)也会改变;
如果结合抗碰撞性(Collision resistance)来说:无法找到另外一个消息(X),使得H(X) = H(M)
总结得出:没有什么办法能够篡改内容而又不被检测出来
- 自己有个文件,把它上传到服务器上,想使用到这个文件的时候把它从服务器上下载下来。那怎么检测到你所下载下来的文件是否已经被其他人篡改过了呢?
可以在上传文件
(M)的时候,给这个(M)求一个哈希值M → H(M),自己本地保存这个哈希值H(M),然后从服务器上再把这个之前所上传的文件下载下来后,

最低0.47元/天 解锁文章
6116






