V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Stegos
V2EX  ›  问与答

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

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

    隔墙有耳,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   ·   我们的愿景   ·   实用小工具   ·   1012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.