哈希算法的本质:
哈希函数输入可以是任意长的字符串
函数输出是固定长度的
函数计算过程具有一定的效率
为保障哈希函数的安全性,区块链中的哈希函数的额外性质:
1.抗冲突性:collission-resistance:不同输入很难产生相同输出
2.信息隐藏:information hiding不可逆性:知道哈希函数的输出无法逆向推导出输入
3.谜题友好型:puzzle friendly:输入变化一位输出变化也很大
哈希算法的种类:
MD5:输入不定长度,输出128bits
SHA1:SHA家族第一代,用于TLS和SSL,已被攻破
SHA2:SHA家族第二代,支持更长的信息摘要输出。如SHA224,SHA256,SHA384,SHA512,数字后缀为哈希摘要结果的长度
SHA3:目前无明显弱点,如Keccak算法
RIPEMD-160:160输出的加密算法,旨在代替128位哈希函数MD4,MD5和RIPEMD128
merkle tree梅克尔树
梅克尔树在不同的区块链系统中有不同的细节,但本质相同
比特币中的梅克尔树又称二叉梅克尔树
每一个区块都有自己的梅克尔树
- 将区块中的交易哈希值两两组队计算出新的哈希
- 一颗倒挂生长的树
梅克尔树功能
用于检验区块数据的完整性
用于对SPV钱包进行支付验证
存储hash的树
起源于哈希列表 hash list,多层哈希列表点对点网络传输数据,不把数据集中于几台机器,而是从多个机器中下载数据
为检验完整性把大文件分割成小数据块,损坏了则下载该数据块即可
比如:BT。先下载可信hash列表的根hash,然后校验hash列表,再娇艳hash列表中的数据块
以太坊:梅克尔树-帕特里夏树
提高效率节点引入节点类型
常规类型:空节点,叶子结点
引入类型:扩展节点,分支节点
梅克尔树作用
1.验证交易完整性
2.SPV简单支付验证
- 大部分是普通用户,只有比特币投资及消费支付需求
- 不运行全节点也可以验证支付,只需要保存所有的区块头即可
- SPV充分利用梅克尔树结构,在寻找交易时,只需下载区块头而不是整个区块
- 过滤掉大量不相关的数据,减少客户端不必要的下载量
公开迷药算法,非对称加密算法
两把钥匙:公钥,私钥
公钥公开,私钥必须保密
1.加密,需要保护信息,公钥加密,私钥解密
2.数字签名,手写签名的计算机实现,私钥签名,公钥验证签名
常见算法:
1.RFA:最常见的公开秘钥算法
最流行的公开秘钥算法
公钥和私钥是一对质数
难度基于大质数分解的难度
缺点:
产生麻烦
秘钥长度较大,运算代价高,速度慢
已被成功破解
2.椭圆曲线 ECC
难度基于椭圆曲线离散对数问题
使用更小的迷药,存储空间小
更高的安全性,
常用语比特币中ECDSA(椭圆曲线数字签名)
比特币使用了Secp 256k1标准定义特殊曲线和系列参数
编码
Base64:基于64歌可打印字符表示二进制数据,2^6=64,所以每6隔比特为一个单元,对于一个可打印字符。
BAse58:Bitcoin使用,用于产生Bitcoin的钱包地址
p2p网络协议
1.发现节点,dnesseed,addr
2.打通局域网,nat,upnp协议
3.通信协议
共识算法
1.拜占庭将军问题
2.PBFT算法
RAFT算法
POW
密码学算法
私钥-》椭圆曲线算法-》公钥-》Base58-》比特币地址
UTXO
网友评论