APP下载

基于区块链的知识共享机制的设计

2021-10-19黄郑正张晓蝶赵金辉

关键词:数字签名提供者使用者

黄郑正,张晓蝶,赵金辉,邹 惠

(1.河北地质大学 信息工程学院, 石家庄 050031;2.河北地质大学网络信息安全实验室, 石家庄 050031)

知识是符合文明方向的,是人类对物质世界以及精神世界探索的结果总和。如今知识被赋予了更多的含义,我们所指的知识是一个被新发现或新定义的事物的解释。互联网的快速发展,人们获取新知识的途径变多,但如何保护知识所有者的知识产权成为一个亟需解决的问题。知识共享这个概念的提出可以较好地解决这个问题。刘琳等[1]采用委托代理模型对顾客知识共享激励机制进行建模,该模型对企业之间的知识共享激励机制的制定具有重要意义。在此基础上,张艳霞等[2]考虑了员工动态激励机制设计了知识共享模型,杨湘浩等[3]构建了企业隐性知识共享的激励模型。匡霞等[4]运用演化博弈的方法研究了有限理性下逆向供应链企业间的知识共享行为的动态演化过程。韩正涛等[5]采用演化博弈理论建立农业科技协同创新中涉农企业间的知识共享演化博弈模型,得出知识共享所需要花费的成本和知识共享过程中所带来的风险会降低涉农企业之间知识共享的意愿,而企业之间知识互补的程度和知识共享所带来的利润则会增加企业之间的知识共享意愿。唐泽威等[6]基于Agent 技术构建了供应链企业合作学习模型,为供应链的各个用户之间构建的有效知识共享机制提供较为合适的参考。

区块链技术是被认为继移动互联网后的下一代颠覆性核心技术,区块链技术在数据共享方面也有人作了一些研究。Lvan等[7]提出了一种基于区块链安全存储病人医疗记录的方法,这种方法允许病人更好地访问和控制自己的健康数据,使用现有的有意义的使用标准,授权实体接收患者数据的副本。薛腾飞等[8]基于区块链的医疗数据共享模型,使用医疗机构联盟服务器群(medical institution federate servers,MIFS)和审计联盟服务器群(auditing federate servers,AFS)的设计并与其改进后的股份授权证明机制(delegate proof of stake,DPOS)共识机制的有效结合,构建了医疗数据共享的基础平台。翟社平等[9]设计了一种多中心的类型和身份的代理重加密(type-and-identity-based proxy re-encryption,TIB-PRE)方案作为区块链的数据共享协议,可以有效防止用户的数据被恶意节点进行恶意攻击而造成的损失,为用户加密数据之间的共享提供了可靠的机制并由此构建了基于区块链的电子病历共享模型。

分析可见,大多数的学者都采用博弈论的方法对知识共享的框架进行搭建和改进;数据共享更多地用在医疗方面,对于知识共享在区块链技术中使用的研究成果较少。本文中在分析实际知识共享流程的基础上,基于区块链技术构建了一个切合实际的知识共享模型。结合知识的存储方式设计了智能合约的结构体与智能合约的实现算法,并在实验中验证了该模型的可行性、有效性。

1 关键技术

1.1 区块链技术

区块链技术具有高度透明、去信任、去中心化、匿名、可追溯等特性,能够通过区块之间分布式共识机制使节点之间无需第三方信任即可实现基于去中心化信用的点对点数据共享。为解决中心化机构普遍存在的高成本、低效率和数据存储不安全等问题提供了解决途径[10]。区块链系统一般由应用层、合约层、激励层、共识层、网络层、数据层等6 个部分组成[11]。区块链是一个链式分布式存储结构,每一块中包括了交易的信息以及前一块的 hash值[12],区块之间通过每个区块都存储其前一区块的hash值使区块之间首尾相连,若区块信息被篡改,则当前区块的hash值会改变,由区块的存储结构可知,当一个区块hash值被篡改,所有的区块的hash值都会随之改变,这其中的工作量巨大且不易实现,使得区块链拥有了其不可篡改的特性。区块链的链式存储结构[13]如图1所示。

