华为 张子怡 - 《区块链服务在华为公有云平台上的重要问题设计实现及解决方法》_部分2

展开查看详情

1.共识算法 SOLO kafka(CFT) FBFT 节点数 1 2f+1 3f+1 错误节点容忍 不容忍 最多1/2个crash节点 最多1/3个拜占庭错误节点 交易性能 一般 10000+TPS 2000+TPS – 快速拜占庭容错算法(Fast Byzantine Fault Tolerance ) 从节点将消息发 主节点对交 每个节点收到2f个准 从节点收到2f+1 送给主节点 易进行验证 备消息后对交易进行 个commit后进行 HUAWEI TECHNOLOGIES CO., LTD. 验证 写区块

2.u 简单易用 • 5分钟完成区块链配置、部署,相对于自建节约80%开发部署时间和成本 • 开发、测试、部署、管理和监控全覆盖 • 同时支持联盟链和私有链 • 和华为云其他服务打通 u 高可用 u 高性能 • 动态邀请联盟成员,快速组建联盟链 • 秒级共识。 • 按需付费、节点弹性伸缩,故障自动恢复 • 多种高效共识算法可选 (kafka, • 可扩展、海量弹性文件存储共享账本。 FBFT) • 支持SQL访问和存储共享账本 交易性能2000-10000 TPS • 支持Go,Java等多语言智能合约 • 电信级网络,系统延时小于300毫秒 u 高安全 u 全球部署 • 华为云安全立体安全防护 • 多级加密:签名、通道、内容 • 支持华为云大陆和香港站点部署 • 支持国密、加法同态保护数据隐私 • 规划和合营云全球公有云部署区块链 • 零知识证明保护用户隐私 (德电、法电等) • 和私有云结合形成混合部署 HUAWEI TECHNOLOGIES CO., LTD.

3.目 录 1. 区块链介绍及选型说明 2. 华为平台架构及使用介绍 3. 分布式系统共识问题 4. 密码学以及安全技术 HUAWEI TECHNOLOGIES CO., LTD.

4. 共识 机制 概览 工作量证明机制(PoW)· 证明 股权证明机制(PoS)· 类共 权威证明机制(PoA)· 识机 制 区块链共 投票 · 不考虑拜占庭容错 识改进思 类共 (Paxos/RAFT) 路 识机 · 考虑拜占庭容错(BFT) 制 结合 的共 识机 HUAWEI TECHNOLOGIES CO., LTD. 制

5. 一致性问题 什么是拜占庭 问题? N > 3f+1 共识算法 FLP不可能原理 HUAWEI TECHNOLOGIES CO., LTD.

6. 工作量证 明机制 (PoW) 股权证 明机制 (PoS) 权威证明 机制PoA- Clique HUAWEI TECHNOLOGIES CO., LTD.

7. 经典Paxos 不考虑拜 占庭 (RAFT) 投票类共 识机制 拜占庭容 错机制 (PBFT) 拜占庭容 错机制 (其他 BFT类) HUAWEI TECHNOLOGIES CO., LTD.

8. 原理理 • 节点先通过VRF算法选举出⼀一批节点作为committee成员节 点,这些节点会通过BFT共识后确认⼀一个最终⼀一致性的结果, 最后通过gossip⼴广播将区块分发给所有节点。 • 选举结果不不可预知性; VRF函数的特点 • 选举结果数量量确定性 • 没有分叉; 优点 • 防⽌止节点作恶; • 具有很好的可扩展性 缺点 • 缺乏算法完备性; • 相对⾼高的延迟 HUAWEI TECHNOLOGIES CO., LTD.

