哈希与加密算法
哈希算法
哈希算法:
- 散列算法
- 一种数据映射关系
它具备以下4种特性;
-
不可逆:
生成的哈希值一旦生成,无法通过哈希值反推信息
-
难题枚举:
想要解决难题,只能通过暴力枚举的方式来解决
因为哈希值无法反推,所以只能不断的计算尝试
-
发散性:
对于任何一串明文,根据这串明文生成哈希值
当明文发生一点点变动,它都会生成大相径庭的哈希值
-
抗碰撞性:
对于两个任意不同的明文,它们所对应的哈希值也不同
非对称加密算法
非对称加密算法只是相对于对称算法
- 这两者的使用区别体现在密钥是否可以公开
对称密钥:要求加解密过程均使用相同的密钥,而非对称加密可以提供一对钥匙
- 私钥:发起者保管
- 公钥:公开
常见的对称加密算法:DES、3DES、AES、IDEA
常见的非对称加密算法:RSA、ECC
在比特币等众多的数字货币项目中,主要使用**非对称加密算法**
非对称加密算法不需要双方需要提前共享密钥
在非对称算法中,私钥一般通过一个随机数产生的,这个随机数称为 "种子"
某个方面来说,知道了这个随机数,也就等于知道了私钥
如果产生随机数的算法足够均匀分布,私钥碰撞的可能性比几乎不存在。
正因为区块链对产生随机数的算法要求高,它要求真实的均匀随机分布(不是计算机的伪随机数)
默克尔树
在区块链中,主要作用范围覆盖在交易记录内
它排列了某个区块中所有的交易记录,并采取特定的算法进行查询
默克尔树重点使用了:哈希算法
默克尔树是一种数据结构,通常是一个二叉树(或多叉树)
- 它以特定的方式逐层向上计算
在最顶部的Hash块叫做:默克尔根

以比特币中使用的二叉Merkle树为例
每条交易的哈希值就是一个叶子节点,从下往上将两个相邻叶子节点的组合哈希作为新的哈希值,新的哈希值成为树节点继续与相邻的树节点组合成新的哈希值。
在重复一定次数后直到形成唯一的根节点。
最后得到的Merkle根需要保存到区块头中,以便仅需通过区块头就可以对交易进行简单支付验证,这一过程也成为SPV(Simplified Payment Verification)。
对于Merkle树而言,并不需要知道整棵Merkle树中每个节点的值
它可以通过节点的值 、Merkle根的值 和相关路径来快速验证该节点是否属于该Merkle树,从而快速验证该区块中是否包含了某条交易。
默克尔树的作用:
-
快速比较大量数据
当两个默克尔树的根哈希值相同时,说明所代表的数据都相同
-
快速定位修改

如这张图:
- 若是L3发生修改,那么
Hash 1-0、Hash 1、默克尔根(Top Hash)就一定会发生改变 - 如果想要快速定位,只需要从
默克尔根(Top Hash)》Hash 1》Hash 1-0寻找即可找到L3
- 若是L3发生修改,那么
-
零知识证明
可以证明某一个Hash块存在,但又不清楚该Hash块的具体内容
在默克尔树这里,就可以从
默克尔根(Top hash)一路往下找,就能清楚的知道某Hash块是否存在
智能合约
智能合约:
- 能够自动执行合约条款的计算机程序
智能合约由代码进行定义,并有代码强制执行,完全自动且无法干预
- 智能合约事前执行,不像传统合约一样事后执行。
智能合约本质上的抽象概念是在个人、机构和财产之间形成关系的一种公认工具,是一套形成关系和达成共识的协定。
三要素
不可干预:
- 合约是自动运行的,不允许任何人进行干预
自足:
- 通过提供服务或发行资产来获取资金,同时也会使用这些资金
去中心化:
- 使用分布式架构,本身是通过网络节点来自动运行
差异化
智能合约与传统合约有一定的相似性,如:
- 明确参与者的权力、义务
- 违约方会收到惩罚
- ...
但除了这些还有另外的区别:
| 智能合约 | 传统合约 | |
|---|---|---|
| 自动化 | 自动判断 | 人工判断 |
| 主客观 | 适合可观性请求 | 使用主观性请求 |
| 成本 | 低 | 高于智能合约 |
| 执行时间 | 快速 (事前预定、预防执行) | 慢 (随时进行) |
| 违约惩罚 | 依赖于抵押资产 | |
| 适用范围 | 全球范围 | 某一群体 |
智能合约与区块链的关系
区块链的去中心化账本功能可以被用来创建、确认、转移各种不同类型的资产及合约
几乎所有类型的金融交易都可以改造成在区块链上使用,如:
- 股票
- 私募股权
- 众筹
- 债券
- ...
智能合约的工作原理
基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。
基于区块链的智能合约构建及执行分为如下几步:
- 多方用户共同参与制定一份智能合约
- 合约通过P2P网络扩散并存入区块链
- 区块链构建的智能合约自动执行