托肯卫士基于金融级安全芯片开发的区块链硬件钱包

n

文章分类

l

评论数

日期

08/13/2018

托肯卫士是基于WY1628金融级安全芯片开发的区块链硬件钱包,支持BIP32,BIP39,BIP44标准。防止交易信息被恶意软件篡改,防止钓鱼网站欺骗,保证数字资产安全。

托肯钱包首先基于可证明的安全性上打造的硬件钱包来保护用户私钥和数字资产,它凭借着完善的协议和架构设计,构筑了安全、可信的存储与支付基础。同时基于托肯钱包的可扩展性架构,交易与支付过程不依赖于具体的区块链底层技术,我们提出了一套跨链解决方案,本跨链解决方案与传统的跨链技术关注资产转移不同,我们更多关注的是链状态的转移,以及基于链状态上的智能合约的设计。

托肯钱包技术设计

1.托肯钱包的安全基础

1.1 私钥生成及存储的安全性

在区块链网络中,唯一能够证明你拥有数字资产的就是你的私钥,一旦私钥丢失或泄露,则你的数字资产会永远无法找回。以上问题的出现也不能简单的说是区块链不安全,其核心还是用户自己忽视了私钥保护的重要性。可以这么说,私钥的安全保护是确保区块链可信的基石。

由于私钥都是以文件作为载体存储在用户自己的电脑上或被托管到某个中心服务器上。无论是私钥自己保存还是被托管,被保存私钥文件的电脑上往往都会运行着大量的其他程序,所以一旦出现电脑故障或程序漏洞,都有可能导致比特币丢失,而且被托管的私钥还要面临着中心服务器维护人员的道德风险,而这种丢失现象在比特币或以太币中发生率都比较高,甚至一下子直接丢失上万的币。

要想做到私钥的绝对安全,我们提出以下五个必要条件。也只有我们设计的硬件钱包对私钥的管理具备了以下五个条件,我们才可以说,我们的钱包是绝对安全的。

(1) 私钥及地址的生成过程是离线的,且生成的私钥必须满足不可重现的特征及不可预测的特征。
(2) 私钥的存储是独立的,也即私钥的存储或使用是一个独立的物理单元,不依赖于其他的硬件或平台的。
(3) 私钥的存储单位不与其他联网的设备自动通信。
(4) 私钥只对满足特定结构的交易做签名认证,同时对于外界系统来说,整个签名过程对于外界来说相当于是一个黑盒子。
(5) 私钥可以安全备份,在一旦私钥存储的物理载体出现丢失或不可恢复的物理故障的时候,私钥是有办法能安全恢复的。

其中第一个条件至关重要,可以这样说,随机数是现代密码学的整个安全的基础,整个系统的安全性(也即私钥的安全性)完全依赖于随机数序列的生成效率和质量,高质量的随机数的核心即是“不可预测性”。在我们的硬件钱包中,我们的随机数生成标准采用德国联邦信息安全办公室给出的四个满足密码学安全性的随机数生成条件:

K1,相同序列的概率非常低。
K2,符合统计学的平均性,比如所有数字出现概率应该相同,能通过卡方检验,超长游程长度概略非常小,任何长度的同一数字之后别的数字出现概率应该仍然相等。
K3,不应该能够从一段序列猜测出随机数发生器的工作状态或下一个随机数。
K4,不应该从随机数发生器的状态能猜测出随机数发生器以前的工作状态。

在我们的硬件设计中,我们抛弃了“时间戳 一组特殊 ID”组合作为种子的方式,我们认为所有事先设定的随机数种子都会给黑客们一种猜种子的可能,我们直接采集硬件里的各种真实的熵源来作为随机数种子的来源。高质量的随机数生成算法保障了我们的私钥是不可用恶意预测且复现的。

第二个条件表明只有存储私钥的载体是独立的,不依赖于任何第三方硬件或平台,私钥才不会被黑客盗走的可能。

第三个条件保证私钥的存储单元不主动联网,这一点比第二点的条件要弱一些,在正常情况下断绝了给外界系统侵入到私钥存储单位的机会。在需要私钥签名的时候,唯一与外界通信的通道就是输入需要签名的交易信息,输出为签名后的信息。基于现在密码学里的安全假设,仅由签名信息在计算资源有限的条件下,无法计算出私钥。

第四个条件是从两个方面来说,私钥只对满足特定结构的交易信息(而不是用户构造的任意信息)做签名认证可以有效地抵抗选择明文攻击(这是一种对 ECC 算法非常有害的攻击方式),另外在整个签名过程不暴露于外界,这就相当于在每次签名时没有泄露任何私钥相关的直接信息。