9. 延时/吞 适⽤用区块链 共识算法名称 中⼼心化 ⼀一致性 备注 吐量量 场景 部分去中⼼心化, 后⾯面所有协议本质上都是拜占庭容错的改进。⼏几位将军如何在有 实⽤用拜占庭容错 低/较⾼高 预设了了决策⻆角⾊色 最终收敛 N/A ⼀一定数量量个叛徒的条件下达成⼀一致决策,即分布式系统如何在部 (PBFT) (⽆无Leader) 分信任环境下如果取得状态⼀一致 Paxos允许有多 私有链、信 简化了了拜占庭将军问题,排除拜占庭节点的存在,仅考虑节点之 Paxos/Raft 个Leader,Raft 低/⾼高 最终收敛 任度⾼高的联 间由于⽹网络中断、系统崩溃等原因导致⽆无法正常沟通时的状态⼀一 有单⼀一Leader 盟链 致性问题 ⼯工作量量证明 ⾸首个在完全不不信任的⽹网络环境中可以达成状态⼀一致的共识算法; 依概率收 Proof-of- 完全去中⼼心化 ⾼高/低 公有链 需要消耗⼤大量量的计算资源,安全性依赖⽹网络中诚实节点的计算资 敛 Work(PoW) 源总和 克服了了PoW浪费⼤大量量算⼒力力的缺点。PoS的基本原理理是将区块链系 统内⽤用户的⼀一部分资源作为其信⽤用的凭证,让其在⼀一致性决策时 股权持有证明 持有更更多股份者 中/依赖 公有链、联 拥有较⼤大的话语权。例例如和PoW结合可以依据资产降低挖矿难度; Proof-of- 有较⼤大权利利,可 依赖实现 实现 盟链 或者由资产最多的⽤用户选择100位其它⽤用户作为代表决策投票; Stake(PoS) 能有中⼼心化倾向 或每若⼲干块由持股⼈人投票持久化分⽀支;设计时考虑需短程攻击、 ⻓长程攻击、⽆无成本作恶等问题 Ripple是拜占庭容错的⼀一个实现,每个节点可以按照规则信任其 典型改进协议 它节点,每个共识周期中对尚未确认的Tx进⾏行行多轮投票来决定是 (Ripple、Stellar、 依赖实现 低/⾼高 最终收敛 联盟链 否将其永久记录;Tendermint可以看作是PoS和PBFT的结合; Tendermint等) Stellar恒星协议是提供了了更更灵活信任容忍度的经典PBFT改进⽅方 案 Intel PoET 使⽤用Intel的可信执⾏行行环境(TEE),根据芯⽚片产⽣生的等待时间随 HUAWEI 去中⼼心化 TECHNOLOGIES CO., LTD. 低/⾼高 最终收敛 联盟链 (Elapse Time) 机产⽣生Leader,⽣生成新的Block;所有节点必须使⽤用Intel的芯⽚片

10. – 快速拜占庭容错算法(Fast Byzantine Fault Tolerance ) 从节点将消息发 主节点对交 每个节点收到2f个准 从节点收到2f+1 送给主节点 易进行验证 备消息后对交易进行 个commit后进行 验证 写区块 HUAWEI TECHNOLOGIES CO., LTD.

11.目 录 1. 区块链介绍及选型说明 2. 华为平台架构及使用介绍 3. 分布式系统共识问题 4. 密码学以及安全技术 HUAWEI TECHNOLOGIES CO., LTD.

12.哈希算法(Hash) • 一段数字内容的Hash可以用于验证数据的完整性 • 数字内容的微小修改都会引起Hash值的巨大变化 • 合格的Hash算法很容易由数字内得到Hash值, 却几乎不可能通过Hash值反算出原数字内容 公私钥体系(PKI) • 公私钥体系是现在加密通讯的基石,通过加密算法随机生成公私钥对,一般私钥需要在用户手中绝对安全保存,保证只有用户才能接触到, 公钥可以对外公开。可靠的加密算法可以保证任何人无法通过公钥计算出其对应的私钥 基于PKI的加密(Encryption) • 加密一般是指向特定用户发送加密内容,保证只有接收方才能解密原内容。具体地,发送方用接收方的公钥加密原内容,得到密文,将密 文发送给接收方,接收方用自己的私钥便可由密文解密(Decryption)出原内容 基于PKI的签名(Signature) • 签名用于他人验证消息内容确实来自声明的内容发送者。具体地,内容发送者发送一段明文,并将明文的Hash用自己的私钥加密,生成 签名。任何接收方收到明文后,同样对明文进行Hash,然后用发送者的公钥解密签名,将得到的数据与自己对明文Hash的结果对比如果 一致,则可以证明消息确实是该公钥对应的私钥持有者发出的 HUAWEI TECHNOLOGIES CO., LTD.

