互联网基础设施安全课——Algorand

3.1 引言

比特币等加密货币以及拜占庭共识中存在的问题:
比特币交易确认时间太长,1小时
比特币新用户很难实现安全自举,因为区块链可能分叉,并且用户可能被网络隔离
拜占庭容错协议需要服务器集合是事先确定且固定的
拜占庭共识协议需要2/3服务器是诚实的
面临的三个挑战:
避免女巫攻击,即攻击者伪造多个身份来参与共识
可扩展到百万用户
抵抗DDoS攻击
目标与假设:
Safety:若一个诚实的用户接受了交易A,则未来被其他诚实用户接受的交易都出现在包含A的日志中。
Liveness:在1分钟以内达成关于新交易的共识。
假设:
诚实用户所拥有的货币大于2/3
为实现活性,假设强同步,大多数诚实用户可在有限时间内将消息发给大多数诚实用户
为实现安全,假设弱同步,网络可以在长时间不同步,但有界
假设所有用户之间有松散的时钟同步,可以在弱同步之后恢复活性
Overview
每个有一个公钥,每个交易都有被某个用户签名,交易组成区块写入区块链
用户之间通过gossip协议来通信,传播新的交易
BA协议按步骤(step)执行,负责对区块达成共识:final,或tentative
在强同步下,tentative之后会达成final
在弱同步下,tentative之后,网络变成强同步,达成final
Gossip协议:与Bitcoin类似,每个用户随机挑选若干其它用户来传递消息,每个消息只转发一次
区块提议:所有用户执行密码学抽签(cryptographical sortition)来确定是否被挑选来提议区块;需要根据优先级,并提供对优先级的证明
被提议的区块被广播给所有用户,通过BA*来达成共识:在强同步下,需要4步达成共识;在最差情况下需要13步

3.2 密码学抽签(Sortition)

Verifiable random function (VRF): 一个伪随机函数并提供一个证明,其输出的正确性可公开验证。 y = F s k ( x ) y = F_{sk}(x) y=Fsk(x),其中 s k sk sk 是私钥;证明 π = p s k ( x ) \pi = p_{sk}(x) π=psk(x) 可以用公钥 p k pk pk 来验证。VRF提供了一种确定性的事前承诺,稍后通过私钥产生的证明来揭示。不同于数字签名(输出就是证明),VRF中证明无法伪造,不会遭到原象攻击。

抽签方法:
每个用户 i i i 赋予一个权重 w i w_i wi,所有用户的总权重 W W W ,用户 i i i 被选择的概率与 w i / W w_i/W wi/W 成正比;
每个权重单位对应一个子用户,每个用户对应 w i w_i wi 个子用户;
抽签就是从 W W W 个子用户中选出 τ \tau τ 个用户;一个用户被选中,如果他的一个子用户被选中;
抽签的随机性来自于一个公开的随机种子 s e e d seed seed
VRF的输入是 s e e d seed seed 和角色 r o l e role role(区块提议,BA*成员等);输出 h a s h hash hash 和证明 π \pi π
每个用户来计算自己的 w w w 个子用户们被选中的次数 k k k,即计算被选中概率 p ← τ W p \gets \frac{\tau}{W} pWτ 下, w w w 次抽签成功 k k k 次的概率分布(贝努利分布);
每个用户独立运行抽签算法,被抽中子用户个数 j j j h a s h 2 h a s h l e n \frac{hash}{2^{hashlen}} 2hashlenhash来确定;

在这里插入图片描述
验证过程就是先验证 h a s h hash hash 的正确性,然后计算 j j j

在这里插入图片描述
选择随机种子:
每一轮 r r r 的种子 s e e d r seed_r seedr 由前一轮 r − 1 r-1 r1 确定:当一个用户 u u u 提议一个新区块时,也提议一个种子: < s e e d r , π > > ← V R F s k u ( s e e d r − 1 ∣ r ) \left< seed_r, \pi> \right> \gets VRF_{sk_u}(seed_{r-1}| r) seedr,π>VRFsku(seedr1r) ;
s k u sk_u sku需要在之前就确定,来保证种子的为随机性;(略)
种子被包含在每个提议的区块中,所以一旦在 r − 1 r-1 r1 轮达成共识,则确定了第 r r r 轮的种子;
若区块有错误,则 s e e d r = H ( s e e d r − 1 ∣ r ) seed_r = H(seed_{r-1}| r) seedr=H(seedr1r);
初始种子由初始参与者通过分布式随机数生成来产生(略);并且每 R R R 轮,重新选择之前的种子;

3.3 区块提议

提议用户数量的阈值 τ P R O P O S E R \tau_{PROPOSER} τPROPOSER ; 当 τ P R O P O S E R = 26 \tau_{PROPOSER}=26 τPROPOSER=26 时,实际的提议用户数量以很高的概率在1和70之间;
用抽签哈希值和子用户索引 i i i 的哈希值 H ( h a s h ∣ i ) H(hash| i) H(hashi) 对区块提议进行优先级排序;
用户会丢弃小于当前优先级的区块提议;
传播一种消息不包含区块内容,只包含优先级和证明,让大多数用户知道最大优先级的提议者,同时丢弃其它提议;
区块等待时间, λ S T E P V A R + λ P R I O R I T Y \lambda_{STEPVAR} + \lambda_{PRIORITY} λSTEPVAR+λPRIORITY,即完成BA最后一步的时间差,加上传播优先级消息的时间;即便这个估计不准确,safety仍然满足;
在最坏情况下,恶意提议者会向不同用户提议不同的区块,导致BA*在空区块上达成共识;
用户计票超过阈值 T ⋅ τ T\cdot \tau Tτ ,则输出该票的值,否则在等待一段时间后返回超时;

3.4 BA

BA执行包含两个阶段:第一阶段中,BA将对一个区块达成共识的问题转化为一个对二选一达成一致的问题;第二个阶段中,BA将达成一致:或者同意一个区块,或者同意一个空块。
每一个阶段包含若干步骤:第一阶段包含2步;第二阶段在最好情况下,即最高优先级提议者是诚实的,包含2步;否则,最坏情况下预期需要11步。
每一步中,每个被选出的委员会成员投票,所有用户计票;接收到超过阈值票数的用户(若被选为委员会成员)为下一步投票;否则,用户超时,根据步骤编号来为下一步投票。
当网络强连通时,达成最终共识;否则达成临时共识。
一个关键设计是除了用户私钥,没有秘密,这使得任何用户都可以“被动参与”:验证签名,计票,达成一致。
在这里插入图片描述

3.5 自举(Bootstrapping)

系统自举:一个创世块,以及一个初始选举种子,这个种子在初始参与者的公钥和权重公开后生成
新用户自举:为每个区块产生一个证书(certificate),包括BinaryBA*()的上一步的所有投票,帮助新用户来达成相同的投票结论

3.6 通信

假设被抽签抽中的用户可以在攻击者实施DoS攻击之前把区块传播出去
网络形成一个随机图,直径为规模的对数,因此传播时间也随着规模的对数增长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值