本发明涉及区块链技术领域,具体涉及一种基于终端签名的数据记链方法。
背景技术:
用户通常因存储空间不足等原因而把数据存储在云服务器,而当用户将数据哈希记录在区块链上时,需要先使用私钥对数据签名。一种方法是在服务器端签名,但这样会将私钥泄露给服务器;另一种方法是在终端签名,而目前终端签名方案都需要终端和服务器的交互完成哈希值等数据的传输,如何降低通信开销以及如何把哈希值记链也是需要解决的问题。
技术实现要素:
针对现有技术中的上述不足,本发明提供的一种基于终端签名的数据记链方法解决了web端二维码设计,终端签名方案设计以及区块链、服务器和用户终端三方交互协议设计的问题。
为了达到上述发明目的,本发明采用的技术方案为:一种基于终端签名的数据记链方法,其特征在于,包括以下步骤:
s1、在web界面选择数据d,通过web服务器向区块链发送预记链请求;
所述预记链请求包括请求标识prerequest和用户标识uid;
s2、在收到预记链请求后区块链生成时间戳t1以及两个随机数r和rk,存储(uid,r,rk,t1),并把随机数r和rk返回给web服务器;
s3、通过web服务器计算对称加密密钥key和数据哈希值h,使用对称加密密钥key加密数据h||r||rk获得密文c1,并把密文c1编码到二维码中,在web界面向用户展示二维码;
s4、使用终端app扫描二维码,解码得到密文c1,计算数据解密密钥key1,使用解密密钥key1解密数据h||r||rk,通过终端app使用用户私钥sku对h||r签名并生成签名sig和时间戳t2,把随机数rk当作对称加密密钥加密时间戳t2、哈希值h和随机数r获得密文c2,向区块链发送记链请求;
所述记链请求包括请求标识request、应用标识appid、用户标识uid、随机数r、签名sig和密文c2;
s5、在区块链收到记链请求后,查询(uid,r)得到随机数rk和时间戳t1,使用随机数rk解密密文c2,使用用户公钥pku验证签名sig,若未查询到(uid,r)或签名sig验证失败或|t1-t2|≥thres时,thres为阈值,则记链失败,若查询到(uid,r)且签名sig验证通过且|t1-t2|<thres时,则开始记链得到记链结果res,区块链向web服务器发送的记链包含应用标识appid、用户标识uid和记链结果res;
s6、根据区块链向web服务器发送的记链在web界面上向用户展示相应的记链结果res。
进一步地:所述步骤s3中对称加密密钥key的计算公式为:
key=hash(skw·pku)
上式中,hash为哈希算法,skw为web服务器私钥,pku为用户公钥;
所述数据哈希值h的计算公式为:
h=hash(d)。
进一步地:所述步骤s3中密文c1的计算公式为:
c1=enckey(h||r||rk)
上式中,enc为对称加密算法。
进一步地:所述步骤s4中解密密钥key1的计算公式为:
key1=hash(sku·pkw)
上式中,hash为哈希算法,sku为用户私钥,pkw为web服务器公钥;
所述解密数据h||r||rk的计算公式为:
h||r||rk=deckey1(c1)
上式中,dec为对称解密算法。
进一步地:所述步骤s4中签名sig的计算公式为:
上式中,sign为符号函数,sku为用户私钥。
进一步地:所述步骤s4中密文c2的计算公式为:
上式中,enc为对称加密算法。
进一步地:所述步骤s5中使用随机数rk解密密文c2的计算公式为:
上式中,dec为对称解密算法。
本发明的有益效果为:
(1)在本发明整个数据记链流程中,用户只需在web界面和终端app上进行简单的点击或扫码操作,降低了通信开销,提升用户体验。
(2)本发明中三方交互的数据经过加密处理且记链请求包含用户的签名,确保记链请求的不可伪造性;使用时间戳认证记链请求的时效性;数据始终存储在web端,没有数据泄露风险,私钥始终存储在终端,保证用户私钥安全。
附图说明
图1为本发明流程图;
图2为本发明中三方交互协议的示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
本发明针对户数据记链过程需要用户对数据的哈希值签名,而数据存储在服务器,用户私钥由用户保管的场景,设计了一种在终端对数据签名,并且由终端直接发起记链请求的方法。
用户和web服务器各拥有一对密钥,用户密钥:(sku,pku),web服务器密钥:(skw,pkw)。
如图1所示,一种基于终端签名的数据记链方法,包括以下步骤:
s1、在web界面选择数据d,通过web服务器向区块链发送预记链请求;
所述预记链请求包括请求标识prerequest和用户标识uid;
s2、在收到预记链请求后区块链生成时间戳t1以及两个随机数r和rk,存储(uid,r,rk,t1),并把随机数r和rk返回给web服务器;
s3、通过web服务器计算对称加密密钥key和数据哈希值h,使用对称加密密钥key加密数据h||r||rk获得密文c1,并把密文c1编码到二维码中,在web界面向用户展示二维码;
对称加密密钥key的计算公式为:
key=hash(skw·pku)
上式中,hash为哈希算法,skw为web服务器私钥,pku为用户公钥;
所述数据哈希值h的计算公式为:
h=hash(d)。
密文c1的计算公式为:
c1=enckey(h||r||rk)
上式中,enc为对称加密算法。
s4、使用终端app扫描二维码,解码得到密文c1,计算数据解密密钥key1,使用解密密钥key1解密数据h||r||rk,通过终端app使用用户私钥sku对h||r签名并生成签名sig和时间戳t2,把随机数rk当作对称加密密钥加密时间戳t2、哈希值h和随机数r获得密文c2,向区块链发送记链请求;
所述记链请求包括请求标识request、应用标识appid、用户标识uid、随机数r、签名sig和密文c2;
解密密钥key1的计算公式为:
key1=hash(sku·pkw)
上式中,hash为哈希算法,sku为用户私钥,pkw为web服务器公钥;
所述解密数据h||r||rk的计算公式为:
h||r||rk=deckey1(c1)
上式中,dec为对称解密算法。
签名sig的计算公式为:
上式中,sign为符号函数,sku为用户私钥。
密文c2的计算公式为:
上式中,enc为对称加密算法。
s5、在区块链收到记链请求后,查询(uid,r)得到随机数rk和时间戳t1,使用随机数rk解密密文c2,使用用户公钥pku验证签名sig,若未查询到(uid,r)或签名sig验证失败或|t1-t2|≥thres时,thres为阈值,则记链失败,若查询到(uid,r)且签名sig验证通过且|t1-t2|<thres时,则开始记链得到记链结果res,区块链向web服务器发送的记链包含应用标识appid、用户标识uid和记链结果res;
使用随机数rk解密密文c2的计算公式为:
上式中,dec为对称解密算法。
s6、根据区块链向web服务器发送的记链在web界面上向用户展示相应的记链结果res。
本发明包含三个实体:区块链、web服务器和用户。三方交互协议的示意图如图2所示,具体包括:
(1)二维码生成。用户在web界面选择数据,web服务器向区块链发送预记链请求,区块链向web服务器返回随机数,用于之后验证记链请求,web服务器生成二维码,二维码包含需要用户签名的数据和记链所需的验证数据;
(2)用户扫码记链。用户使用终端app扫描二维码,对数据签名,向区块链发送记链请求。
(3)展示记链结果。区块链验证记链请求的合法性,向web服务器返回记链结果,web服务器在web界面中向用户展示记链结果。