APP下载

跨境贸易领域中区块链智能合约安全机制研究

2021-03-07陆昉

网络安全技术与应用 2021年7期
关键词:调用合约跨境

◆陆昉

(天津海关 天津 300041)

跨境贸易业务涵盖了国内外的生产商、贸易商、物流商、金融机构、政府监管部门等众多的参与方,涉及物流链、资金链、数据链的跨境管理,是区块链智能合约的重要应用领域。在跨境贸易领域,智能合约的自动化执行会推动各参与方业务数据的协同共享,实现参与方物权、资金的跨境转移交付,因此智能合约的安全管理尤为重要。这就需要我们从智能合约构建应用的全生命周期开展安全管控的研究,形成智能合约应用的安全规范,为跨境贸易区块链健康有序发展奠定安全管理的基石。

1 什么是智能合约

“智能合约”(Smart contract)不是一个新的概念,这个术语至少可以追溯到1995 年,是由跨领域的法律学者尼克·萨博(Nick Szabo)提出来的。他将智能合约定义为“是一套以数字形式定义的承诺(commitment),包括合约参与方可以在上面执行这些承诺的协议。”本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。智能合约的工作理论迟迟没有实现,一个重要原因是因为缺乏能够支持可编程合约的数字系统和技术。直到2008年区块链技术的出现解决了该问题,区块链技术不仅可以支持可编程合约,而且具有去中心化、不可篡改、过程透明、可追溯等特点,完美的契合于智能合约的需求,因此随着区块链技术应用的日益普及,智能合约备受关注。

2 区块链智能合约的特点与优势

智能合约是一段无须中介、可自我验证、自动执行的计算机程序。在部署智能合约之前,与合约相关的所有条款的逻辑流程就已经通过代码被制定好了,智能合约通常具有一个用户接口(interface),以供用户与已制定的合约进行交互,这些交互行为都会严格遵守此前制定的逻辑[1]。与传统的合约相比,区块链智能合约具有以下特点与优势:

(1)去中心化权威:智能合约不需要中心化的权威来仲裁合约是否按规定执行,合约的监督和仲裁都由计算机来完成,最大限度地减少对第三方的依赖。

(2)不可篡改:在智能合约部署之后,合约的所有内容都将无法修改,合约中的任何一方都不能干预合约的执行,最大限度地减少恶意和偶然的异常,避免人为干预的风险。

(3)更经济高效:由于智能合约的执行不需要第三方权威或中心化代理服务的参与,因此能够在任何时候响应用户的请求,大大提升了交易进行的效率;其去人为干预的特点,也能够大大减少合约履行、裁决和强制执行所产生的人力成本。

3 跨境贸易区块链智能合约的主要安全挑战

3.1 智能合约代码开发的安全问题

智能合约与传统编程在信息使用和商业安全方面存在很大不同。在跨境贸易领域主要体现在如下方面:

(1)智能合约在跨境贸易领域承担了主要的商业逻辑,其商业逻辑执行于包括跨境贸易企业、金融机构以及政府监管部门在内的核心应用场景,无论是商业机密性还是数据安全性对企业、金融机构以及政府部门的重要性都不言而喻,任何泄露数据风险以及智能合约本身安全的风险都会破坏整个联盟链运行的基础。

(2)智能合约在联盟链上的部署是有共识的,达成一致的。跨境贸易中的智能合约必须在合约设计过程中、编码实现过程中把容错与异常终止逻辑设计和实现到合约中,并且跨境贸易在智能合约存在安全漏洞的处理机制也需要由联盟各参与方通过联盟约定方式进行补充处理,以免造成商业层面或者更大的政府层面的安全风险。

(3)需要建立智能合约的安全编程模式。需要智能合约的安全的编程规范,进一步在隐私保护、审计和留痕上去消除各类安全隐患。

3.2 智能合约部署应用的安全问题

随着跨境贸易联盟链参与方的增多和业务链条的加长,由于商业利益或者政策驱动有可能会出现参与方或节点的恶意行为,在智能合约层对开放性部署的智能合约进行商业隐私数据的窃取、合约篡改等不当攻击。另外智能合约代码目前尚不成熟,智能合约在实际应用过程中难以避免会出现各类安全漏洞。因此跨境贸易联盟链会对智能合约部署应用的安全提出更高的要求。

