比特币中用到两个功能:哈希和签名
密码学中用到的哈希cryptographic hash function
两个重要的性质:
输入空间无限,输出空间有限
collision free
没有高效的方法可以人为地制造哈希碰撞。brute-force(暴力破解)
无法从数学角度证明,一个哈希函数不存在哈希碰撞
例如,MD5现在已经可以人为地进行哈希碰撞
已知H(x)无法推出x,即结果不会泄露输入(暴力破解可以)。
输入空间无限大;
输入空间比较均匀,各种取值差不多
利用以上性质可以得到:
digital commitment
digital equivalent of a sealed envelop
为了实现输入空间无限大和均匀分布,添加随机数nonce,整体取哈希:H(x | nonce)
puzzle friendly:挖矿的过程没有捷径,只有不断的尝试。difficulty to solve, but easily to verify。体现工作量证明
挖矿的过程:不断尝试nonce,是的H(Block Header)<= target
比特币中使用的哈希函数是SHA-256,SHA是Secure Hash Algorithm
比特币中的账户管理方式:去中心化
建立公钥和私钥(public key, private key)。公钥相当于银行账户,私钥相当于银行账户密码。
asymmetric encryptic algorithm(非对称加密算法),加密使用公钥,解密使用私钥。
使用同一个人的公钥和私钥
我要发信息给你,使用你的公钥加密信息,你再用你自己的私钥解密。
私钥保存在本地
比特币系统是不加密的,信息是公开的。
公钥和私钥是用来做签名的。
发布交易用自己的私钥签名,其他人验证签名用我的公钥。
比特币系统中,一般是先对一个message取一个hash,再对hash值签名。
不断产生大量的公私钥对,也难以出现一对完全相同的公私钥对
a good of source randomess
区块链是由一系列哈希指针连接的
tamper-evident log (防篡改日志)
与普通二叉树不同的是,利用哈希指针
只需要检测最后一个hash值(root hash),就可以判断是否被修改
Merkly tree 提供Merkly proof
区块链分为全节点和轻节点,手机比特币钱包使用轻节点。找到
proof of membership / proof of inclusion
O(log(n))
proof of non-membership
复杂度为O(n)
根据哈希指针排序的Merkly Tree是sorted Merkly Tree,,比特币并没有采用这样的结构
没有环的情况下都可以使用hash pointer
一个交易过程
A给B转账
输入要包含A的btc来源,A的公钥(便于共同验证和记账)
输出:B的公钥哈希
验证:A给B转账的输入,铸币阶段A的输出哈希。两者验证
输入和输出都是一段脚本Bitcoin Script
Block header:
Block body
节点:
(分布式共识)简单的例子就是distributed hash table
FLP impossiable result,在异步的网络中,网络传输没有上限,但凡有一个用户出现faulty,整个系统就无法取得共识
在一个异步系统中,网络时延没有上限,但凡有一个成员是faulty,也无法达成共识
Consistency
Availibility
Partition tolerance
任何一个分布式系统中,上述三个性质最多只能满足两个
保障一致性
Consensus in BTC
首要问题membership,谁有投票权
hyperledger fabic(联盟链)
sybil attack(女巫攻击,产生大量账号类似水军攻击)
比特币利用计算力投票
coinbase transaction是产生比特币的唯一来源,出块奖励为50BTC,21w之后奖励减半,21w之后再减半