图1 区块链结构框图

1.2 区块链智能合约

智能合约是“执行合同条款的计算机协议”,由Nick Szabo[14]在1994 年首次提出。2003年,Mark S.Miller 等[15]指出智能合约需要用代码编写,它是一段布置在区块链上的会在满足特定条件下自动执行的程序代码,用计算机程序来执行。虽然智能合约被提出来的时间比较早,但是一直没能应用到实际问题中,直至区块链的产生,为智能合约的发展提供了技术和平台的支撑。

1.3 区块链共识机制

当前,区块链共识机制主要分为工作量证明(proof of work,PoW)机制[16]、权益证明(proof of stake,PoS)机制[17]和拜占庭容错(byzantine fault tolerance,BFT)机制[18]。工作量证明是在系统中的每个节点都对系统提供自己的计算能力,能够完成相应的计算工作的节点就会获得新区块的记账权并获得相应的奖励。权益证明则是根据用户钱包中货币的数目及货币存在的时间来确定一个新的权衡节点优先级的度量单位,“币龄”因此而出现。每个币每天产生1币龄,如你持有100个币,这100个币你一共持有10天,那么你的币龄就是1 000。若此时,你发现了一个新的PoS块,这个区块的记账权就归你所有,与此同时你在发现该区块之前所持有的所有币龄则会被清空为0。即不管你持有多少币龄,只要新发现了一个区块,那么累计的币龄就会清空。PoS与PoW相比,用户发现新区块的资源消耗明显降低。在BFT机制中,若恶意节点想要做出恶意行为,其节点数必须超过节点总数的1/3,否则其恶意行为就不会发生。在PoS和BFT机制中,所有的验证节点本身是不具有信任度的,它们之间按照“少数服从多数”的规则进行交互[19]。

1.4 知识数据存储技术

IPFS 是由网络中节点构成的一个分布式文件系统,提供数据的永久性分布式存储[20],按内容寻址的块存储模型,由文件内容计算出加密的哈希值[21-24]。当要查询一个文件时,运行着IPFS节点的计算机会询问其所有对等点是否存在这个特定哈希值的文件,若存在,则只需输入存储文件时返回的hash值,IPFS系统就会根据文件检索表和内部的路由表自动查找并合并各文件块组成原始文件[25-26],拥有该文件的节点将会返回整个文件。在IPFS网络中上传的每个文件及其所有数据块,都会根据内容返回唯一一个固定的散列字符串哈希指纹,也称为内容标识符(content identifier,CID),上传知识数据文件到IPFS网络中,会生成该知识数据唯一的哈希值,知识数据发生任何变化,输出的哈希值都会完全不同,由此可以判断知识原始数据是否被篡改过。当文件大小超过数据块容量大小时,会被网络分块上传[27]。区块链与IPFS的特点相结合[28-31],提供了解决数据汇集面临各类问题的可能。

IPFS具有以下优点:① 下载速度快。它使用的BitTorrent协议,使数据在IPFS网络上的传输速度更快。② 安全性高。它去中心化的特性,让知识存储更加安全,不会因为一个节点出现故障而导致数据文件无法下载或上传。③ 低冗余。IPFS是按内容寻址的块存储模型,根据内容寻址在全局命名空间中明确地识别每个文件,降低了网络存储的冗余。

知识共享中对于知识的保护通常是用来保护知识提供者对于知识的所有权,保护知识提供者的知识产权,知识通常都是在没有被保护的情况下被其他人使用,这对知识的提供者产生了较大的影响,并没有得到作为知识原始提出者所应得到的权益。知识的保护与共享的工作大致可以分为两类:知识数据的上传与下载、通过智能合约和签名实现的数据的保护。如图2所示。

图2 数据的上传与下载示意图

由于区块链是去中心化的结构,节点之间没有可信的第三方,因此本文中知识提供者与知识使用者之间是没有可信第三方的。鉴于有的知识使用者在获取知识之后可能会恶意使用所获得的知识,因此在知识提供者为知识使用者提供知识的有效授权及签名之前需要对知识使用者进行风险信任评估,根据评估结果决定是否给予其对于知识的授权和签名。