3.3 智能合约隐私保护的安全问题

在智能合约设计时要考虑:

(1)智能合约必须规划设计参与者可接触的是完整信息、还是部分信息,或者无法访问信息。这些权限必须在智能合约中通过代码注明。

(2)跨境贸易区块链中若智能合约逻辑中需要有监管者参与,那么监管者访问数据的权限限定以及范围也需要在智能合约中实现。

(3)隐私数据的可访问范围性质是静态还是动态的,如何在智能合约中引入加密参数,对新参与者的数据访问和共享机制进行设计。

3.4 智能合约留痕审计的安全挑战

(1)智能合约的动态特性引起的审计分析挑战

智能合约的动态特性有很多,如调用了非确定的系统函数、调用了外部系统非确定性的数据来源、动态调用(运行时决定执行目标)。设计智能合约时尽量避免使用其动态特性,否则一旦破坏了系统的一致性,那么会增加定位问题的难度,在这种情况下难以判断故障的根本原因。

(2)停机问题与资源控制的挑战

智能合约必须是可终止的合约,否则会无限占用时间和资源。停机问题(halting problem)[3]是逻辑数学中可计算性理论的一个问题。通俗地说,停机问题就是判断任意程序是否能在有限的时间之内结束运行的问题。区块链上的智能合约必须是可终止的,否则将会消耗无限的时间和资源。停机问题是不好预判的,我们无法在不运行一个程序的情况下,提前判定该程序是否会停机。因此,在审计时,审计者和安全专家必须判断区块链的设计者是否考虑到智能合约可能会进入死循环,并对可能已经进入死循环的合约采用资源控制的方式来结束智能合约。对于停机问题与资源控制所面临的挑战,需要智能合约审计者去判断是否采用了合适的处理策略。

4 跨境贸易区块链智能合约安全机制研究

4.1 智能合约安全管理应遵循的原则

(1)以客户为中心,简化智能合约的设计

简化智能合约的复杂度,可以提升安全性。我们要以客户为中心,通过协调业务和安全的关系,尽量简化智能合约的复杂度,将复杂的合约拆成多个简单的合约,减少复杂性造成的风险控制障碍。

(2)安全策略透明化、简单化、便于扩展

智能合约在安全策略上需要减少人工处理量,通过减少人工处理安全风险需耗费的时间,来匹配可快速扩展的业务,以达到解决安全问题的目标。将安全策略透明化、简单化,发展自动化工具,进行自动化的风险决策判断,以便所有跨境贸易区块链参与方都能够快速实施安全策略,并持续改进安全策略。

(3)严格执行智能合约代码审查

智能合约如同现实生活中的账本合同一样,需要经过多次、严格的代码审查,包括业务流程审查、代码动态运行审查、测试流程审查、安全性审查、专家评审等。对于复杂且涉及较大资金的智能合约要尽可能的进行更加严格的代码审查工作,通过多种方式验证智能合约的正确性。

(4)形成可参考的标准规范

跨境贸易区块链联盟需要为区块链各参与方提供一个可参考的智能合约安全标准规范,帮助智能合约的编写者、应用方、管理者开展智能合约安全管控。

4.2 智能合约安全开发的流程

(1)智能合约规划设计阶段

智能合约设计人员和安全人员对需求和安全风险进行沟通确认,使用建模语言对智能合约进行建模,建模需与智能合约各参与方进行反复沟通确认,完成初步设计阶段。

(2)智能合约代码编写阶段

智能合约代码编写阶段,需要有专业的智能合约编写人员参考智能合约安全规范进行编写,使用智能合约审计工具进行漏洞分析,进行初步的审计。

(3)智能合约代码审计阶段

智能合约发布前进行一次完整的代码审计,并保证经完整审计的代码是用户最终使用的智能合约版本。

(4)智能合约业务测试阶段

