Neo Live 实录 | Suterusu CTO 林煌:如何助力 Neo 开发 Layer2 隐私协议的解决方案

久违的 Neo Live 再次与大家见面啦!2020 年的首期 Neo Live,我们邀请到新伙伴 Suterusu 的 CTO 林煌,一起聊聊他们与 Neo 的深度技术合作「如何助力 Neo 开发 Layer2 隐私协议的解决方案」。

Neo Live 实录 | Suterusu CTO 林煌:如何助力 Neo 开发 Layer2 隐私协议的解决方案

扫描上方二维码

全程回顾本期 Neo Live

以下是全场活动的文字版内容实录:

今天给大家介绍下 Suter 作为 Neo Layer2 解决方案的架构。

Neo Live 实录 | Suterusu CTO 林煌:如何助力 Neo 开发 Layer2 隐私协议的解决方案

如系统架构图所示,发送者将从他的钱包中选择 NEO 账户,并运行 Fund 智能合约,该合约将 NEO 转换为二层协议代币 Suter。Fund 合约将在主链网络上运行。

发件人通过运行 CreateAddress 创建一个 Suter 帐户,然后运行 CreateFundTx 算法来创建一个能运行 Fund 智能合约的交易,该交易将启动 Fund 智能合约,并在他的钱包中将 NEO 转换成 Suter 代币,然后将这些 Suter 代币转到新创建的 Suter 帐户中。

在 NEO blockchain 确认 Fund 合同后,将通过运行 Suterusu 匿名转账 contract 来匿名化对应 Suter token,该合同将由 Suter blockchain network 确认。这里,Suter 匿名转账 contract 将保证发送者和接收者的匿名性以及转让金额的保密性。发送者将通过运行 CreateTransferTx 来创建一个能触发 Suter 匿名转账 contract 的交易,即 Transfer。

最后,Fund 合同会将匿名的 Suter token 换回 NEO,并将其存储在接收者的钱包中。发送者将运行 CreateBurnTx 交易以触发 Burn contract,以将匿名化后的 Suter 帐户中的 Suter token 转换为接收者帐户中的 NEO。

下面将介绍这些 contract 的细节以及各个用户算法与这些 contract 如何交互。

Suter 支付框架

Suter 支付框架主要包含以下三个智能合约,以实现智能合约平台的保密支付。

– Fund 合约 –

任何人都可以通过指定公钥并转移一些 NEO 来为帐户注资。该合约将 NEO 转换为 Suter。NEO 被存储在智能合约中,而 Suter 将以同态的方式添加到 y 的余额中。如果该帐户尚不存在,该合约将会创建一个新帐户。该合同中的转账操作还附带有范围证明,以确保存款金额不超过 Suter token 的上限。

– Burn 合约 –

Burn 将 Suter 转换回 NEO。它根据 Fund 声明的 statement 来验证 Fund 对应零知识证明,以确保发送者知道正确的私钥并 burn 了正确的金额。它还检查交易数据上的签名和计数器的当前值,以防止重放攻击。

– Transfer 合约 –

通过此操作,可以在 Suter blockchain 中匿名转账 Suter token。匿名转账对应零知识证明可确保密文具有正确的格式,并且发件人有足够的 Suter token。

用户通过运行以下算法之一与智能合约交互。这些算法的输出是原始交易。它们将使用发送这些交易的 NEO 或者 Suter 帐户的私钥签名,并触发 NEO 或 Suter blockchain 的智能合约。

CreateAddress (sk,pk)为用户提供了一种向智能合约认证身份的方法。它以安全参数 lambda 作为输入,并输出一个私钥 sk 和相应的公钥 pk。

CreateFundTx (pk,amt)向帐户添加资金,该算法的输入为公钥 pk 和金额 amt。

CreateTransferTx (sk_{from},pk_{to},amt,st)将资金从一个帐户转到另一个帐户。它需要私钥 sk_{from},接收者公钥 pk_{to},转账金额 amt 以及某个特定 block height h 的智能合约的状态 st 作为输入,最终输出 tx_{trans}。(对于匿名转账,该算法还把匿名集合 AnonSet 作为输入,输入中还包括发送者和接收者的公钥。AnonSet 也会包含在输出中。)

