课程的大纲
- 密码学基础
- 比特币的数据结构
- 共识协议和系统实现
- 挖矿算法和难度调整
- 比特币的脚本
- 软分叉和硬分叉
- 匿名和隐私保护
以太坊是后面的
首先是密码学基础的学习:
crypto-currency(虚拟货币)是不加密的,区块链上所有的教以都是公开的。其中有转账金额和地址。
cryptographc hash function(密码学哈希函数)特点
1.collision resistance 哈希碰撞 (目前无法避免的)
例如:有两个值x和y,其中x!=y,但是hash出来的值H(x)==H(y),这样就是发生了哈希碰撞(collision resistance)。
输入的数值样式可以有很多,无限个。但是哈希函数出来的值是有限个的。可以用来检测数据是否被进行了更改。hash值如果进行了更改就会与原来的值对不上。
没有什么高效的方法去制作人为的哈希碰撞。如果知道一个y,没有特定的寻找x的方法使得H(x)==H(y),只可以使用brute-force(蛮力),一个个去寻找。
目前没有那个哈希函数能在数学上证明是哈希碰撞的。
但是以前MD5刚开始也是认为是哈希碰撞的。但后来人们找到可以人为进行碰撞的方法,所以它并不安全。
2.hiding 单向不可逆
例如:知道一个x,可以计算H(x)。但是知道H(x)却计算不出来x。
因为每一个都可以进行蛮力求解,所以hiding成立需要输入的结果的空间足够的大,这样可以保证每种可能性都大致相同。
其中collision resistance(哈希碰撞)+hiding(单向不可逆)
可以生成digital commitment(数字委托)或者说是digital equivalent of a sealed envelope(数字等效)类似于可以提前把结果放在公证人哪里,等结果出来与之对比。
在hash函数这里就是对数据进行加密,因为hiding的性质,当hash函数加密之后的数据进行更改的时候,就没有办法解密成原来的样子(用到了 collision resistance性质)。
但是如果输入的数据样本过少,可以在后面加上nonce(随机数),这样增大输入空间保证hiding的性质。
3.比特币中的哈希函数往往还有性质3
3.puzzle friendly (没有捷径)
意思是如果你想计算出来的哈希函数满足某些条件或者是某种范围,你没有捷径,puzzle friendly只可以一个个的去尝试。
比特币挖矿的过程就是去寻找一个nonce(随机数),随机数加上区块块头中的其他信息合并在一起作为输入,取得哈希值要小于特定的值。
所以因为有puzzle friendly这个性质使得挖比特币得过程是没有捷径得,只可以一个个得去尝试。
这里提到一个proof of work表示的是挖矿中得工作证明。
可能第一个性质和第三个性质容易搞混
第三个性质(puzzle friendly)意思是无法人为得去获取特定(特征值)得哈希值。
第一个性质(collision resistance) 意思是无法人为的创造哈希碰撞。
这里也有一句话 difficult to solve,but essay to verify
虽然找到一个符合要求的nonce很难,但一旦找到之后去证明是否正确是很简单的,只需要进行一遍计算即可。
SHA-256
比特币使用的哈希函数 SHA-> secure hash algorithm
对称和非对称加密体系
对称是加密和解密用的同一个密钥。
非对称是有一对(public key,private key)
加密利用公钥,解密利用私钥。这里注意加密和解密都要使用的是接收方的公钥和私钥。
比特币签名
因为加密货币是不加密的,需要非对称加密进行签名。意思是比特币的交易是谁发起的,例如用户A用自己的私钥对交易进行签名,其他用户拿到交易信息之后利用A的公钥去验证签名的正确性。
比特币中的签名一般是先对内容取一个哈希,然后再签名。
而且私钥和公钥重复概率极低,目前没有出现。
2022.5.29学习内容总结