13.国密算法 │ ├── peers │ │ ├── peer0.org1.example.com 身份服务 │ │ │ ├── msp │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ ├── keystore │ │ │ │ │ ├── aeddeddd3f2e9cff9df633ebb1f94593c1af5889a0fa3ff2dc18b93754392c06_sk │ │ │ │ │ └── e793df0a0c15141f643f7dd28fa53ef4270778f647f2740d52b88958e7b2f2d7_sk 应用 应用 │ │ │ │ │ ├── signcerts │ │ │ │ └── peer0.org1.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ │ └── peer1.org1.example.com Peer Peer │ │ ├── msp (Endorser/commiter) (Endorser/commiter) │ │ │ │ │ ├── admincerts │ │ └── Admin@org1.example.com-cert.pem │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── keystore │ │ │ │ ├── 2382e79a6a79843472b1b8c4fd058fcfdcde3fc2aff4453d524fc9e2bd7cf3b3_sk Orderer Orderer │ │ │ │ │ │ └── 51c4a538ef160f608af028956843ac7e255181078f14ef4c1c563f8775e181da_sk │ ├── signcerts │ │ │ │ └── peer1.org1.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── server.crt │ │ └── server.key Orderer Orderer SM1: 为对称加密。其加密强度与AES相当。该算法不公开, 调用该算法时,需要通过加密芯片的接口进行调用。 SM2: 为非对称加密,基于ECC。该算法已公开。由于该算 Peer Peer 法基于ECC,故其签名速度与秘钥生成速度都快于RSA。 (Endorser/commiter) (Endorser/commiter) ECC 256位(SM2采用的就是ECC 256位的一种)安全强度 比RSA 2048位高,但运算速度快于RSA。 SM3: 消息摘要。可以用MD5作为对比理解。该算法已公开。 校验结果为256位。 SM4: 无线局域网标准的分组数据算法。对称加密,密钥长 度和分组长度均为128位。 应用 HUAWEI TECHNOLOGIES CO., LTD. 应用

14.同态加密 问题:A向B转账10元,需要区块链节点记账,但是不想让区块链节点知道交易金额以及最新余额 2 区块节点计算 2 区块节点计算 A: 当前余额100元 A: 当前余额***元 交易后余额100-10=90元 交易后余额***-***=***元 B: 当前余额50元 区块链网络 B: 当前余额***元 区块链网络 交易后余额50+10=60元 交易后余额***+***=***元 1 转账10元 1 转账***元 交易 交易 A B A B 现状 同态加密 明文操作: 转账金额 交易余额 挑战:如何解决区块链技术应用的 当前余额 - = 隐私和可用性? 方案:引入同态加密(解决隐私问题) E(当前余 E(转账金 E(交易余 加法同态加密: 额) 额) 额) HUAWEI TECHNOLOGIES CO., LTD.

15. 我们提供客户端 SDK库和Chaincode库,该库主要用于交易类的密文运算服务,达到用 户交易的隐私保护。 • SDK库:用于在client端提供加法同态功能和生成交易金额的证明信息。 • 同态加密链代码IDChaincode.go:在同态加密的场景下,用户在部署应用前需要下 载安装并且实例化此链代码至区块链服务。 • Chaincode库:提供零知识证明功能,用于在密文条件下,校验用户交易的证明, 并生成交易后的数据,使背书者无需解密用户交易的数据,达到余额范围的判断。 example HUAWEI TECHNOLOGIES CO., LTD.

16. 为用户生成一对同态公私钥 • privKeyStr, pubKeyStr, err := pswapi_sdk.GenerateKey(propwd) check(err) fmt.Println("key is nil") userdata.PubKey = pubKeyStr userdata.PriKey = privKeyStr 注册公钥 • res, err := sdk_client.Invoke(setup, "Register", [][]byte{[]byte(userdata.PubKey), []byte(senderAddr)}) if err != nil { fmt.Println("Fail to register user pk ", err.Error()) } else { addrByte := res[0].ProposalResponse.GetResponse().Payload fmt.Println("Register addr: ", string(addrByte)) 注册初始余额 • balanceInfo, err := pswapi_sdk.InitBalance(initbalance, userdata.PubKey) check(err) setup.ChainCodeID = txchaincode _, err = sdk_client.Invoke(setup, "init", [][]byte{[]byte(userdata.PubKey), []byte(balanceInfo)}) if err != nil { fmt.Println("Register error for user: ", senderAddr, err.Error()) } else { fmt.Println("init balance successfully: ", senderAddr) } check(err) 查询代码 • balanceInfo,err:=pswapi_sdk.InitBalance(balance,userdata.PubKey) check(err) • setup.ChainCodeID = "TxChaincode" _, err = sdk_client.Invoke(setup, "init", [][]byte{[]byte(userdata.PubKey), []byte(balanceInfo)}) if err != nil { fmt.Println("Register error for user: ", senderAddr, err.Error()) } else { fmt.Println("Register success: ", senderAddr, "->", string(userdata.PubKey)) } HUAWEI TECHNOLOGIES CO., LTD.

17. 更大的吞吐 量 同步接口及 跨链对接 低时延 支持复杂的 隐私保护 查询功能 更灵活的节 点管理 HUAWEI TECHNOLOGIES CO., LTD.

18.THANK YOU Building a better connected world HUAWEI TECHNOLOGIES CO., LTD. Copyright©2018 Huawei Technologies Co., Ltd. All Rights Reserved.