11讲哈希值在现实世界的应用
哈希函数:以任意长度的数据输入,输出固定长度的数值,比如 32byte 。这个值就称为哈希值,也可以称为 摘要 散列 指纹等。
11.1数据对比
目标就是对比两份数据不需要一一对比其中的数据内容,让任何数据的比较像比较两个哈希值那么简单。所以具体操作就是通过计算两份数据的哈希值,如果哈希值相同那么就可以认为数据相同。
原理:哈希计算的防碰撞基础上才能认为是正确的。否则 不同的数据可能产生相同的哈希值。
11.2数据监测
数据连同哈希值x发送给接收方,接收方通过相同的哈希函数从而确定一个哈希值y,如果x与y相等 ,那么就可以认定数据是相同的。
11.3 哈希引用
说明:哈希值就相当于衣帽间的小票,可以通过哈希值来找到数据(可以通过小票来找到衣帽),哈希引用是一种对应其他数据的数据。计算机借助这些数据的参数找到数据的存储位置,便于日后取用。
区块链很大程度上依赖于哈希引用
11.4 及时发现数据的变更
根据哈希引用的原理:基本不存在不同的数据产生相同的哈希值
当我们把哈希引用中指向的数据仍然包含着一个哈希引用 从而形成一个长链或者树。
11.5 消耗大量运算
结合哈希运算制造出的难题可以成为哈希难题,一个哈希难题包含以下要素:
- 未经过更改的已有数据
- 可以随意修改的数据
- 使用哈希功能
- 限定哈希值
解决哈希难题的过程只能是一个个去试错,首先才一个随机数 然后计算元原数据与随机数组成的数据集合的哈希值,看哈希值是否满足限定条件。其中有一种限定条件就是哈希值中期前导0的个数。前导0越多,哈希难题的难度越高
在区块链中解决哈希难题的过程通常称为工作量证明 pow
12讲 确认并保护用户账号的安全
区块链是点对点系统,人人都参与挖矿并贡献算力资源,或者提交新的交易数据。但是,并不是人人都能获取特定账户的资产。私有资产的特征就是排他性,只有账户所有者才有权转移资产。因此,区块链面临的挑战为在去中心化的分布式系统中,用户使用公钥来确认给某账户转移资产,只有拥有私钥的人才能获取这些资产。
使用公私钥
数据流动 从公开 – 秘密
公钥加密,使用非对称加密的目的就是为了安全的穿传送信息。使用某对秘钥中的公钥加密只能使用其私钥解密,就达到了目的。
数据流动 从秘密-公开
信息通过私钥加密,而需要公钥才能解密。这种加密方法就好像一个公共的信息公告栏,人人都有一份公钥可以读取信息。
区块链中的非对称加密技术
区块链中使用非对称加密两个目标:
确认账户和授权交易
确认账户
区块链需要确认用户的账户,这样才能保证财产和用户的对应关系。公钥可以用来表示用户账户,使用公钥来确认账户同意转移资产。
授权交易
完成交易必须要能证明用户确实同意转移资产的所有权。信息流通可以追溯到用户授权资产的转移,并且要通知到检测交易数据的所有人。这种信息传输过程就需要用到非对称加密。即用户通过私钥加密数据,任何拥有与之对应公钥的人都可以确认这笔交易确实已经发生。 这一过程就是数字签名。
13交易授权
确保只有账户所有者才能将账户中的资产转移给其他账户,使用数字签名可以达到这一种目的,数字签名可用于识别一个账户,表明它的所有者同意对特定交易数据的内容进行授权,并通过允许将新的交易数据调价到历史交易数据中来批准执行。
短暂的弯路
使用数字签名 验证消息
所以当这条 问候消息被发送到世界各地的时候,首先通过公钥解密 解密,然后再计算哈希值如果能解密并且哈希值一样那么就可以验证:第一这条消息是你发送的 第二消息也是未经过篡改的。
14 存储交易数据
15 区块链的数据存储
14讲中的区块链数据结构主要包括区块头和包含交易数据的默克尔树。
本讲中将会指出更改区块链中数据的后果,以及怎样根据区块链的数据结构来检测数据的变化。
通过上图 可以得知我们要想更改区块链中的数据,比如修改交易数据、替换交易数据、等等都要对整个链上的数据做修改,而每个修改又是一个哈希难题,修改整个链上的数据是非常困难的,需要修改从修改的地方开始全部修改。
区块链记录交易时只在意所有哈希引用的正确性和一致性。如果其中一个是无效的,那么整个区块链的数据就是无效的。
16 保护数据的安全
上一讲中 明白了 在区块链中对已有数据进行修改会耗费大量的算力,从而使得修改变为不可能。 这一讲介绍如何使用改属性在不可靠的网络环境中共享以及添加新交易数据到链上,而不必担心点对点系统中的不诚实成员操作新交易数据的生成及上链过程。
区块链上的数据是澄清所有权的可靠证据,那么不诚实的结点可能操纵或者伪造交易数据来为自己谋利,so what to do?
不可变数据的重要性
不可变性意味着某些东西不可被更改。不可变的数据一旦被创建或者写入区块链猴子那个,就不可以被更改了。
让历史记录不可变 需要三个要素:
1、以一种正确的数据结构存储,使得任何对历史交易记录的修改都是十分醒目。
2、强制加入修改历史记录需要重新编写大部分历史记录的要求。
3、使得修改历史记录的计算成本变得极高。
其实我们使用区块链的数据结构就可以满足以上第1 2,关于第三条做出说明:当我们修改交易数据时,每个区块的区块头会有一个哈希难题。解决这个哈希难题会有很大的计算成本。
具体细节
如果创建一个新区块 只是组合 前一个区块的引用和默克尔树根
区块头的哈希引用
包含以下数据
前一个区块的哈希引用
默克尔树的根
开始解决哈希难题的时间戳
解决哈希难题的随机数
哈希难题难度值
创建区块的过程
区块头的验证规则
包含对前一个区块的有效哈希引用
包含默克尔树根
计算出的哈希值符合哈希难度等级
通过解决哈希难题向区块链上添加数据的过程叫做挖矿
17讲 点对点系统中数据的存储与分发
如何使得点对点系统中的计算机,能够和人类传播消息一样共享并交换信息?如果这个系统中的节点能够向对等节点传递信息,而收到信息的节点又能向别的节点继续传递这条信息,那么最终系统中所有节点都将收到相同的信息。
节点之间通过网络交流信息,信息可能会丢失 重复 失序,解决方法是:每个节点都会将将信息发送给对等节点、通过哈希值可以确定是否重复、通过区块链的时间戳可以进行排序
18讲 核实并添加交易数据
系统中的任意节点都可以提交新的交易区块,那么必须要有验证规则,即交易数据的验证 和区块头的验证
如何使得系统中的节点既承担创建新区块的角色,又承担监督其他节点创建有效区块?这就需要一种合适的奖惩。
同时系统中的各个节点存在一种竞争关系,竞争包含了两个维度,一是速度,通过解决哈希难题 二是质量 ,当第一步竞争失败的节点就无法获得新创区块的奖励,那么已经解决哈希难题创建新区块的节点也会受到其他节点 的监督。如果监督后是有效的区块,那么就会加入区块链,新的速度竞争就会开始,否则则会抛弃,从无效区块中的交易数据开始速度竞争。
运作方式:概况
系统中的所有节点都处于一下任意一个阶段:
1、评估其他节点创建并提交的新区块
2、努力成为下一个创建新区块的节点,并且将自己创建的新区块提交给其他对等节点来评估。
区块链算法重要的作用之一:不仅能保证交易数据和区块的有效性,同时使得系统内各个节点又一致的工作节奏。保持一致工作节奏的秘诀是只要节点收到包含验证信息的新区块就切换为评估阶段。评估完成就切换为验证新交易数据和创建新区块的阶段
运作方式:细节
1、新交易的数据会以闲聊的方式发送给其他 对等节点
2、每个节点在其“收件箱”中收集交易数据,对他们进行处理
3、每个节点都会优先处理新区块
4、每个节点都会通过验证其有效性和形式以及语义纠正的方式处理新的交易数据
5、每个节点仅仅收集有效交易数据到默克尔树中,并开始解答其包含的哈希难题来创建一个新的区块。
6、一旦某个节点完成了哈希难题的解答,就会发送新区块给其他所有的结点。
7、每个节点后悔通过验证哈希难题的答案,以及验证其所包含的交易数据来保证以正确的方式处理新区块。
8、每个节点都在自己的区块链数据副本中添加有效区块。
9、如果一个新的区块被证明是无效的,那么他将会被丢弃,节点会继续处理交易数据,或者完成一个新区块中的哈希难题
10、如果一个新区块被证明是有效的,那么节点就会移除收件箱中那些来自这个区块的交易,并且开始处理新交易,努力创建新区块。
11、如果一个被添加到区块链数据结构中的区块被事后证明是无效的,那么该区块以及之后的区块中的交易数据会被放到“收件箱”中再次处理,同时无效区块会被移除。
12 提交被接纳区块的节点将会收到区块中所有交易包含的手续费作为奖励。
19讲 选择交易数据的历史记录
系统中由于存在网络延迟和计算哈希难题的不确定性,区块链数据结构的增长会出现一种不确定性但是最长链原则 会使得 最终在权威链(主干链)上的区块会越来越多,各个节点的区块链数据结构最终一致。
21 讲 将所有“碎片”整合在一起
交易安全性
点对点系统面对所有人都可以创建交易,并提交给系统,交易数据是描述和澄清所有权的基础,只有合法的账户持有人才能将其账户的财产或所有权转让给另外一个账户的所有人。这就需要控制只有账户所有者才能对账户的资产进行交易。那么便可以利用非对称加密,使用私钥对哈希值进行数字签名。主要涉及的概念 包括 加密哈希、非对称加密
交易处理逻辑
由于系统中单个节点可能会故意接收无效的交易数据或者在验证交易数据时犯错误,这两种情况都可能对系统的完备性产生影响。交易处理逻辑主要包括竞争和控制。竞争获胜的节点会获取奖励。节点控制 则说的是节点既是工人又是监工,当有节点提交区块到区块链上后,其他节点会接收、审核、验证其他节点创建的区块。所以每个节点都会为创建有效区块,或者移除无效交易数据或者区块做出贡献。
竞争—奖励 节点控制—–惩罚 区块头确认 交易数据的确认
存储逻辑
存储逻辑依赖于区块链数据结构和pow,区块链数据机构保证了对数据更改是敏感的,pow 则保证了对于更改数据是基本不可能完成的。
22 区块链的缺陷
缺乏隐私:区块链是一种分布式的点对点账本系统,负责维护完整的交易记录,所有的交易细节比如交易时间、交易货物等所有人都可以查询到,基于这一点所有人都能明确所有权,并且验证新的交易。
安全模式单一 :区块链采用了非对称加密进行用户身份的验证,以及交易的授权,区块链的账户可以视为公钥,只有持有对应私钥的人才能获取账户中的资产,只有包含数字签名的交易记录才是有效的,而数字签名是通过私钥生成的,如果私钥泄漏,那么安全性就无法的刀保障。
成本高:解决哈希难题或者确保工作量证明算法正常运行都需要很高的计算成本。
23 重构区块链
区块链的主要冲突
一是透明度和隐私
区块链根据交易数据的全部历史记录来明确所有权,且这些历史记录是对所有人可见的。单有些应用有需要一定的隐私
二是安全与速度
交易历史记录是区块链的核心,将交易数据存储在不可更改的区块链数据结构中,由于区块链每次添加区块都需要解决哈希难题,从而保证区块链上的数据不会被改写或者伪造。正是由于新添加区块的速度很慢,所以与商业环境中应用程序追求速度的要求形成对比。
冲突的根源就是区块链的两个基本操作:读取和写入交易数据
在透明度和隐私之间做出选择
向预先选定的一组用户授予读取数据权限和创建区块的权限 —–私有链
向所有用户授予读取区块链数据和创建新区块的权限—公有链
在安全性和速度之间做出选择
根据写入权限授予情况分为:
向所有人授予写入权限的无需许可的区块链,所有用户都可以验证数据并添加新区块。
仅向预定一组用户授予写入权限的许可区块链,只有具有写入权限的节点才能验证交易,并参与分布式共识。