1.一种基于区块链的数据完整性快速检验方法,其特征在于,包括:根据系统公开参数生成客户端节点私钥和服务器节点私钥;客户端将文件m传输给服务器;客户端计算文件m的客户端第一哈希值h,服务器计算文件m的服务器第一哈希值h';客户端和服务器根据各自的私钥分别对自己计算的哈希值进行签名,并将签名的哈希值上传到区块链中;区块链根据两个哈希值判断文件m是否完整;若不完整,则检验终止;若完整,采用佩德森Pederson验证存储在客户端的数据和传输给服务器的数据是否一致,若数据一致则表示存储在服务器上的数据完整,若不一致,则表示存储在服务器上的数据不完整;
客户端和服务器根据各自的私钥分别对哈希值进行签名的过程包括:采用椭圆曲线数字签名算法ECDSA对哈希值进行签名;具体包括:步骤1:在区间[1,n]中选择一个随机整数k;
步骤2:计算椭圆曲线上的一个点(x1,y1)=kG;则取r≡x1 mod n,若r=0,则重新选择随机数k;
步骤3:计算s=k^‑1·(h(m)+dr)mod n;
步骤4:若s=0,则重新选择随机数k;否则(r,s)为哈希值的签名;
其中,G表示在椭圆曲线上选取的一个拥有素数阶n的点,(x1,y1)表示椭圆曲线上随机的点,x1表示随机点的横坐标,y1表示随机点的纵坐标,n表示阶数,mod n表示对n求余运算,k^‑1表示k的逆元,h(m)表示表示文件m的哈希值,m表示存储的文件,d表示私钥,r表示签名的前部分,s表示签名的后部分;
采用佩德森Pederson验证存储在客户端的数据和传输给服务器的数据是否一致包括:
客户端随机从客户端本地列表中选择一个第一随机值ri以及ri对应的客户端第i个哈希值hi做Pederson承诺;根据Pederson承诺公式、第一随机值ri以及对应的客户端第i个哈希值hi计算出承诺值Ci,并将承诺值Ci和选择的第一随机值ri上传到区块链中;客户端向服务器发出挑战,即将选择的第一随机值ri发送给服务器;服务器接收到ri,用存储在本地的文件m与ri合并,将合并后的文件做哈希运算,得到服务器第i个哈希值hi′,将hi′返回给客户端和上传至区块链;客户端接收到服务器第i个哈希值hi′,打开客户端的Pederson承诺,得到第二随机值ri′,验证上传到区块链上的第一随机值ri与打开Pederson承诺后的第二随机值ri′是否一致,若不一致,则存储的数据不完整,若一致,则验证服务器返回的服务器第i个哈希值hi′和客户端第i个哈希值hi是否一样,若不一样,则服务器中的数据不完整,若一样,服务器中的数据完整;
客户端本地列表生成过程包括:客户端随机选择n个随机值并依次和文件m合并,得到n个文件;将n个合并后的文件依次作哈希运算,得到n个哈希值hn;将n个哈希值h存储在本地;将n个随机值与每个随机值对应的哈希值hn建立成表并存储在客户端本地;
根据Pederson承诺公式计算出承诺值的公式为:
C(x,r)=g^x·h^r
其中,C(x,r)表示承诺值,x为Pederson承诺公式的输入参数,表示随机选取的哈希值;
r为Pederson承诺公式的输入参数,表示随机选取的哈希值对应的随机值;g表示第一乘法循环的群的生成单元,h表示第二乘法循环的群的生成单元;
验证返回的哈希值hi′与客户端打开承诺后的哈希值hi是否一致时,验证过程在区块链上进行。
2.根据权利要求1所述的一种基于区块链的数据完整性快速检验方法,其特征在于,所述系统公开参数包括:params={p,G,g,h,f,H},其中,p表示素数,G表示阶为素数p的乘法循环群,g表示乘法循环群第一生成元,h表示乘法循环群第二生成单元,f表示随机数函数,H表示哈希函数。
3.根据权利要求2所述的一种基于区块链的数据完整性快速检验方法,其特征在于,所述根据系统公开参数生成客户端节点私钥和服务器节点私钥的过程包括:客户端节点和服务器节点分别调用随机函数f,客户端节点和服务器节点分别得到一个随机数,将得到的随机数作为各自节点的私钥;
随机函数f的表达式为:
其中,K表示系统安全参数,n表示随机数的空间大小,l表示随机数的位数。
4.根据权利要求1所述的一种基于区块链的数据完整性快速检验方法,其特征在于,所述区块链根据两个哈希值判断文件m是否完整包括:客户端将计算得到的客户端第一哈希值h和文件m存储在客户端本地;服务器将服务器第一哈希值h'和文件m一同存储在服务器本地;将用户端的签名和服务器的签名分别上传至区块链中;区块链中的任意节点对这两个签名进行验证,并判断两个签名中的哈希值是否一样,若不一样,则终止数据完整性校验,若一样,则进行数据检验过程。
5.根据权利要求4所述的一种基于区块链的数据完整性快速检验方法,其特征在于,哈希函数的表达式为:根据哈希函数表达式计算出文件m的哈希值h。