Blockchain Basic: Cryptography
比特币实际是一种加密货币(crypto-currency)
一. 密码学基础——哈希函数(cryptography hash function)的性质
哈希函数:$Y=H(X)$ ,其中$X$为无限长的字符串。$Y$为指定长度的字符串。就是将无限的空间映射到一个有限的空间中。
-
collision resistance: 抵抗哈希碰撞
哈希碰撞就是存在$X \ne Y$, 但是 $H(X)=H(Y)$, 这很容易理解,毕竟X无限,Y有限,输入空间远远大于输出空间,肯定不能一一对应,所以一定会出现哈希碰撞。但是我们的目标就是找一个尽量不让他出现哈希碰撞的算法。理论上是不可实现的,但是在实际应用中可以验证某个算法的collision resistance性质比较好。
- 即已知$X$,得不到$Y$使$H(X)=H(Y)$ 只能通过暴力手段一个一个试$X$。
-
hiding: 单向的,不可逆的
只能由$X$计算$H(X)$, 已知$H(X)$不能反推得到$X$,这也就是加密的本质呀,要是随便都能反推,那还加什么密啊。要满足这个条件,要要求输入空间足够大,才不容易被破解。(输入空间小的话,一个一个试就能破解)
- 正是这个性质,产生了区块链中的数字签名(digital commitment)
-
puzzle friendly: 这个是区块链中要求哈希函数要满足的性质
翻译成人话就是,事前不可预测,只能一个一个试。
咱们的目标是得到一个数$X$, 使$H(X)\le \text{target}$, 这里target已知。
(target转化为二进制主要就是前面的0,前面的0越多,target的值就越小,输入空间无限大,输出空间变小了,求解$X$就变难啦)
所以puzzle friendly就是已知target,要找$X$的话,只能在输入空间里一个一个的试,看看满不满足,而不能直接去求解。
让我们代入到区块链中,区块链挖矿的过程就是$H(\text{block header} + \text{noise})\le \text{target}$ 这里,block header就是携带系统当前信息的一个字符串,这个没办法改。target是系统指定给的。noise是随机数,我们可以随便改。所以挖矿工人需要做的就是一个个试noise随机数,看看哪个随机数会满足$H(\text{block header} + \text{noise})\le \text{target}$,这就是挖矿的过程,第一个找到了一个noise随机数满足这个不等式的人,就相当于挖到了矿。别人会验证你找到的正不正确。验证的过程就很简单了,直接代入即可。
- 挖矿很难,验证很容易。different to solve, easy to verify.
上面的原理很简单,但是其实找这个noise的过程很慢,要试好多好多好多的数,所以就需要大量的算力,谁算得快,谁就有更大概率挖到矿。这也就是工作量证明(proof of work, PoW), 一般就是尝试的noise最多,也就是工作的最多的人能挖到矿,为什么叫挖矿呢,因为第一个找到noise的人,系统会有奖励呀,比如比特币,会奖励10个比特币的。比特币是可以兑换成钱的,所以叫挖矿。用来找noise而搭设的计算机叫矿机。
二、数据结构——哈希指针(hash pointers)
Blockchain is a linked list using hash pointers.
哈希指针跟之前C语言里面学的指针有关系,C语言里面学的指针只储存了一个指向的内存地址。而哈希指针则储存了指向的内存地址以及指向的内容的哈希值.
- tamper-evident logging 篡改记录。区块链的很大的一个特性就是不可篡改。主要就是哈希指针起作用了,一旦篡改之前的某个区块,造成这个区块的哈希值改变,下一个区块的哈希指针中的哈希值就得变。然后下个区块也就被改了,就这样,从要篡改的区块后面所有的区块都要被修改,就像多米诺骨牌效应。导致最后的,,也就是指向最近,最新的区块的哈希指针,也就是当前指针被修改。因为当前指针被所有矿工保存着呢,一旦被修改,矿工是不认识,不承认的。所以。。。就没办法修改。
三、数据结构——Merkle tree
刚才说了整个区块链是怎么连接起来的,现在说说区块链中的区块保存的内容和数据结构——Merkle tree。
Merkle tree就是把二分树(binary tree)的普通指针换成哈希指针的。对,没错,就这么简单。加上哈希值,就没办法篡改其中的内容了。
2020.08.16更新
没时间更新这个课程的学习笔记了。
在这放上相关的学习资料,真的超级好的学习资料!!!北大肖臻老师讲的非常清楚
B站视频:www.bilibili.com/video/BV1Vt411X7JF
肖臻老师主页:http://zhenxiao.com/ (有课件)
别人写的笔记:https://www.bilibili.com/read/cv3915518 (真有毅力,有时间)
对本文有任何问题,请在下面评论: