Go Sero - 区块链完全解决方案


GPL
跨平台
Google Go

软件简介

一、区块链隐私保护的必要性

区块链作为一种新兴的技术,相对于中心化系统,区块链的核心价值就在于去中心化。传统的拥有独立数据库的企业,都会将数据集中起来,建立数据中心。这些数据中心的管理权限都掌握在一个公司手上,这样的系统是由少数人控制的,在安全性方面有不可回避的问题。而区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,以密码学方式保证的不可篡改和不可伪造的分布式账本。相对而言,在区块链系统中,任何有能力建立节点的人都可以参与其中,成为这个分布式账本的一个节点,这些节点都是平等和自治的,参与验证每一笔交易,并通过一定模式的共识来确定数据的一致性。通过区块链系统,使用者可以在不需要中间节点的情况下安全的进行交易和各类数据交互。

比如在以太坊网络中,全球有上万个节点,其中包括了用户为推行网络间项目而运行的节点,也包括了交易所管理运行的节点,还包括了矿工们运行的节点。这么多的节点,一方面保证了每笔交易的安全性,另一方面,确实给用户带来了很大的隐私方面的困扰。目前,任何人都能从这上万个节点中查询到每一笔交易,包括交易参与方的地址和金额,这种情况下,用户的隐私该如何来保障呢?

区块链发展至今,在技术领域探索出几种隐私保护的解决方案,比如混币器方案,环形签名方案和零知识证明方案。混币器是一种中心化的解决方案,需要一个中心化的混币平台,交易参与方先把代币发到混币平台进行混合,以打乱参与方之间的联系,但这种方案需要用户充分信任中心化的混币处理系统。环形签名则是一种特殊的群签名组成的协议,交易的签名由私钥和众多公钥产生,当其它节点验证时,只能确定签名是诸多公钥中的一个,却无法定位到哪个公钥才是具体的发送方,即无法定位到一组环签名所代表的资产的具体持有者是谁。环形签名存在的问题是,用以匿名的签名集合是固定的,用户在交易中依旧需要与其他用户的公钥进行混合,因此仍然有可能会遭遇恶意用户从而暴露隐私。

