区块链学习笔记(一)

Bitcoin(BTC)是一种加密货币(Crypto-currency),其主要运用了密码学中的两个基本功能:
1.哈希
2.签名

密码学中的使用的哈希(Cryptographic hash function),有两个重要的性质:
1.哈希碰撞(collision resistance):指的是不同的输入可能会被映射成同样的输出。即存在xy,使得H(x)=H(y)。
这是因为输入空间远远大于输出空间。比如一个256位的哈希值,可能的输出结果有 2 256 2^{256} 2256种,但是输入结果可以有无穷种,所以必定会发生哈希碰撞(鸽笼原理)。
但是没有什么高效的方法人为的制造哈希碰撞。 给定一个x,没有一个有效的方法能找到一个y使得H(x)=H(y)。通过暴力穷举(brute force)理论上可以找到,但效率极低。
可以通过哈希碰撞对一个信息生成摘要(digest),假定这个信息为mH(m)可以作为这个信息的digest,用来检测对这个信息的篡改。任何对原始信息m的修改都会导致其哈希值的变化,根据哈希碰撞,篡改者无法找到一个信息 m ′ m^{'} m,使得H*(m)=H( m ′ m^{'} m),因此,只要记录了开始信息的digest,篡改者便无法在不被检测出来的情况下对原始信息进行篡改。
目前没有任何一个哈希函数从数学上证明是collision resistance的。有些哈希函数已经找到了认为制造碰撞的方法(MD5)。
2.hiding:指的是哈希函数的计算过程是单向的,即可以从x->H(x),但是无法从H(x)->x,哈希值没有泄露有关输入的任何信息。这个性质成立的前提是:
1.输入无限大
2.输入取值较为均匀
(输入值数量较少时,可以进行加盐处理,即在输入值后边添加随机数后取哈希H(x||nonce))
结合collision resistance和hiding,就可以实现digital commitment(digital equivalent of a sealed envelop)。
BTC中的哈希函数还要求第3个性质:Pizzle Friendly。(哈希值的计算事先无法预测)
若要求计算出来的结果前K位都是0,在计算出来之前,是无法得到输入结果的信息的。
区块链学习笔记(一)_第1张图片
BTC中的挖矿实质就是找一个随机数(nonce),区块中的其他值与nonce合在一起后的哈希值要小于某一阈值,即H(block header + nonce) 在这里插入图片描述
如图,规定只有落在蓝色区域内的阈值才为合法的输出。
只要不断的更换nonce的值,才有可能找到符合规定输出结果的nonce,以此来作为工作量证明(proof of work)。
挖矿的过程需要很大的工作量,但是验证nonce是否符合要求是很容易的。 只要进行一次哈希运算就可以。
Difficult to solve,but easy to verify. 挖矿很难,但验证很容易。
BTC中使用的哈希函数位SHA256(Secure Hash Algorithm)。
BTC是去中心化的,是否开户由每个用户自己决定,不需要任何人批准。
开户就是在本地创立一个公私钥对。(public key,peivate key)
这个概念来源非对称密码体系(asymmetric encryption algorithm)。
对称加密指的是加密与解密使用相同的密钥。(密钥分发存在风险)
非对称加密使用一对密钥,加密使用公钥(可公开),解密使用私钥(需保密),两者不同。
(经典的Alice与Bob。)
区块链学习笔记(一)_第2张图片
BTC中,公钥相当于你的银行账户,其他人转账只需要知道你的公钥即可。
BTC中的信息都是公开的,公私钥体系用来签名。发布交易的时候需要用自己的私钥签名,其他人可以通过公钥验证。
产生相同公私钥的可能性极低极低,很难以此作为攻击手段。
产生公私钥需要好的随机源(a good source of randomness)。
原视频:北京大学肖臻老师《区块链技术与应用》公开课

你可能感兴趣的:(区块链,密码学,哈希,BTC)