范贤丽,范春晓,吴岳辛
北京邮电大学电子工程学院,北京100876
粮食供应链是由粮食及其产品生产和流通中涉及的农户、粮食收储中心、粮食加工企业、粮食配送中心、零售商、最终消费者连成一体的功能网络结构模式[1].在粮食供应链各主体间进行信息共享能有效解决目前存在的牛鞭效应、双重边际效应、食品安全问题频发、举证追责困难等难题.虽然信息共享有诸多好处,但实际推广却很难,这是因为企业在共享信息时面临着隐私泄露的风险,如合作伙伴在了解自己的库存、需求等信息后可能会采取压价、抬价行为,使企业在竞价过程中身处劣势[4].为了解决信息共享时的隐私保护问题,需要技术与制度的双重创新,而当前比较热门的区块链技术,作为一个分布式的共享总账,具有去中心化、永久记录、数据透明、方便审计等特点,与隐私保护中追求的访问过程透明可控、责任主体明确可查等目标具有良好的契合度[8].通过区块链技术可以将数据所有权真正地从第三方信用中介转移到用户手中,区块链技术的出现为信息共享过程中的隐私保护提供了解决问题的新思路.
本文针对粮食供应链中信息共享时面临的隐私问题,基于相关领域已有的一些研究成果,结合区块链、智能合约、IPFS等关键技术,设计与实现一个隐私保护系统,旨在解决粮食供应链场景中的隐私保护问题的同时为区块链技术在隐私保护方面的运用提供参考.
区块链技术特有的属性使其在隐私保护方面具有诸多优势,因而成为各界研究的热点,现阶段基于区块链技术的隐私保护研究已初见成效.在通用平台研究方面,文献[5]提出了一个去中心化的个人数据管理系统,通过对比特币系统交易的重新定义,使其可以执行存储、查询和数据共享等指令,从而确保用户能够拥有和控制自己的敏感信息.在医疗保健领域,文献[6]实现了一种基于区块链的患者医疗数据的访问和权限管理系统MedRec,该系统将患者分散的医疗记录的哈希和存储位置统一保存在区块链上,有效地解决了系统间互操作性问题和患者对数据所有权的控制问题,并以数据作为挖矿奖励的方式来鼓励医疗相关人员参与网络维护;文献[7]提出了一个基于区块链和云存储技术的医疗记录安全存储方案,实现了患者对个人医疗记录所有权的控制和对隐私数据的安全存储.针对互联网租车场景中暴露的隐私问题,文献[8]通过使用基于区块链的第三方数据库和数据交互审计平台来完成乘客隐私信息的保护.对于区块链本身的数据透明性而引发的数据安全隐患问题,零钞Zcash中使用了零知识证明技术,可实现证明者在不提供原始信息的情况下使验证者能够证明某个论断是正确的[9];文献[10]提出了一个名为Hawk的去中心化智能合约系统,用于实现隐藏智能合约输入的功能.
综合分析发现,现有基于区块链的隐私保护的研究成果与方案大多采用了区块链与第三方数据库结合的链上链下存储方式来达成隐私保护的目标,该方式的优点如下:1)真正的隐私数据加密保存在链下数据库中,而区块链上保存数据的哈希值和链下存储位置,可以有效解决区块链的容量扩展问题,从而减少带宽和存储资源的浪费;2)将用户的授权、除权等操作记录在区块链上并在全网达成共识,能够提升监管的透明度和在发生纠纷时提供可靠的证据;3)数据加密保存在第三方数据库,解密密钥掌握在有权限的用户手中,这样即使第三方数据库被恶意攻击,也能将用户隐私泄露的风险降到最低;4)链上存哈希值,链下保存的原始数据,即使修改1比特也会导致其哈希值与链上不一致,从而有效防止篡改,且链上不保存原始数据也能有效地规避区块链本身数据透明引发的安全隐患.
鉴于链上链下结合的隐私保护方案存在的诸多优点,本文以该方式为总体设计方针,结合本文研究的粮食供应链场景,现有研究成果中还存在以下几点不足:
1)权限控制缺乏灵活性.在粮食供应链中,涉及大量信息的交互,不同时期对于不同的共享方,企业有不同的共享策略,这就需要提供一种细粒度的权限访问控制方式;
2)选择的链下数据库不能与区块链很好地配合.现有的链下数据库一般采用中心化数据库,会导致一些中心化的弊端,如单点失效会削弱区块链的作用,且为了顺利找到链下原始数据,链上还需要额外存储链下数据的存储位置;
3)用户缺乏信息共享的直接动因.在粮食供应链中,共享隐私信息带来的利益在数据的所有方和共享方之间的分布是不均衡的,通常共享方获得的利益远大于所有方,为了让用户积极主动地共享出真实可靠的信息以保证系统的可持续运行,需要采取合理的激励措施;
4)数据访问过程不够透明.数据读取过程不会在区块链上留下任何足迹,为了让用户能够实时掌握自己信息的被访问情况,并为日后举证追责留存更多的信息,记录数据读取行为也是有必要的.在现有的研究成果中,对于这一问题还缺乏明确的解决方案.
基于上述问题,本文提出改进措施如下:
1)将粮食供应链中的隐私信息划分为库存、成本、需求和质量信息4类,用户在进行权限控制时将4类信息进行自由组合,从而实现灵活的访问控制;
2)链下存储系统采用IPFS作为一种点对点分布式超媒体分发协议,与区块链具有较好的兼容性,同时IPFS基于哈希寻址,区块链上只需保存数据的哈希就能从IPFS中成功检索出对应信息[14];
3)设计一种积分方案,在获取数据之后,从共享方账户自动转移相应数量的积分给数据所有者,这样不但可以解决共享激励问题,还将数据读取行为与积分转移过程绑定,巧妙实现了数据访问透明性.
区块链源自2008年化名为中本聪的学者提出的比特币应用的底层技术[11],它是一个由多方共同维护的、去中心化的分布式数据库.核心在于通过P2P网络协议、共识算法、非对称加密、哈希散列等关键技术解决数据传递与交换过程中的信任问题.
区块链按照时间顺序以区块为单位组织为链状数据结构,区块链中的每个数据区块包含区块头和区块体两部分.区块头包含前一区块哈希值、Merkle根、时间戳、难度目标、随机数等,区块体则封装了自上一区块创建以来的多笔交易记录,这些记录通过Merkle树的哈希过程生成对应的Merkle根并写入区块头,从而使区块体的变动能在区块头中反映出来[12-13].区块链的结构如图1所示.
智能合约是运行在区块链上的一段可自动触发的计算机程序,它赋予了区块链可编程特性,为区块链的推广运用奠定了基础.依照业务逻辑编写完成智能合约后,将其部署到区块链网络节点上,该智能合约就可以继承区块链的分布式记录、不可篡改和伪造、强制执行等特性.
智能合约根据实际应用场景定义交易规则,外部应用通过调用智能合约,并按照合约定义的方式执行链上交易和访问区块链上保存的数据.智能合约与外部应用之间的关系可类比传统数据库与存储过程之间的关系,存储过程用于访问关系数据库中的数据,智能合约则为外部应用访问区块和状态数据搭建了桥梁[12-13].
IPFS是一个点对点分布式超媒体分发协议,IPFS的设计中集成了DHT、BitTorrent、自认证文件系统SFS和Git的优点,IPFS被认为是最有可能取代HTTP的新一代互联网协议,它提供了永久的去中心化存储文件的方法.IPFS基于内容寻址,将信息保存到IPFS节点中,IPFS系统将会返回基于该信息计算得出的唯一哈希值.哈希值与信息内容一一对应,即使只对信息做轻微修改,也会得到完全不同的哈希值.当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据.
图1 区块链结构图Figure 1 Structure of blockchain
IPFS是通用目的的基础架构,基本没有存储限制.大文件会被切分成小分块,下载时可从多个服务器同时获取.IPFS的网络是不固定的、细粒度的、分布式的网络.可以较好地适应内容分发网络的要求[14].
本文设计的基于区块链和IPFS的隐私保护系统,主要实现粮食供应链中隐私信息的安全存储和授权访问.粮食供应链中的隐私信息是指除去满足消费者知情权的基本信息后可能会暴露企业商业机密的、对企业利益有较大影响的信息,如企业的生产成本、库存水平、销售数据等.对于不同的隐私信息,企业通常有不同的共享策略,为满足这一需求,本系统将隐私信息分为库存、成本、需求和质量信息4类,以便企业可以灵活地进行组合.本系统的核心功能包括用户注册、密钥生成、隐私信息上传、权限管控、隐私信息访问.同时为了鼓励隐私信息共享以及达成数据访问透明的目标,本系统还设计了积分管理功能,当有权限的他方成功访问企业提供的信息后,企业会收到相应的积分奖励.
为防止区块链账本增长过快,本系统仅将隐私信息的哈希值记录到区块链中,而原始信息则在加密后保存到链外数据库,为了与区块链特性兼容,采用IPFS作为链外数据库.此外,区块链还记录权限信息和积分信息.
本系统分为WebApp、IPFS、区块链3个部分.WebApp支持B/S架构模式,WebApp会根据用户操作进行相应的处理,选择要调用的智能合约,协调IPFS和区块链的工作.IPFS负责存储加密后的隐私信息,并返回哈希路由.区块链负责存储智能合约代码和执行智能合约,并将执行结果打包成区块,经过共识后写入区块链账本.系统整体架构如图2所示.
图2 系统架构Figure 2 Structure of system
本系统设计的积分方案遵循ERC721规范,能够完成查询某个地址的积分、转移积分、查询积分的所有者等功能.每个企业注册使用该系统时,其区块链地址都会得到1 000积分作为使用该系统的奖励,企业间进行隐私信息共享时会协商一个积分数量作为共享报酬,然后将该数量写入智能合约便于在条件满足时自动触发转移功能进而防止作弊.如果两者之间没有协商,系统会默认写入一个积分数量以激励主动共享数据的一方.当企业的积分耗尽时,可以向其他企业购买.
系统中的智能合约本质上是根据用户注册、隐私信息的上传和访问、权限的授予和撤销、积分的分配和转移这几个过程的业务规则进行编码,部署在区块链网络中,并由所有节点达成共识和运行的程序.WebApp通过调用相应的智能合约将数据保存到区块链上或从区块链中检索出所需数据.针对不同功能,设计了对应的智能合约,其接口如表1所示.
3.4.1 用户注册
用户通过WebApp输入ID、密码和其他基本信息(如企业名称、企业地址)后发起注册请求;WebApp验证提交信息后根据输入的密码生成用户的公私钥对和区块链地址,并向区块链节点请求调用RegisterC.userRegister完成用户注册请求,注册成功后会调用IntegrationC.initIntegration给用户的区块链地址存入1 000积分作为其初始的积分数.
3.4.2 密钥生成
对应于4类隐私信息,每个用户需要4个对称加密密钥来加密相应的隐私信息,以防止未授权用户的非法访问.为达到较高的安全级别并兼顾加解密效率,本系统采用AES-128对称加密算法.在生成加密密钥时,用户需要输入密码作为日后使用密钥的凭据,WebApp会根据用户输入密码及系统当前时间生成相应的密钥,密钥保存在用户本地计算机中.
表1 智能合约接口Table 1 Interface of smart contract
3.4.3 隐私信息上传
隐私信息上传的步骤如下:
步骤1 用户通过WebApp提供的功能界面录入信息后发起保存请求并用自己私钥对请求进行签名.
步骤2 WebApp判断提交的信息类型提示用户输入密码来获取对应密钥以加密信息.
步骤3 WebApp向IPFS节点请求将加密信息存入IPFS中并获取IPFS返回的哈希.
步骤4 WebApp向区块链节点请求调用StoreDataC.saveInfo并将哈希值和信息类型作为参数传入;区块链节点收到请求首先验证用户的签名,通过后执行智能合约将哈希值、信息类型与用户ID绑定并广播该请求给其他节点执行相同的操作;在节点间达成共识后将智能合约执行结果写入区块链账本,然后提示用户信息保存成功.隐私信息上传流程如图3所示.
图3 隐私信息上传流程图Figure 3 Flow chart of uploading private information
3.4.4 权限管控
3.4.4.1 授权
用户通过授权操作允许其他用户访问自己的隐私信息.本系统将隐私信息分为4类,所以在授权时可以通过对4种类别的自由组合来限定信息共享范围.授权步骤如下:
步骤1 用户A通过WebApp选择共享用户B和授权信息类别后(如库存信息,需求信息)发起授权请求并对请求进行签名;
步骤2 WebApp向区块链节点请求调用Con figPermissionC.setPermission并将用户B的ID和信息类别作为参数传入;
步骤3 区块链节点先验证用户A的签名,再执行智能合约并将该请求广播给其他区块链节点,达成共识后将授权信息记入区块链账本;
步骤4 WebApp使用用户B的公钥将对应的密钥加密后发送给用户B,用户B通过自己的私钥解密出密钥.3.4.4.2 除权
用户通过除权操作撤销曾授予其他用户的访问权限,具体的步骤如下:
步骤1 用户A通过WebApp选择要除权的用户B和除权信息类别后发起除权请求并对请求进行签名;
步骤2 WebApp向区块链节点请求调用Con figPermissionC.cancelPermission并将用户B的ID和信息类别作为参数传入;
步骤3 区块链节点先验证用户A的签名,再执行智能合约并将该请求广播给其他区块链节点,达成共识后将除权信息记入区块链账本;
步骤4 WebApp提示用户输入新密码重新生成对应的密钥,并将新密钥发送给仍具有权限的各方.
3.4.5 隐私信息访问
当用户需要访问其他用户的隐私信息时,可通过WebApp提供的功能界面发起查询请求,查询成功后会触发积分转移功能以对信息所有者进行补偿,步骤如下:
步骤1 用户A在WebApp页面选择隐私信息的所有者用户B后输入组合查询条件发起查询请求,如查询B当前的小麦库存.
步骤2 WebApp分析查询请求,提取信息类别,然后向区块链节点请求调用Store-DataC.getInfo并将A和B的ID、查询条件及查询类别作为参数传入.
步骤3 区块链节点执行智能合约StoreDataC,StoreDataC将调用Con figPermission C.getPermission并传入A和B的ID参数,Con figPermissionC执行后向StoreDataC返回A和B之间的授权信息,StoreDataC对比授权信息和查询类别判断用户是否具备权限,对于有权限的用户从区块链账本中检索出查询信息对应的所有哈希记录.
步骤4 WebApp根据哈希记录向IPFS节点发起请求查询出对应的加密隐私信息.
步骤5 WebApp提示用户输入密钥解密信息,信息解密成功WebApp对信息进行处理后展示给用户A.
步骤6 WebApp根据约定的积分数量向区块链节点请求调用IntegrationC.transfer并将A、B的ID和积分数作为参数传入,区块链节点对IntegrationC的执行结果达成共识后自动将积分从A的区块链地址转移给B的区块链地址并给用户发送通知.隐私信息访问流程如图4所示.
图4 隐私信息访问流程图Figure 4 Flow chart of accessing private information
本文构建的基于区块链和IPFS技术实现的粮食供应链隐私信息保护系统中,底层区块链采用以太坊区块链,部署4台装有以太坊官方推荐的geth客户端的Linux服务器作为区块链的节点,配置4个节点的创世块文件和geth启动配置文件,使4个节点达成共识,形成底层区块链环境;本系统整合了HTML+CSS+JavaScript+vue.js+ipfs-api+Solidity+Truffle+web3.js多种技术实现前端界面、区块链智能合约、前端调用智能合约和与IPFS交互.WebApp的开发环境为:笔记本计算机、Windows操作系统、Intel Core i5处理器、内存8 GB、硬盘空间460 GB,该环境足以支撑相关软件运行.
为了验证系统的隐私保护效果,实验选取粮食供应链中有代表性的3种类型企业进行测试,分别为粮食生产企业A、粮食仓储企业B、粮食加工企业C.实验具体步骤如下:
步骤1 分别以3个企业的身份注册获得3个区块链账号和对应的公私钥.
步骤2 每个企业申请生成自己的加密密钥,方法是在密钥生成界面选择相应类别并按提示输入密码确认后即可获得对应密钥,密钥由用户自己保存,如图5所示.
步骤3 每个企业通过相应的功能界面录入自己在生产活动中产生的各种信息数据.如企业A的播种、施肥、农药、收割信息,企业B的入库、出库和库存盘查信息,企业C的加工细节信息;然后用成本信息密钥加密与价格挂钩的数据,用库存信息或需求信息密钥加密与数量挂钩的数据,用质量信息密钥加密与环境挂钩的数据;信息加密后先存到IPFS,然后将IPFS返回的哈希存在区块链上,如图6所示.
图5 密钥生成功能展示与关键代码Figure 5 Function of generating key and key code
图6 隐私信息上传功能展示与关键代码Figure 6 Function of uploading private information and key code
步骤4 企业C购买企业A的粮食,想要了解企业A的质量信息、成本信息、库存信息以降低自己的成本.为了防止企业C压价,企业A只愿意共享质量信息和库存信息,因而只给企业C发送两个密钥.在发送前用C的公钥加密,保证只有C才能解开得到对应密钥.企业C在成功拿到这些信息后,系统通过两方签订的智能合约中允诺的积分数量从C的账户转到A,如图7和8所示.
步骤5 企业B接到企业A的交易需求,帮其储存一部分粮食.企业A认为只需向B提供自己的质量信息以帮助企业B作一个存储环境评估,所以只给企业B发送一个密钥.后续过程同步骤4.
步骤6 企业A与企业C之间不再合作时,企业A要收回企业C的质量密钥和库存密钥,向密钥生成界面发起更新操作,然后把更新后的质量密钥发给还有权限的企业B,那么企业C将无权看到后续新产生的库存信息和质量信息,如图9所示.
通过上述测试,由于IPFS存储的数据是加密过的,而区块链中的数据是一连串的哈希值,所以在没有密钥的条件下拿到这些数据是无法从中获取到任何价值的,同时也验证了系统能够提供灵活的权限控制.对于B和C能看到的信息范围不一样,且A能随时撤销B和C的访问权限,决定权完全由A掌握;而且A在共享自己的信息后能收到一些积分奖励,弥补了可能给A带来的风险.并且A在收到积分时可以知道积分的发送方是谁,进而可知自己的信息在何时被谁访问,提升了隐私信息访问的透明度.
图7 权限管控功能展示与关键代码Figure 7 Function of controlling authority and key code
图8 共享库存信息Figure 8 Share inventory information
图9 不具备权限Figure 9 No permission
通过系统测试发现,当本地的IPFS节点故障时,系统仍然能正常运行,使用体验与未故障时几乎无差别,能正常获取历史数据.但如果采用中心化的第三方数据库,一旦数据库故障,整个系统都必须等到数据库恢复,且如果没有提前做好数据备份,将导致历史数据丢失.
隐私保护问题是粮食供应链主体在进行信息共享时的一个重要问题,如果一个信息共享系统存在隐私披露的风险,则很难得到用户的青睐.区块链技术的特性使其在隐私保护方面具有传统解决方案不可比拟的优势.本文针对粮食供应链场景,设计并实现了一个基于区块链的隐私保护系统,在系统中,粮食供应链各主体对自己的数据具有绝对的所有权,能够决定自己数据如何共享;同时本系统数据访问透明度较高,用户能够看到自己的数据何时被谁访问;此外系统还实现了细粒度的访问控制,使用户对权限的控制更加灵活,更具个性化.
本文结合粮食供应链场景,将区块链技术和IPFS技术运用于解决供应链主体的隐私保护问题,从初始权限配置、隐私信息上传、隐私信息的授权访问和撤销权限几个方面全面描述了系统的实现细节.但目前该系统的应用还处于实验阶段,能否推广应用还需要进一步的测试与验证,未来可尝试将该系统推广到其他应用场景.