智能合约测试人员将智能合约在测试链上部署,并完成智能合约的测试,如边界测试、漏洞攻击、业务逻辑测试,测试人员需与业务和安全专家对测试边界进行设定,给出测试结果和安全分析结果,由审计专家和安全专家给出一份审计报告。

(5)安全测试和审计报告发给智能合约参与方

报告内容包括漏洞攻击测试情况,合约存在的直接和潜在的漏洞细节,合约产生漏洞后如何响应、停止、更换。在智能合约代码层面报告也可给出此智能合约的通用性,即合约的场景可复用性,给出此智能合约是否可被其他智能合约所调用。开发团队应对审计报告中提到的“关键”或“重要”评级的漏洞予以修复,并将修复情况报送智能合约各参与方。智能合约各参与方对合约审计报告以及漏洞修复情况达成共识予以认可后,智能合约完成开发具备发布条件。

4.3 智能合约开发编码的安全规范

(1)智能合约需规范所有权

在跨境贸易链领域,智能合约需规范所有权,通过数字证书方式,明确当前智能合约的所有权。通过规范明确标记函数和状态变量的可见性,如函数和状态变量的可访问控制权限,明确谁可以调用执行该合约、以及谁可以访问智能合约中的变量。

(2)智能合约外部调用规范

在跨境贸易领域中,不可避免某些智能合约会使用外部调用,所有的外部调用需要可信任可依赖的数据源。外部调用规范,应尽可能谨慎,每个外部调用都应设定为潜在安全风险。在智能合约设计时,需要设计外部调用源的安全风险级别,外部调用源产生结果数据后,安全风险级别数据信息应设定到产生的结果中,以便审计和留痕时使用。

处理外部调用错误,尽量确保能检查返回值,如采用正则匹配或者模式验证方式,来处理调用失败的返回值,在合约代码上应考虑每种调用失败可能性的处理方式。

调用规范约定不能用外部调用返回值作控制流的判断逻辑。由于外部调用的结果不确定以及不安全性,在关键的判断逻辑上不应采用外部调用函数的结果做逻辑判断值,避免产生类似双重攻击风险。

对依赖外部调用资源的智能合约的输入、输出都要有留痕、审计等操作设计,如果是与金融相关场景,智能合约的应用层需提供回滚和补偿机制,来保证调用异常漏洞不会影响联盟链的正常运转。

跨境贸易区块链在智能合约层需要对可重入攻击的资源做严格的访问控制,确保智能合约有可重入限制,以此来避免此类漏洞安全问题。

(3)标记不可信合约和快速失败原则的规范

在智能合约代码层面上,命名函数等标识需满足合约编码的规范性,当与外部合约进行交互时,在代码层面上,需要在变量、方法和合约接口上进行命名规范,对审计不确定的外部合约以及外部依赖,需要采用如"untrust"字串进行标识[5],明确标识与这些数据或智能合约交互时有潜在的安全风险。

快速失败原则[4]是指在智能合约的核心逻辑在执行前,需要检查合约的输入数据,若数据不满足智能合约校验规则,需快速返回失败结果,避免在智能合约的执行过程中产生异常。快速失败原则可以减少智能合约的执行时间,避免未知异常产生的堆栈溢出风险。设计时应考虑数据检验失败后,是否需要使用一个默认值,使合约继续执行;或者尽快捕获失败的执行(区块链脚本语言一般通过try,catch 语法机制,快读定位捕获失败原因),避免不稳定不一致的状态影响其他状态和其他调用者。

(4)智能合约调用顺序规范

智能合约可能存在调用多个函数、多个智能合约的情况,此种情况可能存在依赖顺序问题。应当先完成函数内部工作,再调用外部函数。

另外,部分智能合约通过锁机制(脚本语言的语法,互斥锁可以锁定某一代码块,通过锁来保护资源的访问权限),去解决多智能合约依赖调用问题。

(5)智能合约交易顺序规范

智能合约执行过程中处理交易可能会随着不同的交易顺序而产生截然不同的状态,不同的交易状态导致不同的输出结果。这种智能合约问题被称为交易顺序依赖合约,恶意的参与方可故意改变智能合约的执行顺序、操纵智能合约的合法性。因此跨境贸易区块链智能合约在设计时,要严格设计和验证交易顺序的确定性。

