文章只用做学习区块链,无任何其他用途.
比特币隐含的技术是有意义的,但是挖矿本身除了浪费资源是没有任何意义的.
比特币:密码学原理
比特币被称为加密货币 crypto-currency, 区块链上内容都是公开的,包括区块的地址,转账的金额。
比特币主要用到了密码学中的两个功能.哈希,签名.
- 哈希函数 SHA-256 的3大特性保证了比特币的安全性。
- 签名支持了比特币的去中心化功能。
Hash
密码学中用到的哈希函数被称为 Cryptographic hash function,它有两个重要的性质:
碰撞抗性 collision resistance
哈希碰撞 collision
用数学公式描述就是:
两个不同的输入,输出却是相等的,这就称哈希碰撞。它是不可避免的,因为输入空间总大于输出空间。
碰撞抗性
定义 : 存在Hash函数 , 输入 ,得到对 哈希过后的, 即 .
作用 : 给出,很难找到,除非蛮力求解(brute-force)。
假设 m 就是你的密码, 当有人拿到你的加密过后的密码了,想篡改m值而H(m)不变,则无法做到。
结论 : 哈希碰撞无法人为制造,无法验证,是根据实践经验得来的。
不可逆推 hiding
哈希函数的计算过程是单向的,不可逆的。从 无法推导出 .
hiding性质前提是输入空间足够大,分布比较均匀。如果不是足够大,一般在x后面拼接一个随机数nonce,如 。
正是由于 碰撞抗性 和 不可逆推 结合在一起,才实现了digital commitment(数字承诺,又称为digital equivalent of a sealed envelope) .
把预测结果作为输入 ,算出一个哈希值,将哈希值公布,hiding 让人们知道哈希值而不知道预测值,最后再将 公布,因为有collision resistance的性质,预测结果是不可篡改的。
事先不可预测 puzzle friendly
除了密码学中要求的这两个性质外,比特币中用到的哈希函数还有第三个性质:
puzzle friendly 指哈希值的预算事先是不可预测的。假如希望哈希值的格式是 ,事先根本无法知道哪个值更容易算出这个结果,还是要一个一个带入蛮力求解。
BTC 挖矿(BTC BitCoin)
区块编号:761050 Nonce:63,680,305
比特币挖矿的过程中实际就是找一个nonce,nonce跟区块的块头里的其他信息合一起作为输入,得出的哈希值要小于等于某个指定的目标预值 Bits。。block header 指块头,块头里有很多域,其中一个域是我们可以设置的随机数nonce,挖矿的过程是不停的试随机数,使得block header取哈希后落在指定的范围之内。
puzzle friendly 保证了挖矿过程中没有捷径,为了使输出值落在指定范围,只能一个一个去试。所以这个过程还可以作为工作量证明(proof of work)。
挖矿很难,验证很容易。只需要用公钥去加密查看是否满足.(difficult to solve ,but easy to verify)
比特币中用的哈希函数叫作 SHA-256(secure hash algorithm )以上三个性质它都是满足的。
签名
在中心化系统中开户: 进入银行 -> 提供身份信息 -> 办理银行卡 -> 得到 卡号 + 密码
在比特币系统中开账户:
在本地创立一个公私钥匙对(public key ,private key),这就是一个账户。
公私钥匙对是来自于非对称的加密技术(asymmetric encryption algorithm)。
如何证明是你的账户
- 中心化系统中,有卡号和密码,如果记名的还需要身份信息.
- 比特币系统中,有 private key 就能证明你是账户的主人(这个private key就算账户的签名).
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情