认识区块链——哈希算法
Posted 雅乐网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识区块链——哈希算法相关的知识,希望对你有一定的参考价值。
大家好,这一系列文章小乐将和大家一起从密码学原理开始,逐步了解区块链技术~
区块链中所说的哈希指的是应用于密码学中的哈希函数(Cryptographic hash function),它和数据结构中的哈希表是不一样的。从数学的角度看,哈希函数是一种单向的映射,它可以把任意长度的信息(消息,message)转换为固定长度的二进制串(摘要,digest)。常用的哈希算法有MD5, SHA-256等。
有许多网站可以在线计算哈希值,大家可以试一下:
消息"yalewoo"经过SHA-256算法计算的哈希值是
c7c5155cdea0509cb7ba4d52b5eb9b889e64aefa2e613f77a115777f112721e5
可以看到,SHA-256算法的结果是256位二进制。这个结果和原始的消息非常不一样,通过这一串哈希函数我们不能获得任何关于原始消息的信息。这也是密码学中哈希函数的一个重要特点,也叫作hiding,是说原始消息经过哈希计算后就被隐藏了,哈希值的计算是不可逆的。假设我们有了这个哈希值c7c5155cdea0509cb7ba4d52b5eb9b889e64aefa2e613f77a115777f112721e5,想要知道原始的消息是什么,唯一的办法是暴力遍历所有的消息。
我们再来计算一下"Yalewoo"的哈希值,得到
ae6d06b1afb3f75bc0994d05ee925e0189015c5324db3034e5ac3783bf5f247e
可以发现原始消息只有一个字母不同,但得到的哈希函数却是几乎每一位都不同的。
那么有没有两个消息的哈希值是相同的呢?我们知道SHA-256的结果有256位二进制,那么结果空间大小就是2^256,如果我们尝试2^256+1个不同得到消息,肯定会得到两个有相同哈希值的消息。但是,2^256实在是太大了,目前人们还没有找到两个具有相同SHA-256值的消息。
这也是密码学中哈希函数的重要特性,叫做碰撞抵抗性(Collision resistance)。也就是说,不能构造另外一个具有相同哈希值的消息。其实,一旦有人发现两个消息的哈希值相同,我们就说这种哈希算法被破解了,也就是不安全了。之前很火热的MD5算法就被我国的王小云院士破解了,她能快速构造一个M2使得MD5(M1)=MD5(M2). 2007年,Google构造出了拥有相同SHA-1哈希值的两个不同的pdf文件。目前SHA-256算法还是安全的,区块链中挖矿时用的就是这种算法。
密码学中的哈希函数还有另外一个特点:Puzzle friendly,也就是Difficult to solve, easy to verify。也就是说很难构造一个消息它的哈希值满足一定的要求,但是很容易验证一个消息是不是满足条件。这个特点非常适合区块链中的工作量证明。
下次,小乐会和大家分享密码学中另外一个伟大的发明:非对称加密。
以上是关于认识区块链——哈希算法的主要内容,如果未能解决你的问题,请参考以下文章