Stegos 代码审计:去中心化移动应用的隐私性底层平台 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Stegos
V2EX    问与答

Stegos 代码审计:去中心化移动应用的隐私性底层平台

  •  
  •   Stegos 2019-07-17 12:27:23 +08:00 1248 次点击
    这是一个创建于 2323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    隔墙有耳,Stegos 有着崇高的目标。

    本篇评测发布于知名加密平台 Cryptobrefing https://cryptobriefing.com/stegos-code-review-privacy-platform/

    Stegos 是完全私人、隐私以及可扩容的加密货币,并且对环境也非常友好。

    现在,我想说,我认识 Joel 多年,而且发现他绝对是我认识最有毅力的人之一。

    还记得去年关于第一代 vs 第二代 vs 第 N 代的巨大争议吗?有些公链认为自己是第 8 代甚至更多,我认为他们最终看到了第二代的浪潮。我们看到很多的 PoS+BFT+隐私协议的项目出现,并且越来越多的项目开始成熟。我之前看到了 Harmony,现在研究 Elrond,以及 CasperLabs, Near, Aleph 和其他的项目,但是我想说这些都适用于第二代概念。

    从技术角度来看,这是个好事情,因为技术架构越来越成熟。我不确定这有什么意义,但是我们拭目以待。

    Stegos 是一个为隐私应用而生的平台。Stegos 为去中心化移动应用提供了决定隐私和安全的平台。

    这完全符合第二代项目,绝对隐私,分片+高 TPS,确认时间短,数据删减,运行在移动设备上等等。“能够运行 HTML/CSS/Javascript 应用的安全移动虚拟机”非常有趣。

    这是非常高程度的隐私,我们来看看白皮书的细节。

    雪球非常有趣,很有必须深入研究。但是,我们先对区块链有所了解。为何我们会相信比特币和以太坊的余额显示?因为我们可以跟追每笔转账。我知道有个账户的余额是 10 个,因为它收到了输入值是 10,因此我可以从这个输入一直追踪到创世区块(或者是某个区块奖励-因为只有创世区块和区块奖励能够创建全新的输出)。

    如何这些都不链接,同时变得隐私呢?你如何才能知道这个数据是可信的?初始的隐私性只是不能让别人看到交易的对象,和现在交易所做的事情类似,你有输入,但是交易却在第三方进行,因此输入数据都会混乱,你也无法知道输出是从哪儿来。

    举个更加实际的例子。假设我存入 1ETH,交易后余额是 2ETH,现在我提出 2ETH。这 2ETH 和我存入的 1ETH 无关,这就是隐私交易(虽然在交易所交易需要提供身份信息)。有些加密算法(例如环形签名)可以完成这个,另外的加密(例如 bulletproofs))算法让其更加优化。

    因此环形签名能让输入和输出隐藏。那么交易数额呢?我想转你 10 个代币,但是我不想别人看到。于是,rangeproofs 算法出现,这个算法可以让交易数额在某个范围,同时不会暴露真实的数额。因此,rangeproofs 会表明交易数额会在 8 12 之间(举例来说)。

    因此,现在我可以进行混合,并且隐藏交易 value,但是如何我还想隐藏转入地址呢?你可以转账给另一个和你主地址关联的隐藏地址。这能够将余额添加到你的主地址上,但是转账会出现你第二个地址。这就是混合地址。

    因此,很多不同的技术能够完成隐私行为,那么雪球是如何做的呢?

    雪球的数据总量更小,这就好像它可以删除已经完成的输出数据,并且只保留那些还未消费的 value (类似于 mimblewimble 机制)。这是篇很好的论文,虽然不是非常技术,但是可以解释很多原理和概念。我从附录中看到了很多技术细节。

    现在,我们讨论了很多东西,Pedersen commits、bulletproofs,地址隐藏、加密有效载荷、UTXO 删减、PoS、pBFT、value shuffle 以及混合技术,这些听起来非常厉害。有时候,当我阅读这些论文的时候,我都觉得他们是在互相复制粘贴,这一个流程非常合乎逻辑,每添加一个额外的选择看起来都是经过深思熟虑的,而不是仅仅为了能够说他们拥有它而添加的。

    阅读白皮书其实可以让我看代码的时候感到兴奋,那么让我们来看看代码吧。

    我们先看最基本的事情:871 commits, 12 branches, 6 releases, 6 contributors,同时也有很好的发布以及 Pull request 管理。

    持续和良好的贡献维持在前 3 的贡献者,很开心能看到这么健康的代码库。

    Rust 代码库。看这个越来越多,似乎 golang 语言的时代正在转换。

    API 是最直接的 websocket 应用;

    无需深入研究这个,这是很好的底层架构设计。

    区块链看似非常给力。

    每个链都有自己的版本,我不会经常看到,但是我很喜欢。

    VRF 是核心(如果不是 BLS,我现在无法看 VRF )

    作为一名程序员,不得不承认 Rust 真的是非常棒的语言,通过它写的代码看起来很不错,虽然我并不是一个 Rust 狂热爱好者。

    还有 BLS 可以选择,好吧,通过 VRF 和 BLS 选出的领导者会作出区块链签名,pBFT 共识 101。

    因此,这看似是很多交易在一个给定的区块中完成(不同的输入 /输出交易对)。然后,这些交易数据会随机存储(基于哈希值,但是哈希是随机的),然后得到相应的输出值。这非常简单,而且非常实用。我们通过下面的例子来看:

    inputOne (value10) outputOne (value 10)

    inputTwo (value 7) outputTwo (value 4) & outputThree (value 3)

    在比特币中,我们可以看到区块里面有 2 个交易,tx1 是 inputOne 和 outputOne,以及 tx2 是 inputTwo 和 outputTwo 以及 Three。Stegos 通过将交易层抽象出来,从而创建了超级交易,因此,Stegos 会使用超级交易( supertransaction );

    input (value 10)

    input (value 7)

    output (value 3)

    output (value 4)

    output (value 10)

    将随机顺序(从那个哈希中)加入,你无法映射任何输入到输出。

    这也非常简单,但是却非常厉害。

    好代码并不是说一定会非常复杂。如果你可以接受非常复杂的想法,并且然它变得很容易,而且很完整,那么你知道你在做什么。这才是真正的好代码。

    领导者选举,使用随机 pbc:VRF,我们需要看看 stegos_crypto::pbc。

    这是权益抵押的托管方式,这看似很简单,但是我却不这么认为。

    Merkle 的代码很好,multisig 的代码也很好。但是它们并没有什么特别的地方,我喜欢看代码,但是却发现并没有很新奇的东西。

    但是如果看看 stegos_crypto 的代码,你会发现很多有趣的东西。

    Stegos 系统默认是隐私的,但是你仍然可以做到公开。

    这其实都是很简单的技术,但是结合起来却能变成非常棒的代码。

    隐藏秘钥,并且成为某个范围内的随机数。Stegos 考虑到很多攻击的模式,并且充分结合了加密算法。所有的 output.rs 文件看似非常棒。

    因此我们已经知道我们会获得一个隐藏的地址,转账金额的 bulletproof 算法,同时这些交易会整合成一个超级交易,将输入和输出混合。Stegos 所有的东西都基于白皮书,pBFT/BLS/VRF 算法包含了领导者选举+快速确认,同时也有超过每秒 100 笔的交易速度。

    很多的校验和余额,考虑到可能的攻击向量。

    看到这个代码,我喜欢上了验证列表。

    共识共有 155 行代码,这并不是在衡量什么,而是觉得这太棒了。

    使用 Ben Lynn 的 PBClib,快速(缺少安全性)或者安全(但是会慢)。

    他们加密数据库比区块链数据库要好。。

    网络是稳固的,pubsub 和 Kademlia。

    Stegos 代码审查结论:

    Stegos 代码非常好,因为 Joel 在电报群一直跟我说要我进行一次代码审查,其实我开始觉得代码可能会不好,但是没想到会这么好。

    所有的承诺(除了虚拟机)都完成了,我不是很确定为何它们还没有上线主网?我会把 Stegos 添加到列表上,作为第二代候选人的很强竞争者,Stegos 是 pBFT+隐私+PoS+紧凑型区块链,我很期待能够测试它们的主网。

    同时,加入我们的中文电报群查看我们的进展吧(电报搜索 @stegos4privacy_CN )。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3558 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 00:18 PVG 08:18 LAX 16:18 JFK 19:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86