概念
- 区块链是一种去中心化的分布式数据库。
- P2P
- 区块链与比特币
- 区块链1.0 & 区块链2.0
记账原理
Hash(序号0、记账时间、交易记录) = 787635ACD
Hash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD
- 10分钟
- 哈希函数:简化,隐匿,验证
- 便于验证
- 不可更改
所有权
- 地址与私钥
地址: 2A39CBa2390FDe
私钥: sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgalHash(Hash(fun(sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal))) -> 2A39CBa2390FDe
- 对交易信息进行Hash运算得到摘要信息
- 用私钥对交易摘要进行签名
- 广播
- 验证
verify(“3cdferdadgadg”, “2A39CBa2390FDe”) -> “8aDB23CDEA6”
挖矿(比特币为例)
- 比特币发行过程
- “挖矿”其实就是记账的过程
工作量证明
- 一段时间内(10分钟左右,具体时间会与密码学难题难度相互影响)只有一人可以记账成功
- 通过解决密码学难题(即工作量证明)竞争获得唯一记账权
- 其他节点复制记账结果
提高记账难度
Hash(上一个Hash值,交易记录集) = 456635BCD
Hash(上一个Hash值,交易记录集,随机数) = 0000aFD635BCD
验证
共识 - 最长链的选择
- %51攻击 - DDCTF
- 双重花费
拜占庭将军问题
- 区块链(账本)达成共识的方法(取得一致性)。
- 工作量证明 = 将军的签名
- 提高做叛徒(发布虚假区块)的成本
共识算法的核心就是解决拜占庭将军问题(分布式网络一致性问题)。
拓展
- 用Python创建自己的区块链
- 以太坊智能合约
- Solidity编程语言
区块链攻击方法
- %51攻击
- 双重花费攻击
- 自私采矿攻击:挖到新块先不广播
- 算力伪造攻击:利用算法漏洞虚报算力,得到超额奖励分配
- 扣块攻击:私吞新区块
- 日蚀攻击
- ……