张国英,毛燕琴.一种基于区块链的去中心化数据溯源方法[J].南京邮电大学学报(自然科学版),2019,39(02):91-98.
摘要
为了避免数据欺诈(如数据被篡改)等情况发生,必须保持数据创建、修改和转移的历史记录,即溯源。传统的数据溯源系统大多采用中心化的存储模式,存在易遭受内部、外部攻击,且有单点故障等弊端。区块链是一种随着比特币系统发展起来的,基于互联网的去中心化信任管理机制, 其难以被篡改、可追溯等特性为安全的数据溯源提供了新的解决途径。文中提出了一种基于区块链的去中心化数据溯源方法,其中包括建立PROV溯源数据模型描述溯源数据;设计了一套溯源数据管理的合约,通过智能合约将溯源数据存储到区块链上,确保用户获得的溯源数据真实可靠;搭建了一个以太坊的私有区块链网络,通过设计一个基于React的JavaScript Web应用程序,仿真实现和测试了所提出的方法,测试结果证明所提出方案的正确性和可行性。
关键词: 区块链;数据溯源;智能合约
0 相关研究
- Blockchain:the solution for transparency in product supply chains[EB/OL].[2019-01-05].https://www.provenance.org/whitepaper.
- TIAN Feng.A supply chain traceability system for food safety based on HACCP.blockchain&Internet of Things [c]//International Conference on Service Systems and Service Management(ICSSSM).2017:l一6.
- MCCONAGHY T,MARQUES R,MOLLER A,et a1.BigchainDB:a scalable blockehain database(DRAFT) [EB/OL].[2019-01-05].http://www.blockchain.jetzt/wp-content/uploads/2016/02/bigchaindb-whitepaper.pdf.
- LIANG X,SHETrY s,TOSH D,et a1.ProvChain:a block· chain-based data provenance architecture in cloud environment with enhanced privacy and availability[c]//17th IEEE/ACM International Symposium on Cluster,Cloud and Grid Computing(CCGRID).2017:468—477.
上述利用区块链技术进行溯源的系统大多是针对特定应用场景,采用自己搭建的区块链来存储产品的溯源数据,安全性弱。
1 相关技术
1.1 数据溯源技术
- 现有的溯源系统大多采用中心化存储方式,数据库中存储、维护的是数据的当前状态,数据的历史信息和处理过程通常存储在数据库日志中,用于故障恢复,并不直接提供查询服务。
- 问题:溯源数据造假、单点故障、存储在数据库日志难以实现追溯。基于分布式架构的溯源系统信息分散,容易信息造假,追溯效率低。
1.2 区块链技术
- 按照访问和管理权限,区块链目前从实现角度分为公有链、私有链和联盟链。私有链和联盟链都属于专用的区块链,即专有链。公有链和专 有链的区别在于读写权限以及去中心化的程度。一般而言,去中心化的程度越高,可信度越高。
- 考虑到联盟链和私有链去中心化、开放程度低,而以太坊除了具备可信存储、可信验证等特性,还提供了灵活通用的智能合约,能够建立各种去中心化的服务,且便于部署和二次开发,因此本文基于以太坊平台实现数据溯源。
【以前写的智能合约相关】
1.3 数据溯源模型
- 本文基于PROV 数据模型建立了溯源数据模型来进行溯源数据的描述。 【另开一篇写溯源数据模型】
- 在PROV-DM中,溯源数据被定义为一条记录, 描述了3个核心要素即Entity(实体)、Activity(活动)和Agent(代理)及它们之间的关系。
- 实体是对要记录溯源信息的事物的描述。
- 活动是发生或作用于实体的某种形式的操作,描述实体如何成为目前的状态以及实体的属性如何变化。活动可能会产生新的实体。
- 代理为一个实体的存在、一个活动的发生或另一个代理的活动承担的某种形式的责任,可以是人、 软件或其他可以赋予责任的角色的实体。
- 溯源信息的表示主要是通过溯源元数据来体现,本文将溯源数据模型表示为一个元组,即溯源记录可以表示为(数据实体,对数据所做的操作,用户名)。
2 基于区块链的数据溯源方法
2.1 参与方的身份真实性验证
- 可信的身份真实性验证是安全数据溯源的第一道屏障。数据溯源涉及众多参与主体,包括数据源、 数据传递方、数据审核方、数据使用方,他们共同参与、维护区块链。
- 各方首先注册为区块链中的用户,注册后每个用户会生成一个公钥/私钥对。公钥用于标识系统内用户的身份,私钥用于数字签名,确保用户身份的真实性,允许数据的接收者用以确认数据的来源,防止被人伪造。
- 该实现基于secp256kl 椭圆曲线数学的数字签名算法(ECDSA)。公钥通过私钥计算得出,但由公钥不能推导出私钥。
- 数据是否被篡改的问题利用keccak 256哈希算法解决。
2.2 溯源数据的可信存储
- 本文基于PROV数据模型(PROV-DM)建立了溯源数据模型来描述溯源记录,以便跟踪数据的变化并识别导致变化的实体,通过智能合约将溯源数据存储到区块链上。
- 根据PROV-DM的定义
- 我们想要溯源的数据对象即为实体,需要计算数据的哈希值H(M);
- 用户A是数据M的所有者或创建者,定义为代理,之后需要对数据进行数字签名操作;
- 由于A并未对数据做进一步处理,活动指数据源获取数据的时间。
因此,溯源记录(Provenance Record,PR)至少包含:要溯源的数据的哈希 H(M),时间戳timestamp,所有者签名sig。即PR= (H(M),timestamp,sig)。
2.3 智能合约
3 基于区块链的数据溯源的实现
2.1 功能架构
2.2 仿真实现