Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction of BlockChain

Similar presentations


Presentation on theme: "Introduction of BlockChain"— Presentation transcript:

1 Introduction of BlockChain
Cai Cailing

2 Hash函数 哈希函数:Hash(原始信息) = 摘要信息 原始信息可以是任意的信息, hash之后会得到一个简短的摘要信息
同样的原始信息用同一个哈希函数总能得到相同的摘要信息 正向快速:给定原文和Hash算法,在有限时间和有限资源内能计算得到Hash值; 逆向困难:给定(若干) Hash值,在有限时间内无法逆推出原文; 输入敏感:原始输入信息发生任何改变,新产生的Hash值都应该发生很大变化; 抗碰撞: 很难找到两段内容不同的明文,使得它们的Hash值一致(即发生碰撞). “抗碰撞性”,可分为“弱抗碰撞性”和“强抗碰撞性”。 给定原文前提下,无法找到与之碰撞的其它原文,则算法具有“弱抗碰撞性”; 更一般地,如果无法找到任意两个可碰撞的原文,则称算法具有“强抗碰撞性”。

3 哈希函数的作用: (1) 简化信息 一般情况下,哈希后的信息变短。 (2) 标识信息 可以使用类似AC4635D34DEF来标识原始信息,摘要信息(hash后的值)也称为原始信息的id。 (3) 隐匿信息 账本上呈现的是AC4635D34DEF这样一条记录,原始信息被隐匿。 (4) 验证信息 假如李四在还款时欺骗说,张三只借给李四10万,双方可以用AC4635D34DEF来验证原始信息

4 Hash算法包括国际上的Message Digest(MD)系列和. Secure
Hash算法包括国际上的Message Digest(MD)系列和 Secure Hash Algorithm(SHA)系列算法,以及国内的SM3算法。

5 Hash算法不是加密算法,不能用于对信息的保护,但可被应用到对登录口令的保存上。例如网站登录时需要验证用户名和密码,如果网站后台直接保存用户的口令原文,一旦发生数据库泄露后果不堪设想
利用Hash的防碰撞特性,后台数据库可以仅保存用户口令的Hash值,这样每次通过Hash值比对,即可判断输入口令是否正确。即便数据库泄露了,攻击者也无法轻易从Hash值还原回口令。 问题:字典攻击

6 解决方法, 加盐(Salt): 保存的不是原文的直接Hash值,而是原文再加上一段随机字符串(即“盐”)之后的Hash值。

7 区块链采用的哈希算法 SHA-256(Security Hash Algorithm),不管原始内容是什么,算法的结果都是一个256位(32字节)的随机散列数据。E.g. 字符串’123’的哈希是a665a f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 Python 代码 from hashlib import sha256 data = "BlockChain" HashValue= sha256(data.encode('utf-8')).hexdigest() print(HashValue) 结果:3a6fed5fc11392b3ee9f81caf017b48640d a8eb a605b41f2b9 用Python搭建区块链的代码,参考

8 区块链 区块链是一个分布式的账本,账本底层的基本结构是一个线性的链表。链表由一个个区块(block)组成, 区块很像数据库的记录,每次写入数据,就是创建一个区块。 区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。 基于区块链的分布式账本包括如下特点: (1) 维护一条不断增长的链,账本只允许添加、不允许删除/篡改; (2) 非中心化,或者说多中心化的共识,无需集中的控制,实现上尽量分布式; (3) 通过密码学的机制来确保交易无法被抵赖和破坏,并尽量保护用户信息和记录的隐私性。

9 区块链的分类 公有链: 任何人都可以参与使用和维护,参与者多为匿名。E.g. 比特币和以太 坊区块链,信息是完全公开的. 引入许可机制,可以实现私有链和联盟链. 私有链: 由集中管理者进行管理限制,只有内部少数人可以使用,信息不公开。 一般认为跟传统中心化记账系统的差异不明显。 联盟链: 由若干组织一起合作(如供应链机构或银行联盟等)维护一条区块链, 该区块链的使用必须是带有权限的限制访问,相关信息会得到保护,e.g. 超级账本项目。在架构上,现有大部分区块链在实现都至少包括了网络 层、共识层、智能合约和应用层等分层结构,联盟链实现往还会引入额 外的权限管理机制。

