文章目录
-
- 简答题
- 画图题
- 单选题
-
- 练习1
-
- 1.默克尔树的一般形态是?
- 2.以下哪个选项一般不包括在区块头里?
- 3.区块链可以通俗地理解为?
- 4.区块链在数据共享方面的优势,下列哪个表述不正确?
- 5.以太坊属于什么类型的区块链?
- 6.关于双花攻击以下表述不正确的是?
- 7.通俗地说,( )指的是没有便携的方法去产生一种满足特殊要求的哈希值。
- 8.关于挖矿难度说法不正确的是?
- 9.区块链网络中的节点指的是?
- 10.公钥加密算法中,公钥和私钥是成对生成的,主要用途中说法错误的是?
- 11.比特币如何保证挖矿时间的恒定?
- 12.关于哈希函数的特点,不正确的是?
- 13.关于分布式网络,下列说法不正确的是?
- 14.以下不属于拜占庭类共识算法的是?
- 15.下列属于绝对一致性算法的共识算法是?
- 16.以下关于PBFT共识的特点不不正确的是?
- 练习2
- 练习3
- 多选题
简答题
第一章
1.区块链的概述(问题:区块链是通过哪些机制实现信任的?)
区块链是利用块链式数据结构来验证和存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的、一种全新的分布式基础架构和计算范式。
区块链技术巧妙地通过对等网络技术、共识算法、哈希算法、公钥算法、分布式账本、智能合约等技术的组合为解决网络的信任问题找到了较好的解决方法。
2.哈希函数的性质(问题:区块链为什么能够保证链上数据的不可篡改?)
构成区块及区块链的核心技术是杂凑函数。
哈希函数是将任意长度的消息压缩到某一固定长度的消息摘要的函数,也称为单向散列函数、杂凑函数、杂凑算法等,是密码学中重要的保证数据完整性的方法。
哈希函数具有单向性、抗碰撞性、可验证性等特点。
单向性是指已知函数H的输入x,容易求其输出H(x);反之,已知输出H(x),求输入x则非常困难。
抗碰撞性是指想找到输出相同的两个不同输入是非常困难的。
可验证性是指杂凑函数H(x)的输入发生任何一点变化,其输出都会发生明显的改变。
哈希函数性质的重要性:
1.哈希函数的这些性质保证了区块内容的无法篡改。如果修改了某个区块的内容,那么其哈希值就会发生变化。而哈希值包含在其子区块的区块头部,因此该子区块的值也会发生变化。以此类推,从修改的区块开始,区块链的后续所有区块的内容都会有所变化;
2.这种不可篡改性使得区块链式账本与传统账本的维护方法有显著不同,传统账本可以进行增删查改操作,而对区块只能增和查两个操作。在实际应用中,如果需要对区块链上记录的内容进行删除和修改,一般是通过在新增的区块中重新记录的方式。
…
3.区块链的特点(P18-P19有详细解释)(问题:区块链的主要特点有哪些?)
1.对等性:整个区块链网络采用无中心或弱中心的架构,采用分布式存储、传输、验证等方式。
2.开放性:在去中心的区块链系统中(常见于公有链),节点可以随时加入和退出区块链,系统具有最大限度的开放性。在私有链和联盟链中,其开放性体现在节点之间的数据共享。
3.可信性:区块链的可信性是由共识、杂凑、非对称密码技术、分布式记账等多种技术配合的结果。
4.可靠性:使用分布式高冗余的架构保障数据安全和可靠性,以增加系统存储空间和通信复杂度为代价。
5.功能性:智能合约的可编程性为上层应用提供灵活的开发空间,开源的区块链系统使其为各种应用提供适合的功能。
6.匿名性:公钥作为用户地址在一定程度上保护了用户的隐私,但并不完全。
4.燃料P27(问题:以太坊的燃料起什么作用?)
总结:用于代码运行计费,防止无限循环等故障。
第二章
1.对称加密算法和非对称加密算法P53(问题:在区块链中,哪些环节使用了非对称算法?)
对称加密算法又称单钥加密算法,即加解密过程中所使用的密钥是相同的,具有加解密速度快、效率高、占用空间小的特点。
非对称加密算法中有公钥和私钥两种密钥。公钥是公开的,不需要保密且他人可以获取,私钥一般通过随机数算法生成,由个人持有,必须妥善保管和注意保密。公钥和私钥是成双出现的,即每个公钥对应一个私钥。若用其中一个密钥加密数据,则只有对应的密钥才可以解密,反之亦然。
在区块链系统中,使用非对称加密算法用于用户标识、操作权限校验、数字资产地址的生成、资产所有权的标识和数字资产的流转等诸多功能。
2.非对称加密算法P52(在非对称加密算法中,公钥和私钥都需要保密吗?为什么?)
非对称加密算法中有公钥和私钥两种密钥。公钥是公开的,不需要保密且他人可以获取,私钥一般通过随机数算法生成,由个人持有,必须妥善保管和注意保密。公钥和私钥是成双出现的,即每个公钥对应一个私钥。若用其中一个密钥加密数据,则只有对应的密钥才可以解密,反之亦然。
3.Merkle树(P58-P59)(问题:简述用Merkle树进行区块链交易验证的过程及由此带来的好处。)
Merkle树的定义与性质:
Merkle (默克尔)树,是一种典型的二叉树结构,1979年由Ralph Merkle发明。
Merkle树由一个根节点、一组中间节点和一组叶节点组成。
叶节点包含存储数据或其哈希值,中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。
Merkle树的作用:
快速检验:用作快速归纳和校验大规模数据完整性,生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。
防止篡改:在一个完整的Merkle树中,底层(叶子节点)数据的任何变动,都会逐级向上传递到其父节点,一直到Merkle树的根节点使得根节点的哈希值发生变化。
Merkle树在区块链中的应用: P58最后一段
一个节点仅需下载区块头(80字节/区块),然后通过从一个满节点回溯一条小的Merkle路径就能认证一笔交易的存在,而不需要存储或者传输大量区块链区块中的所有交易。
4.RSA密码体制
RSA密码体制由美国麻省理工学院(MIT)的研究小组提出的,由3位作者姓氏的第一个字母命名。RSA密码是目前使用最广泛的公钥密码,其理论基础是数论中的下论判断:要求的到两个大素数(如大100位)的乘积在计算机上很容易实现,但要分解两个大素数的乘积在计算机上几乎不可能实现,即单向函数。
RSA算法由三部分构成:密钥生成算法、加密算法、解密算法
第三章
1.下面以Gnutella协议为例说明P2P网络中基于泛洪的资源搜索过程。Gnutella是一种分布式无结构的P2P网络通信协议,当Peer节点需要在网络中下载一个特定的文件时,需要查询拥有该文件的Peer节点的位置,查询步骤如下:P62(问题:简述P2P网络中基于泛洪的资源搜索过程)
1.生成一个查询请求,包含查询的文件名或者关键字,查询者将该请求发送给每个与自己直接相连的节点。
2.收到请求的节点检查自己的存储空间是否有请求的文件,如发现文件则响应请求与查询节点建立连接,否则将该查询转发给自己的邻居节点。
3.每个收到查询的节点重复这个过程,直到找到文件为止。
第四章
1.简述比特币的PoW机制中难题计算方式及如何进行难度调整P89
什么是PoW机制
PoW机制要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。具体来说,工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。
为什么比特币要用到PoW机制
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链吧,那么必须解出比特币网络的工作量证明的谜题。
谜题关键的三个要素是PoW函数、区块和难度值。
PoW函数是谜题的计算方式,区块决定了谜题的输入数据,难度值决定了所需的计算量。
PoW机制中难题计算方式(以比特币矿工解这道题工作量证明谜题的步骤)
总结如下:
1.生成Coinbase交易,并与其他所有准备打包进区块的交易组成交易列表,通过MerkleTree算法生成Merkle Root Hash
2.把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入
3.不停变更区块头中的随机数即Nonce的值,并对每次变更后的区块头做双重SHA-256运算(即SHA256(SHA256(Block_header)),将结果值与当前网络的目标值比较,如果小于目标值,那么解题成功,工作量证明完成。
难度的调整是在每个完整节点中独立自动发生的。这个公式总结如下:
新难度值=旧难度值*(过去2016个区块花费的时长/20160分钟)
2.PBFT流程的三阶段协议流程P95(问题:概述PBFT的主要工作流程,并简要分析为何PBFT的扩展性不佳?)
三阶段协议是PBFT算法的核心流程,用于解决系统的一致性问题,保证所有可信节点在给定状态和参数组的条件下,按照相同的顺序执行完请求后能够取得相同的状态。
三个阶段分为预备、准备、提交阶段
1.第一阶段:pre-prepare阶段:主节点将请求广播发送给其他备份节点
2.第二阶段:prepare阶段:所有备份节点将请求广播发送给其他节点,并收到2f个prepare认证;
3.第三阶段:commit阶段:所有节点将请求广播发送给其他节点,并收到2f+1个commit认证;
不适用于节点数量过大的区块链,扩展性差:
PBFT算法的计算效率依赖于参与协议的节点数量,由于每个副本节点都需要和其它节点进行P2P的共识同步,因此随着节点的增多,性能会下降的很快。
第六章
1.考察如例题矿工收到Bob的交易Tx2时,为验证交易的合法性(即确认Bob是否真正拥有他想要支付的0.1btc)的步骤P123-124(问题:简述比特币脚本的执行过程)
2.以太坊用于创建智能合约的交易,其主要字段内容是什么?
3.链码的生存周期?
1.安装:链码在编写完成后,需要部署在Fabric网络中的peer节点上,同时注明版本号,完成安装过程。
2.实例化:在peer节点上安装的链码需要经过实例化才能真正激活可用,实例化的过程包括链码编译、打包、封装docker容器镜像等步骤。
3.调用:实例化后的链码可以被用户在peer外部进行远程调用,充当用户与账本之间的桥梁,进行查询、写入等操作。调用包括invoke和Query查询。
4.升级:peer上的链码具有可升级的特点,可以把更新版本的链码通过install操作安装到当前运行链码的peer上。