区块链基础coursera学习笔记(第三周)算法和技术

课程链接:https://www.coursera.org/learn/blockchain-basics/home/week/3

本文为自己听课时做的笔记,翻译可能不太准确,望谅解。

算法和技术 Algorithms & Techniques

目录

公钥加密 Public-Key Cryptography

哈希算法 Hashing

交易完整性 Transaction Integrity

保护区块链 Securing Blockchain

Quiz Resources

Quiz Directions


公钥加密 Public-Key Cryptography

两种技术主要用于保护链和有效的验证和验证。哈希非对称**加密。这些技术依赖于一些经过验证的复杂算法。

公钥加密 Public-key cryptography、安全散列 secure hashing、交易完整性 transaction integrity 和块完整性 block integrity。

学习目标:
1)总结了公钥密码学的工作
2)解释简单哈希法和Merkle树哈希法
3)探索哈希的应用
4)保护区块链的密码学
区块链基础coursera学习笔记(第三周)算法和技术

区块链去中心化的网络参与者,并不一定相互了解。证书不能通过传统的方式进行检查,比如用驾照验证你是谁。参与者可以按照自己的意愿加入和离开链条。他们超越了信任的界限。鉴于这种背景。如何识别同伴参与者? 如何授权和验证事务? 如何发现伪造或错误的交易?

我们可以通过使用公钥加密算法来实现这些功能。

简单的对称**加密:用于加密和解密的**是相同的,因此称为对称**。例如,凯撒加密是最简单的一种加密方法。由于加密和解密使用的**相同,所以它是对称**。

1)很容易从加密的数据中获得**。
2)第二,**分配,如何将**传递给交易参与者?

公钥加密如何解决这些问题:它不是使用一个**,而是使用两个不同的**来处理对称**加密的问题。
公开**被发布,私有**被保存并锁定。
encrypting函数持有两个具有**对的属性。公钥-私钥对的独特之处在于,即使数据是用私钥加密的,它也可以用相应的公钥解密,反之亦然。
简单的例子:
假设布法罗的参与者想与加德满都的参与者进行交易。 不只是发送简单的消息,布法罗的参与者将发送用布法罗的私钥加密,然后用加德满都的公钥加密的交易数据。 加德满都将首先使用自己的私钥解密数据,然后使用布法罗的公钥解密分配的交易数据。 这样可以确保只有加德满都可以解密和接收数据,并且只有布法罗可以发送数据。

公钥、私钥的一种流行实现是Rivest Shamir Adleman (RSA)算法。RSA的常见应用是无密码的用户身份验证,例如用于访问Amazon cloud上的虚拟机。虽然RSA在很多应用中都很常用,但块链需要一个更高效、更强大的算法。由于在区块链协议中,公钥对经常用于许多不同的操作,因此效率是一个关键的要求。

椭圆曲线密码体制 Elliptic Curve Cryptography, ECC family of algorithms,用于比特币以及生成**对的以太坊区块链。

为什么是ECC而不是RSA? 对于给定的比特数,ECC比RSA更强。256位ECC**对的强度大约等于RSA**对的3072位。比特币和以太坊都使用基于ECC的算法来满足加密需求。

区块链基础coursera学习笔记(第三周)算法和技术

阅读材料:
What Is Public-Key Cryptography?
Asymmetric Cryptography (Public-Key Cryptography)
Public Key Cryptography - Computerphile

测试题:
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术

哈希算法 Hashing

我们为什么要学习加密哈希?
私钥和公钥对可以比喻为参与区块链交易的护照,就像信用卡一样,需要保证它的安全,您也需要保护您在区块链上的资产的私钥安全。

在本节课中,我们将学习在区块链过程中扮演关键角色的 hash,以及在交易完整性和数据保密性方面的 hash。

哈希是什么?
哈希函数或哈希将任意长度的输入数据值转换并映射到唯一的固定长度值。 输入数据可以是文档,树数据或块数据。即使输入数据稍有不同,也会产生完全不同的哈希输出值。

哈希函数的两个基本要求:
1)为哈希函数选择的算法应该是一个单向函数 one-way function :确保没有人可以从哈希值中导出哈希的原始项目。。
2)应该是无冲突 collision free 的,或者发生冲突的可能性极低:确保哈希值唯一地代表哈希的原始项目。

现在最常用的哈希大小是256位,常用的函数是SHA-3、SHA-256和Keccak。

我们将根据组成元素的组织方式来比较两种不同的哈希方法。
简单哈希Merkle树哈希
在简单哈希方法中,所有数据项都是线性排列和散列的。在树结构方法中,数据位于树的叶节点,叶节点是成对的哈希,以得到与简单哈希相同的哈希值。

什么时候使用树型哈希? 什么时候使用简单的哈希?
当我们有固定数量的要哈希的项目(例如,块标题中的项目)并且我们要验证复合块的完整性而不是单个项目的完整性时,我们使用简单的哈希。
当项目的数量因块而异时(例如,交易数,状态数,收据数),我们使用树结构来计算哈希。

注意,状态 state 是可以通过智能合约执行来修改的变量,并且执行的结果可以在收据 receipt 中返回。树状结构有助于提高重复操作的效率,例如事务修改和状态从一个块到另一个块的更改。