CreateBurnTx (sk,st)从帐户中提取全部余额。这个算法的输入是密钥 sk 和一个状态 st。

ReadBalance (sk,st)读取帐户余额。该算法输入为密钥 sk 和状态 st,输出整数 b。

有关这些算法的更多详细信息,有兴趣的读者可以参考 Suterusu 黄皮书。请注意,发件人需要购买 Suter token 以支付匿名转账的费用。

我们在架构设计中还考虑了如何防止 frontrunner 攻击和重放攻击。

如何防止 frontrunner 攻击

这里描述下如何防止 frontrunner 攻击。当涉及到跨链功能时,这个是我们必须考虑的问题。Zether 的论文提供了一个如何发起 frontrunner 攻击的详细案例:转账交易中的零知识证明需要证明余额为正。

用户 Alice 针对合约中以加密方式存储的金额为正的证明。但是,如果另一个用户 Bob 转移了一些 ZTH 到 Alice,并且 Bob 的交易被 blockchain network 先处理,则 Alice 的交易将被拒绝,因为此时 Alice 账户余额由于 Bob 的操作而改变了,因此对应的零知识证明不再有效。请注意,Bob 完全可能用心良好,而 Alice 却会因此失去了为处理交易而支付的 gas 费用。

为了解决 frontrunner 攻击,Suter 框架将所有传入的 transaction 暂时保持为 pending 状态。系统时间分为多个周期,每个周期由 k 个连续的块组成。在每个周期结束时,未完成的转帐将被转入相应的帐户。预计用户将在一个周期开始时发布其 transfer 或 burn 交易。

然后,当收到来自该帐户的第一条消息时,我们会在一个时期内翻转一个帐户;因此,一条消息只会滚动到一个帐户。为了实现这一点,我们定义了一个单独的(内部)滚动方法,其他所有方法要做的第一件事就是调用该方法。

为了防止重放攻击,Suter 框架具有另外一个重要功能:将帐户锁定到智能合约里。将一个随机数与每个 Suter 帐户相关联,该随机数将随该账户所处理交易数目增加而增加。来自帐户的新交易必须签署与该帐户关联的最新随机数以及交易数据(其中包括对应的零知识证明)。这种方法将交易的所有内容,包括随机数和零知识证明绑定起来,并确保 freshness。因为攻击者无法在恶意交易中导入合法的零知识证明,也就无法实现重访攻击。

这个系统架构大概就是这样了。

Q &A; 问答环节

✔️ Suterusu 最近在市场层面频繁的发声,是不是在技术上取得了领先的优势性的进展?

林煌 :目前我们密码模块和客户端基本已经调试完毕,现在在进行密码模块和区块链网络的对接,预计三月份测试网上线。

✔️ 作为 Suterusu roadmap 中的一环,与 Neo 这样的公链进行技术合作是目前比较重要的事情,Suterusu 最终的定位和愿景是什么样的呢?项目最大的价值体现在什么地方?

林煌 :目前我们项目还是专注于做服务于公链的二层协议,一个能匿名化任何底层密码币的二层协议。短期来看我们为智能合约平台设计的匿名支付方案为各大公链生态系统提供一流的隐私保护服务,长期看我们希望能填补密码理论和隐私保护技术实践之间的鸿沟。

✔️ 匿名币在早期的加密社区就很受大家重视,门罗,大零,小零,和从去年开始比较火热的 grin 等等,林博士可以不可以深入浅出的为我们解释一下 Suterusu Zk 的核心优势点相较于其他的匿名币解决方案究竟优秀在哪里?

林煌 :目前的隐私币要不就需要可信初始化(如 zcash),这将允许攻击者不被察觉的情况下发行不限量的 zcash,要不然就可扩展性不强(如 monero)。我们所提出的高效的保密支付方案能保证我们的隐私保护 blockchain 协议能在安全性和可扩展性之间获得最佳平衡,也就是既无需可信设置同时证明大小还是常数的。

