笔记-区块链教程
【摘要】 2025/1/13 -- https://liaoxuefeng.com/books/blockchain/bitcoin/basic/index.html区块链本质上其实是一个分布式的,不可篡改的数据库,天生具有可验证、可信任的特性,它不但可用于支持比特币,也可用于数字身份验证,清算业务等传统的必须由第三方介入的业务,从而降低交易成本.区块链密码学原理、安全机制、共识技术与工程实现.数字...
2025/1/13 -- https://liaoxuefeng.com/books/blockchain/bitcoin/basic/index.html
区块链本质上其实是一个分布式的,不可篡改的数据库,天生具有可验证、可信任的特性,它不但可用于支持比特币,也可用于数字身份验证,清算业务等传统的必须由第三方介入的业务,从而降低交易成本.
区块链密码学原理、安全机制、共识技术与工程实现.
数字货币
数字货币是基于数学加密原理构建的不可伪造的货币系统,而比特币是第一个基于数学加密原理构建的分布式数字货币系统。
比特币使用区块链技术实现了数字货币的可信支付。
09年1月,中本聪挖出了比特币的第一个区块——创世区块,比特币网络正式开始运行。
物物交换
一种“一般等价物”来作为商品交换的“中介”,这种一般等价物就是货币
贝壳-铜、铁铸造的货币-金、银-纸币
纸币的发行机制决定了必须由政府发行,并且强行推广使用,因此纸币又称法币。
银行系统 纸币的电子化和网络化
比特币不需要一个类似银行的中央信任机构,就可以通过全球P2P网络进行发行和流通
清结算问题
传统的基于银行等金融机构进行交易,本质上是通过中央数据库,确保两个交易用户的余额一增一减。这些交易高度依赖专业的开发和运维人员,以及完善的风控机制。
比特币则是通过区块链技术,把整个账本全部公开,人手一份,全网相同,因此,修改账本不会被其他人承认。比特币的区块链就是一种存储了全部账本的链式数据库,通过一系列密码学理论进行防篡改,防双花。
区块哈希
区块链中的主要数据就是一系列交易,第一条交易通常是Coinbase交易,也就是矿工的挖矿奖励,后续交易都是用户的交易。
哈希算法,又称散列算法,它是一个单向函数,可以把任意长度的输入数据转化为固定长度的输出:
碰撞是指,如果两个输入数据不同,却恰好计算出了相同的哈希值,那么我们说发生了碰撞:
Merkle Hash
在区块的头部,有一个Merkle Hash字段,它记录了本区块所有交易的Merkle Hash:
Block Hash
区块本身用Block Hash——也就是区块哈希来标识。
区块链依靠安全的哈希算法保证所有区块数据不可更改;
交易数据依靠Merkle Hash确保无法修改,整个区块依靠Block Hash确保区块无法修改;
工作量证明机制(挖矿)保证修改区块链的难度非常巨大从而无法实现。
比特币的交易是一种无需信任中介参与的P2P(Peer-to-peer)交易。
数字签名
使用数字签名时,每个人都可以自己生成一个秘钥对,这个秘钥对包含一个私钥和一个公钥:私钥被称为Secret Key或者Private Key,私钥必须严格保密,不能泄漏给其他人;公钥被称为Public Key,可以公开给任何人:
常用的数字签名算法有:RSA算法,DSA算法和ECDSA算法。
比特币的公钥相当于银行卡卡号
比特币的私钥相当于银行卡密码
由于比特币账本是全网公开的,所以,任何人都可以根据公钥查询余额,但是,不知道持卡人是谁。这就是比特币的匿名特性。
如果私钥被盗,黑客就可以花费对应公钥的比特币,并且这是无法追回的
比特币钱包
比特币钱包实际上就是帮助用户管理私钥的软件
和银行账户不同,比特币网络没有账户的概念,任何人都可以从区块链查询到任意公钥对应的比特币余额,但是,并不知道这些公钥是由谁持有的,也就无法根据用户查询比特币余额。
作为用户,可以生成任意数量的私钥-公钥对,公钥是接收别人转账的地址,而私钥是花费比特币的唯一手段,钱包程序可以帮助用户管理私钥-公钥对。
- 私钥是花费比特币的唯一手段;
- 钱包软件是用来帮助用户管理私钥;
- 所有交易被记录在区块链中,可以通过公钥查询所有交易信息
私钥
在比特币中,私钥本质上就是一个256位的随机整数。
ECPair 生成的私钥
toHex(32) 256位的整数通常以十六进制表示 32字节=256位整数
比特币的私钥本质上就是一个256位整数,对私钥进行WIF格式编码可以得到一个带校验的字符串。
使用非压缩格式的WIF是以5
开头的字符串。
使用压缩格式的WIF是以K
或L
开头的字符串。
公钥
比特币的公钥是根据私钥由ECDSA算法推算出来的,公钥有压缩和非压缩两种表示方法,可互相转换。
比特币的地址是公钥哈希的编码,并不是公钥本身,通过公钥可推导出地址。
通过地址不可推导出公钥,通过公钥不可推导出私钥。
地址
要特别注意,比特币的地址并不是公钥,而是公钥的哈希,即从公钥能推导出地址,但从地址不能反推公钥,因为哈希函数是单向函数。
签名
签名算法是使用私钥签名,公钥验证的方法,
signature = sign(message, sk);
isValid = verify(message, signature, pk);
- 签名不可伪造,因为私钥只有签名人自己知道,所以其他人无法伪造签名;
- 消息不可篡改,如果原始消息被人篡改了,对签名进行验证将失败;
- 签名不可抵赖,如果对签名进行验证通过了,签名人不能抵赖自己曾经发过这一条消息。
比特币网络的难度是不断变化的,它的难度保证大约每10分钟产生一个区块,而难度值在每2015个区块调整一次:如果区块平均生成时间小于10分钟,说明全网算力增加,难度也会增加,如果区块平均生成时间大于10分钟,说明全网算力减少,难度也会减少。因此,难度随着全网算力的增减会动态调整。
100EH/每秒,也就是大约每秒钟计算1万亿亿次哈希:
由于目前全网算力超过了100EH/s,而单机CPU算力不过几M,GPU算力也不过1G
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)