
?!区区!?-简答
?!区区!?
第一章绪论
密码算法在区块链技术中最普遍的应用有哪三种情况?
- 通过加密算法对区块链技术中的签名和地址加密,从而对参与交易的用户实现资产保护。
- 区块与区块之间链接的关系是:后面的区块保存有前一个区块的Hash值,计算Hash值要用到Hash算法。
- 区块头中保存有交易的Merkle根,Merkle本身就是一棵Hash二叉树的结构。将交易以Merkle根的形式存储在区块头中的目的是更好地对交易进行检索。
挖矿的具体操作是什么?
挖矿的具体操作是通过不断的尝试和计算,寻找一个区块头的哈希值 ≤ 目标值的过程,即:
在这个过程中,nonce域是可以设置的,挖矿的过程就是不停地寻找随机nonce,使得其满足上述条件。
第二章密码算法
非对称密码体制是什么
非对称密码体制:加密过程和解密过程使用两个不同的密钥来完成。
加密过程:发送方使用接收方的公钥对消息进行加密,然后将加密后的消息发送给接收方。
解密过程:接收方使用自己的私钥对收到的消息进行解密。
数字签名的过程
- 签名者使用哈希函数对文档进行摘要计算,生成一个固定长度的哈希值。
- 签名者使用自己的私钥对哈希值进行加密,生成数字签名。
- 数字签名与原文一起传输给接收者。
- 接收者使用签名者的公钥对数字签名进行解密,得到原文的哈希值。
- 接收者使用相同的哈希函数对接收到的原文进行摘要计算,得到一个新的哈希值。
- 如果两个哈希值相等,表示文档的完整且真实且签名者的身份得到确认。
如何知晓证书是否被篡改?
客户端从系统中拿到该证书发布机构的公钥,对签名解密,得到一个hash值。这是机构已经算好的,设为 hash1。
然后客户端使用相同的算法,计算整个证书的hash值,设为 hash2、这是客户端自己算的。
对比 hash1 和 hash2 是否相等、如果相等,则说明证书是没有被改过的。
Hash算法的性质:
- 算法可以用于任意长度的消息。
- 算法产生固定长度 Hash值。
- 对于任意给定的消息 m,容易计算其 Hash值。
- 单向性:对于给定的 Hash 值 h,要找到 m 使得 m的Hash值 = h 在计算上是不可行的。
- 抗弱碰撞性:对于给定的消息 m1,要发现另一个消息m2,满足 两者 Hash值 相等在计算上是不可行的。
- 抗强碰撞性:找任意一对不同的消息m1、m2,使两者 Hash值 相等在计算上是不可行的。
- 消息对应 Hash 值的每一比特应与消息的每一个比特有关联。当消息原文发生改变时,求得的消息摘要一定会变化。
AES加密算法的五种不同的工作模式
电码本式
明文消息被分成固定大小的块,每个块的加密和解密都是独立的,且使用相同的方法进行加密。
优点:有利于并行计算;误差不会被传送。 缺点:一旦有一个块被破解,使用相同的方法可以解密所有的明文据,安全性比较差。
适用于数据较少的情形。
计数器模式
CTR将块密码变为流密码,它通过递增一个加密计数器以产生连续的密钥流,每个明文块使用不同的计数器值。
优点:可以并行处理,提供高性能。 缺点:保持计数器值的唯一性至关重要,重复使用会导致保密性泄露。
密码分组链接模式
先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
第一个数据块进行加密之前需要用初始化向量( Initialization Vector,IV)进行异或操作。IV必须是随机的、不可预测的,并且每次加密都是唯一的。
优点:不容易主动攻击,安全性好于ECB;适合传输长度长的报文,是SSL、IPSec的标准。 缺点:不利于并行计算;误差传递;需要用到IV。
密码反馈模式
将分组密码转换为同步流密码,前一个分组的密文加密后和当前分组的明文异或生成当前分组的密文。
优点:分组密码转化为流模式,可以及时加密传送小于分组的数据,这使得它适用于在线加密和流数据传输。 缺点:误差传递;需要用到IV。
输出反馈模式
将分组密码转换为同步流密码,前一个分组与前一个明文块异或之前的流密码加密后异或当前分组明文。
优缺点同密码反馈模式。
第三章区块链数据结构
SPV的工作流程中SPV节点收到后会干什么?
- 检查Merkie证明,确保交易在区块中
- 检查该区块头是否属于最长链且累积工作量最大
- 检查该区块之后是否有足够多的后续区块
比特币系统的其他节点需要验证交易的合法性的具体内容
- 交易信息是否被处理。
- 交易信息是否是本人发出的。
- 交易方所使用的UTXO是否是自己所拥有的。
- 输入值总和是否大于所需输出值。
将新追加的区块广播给其他节点,网络中的其他节点如何校验新区块的合法性的?
区块记录交易的合法性验证
节点从 Merkle树 叶节点开始以此向上计算哈希值,最终得到 Merkle树 根的哈希值,在计算过程中比较每次计算得到的哈希值是否与区块中记录的哈希值相同,如果相同则说明交易记录合法。
链接的合法性校验
节点校验新区块中区块头包含的前一节点哈希值是否合法,即计算前一区块所有数据的哈希值,然后与新生成区块头中的Prevhash比较,看是否相同,如果相同则说明链接是合法的。
Nonce值校验
Nonce值校验其实就是检验矿工身份的合法性,Nonce值由矿工不断计算哈希值得出,其他节点只需按照挖矿规则将新区块中的Nonce值进行计算即可,如果哈希计算结果满足挖矿规则,则认为Nonce值无误。
第四章区块链与P2P网络
一个P2P网络系统主要组成
- 覆盖网络的结构
- 覆盖网络的路由算法
- 节点的加入、初始化路由表、路由更新和容错算法
TTL的工作原理
每当一个数据包经过一个路由器时,它的TTL值就会减少。TTL的值是一个8位的字段,其最大值通常是255。
当数据包经过一个路由器时,路由器会检查T字段的值。
如果TTL的值大于1,则路由器会将T的值减1,并将数据包转发到下一个路由器。
如果T的值减到0,路由器将弃该数据包,并向原始发送者发送一个ICMP(Internet Control MessageProtocol)消息,通知数据包已超时。
Kademlia 算法中每个节点包含的属性
- NodeID,二进制,160位;
- 节点的IP地址及端口;
- 被分配到需要存储的内容,内容以
<key, value>对的形式存储,可以理解为文件名的Hash值和文件内容; - 一个路由表,称为“k-bucket”,按 Node ID 分层,记录 有限个数 的其他节点的ID和IP地址及端口。
- 每个节点维护一个包含多个k-bucket的路由表,每个bucket负责覆盖特定距离范围的节点。
- 其核心设计原则是:每个节点会从自己视角,维护网络中其他节点的信息。这些信息按照“距离自己越远的节点,了解得越详细”的原则进行存储。
纯P2P网络模型路由表更新机制
当节点 B 收到来自节点 N 的任何消息时,它都会尝试将节点 N 添加到对应的k-bucket中。
- 如果该桶未满,节点 N 会被直接添加到队尾
- 如果该桶已满,则尝试 ping 队首节点
- 若无其无响应,则用节点 N 替换它
- 若有响应,则将其移至队尾并丢弃节点N的信息。
Mesh链路——信息高速路的工作方式
采用主动推送策略。
每个节点会为其订阅的每个“主题”维护一个稳定的小型邻居集合(Mesh网络),一旦收到新消息,便立即将完整的消息体推送给Mesh内的所有对等节点。
Gossip链路——补丁下站的工作方式
采用被动拉取策路。
节点会定期向Mesh之外的一组随机节点发送”Gossip心跳”。心跳只包含消息id元数据,即“我拥有哪些消息”的清单。对方比对后,若发现缺失,则主动请求完整数据。