[0022] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0023] 实施例一
[0024] 如图1所示,本发明实施例的一种基于区块链的可信云存储方法,该方法包括:
[0025] 步骤110、接入区块链网络的至少两个云存储服务器共识协定出记录权节点和非记录权节点;
[0026] 步骤120、记录权节点从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络;
[0027] 步骤130、非记录权节点从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链。
[0028] 区块链网络可以包括对等计算机网络(P2P),接入区块链网络的诸如云存储服务器和客户端等设备成为云存储网络节点,记录权节点是获得记录密文文件权限的云存储网络节点,非记录权节点是未获得记录密文文件权限的云存储网络节点。
[0029] 非记录权节点将验证完整区块的可信性作为在区块链中添加完整区块的条件,过滤掉可信性验证不通过的完整区块,仅将可信性验证通过的完整区块加入区块链,区块链具备防篡改、防泄漏、透明和可追溯的特点,能够为密文文件提供安全保障,实现非记录节点基于区块链为密文文件提供可信云存储服务,相比于传统的云存储方案,降低了区块链占用非记录权节点中的磁盘空间,并且能够更好地整合及利用闲置存储空间,提高存储空间的使用率,提高了磁盘性能。
[0030] 作为可选的实施方式,步骤110具体包括:
[0031] 步骤111、任一云存储服务器采用性能贡献计算公式对性能向量和权重向量进行计算,得到性能贡献值,且统计应用代币拥有量,以及基于性能贡献值、应用代币拥有量和委托权益证明协议选举出至少一个投票节点;
[0032] 步骤112、至少一个投票节点基于一致性哈希策略从至少两个云存储服务器中选择出记录权节点,且将不同于记录权节点的云存储服务器确定为非记录权节点。
[0033] 在一些具体实例中,云存储服务器的个数为4个,4个云存储服务器分别采用性能贡献计算公式对性能向量[Ci Di Mi Ti Ri]和权重向量[k1 k2 k3 k4 k5]进行加权计算,得到性能贡献值Si。
[0034] 性能贡献计算公式具体为:
[0035] Si=k1×Ci+k2×Di+Mi×k3+Ti×k4+Ri×k5
[0036] 其中,Si表示第i个云存储服务器的性能贡献值,Ci表示第i个云存储服务器在设定时段内的CPU主频性能,Di表示第i个云存储服务器的空闲磁盘占比,Mi表示第i个云存储服务器的内存使用占比,Ti表示第i个云存储服务器接入区块链网络的总计时,Ri表示第i个云存储服务器的平均响应时间,k1表示与CPU主频性能Ci对应的权重,k2表示与空闲磁盘占比Di对应的权重,k3表示与内存使用占比Mi对应的权重,k4表示与总计时Ti对应的权重,k5表示与平均响应时间Ri对应的权重。
[0037] 在一些具体实例中,采用统计函数token=Sum(wallet)统计得到应用代币拥有量,采用共识函数StockServers=Vote(Si,token,DPOS)投票选举出投票节点,其中,DPOS为委托权益证明协议,如此可以通过结合委托权益证明协议和一致性哈希策略实现文件记录权的分派,以完成共识协定。
[0038] 作为可选的实施方式,一致性哈希策略包括负载因子计算公式、随机函数和总值计算公式。
[0039] 步骤112具体包括:获取节点哈希值;基于节点哈希值确定在所投票节点所属一致性哈希域上的任一云存储服务器;针对任一云存储服务器收集负载参数;基于负载因子计算公式对负载参数进行计算,得到负载因子;将负载因子和性能贡献值组合为综合因子,综合因子用于表征对应所云存储服务器的一致性哈希性能;应用随机函数生成随机数;从综合因子中分解出负载因子和所述性能贡献值;基于总值计算公式对随机数、负载因子和性能贡献值进行求和,得到总值;基于总值将与节点哈希值对应的云存储服务器确定为记录权节点。
[0040] 投票节点能够将哈希环平均分割为不同的一致性哈希域,并沿着哈希环的顺时针方向统计在各个一致性哈希域上的所有云存储服务器的负载情况,获得云存储服务器集合,并收集各个云存储服务器的负载参数。
[0041] 在一些具体实例中,与投票节点对应的节点哈希值表示为:skey=ServerHashk(1 ,server),在投票节点所属一致性哈希域上的任一云存储服务器表示为:T=GetCircleServer(skey,Len(StockServers)),其中,ServerHash()表示统一哈希函数,GetCircleServer()表示环获取函数,Len(StockServers)为用于统计投票节点个数的长度函数,实现引入具有平衡性、单调性、分散性和负载均衡等特征的一致性哈希算法。
[0042] 在一些具体实例中,负载因子计算公式表示为:
[0043]
[0044] 其中,Pi表示第i个负载参数,ai表示与第i个负载参数对应的权重,负载参数包括节点请求占比P1、记录权占比P2和节点命中率P3。
[0045] 在一些具体实例中,综合因子表示为:Oi=(Si,Wi),随机数表示为:random=Random(0,1),总值计算公式表示为:crbi=Si×random+Wi×(1‑random),其中,crbi表示总值,随机数保证了构造排序的随机性。
[0046] 在一些具体实例中,记录权节点表示为:suc_server=max(crbi),采用队列加入函数write_node.append(suc_server)将记录权节点加入记录节点队列。
[0047] 作为可选的实施方式,记录权节点基于密文文件构建完整区块,具体包括:应用分块函数对密文文件进行分块,得到多个文件块;应用预设整合条件将所有文件块整合为默克尔树,基于默克尔树构建具有完整性的默克尔哈希树;将默克尔哈希树存入区块结构,得到完整区块。
[0048] 在一些具体实例中,分块函数表示为:2m,多个文件块以数组的方式表示为C=(b1,m mb2,...,b2m),其中,C表示密文文件,b2m表示第2个文件块,2中的m是由哈希函数处理要求所决定的。
[0049] 在一些具体实例中,采用预设整合条件依序将2m个文件块整合在默克尔树(Merkle‑Tree)中,预设整合条件可以是所有文件块在密文文件中的位置顺序,采用哈希函数hi=H(mi||1)对每个文件块进行哈希,再采用前述哈希函数对默克尔树中的每相邻两个哈希节点进行哈希,得到默克尔哈希树(Merkle‑Hash‑Tree)。
[0050] 在一些具体实例中,如图2所示为区块结构,区块结构包括文件头和文件体,区块头包括版本号、父区块头哈希值、Merkle根、时间戳、校验码、区块类型、加密级别、访问控制矩阵和其他信息,区块体包括默克尔树。
[0051] 版本号,主要用于各个云存储网络节点识别当前使用的协议版本、数据结构和区块生成算法等,以及根据更新版本号升级和迭代行区块链网络。
[0052] 父区块头哈希值,主要用于存储文件块构成的根节点,以防篡改及完整性校验文件。
[0053] 时间戳,主要用于区块的确认,防止区块链网络中的恶意篡改,各个云存储网络节点只接收一定时间范围的区块。
[0054] 校验码,主要用于简单校验区块头,可以CRC校验码对区块头进行计算,生成校验码,确保简单校验区块头。
[0055] 区块类型,主要用于扩展区块且支持存储不同的区块体,除了默克尔树,还可以基于不同密码学工具整合文件,提供安全保障。
[0056] 加密级别,主要用于标识当前区块所使用的加密等级,针对具有不同安全需求的数据提供不同级别的安全加密服务。
[0057] 访问控制矩阵,主要用于记录不同用户和节点对当前区块可执行的操作权限,从而进一步提升区块链网络的整体访问的安全性。
[0058] 其他信息,主要用于未来对区块链的升级,作保留字段使用。
[0059] 默克尔树是包含各个文件块的完全二叉树所构成的森林,在默克尔树中,任何一个非叶子结点都存储有其子节点哈希后的逻辑或运算的结果值,对于其叶子结点,直接存储完整文件块,采用SHA256函数计算完整文件块的哈希值,构成完整的哈希树结构,将所有文件块组织在一起,构成一个完整文件。
[0060] 基于默克尔树的特性,只要任何一个子节点的文件块内容发生了变化,那么该子节点的双亲及祖先节点都会累计发生变化,直到区块头所存储的Merkle根,很容易发现和定位发生变化的文件块。
[0061] 作为可选的实施方式,非记录权节点验证完整区块是否可信,具体包括:从完整区块中查找出第一哈希值;采用哈希算法对完整区块中的文件体进行计算,得到第二哈希值;基于第一哈希值与第二哈希值验证文件体的可信性。
[0062] 在一些具体实例中,若第一哈希值与第二哈希值匹配,确定存储在文件体中的文件块具有完整性和合法性,否则确定存储在文件体中的文件块不具有完整性和合法性,如此实现检验文件体的可信性。
[0063] 实施例二
[0064] 如图3所示,本发明实施例的另一种基于区块链的可信云存储方法,该方法包括:
[0065] 步骤310、请求节点将用于唯一标识待加密文件的文件标识信息发送至区块链网络;
[0066] 步骤320、任一云存储服务器从区块链网络接收文件标识信息,且基于文件标识信息去重检验是否存在待加密文件,若否,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器中不存在待加密文件的第一状态消息,若是,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器已存在待加密文件的第二状态信息;
[0067] 步骤330、当请求节点从区块链网络接收到第一状态信息时,请求节点基于收敛加密模型对待加密文件进行加密,得到密文文件,且将密文文件上传给接入区块链网络的缓存节点;或者,当请求节点从区块链网络接收到第二状态信息时,请求节点停止加密待加密文件;
[0068] 步骤340、接入区块链网络的至少两个云存储服务器共识协定出记录权节点和非记录权节点;
[0069] 步骤350、记录权节点从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络;
[0070] 步骤360、非记录权节点从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链。
[0071] 在一些具体实例中,文件标识信息包括文件标识符,文件标识符IDf表示为:IDf=SHA1(F),其中,SHA1()表示安全散列函数,f表示待加密文件F的标识。
[0072] 在一些具体实例中,通过判断文件标识信息在文件账本中是否具有唯一性来去重检验待加密文件,例如:“if IDf is unique........else”可以判断文件标识信息在文件账本中是否具有唯一性;若文件标识信息在文件账本中具有唯一性,表示服务器中不存在待加密文件,若文件标识信息在文件账本中具有非唯一性,表示服务器中存在待加密文件。
[0073] 在一些具体实例中,当接收到第二状态信息时,停止从上传文件标识信息到加密待加密文件的过程,开始记录将用户元信息记录在区块账本中,用户元信息包括用户标识和时间等。
[0074] 作为可选的实施方式,请求节点将密文文件上传给接入区块链网络的缓存节点,具体包括:基于用户元信息和待加密文件生成请求数据包;采用第一安全哈希函数对请求数据包和安全参数进行计算,得到请求哈希值;采用第二安全哈希函数对请求数据包进行计算,得到云存储服务器的IP地址;将用户元信息、待加密文件和IP地址共同上传给缓存节点。
[0075] 在一些具体实例中,请求数据包request表示为:request=Format(Cf,META),请k求哈希值rkey表示为:rkey=RequestHash(1 ,request),IP地址serverIP表示为:
serverIP=RequestServerHash(request),其中,Format()表示数据包构建函数,Cf表示密k
文文件,META表示用户元信息,RequestHash()表示第一安全哈希函数,1 表示安全参数,RequestServerHash()表示第二安全哈希函数。
[0076] 在一些具体实例中,采用上传函数UploadFile(Cf,META,serverIP)上传用户元信息META、待加密文件Cf和IP地址serverIP,采用记录函数RecordUserInfo(META)记录用户元信息。
[0077] 作为可选的实施方式,收敛加密模型包括密钥加密函数和文件加密函数,请求节点采用收敛加密模型对待加密文件进行加密,得到密文文件,具体包括:应用密钥加密函数对待加密文件进行加密,得到文件密钥;应用文件加密函数对待加密文件和文件密钥进行加密,得到密文文件。
[0078] 在一些具体实例中,文件密钥kf表示为:kf=KeyGen(1k,F),密文文件Cf表示为:Cf=Encrypt(kf,F),其中,KeyGen()表示密钥加密函数,Encrypt()表示文件加密函数,如此通过收敛加密模型(CE)实现强加密文件,同时可以保留文件的可去重性。
[0079] 实施例三
[0080] 如图4所示,本发明实施例的另一种基于区块链的可信云存储方法,该方法包括:
[0081] 步骤410、接入区块链网络的至少两个云存储服务器共识协定出记录权节点和非记录权节点;
[0082] 步骤420、记录权节点从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络;
[0083] 步骤430、非记录权节点从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链;
[0084] 步骤440、请求节点基于请求哈希值确定任一所述云存储服务器在哈希环上的IP地址,基于IP地址将文件访问请求发送至区块链网络;
[0085] 步骤450、记录权节点当从区块链网络接收到文件访问请求时通过区块链网络向非记录权节点发送网络请求;
[0086] 步骤460、当非记录权节点从区块链网络接收到文件访问请求时,非记录权节点通过区块链网络向请求节点反馈与区块链对应的文件账本;或者,当非记录权节点从区块链网络接收到网络请求时,非记录权节点对文件账本进行简单访问身份验证,且在验证通过时通过区块链网络向请求节点反馈文件账本。
[0087] 区块链具备防篡改、防泄漏、透明和可追溯的特点,请求节点不再需要存储完整性校验标签,降低了请求节点的计算量,非记录权节点只需要通过简单访问身份验证(SAA)即可实现快速、简单地对文件账本进行完整性校验,保证了区块链网络中存在一定冗余备份和文件的实时响应性。
[0088] 实施例四
[0089] 如图5所示,本发明实施例的另一种基于区块链的可信云存储方法,该方法包括:
[0090] 步骤510、请求节点将用于唯一标识待加密文件的文件标识信息发送至区块链网络;
[0091] 步骤520、任一云存储服务器从区块链网络接收文件标识信息,且基于文件标识信息去重检验是否存在待加密文件,若否,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器中不存在待加密文件的第一状态消息,若是,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器已存在待加密文件的第二状态信息;
[0092] 步骤530、当请求节点从区块链网络接收到第一状态信息时,请求节点基于收敛加密模型对待加密文件进行加密,得到密文文件,且将密文文件上传给接入区块链网络的缓存节点;或者,当请求节点从区块链网络接收到第二状态信息时,请求节点停止加密待加密文件;
[0093] 步骤540、接入区块链网络的至少两个云存储服务器共识协定出记录权节点和非记录权节点;
[0094] 步骤550、记录权节点从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络;
[0095] 步骤560、非记录权节点从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链;
[0096] 步骤570、请求节点基于请求哈希值确定任一云存储服务器在哈希环上的IP地址,基于IP地址将文件访问请求发送至区块链网络;
[0097] 步骤580、当记录权节点从区块链网络接收到文件访问请求时,记录权节点通过区块链网络向非记录权节点发送网络请求;
[0098] 步骤590、当非记录权节点从区块链网络接收到文件访问请求时,非记录权节点通过区块链网络向请求节点反馈与区块链对应的文件账本;或者,当非记录权节点从区块链网络接收到网络请求时,非记录权节点对文件账本进行简单访问身份验证,且在验证通过时通过区块链网络向请求节点反馈文件账本。
[0099] 实施例五
[0100] 如图6所示,本发明实施例的一种基于区块链的可信云存储系统,包括:接入区块链网络的至少两个云存储服务器,用于共识协定出记录权节点和非记录权节点;记录权节点,用于从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络;非记录权节点,用于从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链。
[0101] 任一云存储服务器,具体用于采用性能贡献计算公式对性能向量和权重向量进行计算,得到性能贡献值,且统计应用代币拥有量,以及基于性能贡献值、应用代币拥有量和委托权益证明协议选举出至少一个投票节点。
[0102] 至少一个投票节点,用于基于一致性哈希策略从至少两个云存储服务器中选择出记录权节点,且将不同于记录权节点的云存储服务器确定为非记录权节点。
[0103] 性能贡献计算公式具体为:
[0104] Si=k1×Ci+k2×Di+Mi×k3+Ti×k4+Ri×k5
[0105] 其中,Si表示第i个云存储服务器的性能贡献值,Ci表示第i个云存储服务器在设定时段内的CPU主频性能,Di表示第i个云存储服务器的空闲磁盘占比,Mi表示第i个云存储服务器的内存使用占比,Ti表示第i个云存储服务器接入区块链网络的总计时,Ri表示第i个云存储服务器的平均响应时间,k1表示与CPU主频性能Ci对应的权重,k2表示与空闲磁盘占比Di对应的权重,k3表示与内存使用占比Mi对应的权重,k4表示与总计时Ti对应的权重,k5表示与平均响应时间Ri对应的权重。
[0106] 至少一个投票节点,具体用于获取节点哈希值;基于节点哈希值确定在投票节点所属一致性哈希域上的任一云存储服务器;针对任一云存储服务器收集负载参数;基于负载因子计算公式对负载参数进行计算,得到负载因子;将负载因子和性能贡献值组合为综合因子;应用随机函数生成随机数;从综合因子中分解出负载因子和性能贡献值;基于总值计算公式对随机数、负载因子和性能贡献值进行求和,得到总值;基于总值将与节点哈希值对应的云存储服务器确定为记录权节点。
[0107] 记录权节点,具体用于应用分块函数对密文文件进行分块,得到多个文件块;应用预设整合条件将所有文件块整合为默克尔树,基于默克尔树构建具有完整性的默克尔哈希树;将默克尔哈希树存入区块结构,得到完整区块。
[0108] 非记录权节点,具体用于从完整区块中查找出第一哈希值;采用哈希算法对完整区块中的文件体进行计算,得到第二哈希值;基于第一哈希值与第二哈希值验证文件体的可信性。
[0109] 在一些具体实例中,如图6所示,在一致性哈希环的初始化过程,云存储服务器将自身的IP地址和安全系数调用统一哈希函数ServerHash(),将自身映射到一致性哈希环n上的一致性哈希域上,一致性哈希环的大小可以为2 ,以等待接收来自用户所持有的请求节点发送的文件访问请求,并且请求节点调用统一接口和第一安全哈希函数RequestHash(),统一接口封装请求,第一安全哈希函数将请求节点映射到云服务节点所属的一致性哈希域上。
[0110] 实施例六
[0111] 如图7所示,本发明实施例的另一种基于区块链的可信云存储系统,包括:请求节点、缓存节点和至少两个云存储服务器。
[0112] 请求节点,用于将用于唯一标识待加密文件的文件标识信息发送至区块链网络;
[0113] 任一云存储服务器,用于从区块链网络接收文件标识信息,且基于文件标识信息去重检验是否存在待加密文件,若否,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器中不存在待加密文件的第一状态消息,若是,则通过区块链网络向请求节点反馈用于指示对应的云存储服务器已存在待加密文件的第二状态信息。
[0114] 请求节点,还用于当从区块链网络接收到第一状态信息时,基于收敛加密模型对待加密文件进行加密,得到密文文件,且将密文文件上传给接入区块链网络的缓存节点;或者,当从区块链网络接收到第二状态信息时,停止加密待加密文件。
[0115] 接入区块链网络的至少两个云存储服务器,具体用于共识协定出记录权节点和非记录权节点。
[0116] 记录权节点,具体用于从区块链网络接收密文文件,且基于密文文件构建完整区块,以及将完整区块发布至区块链网络。
[0117] 非记录权节点,具体用于从区块链网络接收完整区块,且验证完整区块是否可信,若是,则将完整区块加入区块链,若否,则停止将完整区块加入区块链。
[0118] 请求节点,还用于基于请求哈希值确定任一云存储服务器在哈希环上的IP地址,基于IP地址将文件访问请求发送至区块链网络。
[0119] 记录权节点,还用于当从区块链网络接收到文件访问请求时,通过区块链网络向非记录权节点发送网络请求。
[0120] 非记录权节点,还用于当从区块链网络接收到文件访问请求时,通过区块链网络向请求节点反馈与区块链对应的文件账本;或者,当从区块链网络接收到网络请求时,对文件账本进行简单访问身份验证,且在验证通过时通过区块链网络向请求节点反馈文件账本。
[0121] 在一些具体实例中,请求节点可以是第一客户端,缓存节点可以是距离第一客户端最近的第二客户端,哈希环包括一致性哈希环,如图7所示,在一致性哈希环上包括云存储服务器s1、s2、s3和s4,以及请求节点r1、r2、r3和r4,缓存节点未在一致性哈希环上(图7中未示出)。
[0122] 读者应理解,在本说明书的描述中,参考术语“方面”、“作为可选的实施方式”或“一些具体实例”等的描述意指结合该实施例或示例描述的具体特征、步骤或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、步骤或者特点可以在任一或多个具体实例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同具体实例或示例以及不同实施例或示例的特征进行结合或/和组合。
[0123] 尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。