2 知识共享的框架模型

知识共享在当今社会具有举足轻重的作用,随着国家对保护公民知识产权的重视,让人们更愿意去创造新知识和改进新知识,为新知识的产生创造了一个良好的法律环境。知识共享中知识的创造产生是一个自上而下的过程,这也就让知识共享过程成为了一个去中心化且分散的过程。知识共享过程需要一个去中心化的大环境,由于区块链技术具有的高度去中心化与知识共享的相对社会化的过程的理念如出一辙。因此在知识共享的技术上不再受约束,可以让知识共享的价值最大化。由此,本文中设计了基于区块链的知识共享框架,如图3所示。

图3 知识共享框架

框架由知识上传与存储、知识共享、授权验证、智能合约与访问控制组成。整个框架的功能如下:

知识提供者:提供知识的原始数据并将知识的原始数据上传至IPFS集群。可以决定是否授权其他人使用其知识。

知识使用者:通过获取的知识使用授权签名来访问具体知识。

IPFS:存储原始知识数据及相应的Hash值。知识提供者将加密后的知识和提取签名一并上传至IPFS,转变为Hash值后输出。

联盟链:存储IPFS所生成的Hash值。执行相应的操作与访问控制。

本框架各步骤说明如下:

1) 知识提供者将自己的知识原始数据及知识提取签名上传至IPFS网络上,得到知识数据的唯一hash值,并将其上传至联盟区块链上。同时,知识提供者、知识使用者和知识保护与共享中心这3个部分会记录本系统中知识数据的使用、访问等信息,并将记录的信息上传至联盟区块链中。

2) 知识使用者需要访问知识时,会先向知识提供者请求访问知识的授权,若得到授权,知识提供者会发送知识数据的验证签名给知识使用者。知识使用者通过得到的验证签名去获取知识,若验证签名与存储在IPFS网络中该知识的提取签名一致,则返回知识数据给知识使用者。

3) 知识提供者制定访问其知识数据的智能合约与访问控制。当知识使用者向区块链发起一个知识数据访问请求,区块链节点会验证知识使用者的身份是否符合访问条件,若不符合,系统不会执行任何操作,否则,智能合约会自动触发,执行知识数据访问的操作。

尽管知识共享模型具有较高的执行效率,对于知识的管理也有较高的安全性,但其本身也存在一些潜在的安全风险:① 知识使用者可能在获得授权得到知识后对知识进行非法使用,在非法使用的过程中不受监督。② 知识提供者对于知识使用者之间的信任是没有第三方机构提供信任机制的,对于知识使用者的可信程度只能依靠主观的判断,不能了解知识的使用者对于获取知识后的使用情况。由于知识的使用者和知识的提供者之间是不存在任何信任度的,这便会造成非法的知识使用者去非法获取知识并由此产生了不可信的服务,使知识提供者和知识使用者之间的交互产生严重的安全问题。

针对上述问题,对区块链的知识共享关键技术进行研究。

3 智能合约结构体设计

智能合约是整个知识共享框架中最重要的部分之一,它可以使知识提供者和知识使用者之间的交互在满足特定的条件下自动执行,而不需要知识的使用者每次都向知识的提供者请求对知识的授权。智能合约也为知识数据的存储服务提供了支持,在满足智能合约的情况下可以完成知识数据的上传、存储与调用等操作。在模型中用户有两类:知识提供者和知识使用者。智能合约将知识提供者和知识使用者之间的交互操作转换成区块链中的交易,并将这些交易完整地存储在以太坊网络当中。结构体(struct)在智能合约中用来记录和存储知识共享的各种信息。在智能合约结构体中主要包括知识数据结构体,知识提供者数据结构体,普通用户(知识使用者)数据结构体三类。

3.1 知识数据结构体

知识提供者创造新知识并将知识类型、知识摘要及知识产权的取得日期等数据一并上传至IPFS,然后将得到的唯一的hash值记录在知识所在的区块链当中。通过用户之间的交互会形成相应的区块交易,区块交易会触发智能合约的交易状态。节点达成共识后会将这些区块交易更新到联盟链的节点上,知识数据结构体设计如表1所示。