(6)时间戳校验规范

智能合约若依赖当前区块的时间戳或者根据时间戳来提供随机数,则当各网络节点的时间戳存在偏差时,智能合约的执行结果会有所差别。攻击者可以通过操作区块链节点的时间戳,去改变智能合约执行结果,使结果对自己有利。因此跨境贸易区块链智能合约中若依赖时间戳,合约层面上需做时间戳范围校验,需多方在时间戳的时间范围上达到共识,才可继续执行依赖此时间戳的智能合约,否则在智能合约上予以放弃执行。

(7)回退、容错和终止编程规范

智能合约与传统编程不同,所有的智能合约在设计编码过程中需要将容错和异常终止逻辑写进智能合约里面。

保持智能合约在回退时,尽可能简单。需设计每个智能合约的回退功能,回退函数必须包含记录回退动作的事件。如需要更复杂的回退功能,需经过测试评估,避免回退功能过于复杂。

智能合约代码设计和实现过程需要考虑边界条件,对智能合约运行过程中最糟糕情况做好准备。如果智能合约存在漏洞,规范恢复方法和流程,使智能合约尽快安全恢复,在跨境贸易领域的容错方案为,任何一个智能合约需要一个备用方案,备用方案需要满足智能合约存在漏洞时的紧急处理。

至于容错,可采用停止合约机制,合约管理者可以采用冻结方式作为一种应急机制。在停止合约方式下,需采用线下或合约修正方式对业务逻辑进行补偿。

对于停止合约,可采用信任方提供揭发熔断的机制或者编程自动触发停止合约。

(8)升级或修复智能合约的规范

升级或改进合约时,需考虑合约影响的节点,需要考虑如何处理合约数据,如旧合约与新合约共用相同数据,在旧合约和新合约并行一段时间后,关闭废止旧合约。

4.4 智能合约存证审计的安全机制

智能合约安全审计机制包括代码安全审计工具、存证流程及执行记录。跨境贸易区块链智能合约,可采用如超级账本Hyperledger Fabric 分布式账本解决方案。Hyperledger Fabric 智能合约被称为chaincode,当一个区块链外部的一个应用程序需要访问账本时,就会调用chaincode。chaincode 可通过多种不同编程语言实现。目前支持chaincode 的语言是Go 以及Java。

4.5 智能合约隐私保护的安全机制

4.5.1 智能合约的身份管理

智能合约身份管理可以采用一个中心化的身份管理系统,中心化的身份管理系统应具有如下功能:

(1)身份认证,如LDAP 中注册信息;

(2)发行担保证书;

(3)发行交易证书,保障跨境贸易区块链平台交易信息的安全性;

(4)证书支持更新和撤销。

4.5.2 访问控制

(1)跨境贸易可分为不同的场景,每个场景下可有多个智能合约,不同场景使用通道进行隔离,每个通道只允许一部分已经授权的参与者查看该通道的智能合约代码以及智能合约交易数据。

(2)在通道内,使用可见性等方式,限制可见性的粒度控制

4.5.3 数据隐私

(1)跨境贸易区块链智能合约处理的中间数据和结果需要通过加密方式进行上链存储。

(2)在链上存储介质中的数据需要采用国密算法进行加密,来保证数据的安全性。

4.6 智能合约资产保护的保护机制

在跨境贸易区块链中,智能合约数字资产需提供多维度立体的保护机制,可参考如下几点:

(1)通过区块链技术本身保证数字资产安全。区块链本身数据加密技术以及链式结构,哈希树等结构,保证数据的可追溯和不可篡改。

(2)在跨境贸易区块链领域通过存证合约的存在,保证数字资产在发生争议时可取证和可仲裁去解决数字资产的安全问题。

(3)持续监测和预警。数字资产在区块链智能合约中运行,对交易行为持续的监控与快速预警机制,将保障数字资产在遭受攻击或出现漏洞时尽早发现避免产生大规模损失[6]。

(4)智能合约本身的暂停和更新机制,以及限定范围等策略,保证数字资产在出现紧急情况下,能有紧急的方式采取制动止损方式。