第五个条件独立于前面四点,主要解决在私钥丢失(也即存储私钥的硬件丢失或发生不可修复性故障)如何找回的问题,托肯钱包主要通过一种经过特殊改造过的助记词的方法来对私钥做备份。

最早的助记词设计是由于私钥 64 位,完全没有可读性,于是可以利用某种算法将 64 位私钥转换成十多个常见的英文单词,这些单词都来源于一个固定词库,再根据一定的算法来恢复出私钥,于是助记词成为了你的私钥的另一个体现。

1.2 签名过程的安全性

在 1.1 中我们介绍了托肯钱包在生成私钥及存储私钥方面的安全性保证,但硬件钱包的安全风险还会有来自向外输出信息时产生,也即在做签名计算时输出签名信息时发生。因为在签名时,所有输入的交易信息以及输出的签名信息都是明文的,可以用任何二维码扫描软件来读取的,如果在签名计算时直接将私钥明文形式读取到内存中时,一旦出现某种复制内存数据的事件发生时(操作难度极大),私钥将不再安全。

所以我们在设计相关签名计算时,会采用经过生成的混淆的指令集来代替直接采用私钥的做签名计算的方式。具体就是在1.1节中生成私钥文件时不直接生成静态数字型的私钥表达,而是生成经过充分混淆的代码指令集代替私钥。在对交易 hash 做私钥签名运算时,是直接运行混淆的指令集的方式完成,整个过程是完全在硬件的芯片中完成,理论上在签名时杜绝了泄漏私钥的可能性。因为攻击者即使得到了经过混淆过的指令集,也没有办法能推测出具体的私钥是什么。

在托肯钱包的设计中,我们的助记词并不来源于任何一个固定词库,单词的构造完全由用户自由决定,理论上这样构造的单词有无穷多种组合。

2.托肯钱包的产品工作流程

2.1 托肯钱包的账户创建

首先托肯钱包的账户是一个离线账户,在生成新账户的时候可直接在硬件屏幕的提示下直接操作对应的按键。用户可以根据需要使用的数字货币类型(比如比特币、以太币等)选择生成对应的私钥和地址。

需要特别留意的是,在账户生成的时候需要用户手动输入 16 个单词的助记词,虽然系统提供快捷生成账户的的方式(理论上系统快捷方式生成的账户也是符合安全标准的),还是强烈建议用户自己输入助记词,因为用户的助记词可以输入非标准的英文单词词汇,理论上用户自己输入的助记词具有无限的空间,能较大的提高私钥的安全性。无论是系统快捷生成的地址还是用户手动操作生成的地址,都需要用户用纸抄下对应的助记词(放到一个比较安全的环境里),这是非常重要的,因为一旦出现硬件钱包丢失的情况,我们唯一能恢复私钥和地址的方式就是助记词。

2.2 托肯钱包的交易(支付)发起流程

托肯钱包核心作为一个私钥安全存储和签名的工具,对于完成正常数字货币的支付和交易功能,还需要配合 PC 端软件或移动端 app 来使用。这里以 PC 端的软件来描述整个交易过程,移动端的使用情况类似。

托肯卫士基于金融级安全芯片开发的区块链硬件钱包

在整个流程中,交易客户端软件一直是通过 USB 接口与托肯钱包传输数据,在交易完成后,建议 PC 端与托肯钱包断开 USB 连接。

基于托肯钱包的跨链交易

1.跨链交易的通信协议模型

区块链之间的通信协议与传统的 TCP/IP 协议类似,建立可靠的连接传递消息。消息一般分为消息头(Header)和消息体(Data)两部分,其中消息头会记录消息的源、目的、长度、类别等,在消息的传递过程中,消息头会逐层剥离、按协议要求做对应的修改,消息最终会按消息头的信息传到目的地。整个消息在传递过程中是具有状态的,发送方也可以根据接收方的反馈了解当前通信过程中所处的状态,并作出正确的反应。

基于对 TCP/IP 协议的原理的分析,我们也构建出一个完整的跨链通信协议,我们的跨链通信协议主要包括两部分:通信地址、通信数据。

通信地址包括消息来源链或目的链的链表示(ChainID)和当前链的区块高度(height)。通信数据则包括了来源链的链标识(srcChainID)、目的链的链标识(dstChainID)、数据状态(Status)、数据(Data)。其中数据在传递过程中是不会被打开的。