另外,和大部分不提供智能合约功能的隐私币相比,suter 的智能合约允许我们提供更为丰富的金融功能。另外,我们还提供了一个 Suter 虚拟机基于我们的 zk-consnark 提供各种隐私保护的服务,包括隐私保护的 pos 和匿名认证等。

✔️ 能不能简单说一下 Suter 虚拟机。

林煌 :Suter 虚拟机是我们初步的设想,在我们 zk-consnark 在测试网测试运行靠谱以后,我们会在这上面着力多些。

另外,因为现在用户对隐私问题越来越重视,另外区块链中有很多隐私相关的问题亟待解决,所以我们相信这样一个专门针对隐私服务的虚拟机是有他的市场的。

✔️ 说回与公链合作,在技术层面之外,大家最关心的是,隐私协议+公链所能造就的应用场景是什么样的,除了转账这样的底层需求之外,林博士有没有观点想要分享一下?

林煌 :这个应用场景很多,因为区块链技术最主要的应用还是去中心化金融,而对于金融服务而言,因为涉及的数据极为敏感,隐私保护应该是个必要条件,所以这个问题解决好了,众多之前只能谈谈而已的应用场景比如 dex 什么的就有了可以落地的一个必要前提了。

✔️ 林博士可以简单介绍一下 Suterusu 的通证经济模型是如何设计和运作的吗?

林煌 :这个问题你可能得问 Suterusu 的首席经济学家郭大治老师,因为我本人不是经济学家,对这方面了解得也比较少。但我清楚我们的代币发行总量为 100 亿,而且是通缩模型。

✔️ 林博士对隐私与监管的平衡问题有什么看法?

林煌 :我觉得区块链现在还处于起步阶段,对于这种新生事物的监管,相信有关部门也正处于摸索阶段,这个应该会逐步成熟起来吧。

✔️ 林博士您提到为了防止 frontRunner 攻击,您使用了比较复杂的交易状态管理,但是为了防止重放,您又对交易编了号,我比较疑惑的是,为什么对交易编号本身为什么不能用来防止 frontrunner 呢?

林煌 :嗯?frontrunner 主要和交易以及合约被执行次序有关,而交易编号是用来区分协议的 freshness 的,这两者应该是互不相关的,因为有可能被 frontrun 的协议和 frontrun 的协议都是 fresh 的。

✔️ 这个架构就是为了匿名转账设计出来的吗?

林煌 :主要是这个目的,但我们使用的零知识证明代码库可以扩展成通用的,这方面的研究工作我们一直在做,另外我们也会考虑做些针对零知识证明的 ddl,以保证零知识证明协议的可用性。

✔️ 请问,Suter 本身作为 Layer2 的解决方案,将来拓展到多条链的时候,是否有对不同类型的代币之间进行区分的机制?因为 NEO 在您的链上需要兑换成 Suter,别的代币也会兑换成 Suter,那在转账的时候,如何区分呢?

林煌 :这个问题很好,其实转账时候货币的所有权还是由对应 Suter 的私钥定义的,所以即使一堆的 Suter 在转账所有者还是清楚那一部分是自己的 NEO 转过来的。

换句话说只有你知道私钥的那部分 Suter 才真正是你的,这也符合整个加密货币的基本原则,私钥即所有权。

✔️ 那我拥有的那部分由 NEO 兑换来的 Suter 是否可以兑换成别的代币呢?入股我自己不可以,那我把 Suter 转给别人,别人是否可以自由兑换成任意的代币呢?

林煌 :那当然可以。

Neo 开始招募专栏作家啦 ???

✔️ 如果你对区块链领域有个人的理解与看法;

✔️ 热爱表达与写作,想成为下一个区块链博主;

✔️ 有意向在未来从事与区块链相关的工作,为简历增色;

✔️ 想以文会友,在区块链世界里结交各路有识之士,

欢迎扫描下方二维码填写表单,报名 Neo 专栏!

Neo Live 实录 | Suterusu CTO 林煌:如何助力 Neo 开发 Layer2 隐私协议的解决方案


特别声明
免责声明: 本文不代表CoinVoice立场,且不构成投资建议,请谨慎对待。

来源:NEO