数据交互智能合约
使用智能合约来存储加密的关键字索引和一些相关数据,并完成检索操作,以保证用户数据的私密性。
在合同拟定阶段,合同起草方为数据所有者(Data Owner,DO),合同接收方为数据使用者(Data User,DU),这个身份在合同传签过程中可能随时会发生变化(因为不断有新数据产生)。
合同数据交互的智能合约分为两种,分别用于共享合同数据和使用合同数据。前者由合同起草方部署并发送给合同接收方,从而完成合同数据流转;后者由合同接收方发布,用于合同签署、检索及查验,所有过程数据都保存在智能合约中。
1.添加用户AddUser
由于采用联盟链的架构,对用户管理实行会员制,因此只有联盟链管理员有权限执行AddUser函数(也可由联盟链成员投票决定是否执行)。
首先由用户向管理员发起添加新用户的请求,管理员通过加密通道接收待添加用户的身份证书信息并进行验证,验证成功后通过该函数向用户授权联盟链账户并分配公私钥。
2.删除用户RemoveUser
只有联盟链管理员有权限执行该函数。
当需要删除某用户时,管理员通过该函数从授权账户列表中删除用户的联盟链账户。
3.为合同文件添加索引AddIndex
只有合同起草方有权限执行该函数。
当起草方上传新的合同文件时,他需要从每个文件中选择关键字列表并构建加密关键字索引,并将其存储到智能合约中。
4.删除合同文件DeleteFile
只有合同起草方有权限执行该函数。
当数据所有者DO删除某个合同文件时,需要提供该文件的加密关键字索引和交易ID。
5.删除关键字DeleteKeyword
只有合同起草方有权限执行该函数。
当需要删除合同文件的某个关键字时,需要提供该关键字的索引。
6.检索Search
该函数只能由合同起草方或集中授权的用户执行。
用户通过加密关键字索引KeywordIndex进行检索,函数返回交易列表TxID和相关联的关键字列表Index。
当检索发起方为授权用户时,索前需核对用户余额$msg.value是否足以支付本次检索,并于检索成功后将检索费用$cost从用户钱包中扣除。
7.撤销Withdraw
只有合同起草方有权限执行该函数。
执行此函数后,数据所有者DO将合同相关的检索费用返还给用户。
8.发送合同元数据给指定用户
只有合同起草方有权限执行该函数。
将合同元数据加密后发送给指定用户。
9.接收合同元数据ReceiveContract
该函数只能由合同接收方执行,用于读取合同元数据。
接收成功后,数据使用者DU也可以在本地调取合同数据,而其他人无法查看该过程。
10.数据查验DataSearch
只有合同接收方有权限执行该函数。
通过加密关键字索引KeywordIndex调用Search函数,获取并存储检索结果至合同接收方的智能合约中。
11.价值存入Deposit
该函数用于将供数据共享及检索消耗的价值存入账户钱包。
基于区块链的云端数据安全共享协议
在云端共享合同文件时,如何保证合同数据不被泄露是关键性问题。
本案例使用了一种基于区块链的云端数据安全共享协议,利用代理重加密进行密码转换,让数据所有者能够在不暴露原始密钥的情况下将其加密数据共享给其他用户,具有很高的保密性。
假设数据所有者DO向数据使用者DU共享数据。
在上传数据至云端之前,DO首先对数据进行加密生成数据密文,该密文将通过公共信道传输,而用于加/解密的密钥S则通过安全信道传输;
当DU发出共享请求时,DO将S用DU的公钥加密后发送给DU;
DU收到后通过其私钥解密以获得S,再利用S解密数据密文最终获得共享的数据。
在实际应用中,用于密文存储的云节点不是完全可靠的,因此存储的保密性完全由数据存储位置的随机性来确保。
这些位置信息最初被记录在元数据中,由DO所有;
而在数据共享后,相应的位置信息被发送给DU,它们就不再安全了。
另一方面,在数据传输过程中,DO不希望将用于文件加密的原始密钥S直接暴露给网络中的其他用户。
基于这些需求,有人设计了一种密钥转换和密文恢复机制。
在这个机制中,数据所有者在共享数据时仅需提供数据位置和新设置的解密密钥;数据接收者从相应位置下载更新的密文后自行解密。
步骤如下:
(1)令原始加密/解密密钥为S,由S生成随机对称密钥S';
(2)结合S和S'来创建转换规则K;
(3)将数据共享请求发送到数据存储节点N1,N1根据K执行密文转换;
(4)N1将转换后的密文传输到另一节点N2,N2由数据所有者选择;
(5)DO将S'以及N2的位置发送给DU;
(6)DU从节点N2下载更新的密文,并用S'解密。
这种机制让DO在数据共享时用S'取代了原始密钥S,用节点N2取代了S的原始位置,有效隐藏了原始密钥及密文的存储位置。
整个过程在服务器上执行,无需密文下载、重新解密和重新上传。
由于选择了代理重加密技术作为密码转换规则K,可以在不泄露有关密钥或明文任何信息的情况下,通过半可信代理将DO的密文转化为具有相同明文的DU的密文。
在传统的云服务中,DO利用自己的公钥Pa加密数据后上传至云端,因此云服务提供商对其明文一无所知。
当DO请求与DU共享她的数据时,她将她的私钥和DU的公钥Pb组合在一起生成转换密钥Rk并将其发送给云服务提供商;
作为代理,云服务提供商将对Rk执行重新加密。
因此,DU可以很容易地从云端获取重新加密的密文并通过他自己的私钥解密。
假设N2为代理,DO的加密/解密密钥为S。
DO不需要向DU请求S',而是自己由S生成S',并将S'发送给DU;
然后利用S和S'计算Rk,并将Rk发送给云服务提供商。
显然,此过程满足不可逆性:
拥有随机对称密钥S'的用户即使知道所有变换的密文,也不能计算原始密钥S。
同时,即使他知道所有先前的和已转换的密文,执行K的节点也无法计算出原始密钥S。