在Ethereum中,哈希函数用于生成帐户地址、数字签名、事务散列、状态散列、接收散列和块头散列。SHA-3、SHA-256、Keccak-256是区块链中常用的哈希生成算法。

阅读材料:
What Is Hashing? Under The Hood of Blockchain
SHA: Secure Hashing Algorithm - Computerphile
Hash Functions
Blockchain demo

测试题:
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术

交易完整性 Transaction Integrity

为了管理交易的完整性,
1)确保一个唯一的帐户地址。 我们需要一种标准方法来唯一标识分散式网络中的参与者。
2)发送方通过数字签名授权交易。
3)验证该交易的内容未修改。
区块链基础coursera学习笔记(第三周)算法和技术

我们使用了哈希和公钥加密技术结合来解决这些问题。

账户地址 the address of the accounts
帐户地址是使用公钥、私钥对生成的。
步骤1,将生成256位随机数,并将其指定为私钥。 保持安全并使用密码锁定。
步骤2,将ECC算法应用于私钥,以获得唯一的公钥。
步骤3,将哈希函数应用于公钥以获得帐户地址。 该地址的长度较短,只有20个字节或160位。
区块链基础coursera学习笔记(第三周)算法和技术

此地址发起的交易 the transaction
转让资产的交易必须经过授权,并且必须不可否认且不可修改。
首先检查了数字签名过程,然后将其应用于该交易。数据经过哈希处理和加密,这是数字签名。 接收器获取原始数据,并对安全哈希进行数字签名。接收方可以重新计算接收到的原始数据的哈希值,并将其与接收到的哈希值进行比较,以验证文档的完整性。

现在,将交易视为该数据。
1)找到事务的数据字段的哈希。
2)使用发起交易的参与者的私钥对该哈希进行加密。 因此,对交易进行数字签名以授权交易并使交易不可否认。
3)此哈希刚刚添加到事务中。 可以由其他人使用事务发送者的公钥解密它,然后重新计算事务哈希,以进行验证。
4)将计算出的哈希与在数字签名处接收到的哈希进行比较。 如果匹配,请接受交易。 否则,拒绝它。
请注意,对于完整的交易验证,还将验证时间戳,账单,账户余额和费用充足。

区块链基础coursera学习笔记(第三周)算法和技术

阅读材料
How Safe Are Blockchains? It Depends.
Blockchains: Embedding Integrity

测试题
区块链基础coursera学习笔记(第三周)算法和技术

保护区块链 Securing Blockchain

以太坊区块的一些主要组件是标头,交易(包括交易哈希或交易根),状态无线电台,状态哈希或状态根。通过确保不篡改块头内容,不调整事务,有效计算,散列和验证状态转换,可以管理块的完整性。
请记住,区块链应该是不可变的记录。

在以太坊中,区块哈希是区块头中所有元素的区块,包括交易根和状态根哈希。通过应用称为Keccak的SHA-3算法的变体和块头的所有项目来计算它。您将在与此模块相关的测验中看到比特币区块哈希的真实示例。
区块链基础coursera学习笔记(第三周)算法和技术

一个典型的区块有大约2,000个比特币交易和大约100个以太坊交易。我们需要一种有效的方法来检测篡改并有效地验证交易

区块中的交易哈希以称为Mekle树哈希的树结构进行处理。
1)Mekle树哈希还用于计算状态根哈希 State Root,因为只需要重新计算块与块之间链接状态的哈希即可。
2)它也用于收据哈希根 receipt hash root。如果要验证任何交易,则只需检查到树的一条路径,不必完成整个交易。
3)以太坊中智能合约的执行会导致状态转换。每个状态更改都需要重新计算状态根哈希。无需为整个状态集计算哈希,只需重新计算Merkle树中的受影响路径。

以太坊中的区块哈希是通过首先计算状态根哈希 state root hash ,交易根哈希 transaction root hash,然后是收据根哈希 receipt hash root 来计算的。这些根以及标头中的所有其他项与变量节点一起进行哈希处理,以解决工作难题难题。
区块链基础coursera学习笔记(第三周)算法和技术

块哈希有两个重要目的验证区块交易的完整性,通过将先前的区块哈希值嵌入当前区块头中来形成链链接。如果任何参与者节点篡改了该块,则其哈希值更改会导致哈希值不匹配,并使该节点的本地链处于无效状态。由于哈希不匹配,该节点发起的任何将来的块都将被其他矿工拒绝。这增强了链的不变性。

阅读材料:
Securing the Blockchain
Is It Chain of Headers Rather Than a Chain of Blocks?
What is a Block Header in Bitcoin?

测试题
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术

Quiz Resources

Blockchain
Bitcoin Block Explorer
Bitcoin Wiki
Bitcoin Block Hash Calculation

Encryption Tool

Quiz Directions

任务1:计算块散列(Q2)Task 1: Computing a block hash (Q2)
任务2:加密和解密消息(Q3)Task 2: Encrypting and decrypting a message (Q3)

周测验
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术
区块链基础coursera学习笔记(第三周)算法和技术