张庭郡,刘琨鹏,尹毅峰,甘勇,2
(1.郑州轻工业大学计算机与通信工程学院,郑州450002;2.郑州工程技术学院,郑州450044)
智能合约DAO 因以太坊Solidity 编程语言的安全漏洞损失6000 万美金并且以太坊的硬分叉(Hardfork);Parity 多签名钱包因智能合约的漏洞造成损失1.82 亿美金;BEC 也因此市值蒸发9 亿;Binance 被黑客盗取7000 多Bitcoins。一系列的因为智能合约安全漏洞导致的损失也让其安全性研究进入国内外研究者的视野。
近年来,Monero[2]、Zcash[3]和Mimblewimble[4]等的加密货币放弃了可编程性的前提下,在金融数字货币领域的隐私保护做出了贡献。2016 年,Kosba 等人首次提出了Hawk[5],这是一种既能保证合同安全又能保证连锁隐私的智能合同隐私保护系统。2017 年,麻省理工学院基于加密货币交易投资平台(Catalyst)开发了加密合约Enigma 协议。Oasis 实验室试图突破公共链的“不可能三角”,提高智能合约的可扩展性、安全性和隐私性,筹集了4500 万美元用于构建基于区块链的云计算平台研究Ekiden 协议[6]。Bunz 等人在Ethereum 等基于账户模型的智能合约平台上引入了提供保密性和匿名性的Zether 协议[7]。2017 年,中国科学院与武汉大学密码学专家合作,在账户模型下,采用同态加密和零知识证明,实现了分布式智能合约系统,保障了资产的平衡和转移[8]。由此可见,智能合约中的安全和隐私保护技术已成为区块链研究的重点。
虚迭代函数(Virtual Iteration Function)拥有快速生成高安全性,高可靠性和不可否认性。同时虚迭代函数安全机制充分利用了哈希函数的出色功能和自编译系统生成了唯一且不可否认的收据[9-11]。
针对合约可能有多方签订的现实,本文基于双方虚迭代函数安全机制,提出多方智能合约安全机制。多方用户通过令牌环顺序协商,基于虚迭代函数组成共享的多维虚置换函数。以此共享的密钥空间为基础,当用户建立合约时,用合约参数生成的密钥快速大量地置换出迭代的安全子系统,以保证在无可信第三方的参与下安全的追溯、履行合约[12]。
为了满足智能合约的安全性和隐私性保护,前期研究使用虚迭代函数(VIF)加密智能合约所生成的收据。又因为适应当下的合约环境,不仅仅只是双方合约,存在很多多方合约,所以改进双方MVIF 安全机制为多维虚置换函数(MVTF)为基础的多方合约安全机制。
图1 多方智能合约安全机制构建模型
构造安全机制的前提条件如下:
(1)多方合约用户拥有相同的带选取的n*n 的安全子系统
(3)多方合约用户拥有相同单向函数构造的自编译器,用于确定安全子系统坐标序列后的迭代加密。
如图1 所示,安全机制构建描述如下:
①多方合约用户通过令牌环的方式交换映射安全子系统的密钥阵列,形成多维虚置换函数空间。令牌环能够保证多方用户按照一定顺序,不遗漏、不重复的形成多维虚置换函数(Multidimensional Virtual Transposition Function),最终使得每个用户都拥有相同的共同组成的钥控阵列,通过映射n*n 的安全子系统也就拥有相同的多维虚置换函数。
②多方用户使用各自密钥联合在已拥有的多维虚置换函数中置换出相应的多个安全子系统。每个用户的密钥代表多维虚置换函数中的一个维度的多个坐标,通过密钥的互换在MVTF 中置换出相同唯一且有顺序的多个安全子系统。
③用户通过自编译器将上一步选出的多个安全子系统按顺序迭代,构建虚迭代函数(VIF),加密合约获得相应收据进行保存,用于以后合约的安全调用与执行的认证。
④多用户再次进行合约时只需重复b 步骤,就可以快速大量的置换出大量的安全加密方式应用于之后的智能合约认证收据。
表1 中列举了本文所用的基本符号及其定义。
表1 本文基本符号及含义
本文拟构造的多维虚置换模型是一个内部置换阵列待定的多维置换函数,其置换阵列的每个排列元素对应一个安全子系统,每个协议用户拥有自己的初始密钥,用于对多维虚置换函数的置换混淆控制,并非只控制置换网络的一个维度。图2 以四维虚置换简易模型为例,因为置换空间中包含了n4个候选安全子系统,钥控阵列的作用是实现虚函数中的多态性重载原理,以钥控阵列实参决定安全子系统被等概率调用执行,最终使置换网络获得一个唯一性的内部置换阵列。
如图3 中所示,每个维度代表一个用户所控制的钥控数列,其中以颜色表示第四维度。途中每一个方块空间都隐射一个安全子系统,公式(2)中的n*n 个子系统均匀分布在整个n4的四维虚置换空间中。假设公式(4)中所定的x=5,则最终如图确定五个安全子系统,分别记作S1(),S2(),S3(),S4(),S5(),然后经过自编译器迭代出如公式(1)。
多维智能合约安全机制利用Hash 函数优良特性和自编译系统的不可读特性,将前期研究的合约双方共享虚迭代函数扩展用于多维虚置换函数,利用随机迭代子系统的方法提出了多维虚置换函数空间的构造方案,提出更加安全高效的基于多维虚置换机制的密钥交换算法。为合约多方快速提供大量安全的调用合约密钥。可以由通信多方各自的伪随机序列产生器来共享多维虚置换机制,这种安全多维虚置换机制将成为密钥交换协议的核心。身密钥及伪随机生成的钥控数列生成的钥控数列,它映射到公式(2)中,用于后续组成虚置换函数的钥控阵列,因此可以看成通过Ki[]n 控制虚置换函数中的安全子系统的分布。
图2 四维虚置换函数模型
如表2 所示,多维虚置换函数的构建及在智能合约安全机制中的应用如下:
(1)初始阶段
用户初始化:m 个合约用户都拥有上次合约SC'和自己所持有的私钥。
函数初始化:同时每个合约用户都有自编译器以及待选的n*n 个安全子系统如公式(2)。
(2)准备阶段
步骤1:各合约用户通过伪随机函数R()将已有的SC'伪随机生成钥控数列。此时的钥控数列还只是初步生成形参,并没有实际控制的函数能力,并不能传给其他用户。
表3 多维虚置换函数的构建及应用
(3)虚置换函数组成阶段
各合约用户通过Token 令牌环机制依次将自己的独有的钥控数列Ki[]n 发送给其他用户,这样各用户就拥有本身钥控数列的同时拥有除自己以外的补集,如公式(4)。最终每个用户都获得由m 个钥控数列组成的多维虚置换函数。多维虚置换函数可看成是由nm个安全子系统构成的m 维空间,其中每个小空间都映射着公式(2)中的一个安全子系统,且概率相同的分布在多维虚置换函数中。各合约用户将保存SMVTF()用于以后的合约安全机制中。
(4)应用循环阶段
步骤1:各合约用户同样通过Token 令牌环机制依次将自己的坐标数列Ski(x )发送给其他用户,最终获得全部坐标。其中x 为坐标个数,也是最后确定安全子系统的个数,也是最后迭代的次数。
步骤2:各合约用户将完整的Sk 带入第3 阶段保存的多维虚置换函数中,快速置换出相应的x 个安全子系统。因为第三阶段中得到的公式(4)相同,所以映射到公式(2)的x 个安全子系统也相同。
步骤3:通过自编译器将步骤2 中所得的x 个安全子系统按照一定顺序迭代生成虚迭代函数,如公式(5)将签署的智能合约通过VIF(x)加密生成相应的合约收据保存下来,用于后续对合约的调用和执行时的认证,以保证合约的安全性和隐私性。
步骤4:各合约用户再次签订其他合约时,仅需循环步骤1、2、3 就可以快速置换出相应的虚迭代函数,生成安全的合约认证收据。
本文的多方智能合约安全机制主要针对智能合约的隐私保护问题,通过多维虚置换函数快速大量的生成不可伪造的,加密方式不断变动的智能合约收据,以此确保合约查询、执行等权限的安全。
针对智能合约收据生成阶段容易遭受的攻击类型分析如下:
(1)防合约用户假冒攻击:收据最终是通过加密签署的合约得到的收据,因此假冒合约用户得到函数也因未参与签署合约而无法得到合约内容,进而无法获取合约收据。因此安全机制能够抵挡合约用户假冒攻击。
(2)防拒接服务攻击:本安全机制采用令牌环的方式交换钥控数列,因此个体用户不会影响整个虚置换函数构建过程的有序不重复,从而保证每个用户都可以同步获得钥控阵列。因此安全机制能够抵挡拒接服务攻击。
(3)防重放攻击:由于多方用户每进行一次合约便会更新虚迭代函数,如果敌人在第n+1 次合约时重放第n 次合约的认证收据,由于收据加密的迭代函数都已更新改变,所以不会被授权查询、执行合约。因此能抵挡重放攻击。
(4)防窃听攻击:每个用户的钥控数列只能控制虚置换函数的一个维度,所以窃听者窃听单个或多个用户都无法得到完整的虚置换函数;同理决定迭代函数的坐标也是由每个用户共同协商的,窃听者也无法得到正确的虚迭代函数。因此能抵挡窃听攻击。
相比一般的加密算法,本安全机制采用动态的流密码,因此置换速度于计算速度都快速能够快速大量的置换出多次合约所需要的虚迭代函数。同时基于多维虚置换的安全机制适用于智能合约多方用户,大量签署合约,大量查询、执行合约的现状。
本文基于双方虚迭代函数安全机制,针对智能合约的实际应用进行了改进,设计出无需可信第三方的多方智能合约安全机制。通过多维虚置换函数的加入,让多方用户控制多个维度构建虚置换函数,对多维虚置换函数的置换混淆控制,能够快速形成多种虚置换函数适用于不同用户情况下合约的快速签署。通过多方用户控制置换坐标,能够快速大量的生成多种虚迭代函数适用于同种用户下的合约快速签署。虚迭代函数加密生成的合约收据保护合约查询、执行等权限的安全。在以后的智能合约安全与隐私保护技术中有很大的实用价值。