云上的代理重加密技术
在实际使用中,代理重加密可以有效地重新加密对称密钥,但缺陷在于无法对实际的对称密钥对进行更新。因此,需要调整代理重加密方案,使它能够满足实际需求。
最终的数据共享过程为:
(1)用户使用私钥对元数据解密以获得解密密钥S以及数据存储位置N1;
(2)随机生成对称密钥S',并利用S和S'生成加密密钥K;
(3)将K发送到节点N1并让N1对K执行重加密;
(4)N1将变换后的密文发送到数据共享节点N2,N2由数据所有者随机选择;
(5)DO通过安全通道将S'以及N2的位置共享给DU;
(6)DU从数据共享节点N2下载更新的密文,并用S'解密。

数据共享过程

小结:
该案例从电力行业出发,分析了电子合同在电改环境下的市场需求,罗列了电子合同相比传统纸质合同的优势,以及目前电子合同存在的易灭失、可随意复制、可能被篡改、取证流程复杂、隐私保护不够的问题。
区块链的自有特性决定了其在电子存证上有着得天独厚的优势,是解决电子合同应用痛点的良好选择,目前已被部分银行、司法机构、电子数据服务平台所采用。
通过业界的区块链合同存证案例,提出了购售电云合同的区块链解决方案,介绍了业务流程和主要功能,并对合同数据的接入及保全方式、区块链+云的存储架构、数据交互智能合约及云端数据安全共享协议等关键技术和方法进行了系统性描述。
该方案在技术上具备通用性,除了电力行业,也可用于其他行业的电子合同及电子文件的存证。
值得一提的是,虽然已有司法机构采信了区块链上的数据并用作裁决依据,但区块链在电子合同领域的应用还处于初级阶段,并未形成规模。
小编认为今后区块链电子合同发展的三个关键性问题:
不同存证链的数据如何互联互通互认、
如何形成统一的行业标准及具备相应的法律效应、
.如何让大众接受并承认区块链的公信力。