托肯卫士基于金融级安全芯片开发的区块链硬件钱包

跨链通信数据状态对应的是当前通信状态的机制,当一个跨链交易的通信发起的时候,通信状态是待接收状态,当接收方收到消息时,会返回给发送方一个发送成功的状态,接收方然后回发一个接收成功的状态,整个过程完成一次成功的跨链通信。

除了上述状态外,我们还会规定一些如连接超时等异常状态。比如当一笔交易从第一条链发往第二条链的时候,会指定以链高度为准的存活周期。在到达存活周期之前,链路会将通信结果的状态返回给第一条子链,若超过存活周期,则链路直接返回连接超时状态给第一条子链。

与通常的网络通信类似,跨链通信也可能遭受网络攻击,尤其是 DDoS 攻击。因此,我们还需要一套验证机制,通过设计一套复杂的通信验证机制,来防止链路上的攻击。

前面提到,子链随时向链路上发送最新的区块以及最新的区块投票,当一笔交易从子链向链路发来的时候,会在通信地址中体现出该交易所在的区块的高度,我们只需要查找在该区块高度中是否存在着这笔交易就可以了。因为通过提交最新的区块及其投票便可以证明一个区块的真实性。

首先,单靠一个区块本身是不能孤立的证明其是合法的。因为针对一个已有的区块,我们完全可以伪造一个不合法但是符合区块结构的假区块。比如修改区块数据的部分交易信息,并修改位于区块头中的交易 hash 值。

在通常的区块链的共识构造中,一个区块被提议之后也往往会经过两轮或多轮的投票来达成共识,其中在第二轮或更多轮共识的投票会被暂时存起来,并当做下一轮所生成的区块的部分。基于此,如果子链一次性提交某个区块及投票信息后,我们便可以在一轮区块生成周期内证明这个区块是可信的。

作为不同子链之间的桥梁,我们的链路还需要负责维护关于子链的公共状态。

首先,子链若希望与托肯链路进行通信,则必须在托肯链上进行注册,这其中包括子链的身份标识(chainID),子链上验证节点的信息,子链上的资产种类,以及子链的验证机制等,以此来协助托肯链完成通信转发和验证操作。

其次,托肯链需要实时收集来自子链的最新区块信息的通知。以此来维护各个子链的基本状态,帮助轻客户端来验证从子链发来的交易等。

托肯链作为一种跨链技术,除了完成基本的链间通信外,还必须要设计一套独立的共识机制来验证子链上独立区块的合法性以及链间交易的合法性。

2.跨链共识机制

2.1 区块链里的共识机制简介

在选择托肯链的共识机制前,我们先简要回顾一下目前在区块链领域常用的一些其他的共识机制。工作量证明共识(POW)是最早应用在比特币、以太坊上的一种共识算法。自比特币发行至今,工作量证明算法已经证明了其可靠性,但是它对资源的浪费也是很惊人的。

权益证明机制(POS)是一种为了解决工作量证明机制中对资源严重浪费问题而提出来的,它是通过投票人在投票权益池中的权益比重来代替矿工在挖矿时所消耗的算力,再配以相应的惩罚机制来确保投票人的诚信。然而,在算力和权益之间还是有非常大的区别的,通过算力,一个矿工是不太可能在两条链上同时挖到矿,但是拥有一定的权益的投票人则可以对每一个可能的区块投票,只要任何一个区块成为将来的胜出者就可以保证自己的权益不受损,这样也是有很大的安全隐患的,因为这样可以大大降低作恶者所需要的作恶成本。

股份授权证明机制(DPOS)共识机制通过解耦投票权和记账权的方式,它的原理是让每一个持有 token 的人进行投票来产生若干位代表,我们可以把这些代表理解为超级节点,而这些超级节点彼此的权利是完全对等的。从某种角度来看,DPOS 有点像议会制度或人民代表大会制度,如果代表不能履行他们的职责,他们会被除名,网络会选出新的超级节点来取代他们。但是 DPOS 通过模拟人类的权益投票行为来产生记账权,存在着一种中心化的趋向,而且相比工作量证明的方式来说,DPOS 的作弊行为是没法提前预防的。

Raft 作为瑞波币采用的共识机制,也是分布式领域一种常用的高效的共识算法,但其最大的弊病在于不能防止拜占庭故障节点,一个拥有强大网络配置的拜占庭领导者节点会给 raft算法带来毁灭性打击。

