节点总数固定,每个节点有自己的私钥和其他所有节点的公钥。 网络通信质量不稳定,有丢包的可能,各个节点间延时不均匀。 用什么方式可以在少数节点宕机、丢包、延时情况下依然能用最少的通信轮次共识出不被预测的随机数?
节点 N 有 i 个。 当 N 得到出上一个已共识的随机数时,将自己产生的随机数 r 的 hash 与签名 Ni(hash(r),sig)广播 N 陆续收到其他节点 Ni(hash,sig),公钥验证后追加保存在 S 里,当 S 中累计到 i/2+1 个 sig 后签名并广播 S N 陆续收到 Si,这时由于网络质量在极端情况下会使每个 N 的 S 是不同的(比如 12347 ,23456 ,13456 )而无法达成共识,我觉得思路不对,原计划在 hash 达成共识后再公示出 r ,但现在 S 无法达成共识。
求老哥们指点一下思路,可以忽略我的想法。
![]() |
1
jingniao 13 小时 28 分钟前 via Android
分布式共识算法 raft paxos 之类的?
|
![]() |
2
rekulas 11 小时 50 分钟前
有多个节点的话可以走选举模式,例如每 3 个节点一个组,每一个小组内部协商一个种子+salt 例如 5aa9ad69aa9e7ecdca+salt 然后广播计算的 hash,所有组广播完成后再广播种子然后将所有种子排序组装成最终随机数
这种情况下由于每个组有 3 个成员即使其中 1 2 个节点临时不通也不影响结果,不过也存在一定的风险,例如某个组织恰巧控制了某个组所有节点就可能发起攻击,针对这种情况对于节点需要有奖惩机制以尽量降低攻击可能性 还有一种方法,延迟随机数方向,例如各个节点需要在 3 秒内广播自己产生的种子,然后将有效时间内的所有种子进行排序计算最终随机数-但这个计算过程需花费 N 秒,N>>3,通过调整 N 的值即可让攻击成本上升到一个无法接受的水平,从而保证安全性 其他方向还有包括门限签名等分布式算法 |
3
yodi OP |
![]() |
4
jingniao 2 小时 36 分钟前 via Android
你都用签名了,leader 节点最多不提交共识,跟随节点可以验证数据有效吧,leader 节点不工作的就超时降级重选吧。
另外你这不就是区块链中联盟链吗,可以找资料看看。 |