而最被业内看好的是零知识证明(Zero—Knowledge
Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。

在区块链隐私保护领域,零知识证明被认为是最前沿的解决方案,同时也是最强大的,以太坊创始人V神就多次在公众场合表达了对零知识证明的喜爱。在以往,如果为了证明某些事情,需要引入或借助另外的知识达到目的,但是在零知识证明中,用户无需其它底层数据来完成这个证明过程,在区块链的交易中,运行零知识证明的手段,用户不需要添加或向外接透露更多的信息即可完成整个交易流程。在交易中,交易过程可以被加密,但是除参与方外,其他用户不需要对其解密,区块链系统运行了零知识证明技术之后,每个区块中将只有加密后的哈希数据的存在,这些数据已经能足够支撑整个链上系统上的交易运行。

但是,现在我们遇到的问题是,如何将零知识证明作为通用的解决方案,在区块链系统的广泛范围内应用起来。其中有一个比较突出的问题是生成证明的效率比较低。比如,在Zcash中,用普通的笔记本电脑,发送一笔匿名币交易,通常需要几百秒时间。如果在发送的交易中,UTXO中含有更多的来源,那这笔交易的证明生成时间更是长的让人无法忍受。另一个问题是,在当前包含Zcash在内的所有主流匿名币系统中,还没有类似以太坊那样支持智能合约的区块链平台系统出现。

针对匿名币系统的这些应用层面的问题,在区块链领域,很多研发团队试图进行进一步改进。但是由于零知识证明这个层面,由于其学术和工程方面的复杂性,绝大多数团队都进展缓慢,没有发展出能实际上线运行的系统。

SERO的项目成功解决了上述问题。SERO是Super
Zero的意思,是全球首创的,基于零知识证明技术实现隐私保护,并且能支持图灵完备智能合约运行的区块链基础平台。在零知识证明系统方面,SERO团队基于zk-
SNARKs构建了Super-ZK零知识证明加密系统,在零知识证明普及应用的最大瓶颈-证明生成速度上,目前Super-
ZK系统比Zcash当前的系统有20倍以上的提高,这极大的提高了用户的使用体验,提高了零知识证明系统实用化的范围。

二、SERO匿名系统的架构设计

SERO匿名系统的架构设计,在满足系统能力需求的同时,遵循以下几个基本的原则。

1、不可追踪性。
区块链网络的每一笔交易都具有输入和输出,如此一来,就构建了一个交易的有向无环图,在这个图上可以追踪所有的交易流向,所有的交易序列都能被串联起来,并以此溯源。SERO的设计中要将两个交易之间的链接断开,使攻击无法进行。

2、抗统计分析。
真实用户的行为具有统计特点,如果区块链网络中的交易数据之间具有反映这样统计特点的关联性,通过对区块链数据的统计分析,就能够以一定几率推测出这些地址发生的交易时属于某个特定用户的行为。即使采用环形签名,在面临有作恶的环成员或者节点的时候,抵抗统计分析的能力会下降,SERO通过技术手段将地址以及地址之间的关系完全隐藏。

3、实用性原则。
SERO在对交易的数据进行隐藏的同时,并不会一股脑将所有的信息都纳入范围内,这样做是不经济并且运行效率低下的。SERO会兼顾业务的场景需求和特点,提供分层次的多种解决方案。

4、可选的审计方案。
对于某些较为复杂的商业应用领域,用户可能需要有一个完全信用的第三方对他发生的所有交易进行财务方面的审计,SERO提供给用户这类选择的方案,让用户决定是否给予第三方一个跟踪他所有交易信息的能力。

SERO协议的设计简要描述如下:

1、账户系统

账户系统

账户系统分为两个种类:用户账户和合约账户。用户账户是用户选定一个32byte的Seed,而合约账户根据用户安装智能合约的环境产生一个64byte的地址,两者都是系统唯一,不可重复的。

用户账户可以产生一个64byte的私钥SK和一个64byte的公钥PK,该公钥是用户的付款地址。在安装或调用智能合约时,钱包会根据当前情况生成一个暂存地址PKr,这个暂存地址无法用任何方式关联到用户的私钥和公钥,并且只会使用一次。

在智能合约安装的时候,钱包会根据当前情况,将暂存地址转为64byte的智能合约地址(CADDR)。

智能合约地址(CADDR )

2、资产系统

不管是用户账户还是智能合约账户,其下都具有管理无限种类资产的属性,除了交易费用结算采用SERO币以外,每一种资产都具有跟SERO币本身等同的交易特征,除SERO币以外,其余资产可以由智能合约产生。每一种资产在产生的同时,可以赋予一个最长32Byte长度的名称(Currency),用于助记,这些名称也是不允许重复使用的,在账户进行余额查询或转账操作时,可以指定资产类型。

3、输出和输入结构

  • 输入结构

输入结构

  • 输出结构

Anchor是Merkle树的根用于定位输入数据;Nil是一个32位的hash串,用于作废UTXO中OUT的数值;Til是用来追踪交易用的32位的哈希串,只有UTXO中,包含有效的OUT时,才是合法的;AssetCM是输入的资产承诺;OutCM是交易输入的资产承诺。

4、见证系统

SERO协议采用非交互零知识证明(NIZK),在生成交易的时候,需要提供资产来源的见证信息,每个节点会根据这些见证信息进行验证。因此,SERO会采用Merkle树维护一个记录状态变更的见证系统,系统在节点提供验证功能,在钱包端提供认证所需的信息。

ROOT = MERKLE_ROOT_AUTH(POSITION, LEAF, PATH)

ROOT是当前Merkle树的根,LEAF是第POSITION片叶子,PATH是LEAF到ROOT的证明路径。

5、证明系统

证明系统

SERO的证明系统包含一个基于有向无环图的计算电路,用来描述SERO每笔交易内部约束,包括各种资产类型的输入输出平衡、公私钥验证、承诺的有效性、见证的有效性等环节。装载好的电路可以通过非交互零知识证明(NIZK)生成一个Proof,通过提交这个Proof,可以在隐藏大量细节信息的情况下,让节点对电路中装载的各种参数和约束进行验证。

6、执行步骤

A. 计算

用户采用账户、见证系统提供的信息,并根据当前所需的计算,提供输入数据,然后在链下运行计算规则得到结果RESULT。

RESULT = COMPUTE(METHOD, ACCOUNT, DATA, WITENESS)

B. 证明

用户用计算得到的结果RESULT,加上随机数r,封装为交易STX,提交给节点。交易STX包含校验数据(Ci),结果编码数据(Ei)和证明数据(Pi)。

STX = PROVE(RESULT, r)

STX = ((C0, C1,…Cn), (E0, E1,…En), (P0, P1,…Pn))

C. 校验

节点收到交易STX后,将Ci在见证系统和证明系统中进行确认,验证通过后,节点接受STX。

RETi = VERIFYi(Ci)

Check = RET0 & RET1 … & RETn

D. 确认

资产接收方在同步得到验证的交易STX后,利用自己的私钥将结果编码数据Ei解码成明文数据Di,并将明文数据Di和证明数据Pi输入证明系统中进行校验,成功则说明交易是真实的。真实的交易如果被n个区块进行了确认,那么交易的接收方可以认为这笔交易已经确认。

Di = FETCHi(Ei, ACCOUNT)

RETi = CONFIRMi(Di, Pi)

Check = RET0 & RET1 … & RETn

需要说明的是,SERO的执行步骤是开放式的,也就是说这样的步骤和参数的抽象描述,可以支持后续不断升级,后续的功能加入对整体架构的影响比较小。

三、Super-ZK,世界最快的零知识证明生成速度的实现方案

对于采用非交互式零知识证明(NIZK)方案的区块链系统,目前最大的应用瓶颈就是交易时生成证明(Proofs)的时间太长,SERO系统的零知识证明模块Super-
ZK,针对这一瓶颈,做了以下突破性创新。

1、当前我们采用zk-
SNARKs框架生成NIZK,采用其中的ALT_BN128曲线和Groth16预处理过程,这个过程比Zcash的PGHR13预处理方案减少1/3的运算时间。虽然zk-
SNARKs框架需要信用安装过程,但SERO的实现方式中不会动态构造计算电路,因此,在当前所有场景下,zk-SNARKs框架能满足SERO的需求。

2、我们创新性采用自己编写的一种Twisted Edwards曲线以取代SHA256哈希生成公钥,Pedersen
hash进行Merkle树的生成,这样可以提升4倍以上交易生成速度。

3、相比于Zcash双路输入和输出的电路构造结构,SERO采用单路输入和输出结构,每个描述之间采用资产通道进行链接,这样的电路构造更加复杂,但是在多核CPU情况下,相比于Zcash有更高的执行效率。

4、Super-ZK的部分代码由汇编语言进行编写,相比于Zcash的C++实现,有更高的代码执行效率。

综合以上优化,在交易证明生成速度上,我们相比于Zcash有20倍以上的速度提高,极大的提高了NIZK系统的适用性。

四、SERO支持智能合约发行和操作匿名资产原理

1、区块链账本的UXTO和ACCOUNT模式

区块链是分布式账本,账本的最小单位是记录,每一笔账记录资产的流入和流出,根据资产流出记录方式不同,有两种不同的记账实现,分别为UTXO模式和ACCOUNT模式,这两种模式分别对应比特币和以太坊的模式。

UTXO的特点是:

  • UTXO模式每笔交易是相互独立的,这意味着只要能处理好双花的问题,一个账户下的交易都可以进行并行处理,能充分利用多核CPU的能力。

  • UTXO本质上来说是基于历史的记录形式,即是过程,也是结果,因此在一些需要生成见证证明的应用场合下,具有非常大的优势,这也是为什么现在的匿名币区块链系统基本都是UTXO模式。

ACCOUNT模式的特点是:

  • ACCOUNT模式直接增减一个独立账户的资产,只需要一个记录就可以增减一个账户的任意数量的资产。因此,生成记录大小比同样情况下UTXO生成的记录要小很多。

  • ACCOUNT模式本质上是基于状态的,输入和输出是过程,account是结果,因此它天然就很容易把图灵机引入进来,这也是为什么支持图灵完备智能合约的区块链系统多采用ACCOUNT模式的原因。

ACCOUNT模式

2、SERO独特的混合模式

SERO将UTXO和ACCOUNT模式混合应用,在隐私保护的计算层采用UTXO模式,同时可以映射逻辑上等价的ACCOUNT模式以支持图灵完备的智能合约虚拟机的运行。SERO通过交易、共识、以及Pedersen
Commitment算法,将两种模式无缝结合到一起,使智能合约能发挥出令人惊讶的能力。

3、支持智能合约匿名交易的结构

A、交易

SERO的匿名交易Tx拥有一个匿名的输入集合“Z ins”,一个匿名的输出集合“Z
outs”,一个普通的输出集合“O outs”和一个名为“From”的暂存地址。“Z
ins”是完全匿名的,让第三方观察者无法得知来源和内容,“Z
outs”是完全匿名的UTXO,只有接受者能查看和使用它的内容,“O
outs”携带的内容是非隐藏的,它指向的接受者有两种情况:一种是指向智能合约地址,一种是指向一个暂存地址。From代表交易的发送者,同样也是一个暂存地址。因此整个Tx无法让人确定真实的用户是谁,其中携带的资产信息也被最大程度隐藏起来。

B、 “Z ins”输入

在SERO交易的输入集合“Z
ins”中,每个输入都是匿名的,包括来源“UTXO”的Id以及其携带的资产信息。每个输入都通过零知识证明生成的Proofs,指向一个被隐藏在巨大UTXO序列中的特定某个UTXO,这个序列是SERO历史的一部分,所有细节都被Proofs隐藏起来,验证者在不知细节的情况下,通过Proofs能确认这个输入是否合法。

C、 “Z outs”输出和“O outs”输出

“Z out”指向暂存地址PKr,暂存地址只有接受者能解密出身份。由于每个暂存地址都不一样,所以没有第三方能识别“Z
out”的指向。“Z out”还携带了资产的加密信息“Encrypt
Info”,只有持有接受者私钥的人才能解密这些信息。而OutCM是输出承诺,只有交易双方才能复现OutCM的计算过程。“OutCM”在证明“Z
out”被“ins”引用这一过程中起到关键的作用。

“O
out”指向的PKr有两种形式,一种是由智能合约发起的,指向普通账户的暂存地址。另一种是由普通账户发起的,指向智能合约的地址。由于暂存地址的随机性,第三方无法得知接受者的身份。

D、输入和输出的平衡 ——“Balance”

Tx将“ins”、“Z outs”、“O
outs”打包到一起,我们使用Perdesen
Commitment来防止恶意攻击者篡改里面的数据并确保资产的安全,它的同态加密特性使验证者在不知道信息细节的情况下,可以确认Balance一定是平衡的,即输入等于输出。

另外,为了防止恶意攻击者对“O outs”的篡改,我们使用Perdesen
Commitment的随机特性,以“Balance”的随机部分对“Tx
Hash”进行签名。这样,每个输入和输出都可以独立进行计算,并通过“B Sign”打包到一起。

E、交易发送者 “From”

当交易的输出是指向智能合约时,某些情况下的智能合约会根据编写的规则,把资源输出到给定的账户。这时暂存地址“From”就是承接输出资源的地方。“From”在交易生成的时候就被确定,并且只使用一次,除了交易发送者外,其他人无法定位发送者的身份。

F、匿名Token的发行

Token又被称为“同质化通证”,是SERO系统内部的一种资产形式,相同种类的Token可以任意的分割和混合。SERO系统上的Token和以太坊Token不同。SERO币作为SERO系统的第一个币种,本质上也是一种Token。对于Token资产,除了手续费规定只能以SERO币缴纳外,在SERO系统内部是同一对待的,具有相同的基于零知识证明的安全性。匿名Token可以使用SERO的智能合约任意发行,一旦匿名Token发行成功,智能合约可以将Token以普通交易的形式发送到某个账户的暂存地址PKr,这时这些被发送的Token将以UTXO的形式脱离智能合约账户,并且与SERO币一样,进入用户的个人账户中,从而被SERO的零知识证明隐私机制所保护。

G、SERO系统对非同质资产(Ticket)的支持

Ticket又被称为“非同质化通证”,是SERO系统内部的另一种内涵更为广泛的资产形式。Ticket和Token不同,是一种不可分割的,具有个体唯一性的通证形式。和Token一样,SERO对Ticket同样提供了匿名性的支持。当匿名Ticket发行后,智能合约将表现为ID形式的Ticket的以普通交易的形式发送到某个账户的暂存地址PKr,这些Ticket将会以UTXO的形式脱离智能合约账户,以和SERO币以及Token类似的机制,被SERO的零知识证明隐私机制所保护。

Ticket是一个256Byte的数字,可以指向在智能合约中保存的复杂的数据构造,因此可以适合复杂业务场景的构建。Ticket所指向的数据结构的简明示例如上图,Asset是资产的数据结构,这个资产的数据结构可以是SERO币,Token或者是Ticket,因为Ticket的对数据的指向性,所以这种结构可以支持无限的嵌套,组成符合业务需求复杂的资产结构。Data可以保存除资产外的其它数据结构编码而成的数据,这个数据代表的数据结构也是可以嵌套的。Package保存的是用户用一个密钥编码后的资产或数据。利用Ticket功能,开发者完全可以把加密猫这类复杂的游戏应用改造成匿名版本的实现。

H、SERO系统对加密的资产或数据包(Package)的支持

在以数据为中心的应用中,这些数据包括时间戳、高价值的数据存储、各类证明数据或密码串、资产数据等等,比如类似医疗数据等高度隐私性的数据。这些应用如果用区块链来实现,并由智能合约来输入和输出,会遇到了明文数据的暴露问题。SERO也提供了相应的数据保护技术,让这些明文数据的暴露由用户自己来控制,这种技术叫Package。当前版本的Package应用了对称性加密技术ChaCha20,加解密速度很快并且非常安全。用户可以在客户端打包Package,并得到相应的密钥,打包之后,这个Package可以进行匿名转移,或者输入到智能合约中进行相应的逻辑操作,在此过程中,这个加密Package里的内容都是不可被破解的。当需要解密时,用户可以根据自己的情况,私下把密钥转移给关联方,让关联方使用密钥解密出相关的资产和数据。

SERO币、Token、Ticket、Pagkage这四种类型的资产共同组成了SERO系统匿名资产的生态,这几种资产类型都在一套编码体系内完美的融合,结合SERO系统的图灵完备的智能合约对这些资产的编程,开发者可以开创性得在链上实现在之前系统上无法实现的各种隐私保护相关的DApp,适用于各类隐私保护领域的业务需求的实施。

七、SERO适用的场景

隐私保护是现实世界中个人与组织都存在的强烈需求。SERO支持图灵完备的智能合约和各类相关隐私组件,能支持不同经济生态的拓展。由SERO系统开始,匿名资产的发行和掌控权将不再为少数对密码学有深厚造诣的极客组织所独享,普通开发者,只要有相关业务需求,都可以在SERO链上发行自己的匿名资产,建立自己的隐私生态,这极大拓展了区块链隐私保护相关技术的适用范围。下面列举几个典型的使用场景:

A、供应链体系

区块链可以解决供应链体系上下游交易凭证和溯源的难题,简化了供应链中心企业管理的难度并给上下游企业的融资提供了相应的解决方案。但是,价格、货物等敏感数据,上链的话又面临泄露商业机密的难题。而利用SERO系统,可以完全解决商业机密暴露的难题,同时,又让参与各方享受到应用区块链系统所带来效益提升。

B、医疗健康

在医疗健康相关行业,数据隐私体现于方方面面,从个人病例到医疗记录,面向多角色的隐私保护和授权机制需要十分灵活和安全的隐私保护能力,涉及到医院、患者、保险公司、医药公司等,数据隐私的保护和限制授权使用显得尤为重要。SERO系统,可以解决患者和医院面临隐私问题,同时也为保险公司和医药公司安全合规并且在患者许可的情况下使用相关数据打开了通道。

C、在线竞拍

在诸多追求公平的在线竞拍业务中,出价的私密性是非常重要的,但在利益的驱使下往往难以做到,而SERO可以提供一个完全安全、独立、公平的竞价环境。

D、在线预测相关行业

在线博彩业的发展一直以来都受到中心化机制的制约,在这个巨大的现金流行业中,非常需要一个能够提供多人出价、支付、结算的去中心化智能合约体系,SERO系统能完全支持这类业务。

E、游戏

大型的游戏往往需要一个易于流通、交易和结算的货币体系,并能基于智能合约发行和流通,同时还要兼顾交易的隐私保护。而目前SERO是唯一能做到多货币体系能基于同一智能合约体系发行和流通,且兼顾交易隐私的技术方案。

还有更多的涉及资产数字化,又涉及数字资产隐私敏感的行业,如保险行业、数字贵金属交易、期货交易、数字资产交易(如征信和知识产权等)、信贷行业等。在这些领域,SERO系统都大有用武之地。

八、SERO相关链接

官网:https://sero.cash

白皮书 V1.0.6: http://sero-media.s3-website-ap- southeast-1.amazonaws.com/Sero_ENG_V1.06.pdf

Twitter:https://twitter.com/SEROdotCASH

Telegram:
[https://t.me/SeroOfficial](https://t.me/SeroOfficial](https://t.me/SeroOfficial%5D(https://t.me/SeroOfficial)

Github: https://github.com/sero-cash/go-sero

Gitter Community:https://gitter.im/sero-cash/Lobby?utm_source=share-
link&utm_medium=link&utm_campaign=share-link

SERO区块浏览器:
https://explorer.web.sero.cash/blocks.html

SERO智能合约编辑器:https://remix.web.sero.cash/

SERO介绍视频:<u>https://v.qq.com/x/page/s0792e921ok.html

SERO vs Zcash加密速度对比:https://v.qq.com/x/page/r0796jotef8.html