4.7 智能合约执行应用的安全机制

智能合约执行应用周期安全机制包括:

(1)智能合约的初始化和安装安全机制。智能合约在编码完成后,被上传到跨境贸易区块链网络上,通过隐私机制,智能合约同步给智能合约对应的参与者,安装到相应的多个节点上。

(2)智能合约会定期检查智能合约自动执行的触发事件和触发条件,满足条件的事件将会推送到待验证的队列中

(3)验证节点对事件进行签名,确保合约有效性;等大多数节点达成共识后,智能合约将成功执行,并通知用户

(4)与此同时,存证合约会异步的记录智能合约产生的影响,以及地址记录。

(5)成功执行的智能合约将移出区块。而未执行的智能合约则继续等待下一轮处理。

5 跨境贸易区块链智能合约的法律挑战

5.1 自动化数据处理的法律挑战

智能合约作为在区块链上自动运行的程序,其主要功能是通过区块链的共识和同步机制,加工处理区块链网络各个节点上的不同数据,并将加工处理之后的数据或新产生的数据写入区块链网络。智能合约在具体应用场景中提供业务服务,会受到现有法律法规的制约,也会面临法律上的一些挑战。

例如对于公开的区块链服务,国家网信办和公安部都在各自的职责范围内对违反网络信息内容安全的行为进行重点整治。这就要求了区块链信息服务的提供者应采取有效的措施,对上链信息的内容安全进行严格管控。具体来说,这就要求智能合约应当拥有敏感词过滤的功能,智能合约在向区块链上新增数据时一旦发现有敏感词,既当作为上链失败来处理。

从现有法律的角度来说,也不能将“智能合约”完全等同于真正的商业合同,两者不具备同等的法律效力。一是智能合约本质上是程序代码,在程序的实施过程中,可能会出现人为有意或无意的偏差、漏洞和错误,例如验证数据时未考虑数据源缺失的异常情况等。二是在智能合约的程序执行过程中,并非所有的区块链技术都会将智能合约安装、升级、执行的审计记录,以及智能合约进行数据处理过程中的日志、痕迹、数据状态的变更,在系统中进行保留。这也对日后遇到纠纷时的取证带来了麻烦。三是针对智能合约产生的法律纠纷的管辖及适用法律仍不明确,有关智能合约的纠纷是否能直接适用中国的《合同法》,尚未有明确的定论。

5.2 智能合约的法律完善建议

首先,对区块链上共享、共用的数据,应当遵循所有区块链网络主要参与方所在地的商业和个人的数据隐私保护法律法规,并满足跨境数据传输的合规要求。

其次,运行在区块链网络上的智能合约,在遵循相关法律法规的框架下,通过程序方式实现了普通商业合同中的条款的自动化执行,并通过了智能合约的安全检测,留存全面的程序变更和数据变更记录,应当认可其和被其映射的普通商业合同具备同等的法律效力。

最后,完善解决智能合约纠纷的法律法规。对智能合约产生纠纷之后,如何取证、如何解决争议,应当制定全面的法律框架、规定和解释,这样将可以有针对性地加强智能合约的安全审计、日志留痕等功能。

6 结论和展望

本文通过聚焦跨境贸易领域的业务场景,以区块链智能合约相关技术为基础,列举了区块链智能合约技术在该领域中的安全挑战,结合业务场景提炼出了覆盖智能合约全生命周期的安全机制,为在跨境贸易领域区块链智能合约的安全应用进行了有益的探索和研究。

未来,我们相信随着区块链智能合约安全技术的继续发展、逐渐成熟,配套法律体系的不断完善,以智能合约为驱动的跨境贸易将会更加便捷高效,更加安全可信。

猜你喜欢

调用合约跨境
核电项目物项调用管理的应用研究
跨境支付两大主流渠道对比谈
在跨境支付中打造银企直联
关于促进跨境投融资便利化的几点思考
基于系统调用的恶意软件检测技术研究
跨境直投再“松绑”
利用RFC技术实现SAP系统接口通信
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望
C++语言中函数参数传递方式剖析