表1 知识数据结构体

3.2 知识提供者结构体

知识提供者上传自己的知识数据及访问知识所需的数字签名,系统为其产生唯一标识ID。在知识使用者请求授权访问知识时决定是否给予知识使用者访问权及是否签发相应的数字签名。知识提供者结构体设计如表2所示。

表2 知识提供者结构体

3.3 知识使用者结构体

知识提供者和知识使用者之间的知识授权服务交易是智能合约功能的主要体现,知识使用者需要提供自己的账户地址,发出请求授权后需要等待知识提供者是否提供数字签名,若知识提供者提供数字签名则使用得到的数字签名去访问该知识的数据。通过这个过程可以有效地保证知识授权服务的安全性,知识使用者结构体设计如表3所示。

表3 知识使用者结构体

3.4 智能合约的具体设计

在本文中所使用的智能合约都是基于Truffle框架编写的,实现了知识数据在区块链上被知识使用者和知识提供者进行共享的操作。

3.4.1知识提供者上传知识模块

知识的提供者拥有唯一的Hash地址,可以通过调用智能合约的方法addKnowledgeToBlockchain()在区块链中上传知识的产生时间、知识种类、知识摘要等在内的知识的原始数据,在上传的过程中会在以太坊中消耗一定数量的Gas,故知识的提供者在上传知识之前要保证自己的以太坊账户是有一定的余额的,否则会导致知识原始数据上传失败。

3.4.2知识查询模块

知识的提供者和知识的使用者都可以通过知识的名称和知识在区块链中唯一的ID编号对知识进行查询,知识的名称可能在区块中会有重复,但由于知识的ID编号是唯一的,所以当使用知识ID去查询知识的时候是不会出现查询错误,从而保证了查询的准确性。由于查询的过程只调用了智能合约的getKnowledge()方法,不需要对知识的数据进行修改操作,因此没有产生任何区块链的交易,故不需要消耗任何Gas。

3.4.3知识溯源模块

在知识提供者将其知识的原始数据上传到IPFS后,IPFS返回的Hash值、知识信息、时间戳等一并被存储到区块链上。由于区块链具备的防篡改和可追踪的功能,为知识的溯源提供技术保障,在当今社会知识被滥用的行为屡禁不止,这导致了很多知识提供者的知识产权没有得到有效保护。在引入了区块链技术的知识共享模型中,知识提供者可通过知识溯源算法1返回的Result 结果集查询存储在区块链中当前正在被调用的知识的数据,包括知识名称、知识提供者、知识种类、知识产权取得的日期、知识的摘要、取得知识使用权所需要支付的价格、知识的hash地址等知识数据。整个溯源过程同样没有任何交易的数据,因此也不需要消耗Gas。溯源过程的智能合约算法如下:

算法1:tracebackKnowledge

Input:Knowledge ID,Knowledge hash

Output:Result

1:if knowledge.knowledgeprovider.addr == knowledge.users.sender then

2: if knowledge.knowledgeHash != knowledgeHash then

3: break;

4: else display knowledge information;

5: return ture;

6: end if

7: end if

8:end if

3.4.4知识使用者申请使用知识模块

知识使用者申请使用知识的前提条件是其以太坊的账户中拥有一定数量的以太币以供交易的过程中消耗,并且使用者不是知识提供者本身。知识使用者在申请使用知识之前需要先查询链中是否有自己需要使用的知识,若有则发出使用申请,若得到知识提供者的授权并获得相应的数字签名则是成功申请到了知识的授权使用,若知识使用申请被拒绝则不能访问使用相应的知识。知识使用者在成功获得知识提供者的授权后通过算法2中返回的Providing Result结果集得到系统返回的知识提取签名及知识数据。提供知识过程的算法如下:

算法2:provide knowledge

Input:Knowledge ID

Output:Providing Result

1:if knowledge.users.RequestAuthorization==false then

2: break;

3: else if knowledge.users.RequestAuthorization==true then

4: if knowledge.provider[knowledge.users.sender].addr==0 then

