逐渐打开区块链的神秘的大门
一: 比特币的密码学原理
1.1 哈希函数
1.1.1 哈希碰撞
选取的哈希函数需要 有 collision resistance 即 在常理认为 哈希之后的数不会重复。
1.1.2 哈希单向性
即 x-> f(x) 是 单向性的,即f(x) 不可能 得出 x的 (条件: 输入的值范围要足够大,足够随机)所以阔以在源数据之中拼接一个 nounce 值。
1.1.3 puzzle friendly
知道输出,无法主导输入的值的大致范围,需要一个个 的进行计算,计算出NONCE, 在 block header 中有nonce,我们就需要算出这一个 nonce 值满足以下条件。 难以解决,容易验证。
1.1.4 哈希函数的算法
比特币 使用 SHA-256 哈徐算法
1.2 电子签名
1.2.1 非对称加密
使用公私钥对方式对信息进行加密和解密。
公钥加密,私钥解密。
因此r如果用私钥来 签名,相当于电子签名。
1.2.2 公私钥生成
生成的时候随机,那么随机 选取的随机源要good
二: 比特币的数据结构
2.1 哈希指针
有 指针域和哈希域
哈希域存上一个节点的哈希值。
2.3 莫克尔树
使用莫克尔树,阔以对区块记录下来的交易记录进行错误勘察(查看数据源中有哪一些是被篡改过的)
2.3 莫克尔 证明
需要去验证当前记录已经被打包在了区块中了
节点分轻节点和全节点。 轻节点只储存 block header 部分,一般运用在手机上。u。全节点需要去储存block header 部分和 block body 部分。
当轻节点想要去查找莫一交易记录是否已经记录在区块链中的时候。
那么需要全节点提供 红色部分的哈希值,然后 用要验证的交易记录来取一次哈希,接着用红色部分的哈希再来取一次哈希,不断重复这一个步骤。 最后 验证出来的 根哈希值和轻节点拥有的根哈希值比对 看是否对的上来验证交易记录是否存在区块链中。
2.4 区块结构
三: 比特币的共识算法
3.1 攻击方式
3.1.1 双花攻击
一个货币使用两次
解决方案:
- (中心化 是由央行发行 央行确认)
- (去中心化 使用 区块链方式 双向哈希指针,指向币的 来源和去向。
3.1.2 分叉攻击
六节点确认,一小时确认时间
3.2 分布式共识
FLP: 在一个异步的系统里,网络延迟没有上限,那么只要有一个错误,那么就无法达到共识。
CAP: Consistyncy, Availability, Partiton tolerance 三角形模型,无法满足三者完美。
3.2.1 挖矿
记录账本 -> 矿工 -> 计算nonce -> POW
四: 比特币系统的实现
4.1 激励机制
打包-> 小费 and 出块奖励
4.2 出块
4 年出块奖励减半(挖出21万比特币的时间为4年左右 ) 由一开始的 50个 4年之后变到 25,以及类推 最终比特币的总量为2100个。
transaction-based ledger 维护一个结构 维护 totaloutputs
account-based ledger 账户机制
4.3 挖矿
进行伯努利试验,并且无记忆性 保证了算力与概率之间的比例关系。