10 区块结构图 图来自

11 注:数据来源于

12 区块的Hash值 区块与哈希是一一对应的,每个区块的哈希都是针对“区块头”(Head)计算的。也就是说,把区块头的各项特征值(Unix时间戳(timestamp), 交易列(transactions),工作量证明,前一个区块的Hash值),按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。 区块Hash = SHA256( 区块头 ) 所以,区块哈希值实际是区块头哈希值,它可以用来唯一、明确地标识一个区块。 推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。 推论2:如果区块的内容变了,它的哈希一定会改变。

13 比特币挖矿原理和工作量证明 完成记账的节点:获得系统给与的一定数量的比特币奖励,完成记账的过程,称为“挖矿”。矿机:计算Hash的机器;矿工:操作矿机的人 记账节点的准备工作: 收集广播中还没有被记录账本的原始交易信息 检查每个交易信息中付款地址有没有足够的余额 验证交易是否有正确的签名 把验证通过的交易信息进行打包记录 比特币系统的工作量证明(Proof of Work, PoW) 规则: 一段时间内(10分钟左右,找到满足条件的Hash值)只有最快的人可以记账成功 通过找nonce串, 得到满足条件的区块Hash值(即工作量证明)竞争获得唯一记账权 其他节点复制记账结果

14 如何计算满足条件的区块Hash 难度系数(difficulty), 该值决定了计算Hash的难度,也是挖矿慢的根本原因。 E.g.,第558598个区块的难度系数是 5,883,988,430,955.41。 目标值(target)= 一个常量\难度系数。难度系数越大,目标值越小。 矿工只有找到小于目标值的Hash才算挖矿成功 当前区块的哈希由区块头唯一决定,由于区块头里面所有的特征值都是固定的,于是区块里添加了一个随机项(Nonce),使区块头的Hash值不停地变化。矿工的目的就是找到一个 Nonce 值,使得区块的Hash值是以若干个0开头,小于目标值。 由于Hash值是由数字和大小写字母构成的字符串,所以每一位有62种可能性, 若任何一个字符出现的概率是均等的,以n个0开头就需要尝试62的n次方次运算。 据协议,Nonce 是一个32位的二进制值,即最大可以到21.47亿。第 个区块的 Nonce 值是 ,可以理解成,矿工从0开始,一直计算了 3.93 亿次,才得到了一个有效的 Nonce 值,使得算出的哈希能够满足条件。

15 难度系数的动态调节和矿池 原因:无法保证刚好10分钟产出一个区块,e.g. 有时1分钟,有时几个小时 难度系数的动态调节机制: 难度系数每两周(2016个区块=14*24*6)调整一次; If 区块的平均速度是9分钟,比10分钟快了10%,则难度系数将调高10%; If 区块的平均速度是11分钟,则难度系数将降低10%。 矿池将分散在全球的矿工及矿场的算力进行联结,一起挖矿 矿池是一个全自动的开采平台,即矿机接入矿池——提供算力——获得收益。 矿池挖矿所产生的比特币奖励会按照每个矿工贡献算力的占比进行分配。 比特币挖矿机:用于赚取比特币的电脑,一般由挖矿芯片、散热片和风扇组成,只执行单一的计算程序,耗电量较大。

16 比特币 比特币是一种基于分布式网络的数字货币,比特币只是区块链的一条记录。 比特币采用了基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。 比特币网络可以认为是按照比特币P2P协议运行的一系列节点的集合。 传统的中心化网络模型 P2P网络模型

