Introduction of BlockChain

Slides:



Advertisements
Similar presentations
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Advertisements

互联网金融和比特币 云南开发者2014聚会分享 王楚安.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Signutil.
Hadoop I/O By ShiChaojie.
SVN的基本概念 柳峰
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
存储系统.
李杰 首都经济贸易大学 安全与环境工程学院 个人主页:
大学计算机基础 典型案例之一 构建FPT服务器.
Ebooking 突发问题解决方案.
PPPoE PPTP L2TP全解 方伟、产品策划 讲师的CSDN博客地址
SQL Injection.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
比特币: Bitcoin: 一种点对点的电子现金系统 A Peer-to-Peer Electronic Cash System
Online job scheduling in Distributed Machine Learning Clusters
逆向工程-汇编语言
ENS 10.1安装配置指南 王俊涛 | SE.
供应商登录CJLR SRM系统入口 CJLR供应商仅可以在互联网上访问SRM系统,无法在CJLR内网登录SRM系统.
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
绿色圃中小学教育网 比例 比例的意义 绿色圃中小学教育网
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
区块链.
你知道这些标志吗?. 你知道这些标志吗? 网络——信息安全 小组讨论 你觉得网络信息安全吗? 为什么?
第3章 信息与信息系统 陈恭和.
SOA – Experiment 2: Query Classification Web Service
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
顺序表的删除.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
WPT MRC. WPT MRC 由题目引出的几个问题 1.做MRC-WPT的多了,与其他文章的区别是什么? 2.Charging Control的手段是什么? 3.Power Reigon是什么东西?
VB与Access数据库的连接.
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
IT 安全 第 11节 加密控制.
用计算器开方.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
VB与Access数据库的连接.
使用说明书 网址: 贵阳学院智慧实验室管理平台 用户中心 使用说明书 网址:
第四章 UNIX文件系统.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
香港城市大学 导师: 布礼文教授( Dr. L M Po ) 学生: 徐叙远 ( Xu Xuyuan )
入侵检测技术 大连理工大学软件学院 毕玲.
刘振 上海交通大学 计算机科学与工程系 电信群楼3-509
学习目标 1、什么是列类型 2、列类型之数值类型.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

Introduction of BlockChain Cai Cailing

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

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

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

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

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

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

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

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

区块结构图 图来自https://xiaozhuanlan.com/topic/1402935768

注:数据来源于https://blockchain.info

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

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

如何计算满足条件的区块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亿。第 558598个区块的 Nonce 值是393364205,可以理解成,矿工从0开始,一直计算了 3.93 亿次,才得到了一个有效的 Nonce 值,使得算出的哈希能够满足条件。

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

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

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

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

图参考自https://www.jianshu.com/p/700b4e264521

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

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

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

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

PPT的参考资料 《区块链技术指南》,下载地址https://github.com/yeasy/blockchain_guide/blob/master/README.md https://learnblockchain.cn/2018/01/11/guide/ 视频https://www.youtube.com/channel/UCNcSSleedtfyDuhBvOQzFzQ http://www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html https://bitcoin.org/bitcoin.pdf