目录
比特币的兴起
1.以物易物
2.实物货币
3.符号货币
4.中央系统虚拟货币
5.分布式虚拟货币
比特币原理
三大核心问题
问题1——记账必要性
问题2——以谁为准
问题3——如何防伪
RSA算法
数字签名
比特币的优缺点
优点:
缺点
参考链接
PPT:
比特币技术介绍PPT(xinanzhijia.xyz.)
比特币的兴起
比特币的兴起源于2008.11.01一篇极客的论文,至今作者没有公布身份。论文中提出了一种去中心化货币的概念——Bitcoin。
这个想法在当时金融危机的背景下堪称疯狂,然而在无数爱好者和有识之士的支持下如今成为了现实。不光比特币的交易呈现爆炸式增长,也激发了几千种虚拟货币的诞生:
那么我们为什么要进行去中心化呢?这不得不从头开始讲起。
1.以物易物
很久很久以前的农村,人们过着以物易物的生活。
2.实物货币
由于这样存在价值彼此不认可的问题,我们统一规定物价,使用一些稀有且容易分割的东西作为货币进行交易,例如黄金或者贝壳等。
3.符号货币
目前也还有一个问题,货币本身携带不便,还有磨损等诸多问题,并且采集货币,如炼金、收集贝壳等等耗费了许多财力物力。这时有人提出了解决办法,我们未必要拿着真的黄金交易,可以找可靠机关(例如村委会)发行一些带有”一克黄金”的纸币,纸币上带有专门的防伪标志,大家用纸币交易。
4.中央系统虚拟货币
刚刚的问题显然治标不治本,贪婪的人类感觉携带纸币交易也是太麻烦了,因此又有人提出了改进办法。我们未必要真的带着货币交易。比如目前找可靠机关,统计所有村民的余额,以后交易直接跟这个可靠机关报备即可。这个可靠机关负责记录每一笔交易,计算所有人余额,大家都信任这个“可靠机关”。
5.分布式虚拟货币
然而好景不长,大家都信任的这个“可靠机关”出现了贪腐问题,导致整个中央系统虚拟货币系统轰然倒塌,然而人们已经完全习惯了不带现金交易的生活模式,这该怎么办呢……
这时,极客中本聪华丽登场。
比特币原理
我们模拟一次交易,可以抽象成如下账本的形式:
付款方 | 付款金额 | 收款方 | ……(验证字段) |
---|---|---|---|
Alice | 10BTC | Bob | |
Bob | 5BTC | Cici | |
Cici | 2BTC | David |
每个人都要进行记账,我们使用区块存储交易记录。每个区块大小为1M,能存储约4000条交易记录。把这个区块连接到前面的区块,就形成了区块链。
-
Pre Hash:前一个区块的哈希值。
-
Nonce:使得区块的哈希值满足要求的数值,即挖矿计算的结果。
-
Transaction Data:区块中的交易数据。
三大核心问题
-
为什么要记账?
-
以谁为准?(网络延迟)
-
如何防伪?
问题1——记账必要性
为什么要记账呢?因为记账有奖励。所有的比特币最终来源都是记账,即挖矿。并且记录交易还有一定量的手续费(远小于目前银行手续费)。比特币交易系统期望每10min要打包一个交易块,在2008年创世纪块出现后,每打包一个块可以获得50个比特币,后每4年减半。这样算下来:
比特币最终会发行2100万枚。
问题2——以谁为准
想解释清楚这个问题,不得不了解挖矿的原理。首先介绍一个这样的函数:sha256()
,使用链接
Hash函数
sha256()
是一种哈希算法,他可以将任何字符串转化为256bit的哈希值,算法有如下关键特点:
1.不可逆性
哈希函数具有不可逆性,具体的不可逆性可以类比成:
给出一个x,可以轻松算出y;但给出y反算x,这将是灾难。
2.小变化大改变
import hashlib
message = "Hello, world!" # 待计算哈希值的消息
message2 = "Hello, w0rld!"
hash_object = hashlib.sha256(message.encode('utf-8'))
# 获取哈希值(以16进制表示)
hex_dig = hash_object.hexdigest()
print(hex_dig) # b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
print(hex_dig2) # 3FBE0E7AA29A4A4071A2DD78E2A02AD6209D23CEC2F861BE75D24B72462D911B
可以看出,略微的输入变化,哈希值就会出现巨大变化。
3.抗碰撞性
在哈希函数设计合理的情况下,两个不同值计算后产生同样哈希值的概率,微乎其微。
挖矿过程
矿工首先获得交易记录,记录达到一定数量后开始计算一个字符串。这个字符串由:区块头+账单+开始时间+随机数组成。
接着,计算Hash=sha256(sha256(字符串)),然而,计算出的结果Hash必须前n位都为0才算成功。
由于字符串的前三部分都不能随意变化,并且哈希函数不能反算,所以我们只能反复试验随机数,直到算出满足前n位都为0的字符串,这时我们就算挖矿成功。由于哈希值受到前面三项的影响,所以挖矿一定程度上跟运气有关,但更重要的是依靠算力找到对应的随机数。
同样我们不难看出,n的取值越大,挖矿就越难。为了保证矿工们能够10分钟打包一个块,但打包过程又不那么轻松,目前设定n=66
总的比特币挖矿流程图如下:
综上我们可以得出,所有的交易以矿工打包后的区块为准。
问题3——如何防伪
防伪基于非对称加密的数字签名。最常见的非对称加密即为RSA算法。
RSA算法
算法的加密解密过程如下:
-
选择一对不相等的大质数,记作p、q
-
计算
-
计算
-
选择一个与互质的整数e
-
计算出e对于φ(N)的模反元素d
-
公钥 KU = (e,N) ,私钥KR = (d,N) 注意这括号不是最大公约数,而是表达形式。
例题如下:
-
取p=3、q=11;
-
选择一个与\phi(N)互素的数,我们选择e=3
-
找到一个d使得,解得
-
公钥KU = (e,n) = (3,33) ,私钥KR = (d,n) = (7,33)
假如明文M=20,加密即为,解密即为
数字签名
比特币交易过程中数字签名的操作流程如下:
首先A注册比特币账号,获得自己的公私钥对。A将自己的交易信息进行哈希运算获得摘要,用自己的密钥加密摘要获得一份密文。
之后A向互联网广播一组信息,请求大家认证这份消息:交易信息+自己的公钥+加密的密文。
其他用户首先将交易信息进行Hash运算获得摘要1,接着用A的公钥解密密文,获得解密的明文摘要2。如果摘要1和摘要2相同,则交易属实。因为如果想伪造一条广播信息,我们无法制造一份密文,使得他解密的结果是伪造的交易信息,因为哈希函数是无法反算的;同样的道理,这份信息也只能是A发出的,因为只有A有自己的私钥能够制造出这份密文。
比特币的优缺点
优点:
-
去中心化:比特币不受任何中央机构或政府监管,由网络中的节点来维护和验证交易。
-
保护隐私:比特币使用公开密钥加密技术,可以保护用户的信息和隐私。
-
可追溯性:所有比特币交易都被记录在区块链上,可以追踪其交易历史。
-
通货膨胀率低:比特币的总量被限定在2100万个左右,因此通货膨胀率很低,具有一定的保值功能。
缺点
-
安全性问题:比特币被盗、遗失或黑客攻击的风险仍然存在,需要用户自己保管好比特币私钥。
-
交易速度有限:比特币交易需要被打包进块,并等待6个块后才能确保交易成功。每10分钟打包4000条交易记录,每秒钟只能完成约7次交易。目前为了解决这个问题,比特币推出一个新协议,希望将区块从1M变为8M,目前协议还在推动中。
参考链接
CodingLabs - 一个故事告诉你比特币的原理及运作机制
https://coinmarketcap.com/zh/rankings/exchanges/
https://assets.pubpub.org/d8wct41f/31611263538139.pdf
<iframe src="//player.bilibili.com/player.html?aid=45247943&bvid=BV1Bb411B7dq&cid=79224469&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<iframe src="//player.bilibili.com/player.html?aid=45597148&bvid=BV12b411q7ku&cid=79839195&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/bBC-nXj3Ng4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/BODyqM-V71E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>