17 比特币钱包 比特币钱包(wallet):钱包不是用来存放比特币,而是存放公钥和私钥,提供查询比特币余额、收发比特币等功能。 根据私钥存储方式不同,钱包主要分为以下几种: 离线钱包:离线存储私钥,也称为“冷钱包”。安全性相对最强,但无法直接发送交易,便利性差。 本地钱包:用本地设备存储私钥。可直接向比特币网络发送交易,易用性强,但本地设备存在被攻击风险。 在线钱包:用钱包服务器存储经用户口令加密过的私钥。易用性强,但钱包服务器同样可能被攻击。 多重签名钱包:由多方共同管理一个钱包地址,比如 2 of 3 模式下,集合三位管理者中的两位的私钥便可以发送交易。

18 钱包的地址:地址代表比特币的账户,账本上不显示个人信息。
地址的生成步骤: 由32字节的随机数生成私钥; 由椭圆曲线算法,得到私钥对应的公钥; 对公钥进行SHA-256哈希,得到32字节的Hash值; 对得到的Hash值,由RIPEMD-160算法,得到20字节的Hash值---Hash160; 把由版本号* + Hash160组成的21字节数据进行两次SHA-256哈希,把得到的Hash值的前4字节作为校验和,放在21字节数据的末尾;(*:普通地址P2PKH的版本默认值是0,P2SH类型的地址版本默认值是5) 对组成的25字节数组---Base58编码---地址.

19 图参考自

20 一笔交易就是一个地址的比特币,转移到另一个地址。
比特币交易过程 一笔交易就是一个地址的比特币,转移到另一个地址。 1.Hash: 付款节点对交易进行hash, 得到一个交易摘要: 伪代码---hash(‘{“付款地址“, ”收款地址“,”金额”}’) --> “交易摘要" 2. 签名:付款节点用私钥对交易摘要进行签名 伪代码---sign("交易摘要“,"私钥") --> "签名信息" 3. 广播:付款节点广播交易原始信息和签名信息到相连的其它节点

21 比特币交易过程 4. 验证:其它节点在收到广播信息之后,会验证这笔交易是否属实,需要3步: (1)找到上一笔交易,确认支付方的比特币来源。 (2)算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。 (3)使用公钥去解开数字签名,保证私钥属实。 If 验证通过, 交易将被打包 所有的交易数据都会传送到矿工那里,矿工负责把这些交易写入区块链。 小结:比特币协议规定,申报交易的时候,除了交易金额,付款节点还必须提供以下数据: (1)上一笔交易的 Hash(付款节点从哪里得到这些比特币) (2)本次交易双方的地址 (3)付款节点的公钥 (4)付款节点的私钥生成的数字签名

22 区块的扩容 根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易, 换算一下,就是处理速度为3~5笔/秒。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的哈希。 区块链发生了一次分叉,诞生了一个新协议,称为 Bitcoin Cash(简称 BCH)。这种新货币其他方面都与比特币一致,就是每个区块的大小从 1MB 增加到了 8MB,因此处理速度提升了8倍,手续费也低得多。该协议是对原有区块链的分叉,因此当时持有比特币的人,等于一人获赠了一份同样数量的 BCH, BCH 等于创造了一种新货币,还有人提议,原始比特币的区块大小提升到 2MB,这称为 SegWit2x 。这个建议原定于2017年11月实施,但是最后一刻由于缺乏共识,就被取消了,目前还在讨论中。

23 区块容量:更大的区块容量可以带来更高的交易吞吐率,但会增加挖矿成本,带来中心
化的风险,同时增大存储的代价。兼顾多方面的考虑,当前的区块容量上限设定为 1MB。 出块间隔时间:更短的出块间隔可以缩短交易确认的时间,但也可能导致分叉增多,降 低网络可用性。 区块链并不适用于高频交易的场景. 为了提高处理性能,一方面可以提升单个节点的性能(如采用高配置的硬件),同时设计优化的策略和算法,提高性能;另外一方面可将交易处理卸载(off-load)到链下。只用区块链记录最终交易信息,如比特币社区提出的闪电网络等设计, 类似地,侧链(side chain)、影子链(shadow chain)等思路. 详细的区块链应用场景,请参阅《区块链技术指南》

24 PPT的参考资料 《区块链技术指南》,下载地址 视频


Download ppt "Introduction of BlockChain"

Similar presentations


Ads by Google