DAY 17- 杂凑函数 HASH

「将咱两个一齐打碎,用水调和;再捻一个你,再塑一个我。我中有你,你中有我;我与你生同一个衾,死同一个椁。」大概就是这种感觉。


杂凑函数有点像撷取你身体的一部分资料,再把他变成你独一无二的编号。
比较常讲的说法就是,为资料建立指纹。

特性

杂凑函数是固定输出的。
也就是说不管多长的资料,经过杂凑函数後的长度会是一样的。
举例来说,任何资料经过 SHA-1 计算後的长度都会不多不少是160位元。

另外,杂凑函数的结果(杂凑值)几乎可以说是唯一的,
也就是说不同的资料要得到相同的杂凑值是非常困难的。
这样有助於确认讯息的正确性。
就算两个讯息只差极少量的位元,分别输出的杂凑值也会天差地远,
这个现象称为雪崩效应(Avalanche effect)
这个性质可以很好的拿来运用在验证讯息的完整性。

而最後要注意的是,杂凑函数是无法逆推的,我们也没办法做解密。

所以我们要杂凑函数干嘛?

记得我们说过公钥密码系统的另外一个功能,数位签章吗。
数位签章是对一整段讯息进行私钥加密,大众可以用公钥解密看看是否是你本人所签署。
但是资料太长,签章後的结果会太长,不好用。
因此杂凑函数就是一个很好的压缩机,他把讯息压缩成唯一的值,而且更短(这样很好)。
那麽经过杂凑後在签章的值应该也要是可验证的。

我们会在几天後看到数位签章中的杂凑函数。

SHA family

SHA(就念"夏"),Secure Hash Algorithm,
是由 NSA 所设计,由NIST发布成为标准。
里面包含了许多演算法,包括SHA-0、SHA-1、SHA-2、SHA-3,

其中SHA-1已经不安全了,
而SHA-2和 SHA-3 都可以选择不同的输出位元数。

SHA-2 和 SHA-1 的算法类似,SHA-3则是全新的算法。
比特币区块链所使用的杂凑函数即是SHA-256,是SHA-2演算法中输出值为256位元的算法

这是维基百科上SHA-2的示意图,
经过这些运算之後会产生固定位元长度的杂凑值。

至於为什麽在比特币区块链上会使用到杂凑函数,

我们可以把他看成是一种证明。
区块链上许多矿工们彼此要争打包(也就是帮你把交易内容写到区块链里面)的工作,
因此他们要做的事情就是将交易内容後面加上一个值,并算出 SHA-2 的值。
不断更改後面的值,直到输出的杂凑值符合一个形式,
那麽他就有打包这个区块的权利,也就会获得奖赏。

前面说过,杂凑值的结果是无法预测的,
没有办法推论的结果之下,最快的方法就是穷举,
不过就算穷举,要能算出指定的杂凑值还是不容易的。
(所以才要买矿机啊)


今天大概介绍了杂凑函数的功能以及其性质,
明天来将一下SHA-256怎麽运作。
掰掰一~

图片来源:
https://zh.wikipedia.org/wiki/SHA-2
https://academy.bit2me.com/en/sha256-bitcoin-algorithm/


<<:  Day 15 : PHP - 如何在phpMyAdmin手动建立资料表?char和varchar又该如何选择?

>>:  Day 17【ethers.js】ETHER. ETHER EVERYWHERE.

Das Sony Ericsson P1i - ein herausragendes Handy

Wenn Sie Musikdateien auf eine CD oder einen Compu...

第3章:基本存取命令列与终端机介绍

前言 从上一章节中,我们已经将实验与教学的环境给建置起来了,在这一章节中,将会演示使用「workst...

[day23]Vue实作-交易建立页面-API串接问题处理

差点开天窗了,交易建置API呼叫一直有问题。 本来已经要先PO文说明问题了,让我们看下去吧 串接永丰...

[day-2] 基础Python介绍,何谓Python以及它的实际用途

为何选择Python ?而不是其他的语言。 每个程序语言都有属於它们的专长,Python是一种高阶语...

#21-用Canvas做科技感的动态球!(+什麽时候该用CSS/SVG/Canvas?)

今天正式进入Canvas的世界了! 老样子先看成品: 今天来做点科技感的画面,橘色是滑鼠的游标,这个...