另外目前在联盟链中比较常用的共识机制是实用拜占庭将军容错共识(PBFT),如基于 IBM的 HyperLedger Fabric 项目就是采用 PBFT 共识。PBFT 是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作,将所有副本组成的集合使用大写字母 R来表示,使用 0 到| R | -1的整数表示每一个副本,假设系统里有可能失效的副本个数为 f ,若满足| R |≥3f 1,系统能满足最终最终一致性。

2.2 托肯链的代理权益拜占庭将军容错机制

在托肯链中,我们的设计目的是要进行跨链交易,这里与联盟链的模型较为接近。而基于PBFT 的共识机制在联盟链里是非常受欢迎的,主要原因在于联盟链中,节点间的网络拓扑结构相对较为稳定,节点的进入和退出频率不会太高。不可否认的是,PBFT 中所使用的拜占庭节点容错算法能保证 1/3 以下拜占庭节点的网络的安全。但是在实际使用中,尤其是涉及到跨链交易这种与经济利益相关时,即使验证人是经过挑选的可靠节点,我们也不能单纯的依赖于没有惩罚机制的 1/3 的安全,这其中的奖赏与惩罚是必须与经济利益直接相关联的。在这里,我们对原有的 PBFT 共识机制进行了修改,以使得验证人投票的权重与其所抵押在托肯链上的代币权益相对应。

这样一来,原本在 PBFT 共识算法中要求的超过 2/3 投票人才能确认生成区块的机制被修改成超过 2/3 的总权益,此外,在 PBFT 共识算法中,普通节点仅同步来自领导节点发来的新区块,并不参与共识,在 PBFT 中的安全性仅仅依赖于验证节点的数量,因此普通节点的数量的增加并不能提升拜占庭容错的安全性。因此,我们在托肯链的共识机制中增加了非验证节点的参与。一个验证节点对应一个验证人帐号,非验证人可以通过将权益委托给验证人,从而授权该验证人代理投票的方式来获取属于自己的利益。

因为利益的关系的引入,在托肯链中,非验证人会非常谨慎的选择代理验证人,从而做到了所有人都会参与到共识的行为中,而这又没有因为所有节点的参与共识而带来任何效率上的损失。

托肯链的共识机制可以用下图来简单表示

托肯卫士基于金融级安全芯片开发的区块链硬件钱包

在托肯链的共识协议中,如果 Leader 是诚实者,它可以不断地推动共识节点就新的交易达
成共识。但是,如果 Leader 是恶意节点,它可能会有意地延迟或丢弃来自其他诚实节点的消息,并减慢协议。为了惩罚这些恶意的 Leader 节点,托肯链会定期通过权益委员会的投票来更改 Leader 节点。这也可以防止恶意节点在无限期的时间内延迟共识。

另外基于托肯链所采用委托权益的 PBFT 共识机制,我们可以非常容易打造轻钱包节点。在普通的区块链客户端中因为需要同步区块链中的所有区块数据才可以实现验证交易,这样的客户端功能强大,但是由于需要存储的数据太多导致大量的冗余。由于托肯链是通过验证人投票实现的 PBFT 算法,我们的客户端只需要实时同步某条区块链上的最新验证组员,就可以对该区块链上的信息进行验证。轻客户端只需要连续同步某区块链区块头并更新验证人信息,就可以实时跟进并验证该区块链上的最新的区块高度、世界状态等信息。

3.托肯链的隐私保护

在区块链系统中,隐私性一直都是比较强的需求,特别是对于跨链结构来说,隐私性保护尤为重要。如果我们仅仅只是做到了保护区块链的交易安全性,而对隐私性的问题避而不谈,我们认为失去了保护安全性的意义了。该如何在既保护安全性的前提下,又让隐私性得到保护呢?

目前在区块链领域的隐私性解决方案主要有以下一些:

混币方案,这也是起源自早期的基于比特币或以太币的混币服务,后来在门罗币种有使用到,其目的主要是要让每个地址都要经过搅拌器和许多其他地址进行混合,从混币器出来的交易,除了混币器知道外,别人谁都不知道这个币真实是由谁转给谁的。

直接存储和处理加密数据的方案,这在有些联盟链中使用的比较多,只有交易的参与方才能解密数据。该方案相对较为可靠,隐私性能得到密码学的严格论证,但缺点是验证节点无法做验证。

