• 阅读《一种基于区块链的去中心化数据溯源方法》总结


    张国英,毛燕琴.一种基于区块链的去中心化数据溯源方法[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)。
    • 数据溯源的其他参与方(如用户B)还可以对数据进行编辑等操作,但必须将对数据所做的操作记录在链上以供将来验证,则溯源记录需包含:之前版本的数据哈希值H(M)、时间戳和签名的哈希值, 当前版本(对数据做修改后)的数据哈希值日(M’),所做的操作activity,操作者签名sigk,即PR= (H(M’),H(H(M),sig,timestamp),activity,sigk)。

    2.3 智能合约

    • 基于PROV数据模型建立的溯源数据模型可以 描述溯源信息,然而,未涉及如何以可靠和永久的方式记录必要的元数据和数据以进行日后的验证。本文基于以太坊平台,通过智能合约将溯源记录存储在区块链上,合约可以看作区块链中的自治代理,在满足预设条件时自动执行,减少了人工干预,从而实现溯源记录的可信存储和可信验证。
    • 参与方读取和写入溯源数据的逻辑分别为:Object.sol,Agent.sol,Event.sol和对应的ProvObject.sol,ProvAgent.sol和ProvEvent.sol。

    • 合约通过P2P的方式在网络中传播,每个节点 都会收到一份。区块链中的验证节点会对合约进行验证,验证的内容主要是合约参与者的私钥签名是否与账户匹配,验证通过的合约才会最终被写入区块链中。

    3 基于区块链的数据溯源的实现


    3.1 功能架构

    • 主要实现了2个功能:溯源数据的存储功能和溯源数据的验证功能。另外,本文还进行了可视化模块的设计,便于溯源数据的查看。

    • 功能模块图

    • 基于上述功能模块的划分,设计了基于区块链的数据溯源的功能实现架构。

      • 区块链网络由区块链节点共同搭建(Geth(Go.ethereum)客户端)。
      • 智能合约部分,通过Solidity语言可以灵活编写适用于应用的、全网节点都需要严格执行的智能合约脚本(实现溯源数据存储和验证的逻辑)。
      • 前端页面展示部分,在区块链网络正常运行,合约部署成功的基础上,参与方可以基于前端页面实现溯源数据的存储和溯源记录验证功能。

    3.2 仿真实现

    实验的运行系统是Ubunml6.04,采用目前比较流行的Truffle开发框架来进行智能合约的编译、部署和测试。智能合约必须要部署到链上进行测试,Truffle官方推荐Ganache客户端来进行智能合约的测试,待测试成功后将合约部署到Geth客户端上,应用前端基于React框架开发,通过与合约进行交互来实现溯源数据的存储和查询。
    (实验分析过程略)


    总结:通过这篇论文大致了解了如果使用区块链进行溯源的过程。需要多加了解溯源模型。这个过程的实现,需要加强对于智能合约编写的学习。

  • 相关阅读:
    贮油点问题(C++)
    二维数组操作
    二的幂次方(递归)
    [haoi2009]巧克力
    距离最远的牛
    ssh注解basedao简单的实现
    @service中构造方法报错
    spring注解 构造函数问题
    json与gson
    AsyncTask异步类的简单操作
  • 原文地址:https://www.cnblogs.com/20199321zjy/p/12897143.html
Copyright © 2020-2023  润新知