2019/7/4 Thu
第5章 密码学与安全技术
-
一个优秀的Hash算法将能实现如下功能:
- 正向快速
- 逆向困难
- 输入敏感
- 冲突避免
常见的Hash算法:MD5和SHA系列算法
-
数字摘要:是对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容。
-
加解密算法
-
对称加密(加解密的密钥相同):从实现原理上分为分组密码和序列密码
- 分组密码:将明文切分为定长数据块作为基本加密单位,代表算法包括DES、AES、IDEA等
- 序列密码(流密码):每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域
-
非对称加密(加解密的密钥不相同):可很好地解决对称加密中提前分发密钥的问题
代表算法包括:RSA、ELGamal、椭圆曲线(ECC)、SM2等系列算法
混合加密机制:同时结合了对称加密和非对称加密的优点。典型的应用案例是HTTPS协议,在传统的HTTP层和TCP层之间通过引入Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现可靠的传输。
-
-
消息认证码(HMAC):对某个消息利用提前共享的对称密钥和Hash算法进行加密处理,得到HMAC值。该HMAC值持有方可以证明自己拥有共享的对称密钥,并且也可以利用HMAC确保消息内容未被篡改。(基于对称加密,一般用于认证身份的场景)
-
数字签名:知名的签名算法有DSA和ECSDA。(基于非对称加密,可以用于证实某数字内容的完整性,也可以确认来源)
-
数字证书:可分为加密数字证书和签名验证证书。一般,证书需要由证书认证机构(CA)来进行签发和背书。
-
PKI(Public Key Infrastructure)体系:核心解决的是证书生命周期相关的认证和管理问题。PKI 是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架。
核心组件包括:
- CA(Certification Authority):负责证书的颁发和作废,接收来自队的请求,是最核心的部分(最核心的组件)
- RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA
- 证书数据库:存放证书
-
Merkle 树
- 最下面的叶节点包含存储数据或其哈希值
- 非叶子节点都是它的两个孩子节点内容的哈希值
- 树根的值实际上代表了对底层所有数据的“数字摘要”
-
布隆过滤器:基于Hash的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题
-
同态加密:特殊的加密方法,允许对密文进行处理得到的的仍然是加密的结果。即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。
- 全同态:同时满足加法同态和乘法同态
- 特定同态
-
零知识证明:证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。
第6章 比特币——区块链思想诞生的摇篮
-
比特币的功能特点:去中心化、匿名性、通胀预防(发行量每4年减半,总量上限为2100万枚)
-
比特币交易中金额的最小单位是“聪”,即一亿分之一(10-8)比特币。
-
比特币区块链的一个区块主要包括如下内容:
- 4字节的区块大小信息;
- 80 字节的区块头信息;
- 交易个数计数器:1~9字节;
- 所有交易的具体内容,可变长。
其中,区块头信息十分重要,包括:
- 版本号:4字节;
- 上一个区块头的 SHA256 Hash 值:链接到一个合法的块上,32 字节;
- 包含所有验证过的交易的 Merkle 树根的哈希值, 32 字节;
- 时间戳:4字节;
- 难度指标:4字节;
- Nonce: 字节, PoW 问题的答案
可见,要对区块链的完整性进行检查,只需要检验各个区块头信息即可,无需获取具体的交易内容,这也是简单交易验证( Simple Payment Verification, SPV )的基本原理外,通过头部的链接,提供时序关系的同时加大了对区块中数据进行篡改的难度。
-
比特币主要考虑了避免作恶、负反馈调节和共识机制三个方面。
- 避免作恶:当网络中存在众多参与者时,个体试图拿到新区快决定权要付出的算力成本是巨大的,意味着进行一次作恶付出的代价已经超过可能带来的好处
- 负反馈调节:比特币的价格理论上应该稳定在一个合适的值,这个价格乘以挖到矿的概率,恰好达到矿工的收益预期。
- 共识机制:基于Proof of Work(PoW)的共识机制
-
工作量证明( PoW ):通过计算来猜测一个数值( nonce ),使得拼凑上交易数据后内容的Hash 值满足规定的上限
-
权益证明(Proof of Stake, PoS):类似于现实生活中的股东机制,拥有股份越多的人越容易获取记账权。
-
闪电网络:主要通过引入智能合约的思想来完善链下的交易渠道,为了提升交易性能,核心概念主要包括:
- RSMC(Recoverable Sequence Maturity Contract,可撤销的顺序成熟度合同)
- HTLC(Hashed TimeLock Contract,哈希的带时钟的合约)
-
侧链:以比特币区块链为主链,其他区块链为侧链,而这通过双向挂钩,实现比特币从主链转移到侧链进行流通
-
软分叉:如果旧节点仍然能够验证接受新节点产生的交易和区块,则称为软分叉。旧节点可能不理解新节点产生的一部分数据,但不会拒绝。网络既向后又向前兼容,因此这类升级可以平稳进行
硬分叉:如果旧节点不接受新节点产生的交易和区块,则称为硬分叉。网络只向后兼容,不向前兼容。这类升级往往引起一段时间内新旧节点所认可的区块不同,分出两条链,直到旧节点升级完成。
第7章 以太坊——脱离数字货币的枷锁
-
智能合约:以计算机程序的方式来缔结和运行各种合约
-
账户:分为合约账户和外部账户
- 合约账户:存储执行的智能合约代码,只能被外部账户来调用激活;
- 外部账户:以太币拥有者账户,对应到某公钥。账户包括 nounce, balance, storageRoot, codeHash 等字段,由个人来控制。
当合约账户被调用时,存储其中的智能合约会在矿工处的虚拟机中自动执行,并消耗一定的燃料。燃料通过外部账户中的以太币进行购买。
-
交易:在以太坊中,指从一个账户到另一个账户的消息数据。消息数据可以是以太币或者合约执行参数。
-
以太币:主要用来购买燃料,支付给矿工,以维护以太坊网络运行智能合约的非哟。以太币最小单位时wei,一个以太币等于1018个wei。
成功生成新区块的以太坊矿工可以获得5个以太币的奖励,以及包含在区块内交易的燃料费用
-
燃料(Gas):控制某次交易执行指令的上线。每执行一条合约指令会消耗固定的燃料。
第8章 超级账本——面向企业的分布式账本
- 开发必备工具:Jira, Gerrit, RocketChat