零知识证明,零知识证明是一个非常强大的现代密码学工具,在零知识证明算法中,具有私有信息的一方在不泄露自己私密信息的情况下,能让验证方正确的确认证明方的信息是对的。不过基于 ZK-Snark 的非交互式零知识证明技巧在业界已表现出效率方面的问题。当前在一台普通的计算机上创建一个 ZK-Snark 的零知识证明大约需要超过 90 秒的时间。另外基于ZK-Snark 算法的延展性比较差,不能动态创建安全验证参数,必须提前设置一些安全参数,这在实际使用中也会带来一些问题。

环签名方案,该方案实现了一种无条件匿名性的要求,签名者可以自由指定自己的匿名范围,外部攻击者即使非法获取了所有可能签名者的私钥,他也不能确定出真正的签名者。很明显,环签名方式主要是通过匿名的方式来实现隐私性保护。

通过对以上主流的隐私性解决方案的分析,结合跨链的实际需求,托肯链采用环签名的方案来保护交易的隐私性。

环签名是一种签名者模糊的签名方案。在环签名中不需要创建环,也不需要分配指定的密钥,无法撤销签名者的匿名性,除非签名者自己想暴漏身份。环签名方案中签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,无需他人的帮助。

环签名没有可信中心,对于验证者来说,签名人是完全正确匿名的。环签名提供了一种匿名泄漏秘密的巧妙方法。环签名的这种无条件匿名性在对信息需要长期保护的一些特殊环境是非常有用的。

托肯卫士基于金融级安全芯片开发的区块链硬件钱包

环签名由以下几部分构成:

(1) 密钥生成。为环中每个成员产生一对密钥对(公钥PKi和私钥iSK )。
(2) 签名。签名者用自己的私钥和任意n个环成员(包括自己)的公钥为消息m生成签名a。
(3) 签名验证。验证者根据环签名a和消息m 验证签名是否为环中成员所签,如果有效则接收,否则丢弃。

同时环签名必须满足以下特性:

(1) 无条件匿名性。攻击者无法确定签名是由环中哪个成员生成,即使在获得环成员私钥的情况下,概率也不会超过1/ n 。
(2) 正确性:签名必需能被所有其他人验证。
(3) 不可为造性:环中其他成员不能伪造真实签名者签名,外部攻击者即使在获得某个有效环签名的基础上,也不能为消息 m伪造一个签名。

4.基于托肯链的智能合约

我们认为,随着加密数字货币的兴起,会极大的加速支付的合约化进程,因为区块链作为架构在互联网上的基础设施,可以用智能合约来实现信用保证、支付结算和激励机制的完美统一。基于托肯链中的资产所有者和工作者,也或者叫托肯链中的一个成员,每一个托肯成员都是基于 P2P 的扁平式的协作关系,基于标准无差异的智能合约参与到整个系统的安全支付通道的建设中来,同时每个成员在整个系统的安全支付通道的建设中会根据其对于的贡献度获取相应的回报。

智能合约的最大的特点和优势就是通过技术解决了信任问题。在传统合约达成前,参与者在支付前要了解各方的信用背景和选择合适的担保合约。在托肯链上的资源是真实透明的,合约内容确定后就无法更改,执行更是不用依赖任何额外操作。

基于托肯链的智能合约跟通常区块链的智能合约相比,多了一层含义,就是跨资产的特性。因为托肯链本身就是基于跨链技术来实现通用数字货币交易和支付体系,资产在跨链交易的时候,就出现更多的应用属性。比如我们可以允许用户在以太坊中去验证比特币的交易,可以实现多币种共同完成一次采购活动等。

托肯卫士基于金融级安全芯片开发的区块链硬件钱包

基于托肯钱包的支付数据模型

托肯链通过打造一个通用的数字货币支付生态,从长期来看,将会积累大量的数字货币支付消费相关的数据。从未来数据货币支付发展的角度来看,托肯链将利用支付的大数据来改变消费者的支付习惯。

总的来说,基于区块链技术的数字货币支付在很多方面与传统支付是有着相当大的区别的:区块链支付的基础是去中心化技术,交易双方不再需要依赖一个中心系统来负责资金清算并存储所有的交易信息,而是基于一个不需要进行信任协调的共识机制直接进行价值转移。

随着区块链支付的发展,区块链分布式账本技术将区块链上的数字资产流动与现实支付相连接,区块链支付在功能上非常类似于支付宝钱包,但由于其建立在去中心化的 p2p 网络基础上,超出了国家和地域的局限,所以在全球互联网市场上能够发挥出传统金融机构无法替代的的高效率、低成本的价值传递作用。基于托肯钱包就可以发展成一个自金融平台,可以用于 P2P 的支付、存款、转账、换汇、借贷等。