5: knowledge.provider.addr=knowledge.users.sender;

6: knowledge.users.signature=knowledge.provider.

signature;

7: return knowledgeContent;

8: end if

9: end if

10:end if

4 系统的设计实现

采用Python语言和IPFS集群模拟的知识共享过程中交易和区块链的存储模型,通过Python可以实现知识共享过程中每个用户之间的交互行为,并将用户提供的数据通过hash值的形式存储在IPFS集群当中。区块链记录了知识共享过程中用户的操作数据。

4.1 区块链创世区块的创建

用Python来模拟的区块链创世区块的创建,并且给予了初始值,之后知识共享在区块链中的操作将会产生新的区块,并且会将前一个区块的hash值记录在新生成的区块当中,再通过区块链的共识算法生成新的hash值。这样可以保证每个区块都拥有其前一个区块的hash值,若有其中一个区块的hash值被恶意篡改也可以被后面的区块发现。

区块的创建代码如下:

def generate_block(oldblock,bpm,address):

newblock={

"Index":oldblock["Index"]+1,

"BPM":bpm,

"Timestamp":str(datetime.now()),

"PrevHash":oldblock["Hash"],

"Validator":address

}

newblock["Hash"]=calculate_hash(newblock)

return newblock

表4为区块创建的示例。

表4 区块示例

4.2 知识共享在区块链中的交易

在进行知识共享的交易过程中,需要用户输入需要访问的知识提供者的地址和自己的地址,同时需要输入要访问的知识的ID,这样可以保证自己访问的知识是自己需要访问的知识。并且在访问时需要得到访问授权,即是否得到了知识提供者所签发的数字签名,系统会通过本机的地址自动查询是否获得了数字签名并对数字签名进行比对。这样可以保证若有用户虚假提供数字签名可以被系统识别出来。

知识交易过程的部分智能合约代码如下:

contract KnowledgeSharing{

//Knowledge users use Knowledge

function use Knowledge (uint knowledge_id,bytes 32 knowledge_catagory,uint price){

balances[msg.sender] -=price;

balances[provider] +=price;

transactionRecord[knowledge_id]= msg.sender;

} }

智能合约采用solidity语言进行编写,将编译成功之后的智能合约通过客户端部署到区块链上,智能合约的部署结果如图4所示,知识上传过程如图5所示,知识数据共享过程如图6所示。

图4 智能合约的部署

图5 知识上传过程

图6 知识数据共享过程

上述实验在网络上完成,说明了知识共享在基于以太坊的区块链上可以保护知识的数据安全具有可行性。与传统的知识共享相比,基于区块链的知识共享系统主要通过智能合约来部署和执行,不需要耗费额外的人力,提高了知识共享的效率也节省了大量的人力。

5 结论

提出了一种基于区块链的知识共享模型,该模型是基于以太坊的一个去中心化的知识共享交易服务系统。知识提供者将知识的原始数据上链后打包进入区块中保证了知识数据的可追溯性,链下的数据存储到IPFS集群中降低了知识交易过程的成本。整个知识共享的过程都在区块链中进行,保证了知识数据信息的不可篡改,让交易双方都能彼此信任。通过使用智能合约减少了知识交易过程步骤,减少了相应的人力资源的投入。实验结果表明:本文的知识共享的溯源方案具有可行性,链上数据具有可溯源、防篡改等特性。正确的使用区块链技术可以大大增加2个互不相关的个体之间的信任,有助于知识共享在各个地方、各个人群中的共享。下一步将继续完成智能合约的一些具体功能以实现较大规模的知识共享数据的区块链管理。

猜你喜欢

数字签名提供者使用者
设计让您在喜爱的虚拟世界中自由奔跑
交通运输行业数字签名系统的设计与实现分析
网络交易平台提供者的法律地位与民事责任分析
数字签名技术在计算机安全防护中的应用
新型拼插休闲椅,让人与人的距离更近
关于电子商务中安全数字签名的研究
论网络侵权的归责原则
网络言论自由的行政法规制研究
网络服务提供者的著作权间接侵权责任研究
抓拍神器