(新版)区块链教学课件汇总(全).pptx
《(新版)区块链教学课件汇总(全).pptx》由会员分享,可在线阅读,更多相关《(新版)区块链教学课件汇总(全).pptx(227页珍藏版)》请在冰点文库上搜索。
第一章区块链概述,目录/CONTENTS,1.1什么是区块链1.2区块链的发展1.3区块链的分类1.4区块链体系结构1.5区块链+应用本章小结思考题,1.1.1区块链的定义,区块链包含两个概念:
分布式账本和智能合约。
区块链的实质是一个由多方参与、共同维护、持续增长的分布式数据库,也被称为分布式共享总账。
其特点是分布式网络、可建立信任、公开透明和不可篡改。
如果把数据库假设成一本账本,读写数据库就是一种记账行为。
在一段时间内找出系统中记账最快、最好的人来记账,然后将账本的该页信息发给系统里的其他人,相当于改变数据库所有的记录,发给全网的每个节点。
1.1.1区块链的定义,区块链技术是利用块链式数据结构来验证与存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式,最终由信息互联实现价值互联。
全网的每个节点。
区块链技术的优势主要体现在两方面:
一是其分布式的存储架构,节点越多,数据存储的安全性越高;二是其防篡改和去中心化的巧妙设计,使得任何人都很难违背规则修改数据。
区块链,分布式架构模式,数据结构,链式结构,分布式数据存储,1.1.2区块链的特点,分布式网络区块链以分布式网络为基础构建,数据库账本分散在网络中的每个节点上,每个节点都有一个该账本的副本,所有副本同步更新。
可建立信任公开透明除了对交易各方的私有信息进行加密外,区块链数据对所有人公开透明,所有用户看到的是同一个账本,所有用户都能看到这一账本记录的每一笔交易,任何人都能通过公开的接口,对区块链数据进行查询,并能开发相关应用。
不可篡改所谓不可篡改,即信息一旦经过验证并添加到区块链,就会被永久地存储起来。
1.1.3区块链与大数据、云计算的关系,1区块链和大数据的关系
(1)数据安全。
(2)数据开放共享。
(3)数据存储。
(4)数据分析。
(5)数据流通。
2区块链和云计算的关系,从存储的角度来看,云计算中的存储和区块链中的存储都是由普通存储介质组成的;从安全性的角度来看,云计算的安全性主要是为了保证应用程序能够安全、稳定、可靠地运行,这种安全属于传统安全的范畴。
区块链,数据开放共享,数据安全,数据分析,数据存储,数据流通,1.1.4区块链的局限性,1运行安全风险区块链把密码学、分布式存储等技术融为一体,但这并不意味着它本身是没有漏洞的。
2系统效率及可扩展性问题区块链使用多节点冗余方式保证数据存储的去中心化,这意味着对存储空间的极大浪费,且对整个链内大多数节点做一次更新非常耗时;区块链网络的价值正比于其节点规模,价值越高的网络越浪费、效率越低。
3隐私泄露风险随着区块链技术在各个领域的广泛应用,区块链面临着严重的数据隐私泄露风险。
用户使用区块链过程中,个人基本身份信息数据和交易信息数据极易被泄露。
攻击者通过地址聚类等技术来判别多个账户是否属于同一用户,挖掘用户真实信息,导致用户的数据隐私泄露。
简言之,用户的身份信息与交易信息易被攻击者获取。
1.2区块链的发展,1.2.1区块链的发展历程区块链技术早期的主要阶段:
1.2区块链的发展,1.2.1区块链的发展历程比特币早期发展的重要事件如图:
1.2区块链的发展,1.2.1区块链的发展历程比特币近年来的重要事件:
1.2区块链的发展,1.2.2区块链发展的三个阶段1区块链1.0:
比特币得到广泛应用2区块链2.0:
数字货币与智能合约结合3区块链3.0:
泛行业去中心化应用
(1)推动新一代信息技术产业的发展。
(2)为经济社会转型升级提供技术支撑。
(3)培育新的创业创新机会。
(4)为社会管理和治理水平的提升提供技术手段。
1.3区块链的分类,1.3.1公有链1.3.2联盟链1.3.3私有链1.3.4侧链核心观点是“比特币”的区块链在概念上独立于作为资产的比特币。
1.3.5互联链针对特定领域的应用可以在各自的垂直领域形成区块链。
这些区块链将有互联需求,因此这些区块链也将通过某种互联互通协议进行连接。
就像互联网一样,区块链上的这种互联构成了一个互联链,形成了一个全球性的区块链网络。
区块链,私有链,联盟链,许可链,非许可链公有链,1.4区块链体系结构,1数据与网络组织协议层该层为区块链网络中各种独立并维持高安全性的节点提供了多种加密功能。
2分布式共识协议层分布式共识协议层为维护区块链网络中数据的排序与其本身的一致性和原创性提供了核心功能。
3智能合约层4人机交互层区块链网络因其独特的框架和技术体系,适合作为自组织系统的底层支撑,用于管理分布式网络节点之间数据或交易驱动的交互行为。
1.5区块链+应用,金融,政府,医疗,物联网,农业,能源,人工智能,大数据,云计算,深度学习,区块链,本章小结,本章的目的是让读者对区块链有一个初步的了解。
首先介绍了区块链的定义、特点,以及区块链与大数据和云计算的关系,还有它的局限性,然后介绍了区块链的发展历程和几个阶段,接着介绍了区块链的分类和区块链的体系结构。
后文将在此基础上更详细地阐述区块链的各种技术原理,并对区块链进行更深入的探索。
本章介绍了目前国内外提出的各种“区块链+行业”的落地应用,如区块链+金融、区块链+政府、区块链+医疗、区块链+物联网、区块链+农业、区块链+能源;也介绍了一些“区块链+新技术”的设计实现原理和应用案例,如区块链+人工智能、区块链+大数据、区块链+云计算、区块链+深度学习。
综上,我们不难看出,区块链技术几乎可以渗透生活的每一个角落。
也许20年、10年,甚至5年、1年后,区块链会以光速融入人们的生活。
也许你也不知道具体哪里运用了区块链技术,但它已无处不在,与你的生活融为一体。
谢谢!
第二章区块链开发基础,目录/CONTENTS,2.1Python的特点和应用领域2.2模块2.3基于Tkinter的图形开发界面2.4Web开发本章小结,2.1Python的特点和应用领域,Python是一种简单的、面向对象的、交互式的、解释型的、可移植的高级语言。
Python具有语法清晰、简单易用、功能强大、可移植性强、通用性好的特点,适用于Linux、MS-DOS、MacOS、Windows等多种操作系统。
Python是一种设计良好的编程语言,可以应用于各个领域。
事实上,作为一种通用语言,Python的作用几乎是无限的。
从网站和游戏开发到机器人和航天飞机控制,你可以在任何场合使用Python。
Python,数学处理,文本处理,Web编程,多媒体应用,Pymo引擎,黑客编程,图形处理,模块的使用和安装,自包含的、有组织的代码段就是模块。
Python允许“调用”模块,允许使用其他模块的属性结合以前的工作成果实现代码重用。
安装模块:
官网下载安装;命令行安装(推荐)命令行口令(假设安装hashlib模块):
pipinstallhashlib使用pip安装口令的前提是安装了pip。
安装模块后就是导入模块,我们使用import语句进行导入。
命令行口令(假设导入hashlib模块):
importhashlib注意:
该过程遵循作用域原则:
如果在一个模块的顶层导入,那么它的作用域是全局的;如果在函数中导入,那么它的作用域是局部的。
2.2.2基本模块,hashlib:
Python的hashlib模块提供了常见的摘要算法,如MD5、SHA-1、SHA-256等。
尤其SHA-256算法,它是区块链安全的基石。
简单来说,SHA-256算法就是把一串明文通过hashlib模块提供的某个算法转换为一个固定长度的字符串。
datetime:
在区块链中,为了进一步提高安全性,避免彩虹表攻击,在对明文进行哈希处理的时候我们往往还会加上时间戳,即获得系统时间,拼接原文再生成一个哈希值。
datetime是Python处理日期和时间的标准库。
可以使用如下代码获取当前日期与时间。
importdatetimeastimenow=time.datetime.now()print(now)2019-06-2111:
00:
20.500919,基本模块,struct:
由于Python没有专门处理字节的数据类型,因此需要Struct模块在Python值和表示为Pythonbytes对象的缓冲区结构体之间进行转换。
Struct模块可用于处理存储在文件中或者来自网络的链接,以及其他来源的二进制数据。
表2-1struct模块定义的异常和函数,2.2.2基本模块,urllib:
urllib是Python内置的HTTP请求库,无须安装即可使用,它包含了4个模块.request:
它是最基本的HTTP请求模块,用来模拟发送请求;error:
异常处理模块,如果出现错误可以捕获这些异常;parse:
一个工具模块,提供了许多URL处理方法,如拆分、解析、合并等;rebotparser:
主要用来识别网站的robots.txt文件.urllib.requesturllib.parseurllib,urllib.rebotparser,urllib.error,2.3基于Tkinter的图形开发界面,Tkinter是Python的默认GUI库,它基于Tk工具集。
Tk最初是为工具命令语言设计的。
Tkinter流行后被移植到许多其他脚本语言中,包括Perl、Ruby和Python。
利用Tkinter开发GUI具有灵活性和可移植性,配合简洁的脚本语言和强劲的系统语言,可以快速开发GUI程序。
表2-2Tkinter的组件,2.3基于Tkinter的图形开发界面,创建和执行GUI程序,需要如下5个基本步骤。
导入Tkinter模块(importTkinter)。
创建一个顶层窗口对象,来容纳整个GUI程序。
在顶层窗口对象上创建所有的GUI模块。
把这些GUI模块与底层代码相连接。
执行事件循环。
创建一个简单的GUI程序:
importtkintertop=tkinter.TK()top.mainloop()执行结果为一个简单的空白窗口。
2.4.1HTTPS简介,HTTPS(HyperTextTransferProtocoloverSecureSocketLayer,超文本传输协议安全套接字层)简单来说就是加密数据传输,通俗地说就是安全连接。
它使用安全套接字层(SecureSocketsLayer,SSL)进行信息交换,是HTTP的安全版,基于HTTP开发,是一个抽象标识符体系(URIScheme),句法同http:
体系,用于在服务器和客户机之间安全交换信息和数据。
它是一个安全通信通道,具有数据完整性好、数据隐私性好和可实现身份认证三点优势。
2.4.2Web框架,在实际开发中,底层代码由专门的服务器软件来实现,我们用Python专注于生成HTML文本。
因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以需要一个统一的接口(WSGI),让我们专心用Python编写Web业务。
WSGI虽然比HTTP接口高级,但和WebAPP的逻辑相比,还是比较低级的,我们需要在WSGI上继续抽象,至于URL到函数的映射,就交给Web框架来完成。
表2-3常见的Python的Web框架,本章小结,本章向读者着重介绍了Python的特点、应用领域、模块、图形界面的开发和Web开发。
由于本书篇幅有限,还需要读者自行参考相关书籍学习Python编程语法等基础知识,为后面区块链编程打下基础,为后期区块链的开发做好准备工作。
在接下来的内容中,将会有大量的基于Python编程的实战,如私有链的开发、公有链的开发以及最后的完整项目实战。
谢谢!
第三章区块链开发基础,目录/CONTENTS,3.1区块链加密技术3.2区块链核心问题3.3区块链共识机制3.4编程案例本章小结,3.1.1安全哈希函数,哈希(Hash)函数是非常基础同时又相当重要的一种数学函数。
通俗来说,它能将一段数据(任意长度)经过计算,映射为一段较短的定长的数据(就是哈希值,同时也被称为指纹或摘要)。
总结来说,它具有以下3个特征。
其输入可以是任意长度数据。
其输出是固定长度的数据。
其能进行有效计算,简单来说就是对于任意输入,在合理的时间范围内我们总能得到哈希函数的输出。
Hash函数,目标文本,输出文本,3.1.1安全哈希函数,在基本哈希函数的基础上,加密哈希函数还应该具备抗碰撞性和不可逆性两个特性,具备这两个特性的哈希函数在文件的完整性验证、用户密码的保存以及数字签名等实际场景中有极大的应用。
抗碰撞性:
找一个y,使得y的哈希值等于x的哈希值,这几乎是不可能的,用数学表达式可以表示为:
对于x,y(xy),H(x)H(y),则称哈希函数H()具有抗碰撞性。
注意:
哈希函数具有抗碰撞性是说不会发生碰撞的概率很大,并不表示不存在碰撞。
不可逆性:
即我们几乎无法通过哈希运算的结果推导出原文。
抗强碰撞攻击,抗弱碰撞攻击,抗源像攻击,图3.1Hash函数安全特性之间的联系,3.1.1安全哈希函数,图3.2MD5算法的整体流程图,安全哈希算法:
目前常见的哈希算法包括MD5和SHA系列算法。
MD5算法即MD5消息摘要算法,属哈希算法一类。
MD5算法运行任意长度的输入消息,产生一个128位的消息摘要。
N*512bitLbit消息10000,512bit,512bit,512bit,初始序列128bit,第一个分块得出的128bit值,第N-1个128bit值,最终结果散列值,3.1.1安全哈希函数,SHA-256算法:
SHA-256算法输入报文的最大长度不超过2256位,输入按512位分组进行处理,产生的输出是一个256位的报文摘要。
图3.3SHA-256算法核心过程,该算法使用了6种基本逻辑函数:
3.1.2加解密技术,加解密技术是密码学的核心技术之一,现代加密算法的典型组件包括加解密算法、私钥和公钥。
在加密过程中,需要通过相应的加密算法和双方的公钥对明文进行加密(变换)获得密文;在解密过程中,需要通过相应的解密算法和私钥对密文进行解密(变换)还原明文。
图3-4加解密基本过程,3.1.2加解密技术,根据公钥和私钥是否相同,加解密算法可以分为对称加密算法和非对称加密算法两种基本类型。
两种加密算法适用于不同场景的需求,恰好可以互补,很多时候两者也可以组合形成混合加密算法。
图3-1加解密算法类型,3.1.2加解密技术,图3-5对称加密算法的加解密过程,对称加密算法是用相同的密钥对原文进行加密和解密,它的过程可以用下面两个公式来表示。
加密过程:
密钥+原文=密文。
解密过程:
密文-密钥=原文。
对称加密算法从实现原理上可以分为两种:
分组对称加密:
将明文切分为定长数据块作为基本加密单位,应用广泛。
序列对称加密:
每次只对一个字节或字符进行加密处理,且密码不断变化。
3.1.2加解密技术,非对称加密算法中加密密钥和解密密钥是不同的,分别称为公钥和私钥。
私钥一般需要通过随机算法生成,公钥可以根据私钥生成,而公钥是一定不能推导出私钥的。
公钥一般是公开的,可以被他人获取。
而私钥一般是个人持有的,不能被他人获取。
图3-6非对称加密算法的加解密过程,3.1.2加解密技术,椭圆曲线加密算法是基于椭圆曲线点群离散对数问题构成的公钥密码系统,在有限域上做加解密计算。
与RSA和DSA加密算法相比,它在抵抗外界攻击方面明显具有更强的安全性能,并且具有较为轻巧的密钥尺寸,是非常适用于区块链加密的一种算法。
图3-7椭圆曲线,3.1.2加解密技术,椭圆曲线上的基本运算还包括点加运算和倍点运算。
椭圆曲线上其他的点运算都可以通过调用点加运算和倍点运算来实现。
点加运算:
假定P(x1,-y1)和Q(x2,y2)为椭圆曲线上的两点,计算R(x3,y3)=P+Q。
依据椭圆曲线的“弦和切线”法则,连接P和Q作一条直线,交于椭圆曲线上的第三点R,则R关于x轴对称的点R即为所求点。
代数运算表达式如下:
图3-8点加运算,3.1.2加解密技术,倍点运算:
假定P(x1,y1)为椭圆曲线上的一点,倍点运算即求R(x3,y3)=2P。
倍点运算可以看成点加运算中Q=P的特例,当Q无限靠近P时,P和Q所连直线即为椭圆曲线在P处的切线。
根据“弦和切线”法则,作P点的切线交椭圆曲线于R,则R关于x轴对称的点R即为所求点。
代数运算表达式如下:
图3-9倍点运算,3.1.2加解密技术,椭圆曲线标量乘运算:
椭圆曲线上的标量乘运算定义为Q=kP,其中P为定义在有限域Fq内的椭圆曲线上的一点。
该步骤为完成由私钥求取公钥的过程,又称点乘运算。
目前学者们广泛认为标量乘的运算效率决定着整个椭圆曲线密码系统的效率。
通常,对二进制下的标量乘运算而言,其计算一般通过调用点加运算和倍点运算来实现。
图3-10标量乘运算的基本层次,3.1.2加解密技术,图3-11椭圆曲线加密算法的加解密步骤,椭圆曲线加密步骤:
通常公钥加密系统有两个密钥,椭圆曲线加密算法同样也有两个:
公钥Q与私钥k。
在执行加密操作时,要将明文信息嵌入曲线内的点;在执行解密操作时,需要将其相应的点解码还原成对应的明文信息。
通常在加密过程中使用一种密钥进行加密,在解密过程中使用另一种密钥进行解密。
3.1.2加解密技术,示例:
假设有两个用户:
用户A与用户B,用户B发送文件M给用户A,则使用椭圆曲线加密算法传输文件M的过程如下:
用户A自行选取一条椭圆曲线E,之后在其上选定一点作为基点P,同时确定一个私钥k,最后产生对应公钥:
Q=kP;用户A将椭圆曲线E、基点P与公钥Q传送给用户B;用户B接收到信息后,产生一个随机整数x(xn,n为基点P的阶数),x即为用户B的私钥,同时将明文M编码到用户A自行选取椭圆曲线E上的点Pm,用户B进行下列计算:
C1=Pm+xQ,C2=xP,得到相应的密文:
C=(C1,C2),或者:
C3=PmC4,C4=xQ,得到相应的密文:
C=(C3,C4)。
用户B将密文C传给用户A,用户A接收到密文C,使用私钥k解密密文:
或者:
同时将椭圆曲线E上的点Pm解码为明文M即可。
3.1.2加解密技术,基于椭圆曲线加密算法的同态加密方法构造:
设E(K,x)表示用加密算法E和密钥K对x进行加密,F表示一种运算。
如果对于加密算法E和运算F,存在有效算法G使得:
就称加密运算E对于运算F具有同态性。
设加密函数为Ek,解密函数为Dk,明文数据为则加法同态与乘法同态可分别表示为:
3.1.2加解密技术,混合加密算法:
混合加密算法同时结合了对称加密算法和非对称加密算法的优点。
混合加密算法是先用计算复杂度高的非对称加密协商一个临时的对称加密密钥,然后双方通过对称加密对传递的大量数据进行加解密处理。
混合加密算法的常见实例就是使用普遍的Web通信协议HTTPS。
明文m,加密,加密,解密,解密,图3-12分组混合加密法示例,3.1.3时间戳技术,时间戳就是一份能够表示一份数据在一个特定时间点已经存在的、完整的、可验证的数据,是能够唯一标识某一时间的字符串,具有防篡改、防复用等特点,被广泛应用于数字版权、电子合同、共识交易等领域。
区块链对每个经共识的区块加盖时间戳,证明数据的存在状态和时间顺序,确保数据在交易各方之间公开、透明并可追溯,为交易信息提供了有力的存在性证明。
时间戳服务器,文件时间戳请求,时间戳服务器反签名,图3-13时间戳工作示意图,3.1.4梅克尔树技术,图3-14梅克尔树,梅克尔树又称哈希树,是将数据的哈希值以树的结构来表示的一种数据结构,叶子节点为原始数据的哈希值,非叶子节点为其孩子节点的哈希值。
在区块链的分布式环境中,通过使用梅克尔树的数据结构和哈希算法,两个节点在共识过程中,只需比较梅克尔树根节点的哈希值就能够判断两个节点分别持有的交易数据是否一致。
图3-15区块结构,3.1.5数字签名,数字签名是非对称密钥加密技术与数字摘要技术的应用,是只有信息的发送者才能生成的、别人无法伪造的一段数字串。
通过它能确认数据的来源以及保证数据在发送的过程中未做任何修改或变动。
数字签名中的签名与信息是分开的,需要一种方法将签名与信息联系在一起。
任何人都可以利用一种公开的方法对数字签名进行验证。
图3-16数字签名加解密过程,3.1.5数字签名,盲签名:
签名者需要在无法看到原始内容的前提下对信息进行签名。
一方面,盲签名可以实现对签名内容的保护,防止签名者看到原始内容;另一方面,盲签名还可以防止追踪,签名者无法将签名内容和签名结果进行对应。
RSA盲签名算法是典型的盲签名算法。
用户消息,签名者加密,签名,消息,true/false图3-17盲签名流程图,3.1.5数字签名,多重签名:
在n个签名者中,至少收集到m个(nm1)签名,即认为签名合法。
其中,n是提供公钥的个数,m是需要匹配公钥的最少的签名个数。
多重签名可以有效地应用在多人投票共同决策的场景中。
图3-18多重签名示例图,买家,收货,接收验证,发货,支付,提醒卖方发货,确认货物后签名,完成交易,3.1.5数字签名,群签名:
即某个群组内一个成员可以代表群组进行匿名签名。
签名可以验证来自该群组,却无法准确追踪到签名的是哪个成员。
群签名需要一个群管理员来添加新的群成员,因此存在群管理员追踪到签名成员身份的风险。
图3-19群签名一般流程图,表3-2群签名的安全性要求,3.1.5数字签名,环签名:
环签名是一种简化的群签名。
签名者首先选定一个临时的签名者集合,集合中包括签名者自身。
然后签名者利用自己的私钥和签名集合中其他人的公钥可以独立地产生签名,而无须他人的帮助。
签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。
图3-20环签名一般流程图,表3-3群签名和环签名的对比,3.1.6数字证书,对非对称加密算法和数字签名来说,一旦公钥自身出现了问题,则整个建立在其上的安全体系的安全性将不复存在。
数字证书机制可以解决证明“我确实是我”的问题,它就像日常生活中的一个证书一样,可以证明所记录信息的合法性。
F,h1,F,h2,h1,提供私钥,SHAI加密,RSA加密,提供公钥RSA解密,SHAI加密,对比h1和h2,验证数字证书数字签名者,私钥公钥发布数字证书者,图3-21数字签名一般流程,3.1.6数字证书,数字证书一般包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA数字签名等信息。
其中最重要的是签发的公开密钥和CA数字签名。
因为带有CA的数字签名,所以只要通过证书就可以证明某个公钥是合法的。
类似地,CA的签名是否合法也是通过CA的签名证书来证明的。
图3-22采用HTTPS建立安全连接(TLS握手协商过程)的基本步骤,3.1.7密钥分存,密钥分存技术:
根据Shamir和Blakley在1979年分别提出的“门限方案”:
将选定的主密钥K打造成n份不同的子密钥,以t(0tn)为“门限值”,当子密钥数目超过或等于门限值t的时候,可以导出主密钥。
从上面的定义可以知道,通过改变门限值t可以适当地提升系统的安全性和操作效率。
图3-23密钥分存又被称为“现代虎符”,3.1.8匿名技术,在计算机科学中,这种不用真实姓名而使用一种特定标识的折中做法被称为化名,而匿名是指具有无关联性的化名,无关联性是一种针对特定攻击者的能力而定义的属性。
从直观的意思来看,无关联性意味着如果一个用户和系统进行重复交互,从特定攻击者的角度,不同的交互行为之间应该无法相互关联。
图3-24比特币是否具有完全的匿名性呢?
3.1.9隐私模型,图3-25传统的隐私模型,传统的隐私模型为交易的参与者提供了一定程度的隐私保护。
第三方不会交出交易者的个人身份信息,但事实上,交易双方的个人信息都存储在第三方机构中,因此在一定程度上,交易参与人的隐私仍然存在泄露的风险。
在比特币的隐私模型中,只需要提供比特币地址就可以完成准匿名交易。
在一定程度上,交易无法追溯到交易者本身,因此比特币交易在一定程度上可以不受监管。
然而,通过对区块链上的交易地址和交易金额的关联分析,可以获得该交易相关人员的线索。
因此,是一种准匿名交易机制。
图3-26比特币的隐私模型,3.2.1一致性问题,一