本技术涉及信息安全,尤其涉及一种消息签名方法、装置、设备及可读存储介质。
背景技术:
1、随着区块链技术的兴起,其对金融、智能制造、供应链、物流等领域带来了深入的影响,并驱动新一轮技术变革和应用变革。出于安全性与私密性的考虑用户在区块链网络中提交交易时,需采用签名算法对交易内容进行签名。椭圆曲线数字签名算法作为一种常见的签名算法,也是目前主流区块链中使用到的签名算法。
2、椭圆曲线数字签名算法中有一个步骤涉及到选取一个随机数。目前常用的方式是通过prng(pseudo random number generator,伪随机数生成器)直接生成一个随机数,该随机数本身具有较高的随机性和秘密性以保证安全性。
3、虽然椭圆曲线数字签名算法本身的安全性非常高,但由于该随机数终究是由prng通过特定方式生成的伪随机数,因此依旧存在prng生成伪随机数的特定方式而导致随机数出现相关性的情况。随机数相关这种情况出现的可能性虽然很低,但由于其在区块链网络中大量高频使用的情况,其安全风险不可小觑。此时,随机数相关这种情况出现将可能导致签名者的私钥被泄露,从而产生数据的安全风险。
技术实现思路
1、本技术的主要目的在于提供一种消息签名方法,旨在解决现有方法中椭圆曲线数字签名算法的随机数出现相关的情况,导致私钥泄露造成数据的安全风险的技术问题。
2、为实现上述目的,第一方面,本技术提供一种消息签名方法,所述消息签名方法包括:
3、获取待签名消息、伪随机数和所述待签名消息的私钥;
4、根据所述待签名消息、所述伪随机数和所述私钥,生成对应的第一随机数;
5、根据所述第一随机数和预设椭圆曲线对所述待签名消息进行签名,生成所述待签名消息的签名信息。
6、根据第一方面,所述根据所述待签名消息、所述伪随机数和所述私钥,生成对应的第一随机数的步骤,包括:
7、将所述待签名消息、所述伪随机数和所述私钥按照预设拼接规则进行拼接,生成对应的字节序列;
8、对所述字节序列做哈希运算,获得所述字节序列对应的第一整数值,并将所述第一整数值作为第一随机数。
9、根据第一方面,或者以上第一方面的任意一种实现方式,所述根据所述第一随机数和预设椭圆曲线对所述待签名消息进行签名,生成所述待签名消息的签名信息的步骤,包括:
10、根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
11、基于所述预设基点的阶次对所述第一解点坐标的横坐标做取余处理得到第一签名值;
12、对所述待签名消息做哈希运算得到第一哈希值,并根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值;
13、将所述第一签名值和所述第二签名值构成所述待签名消息的签名信息。
14、根据第一方面,或者以上第一方面的任意一种实现方式,所述根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值的步骤,包括:
15、对所述第一哈希值按照预设固定长度进行截取,获得第二整数值;
16、基于预设运算规则对所述第一随机数、所述第二整数值、所述私钥和所述第一签名值进行运算得到第二签名值。
17、根据第一方面,或者以上第一方面的任意一种实现方式,在所述基于所述预设基点的阶次对所述第一解点坐标的横坐标做取余处理得到第一签名值的步骤之后,包括:
18、判断所述第一签名值是否为零;
19、若所述第一签名值为零,则对所述第一随机数做哈希运算得到新的第一随机数,并执行步骤:根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
20、若所述第一签名值不为零,则执行步骤:对所述待签名消息做哈希运算得到第一哈希值,并根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值。
21、根据第一方面,或者以上第一方面的任意一种实现方式,在所述对所述待签名消息做哈希运算得到第一哈希值,并根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值的步骤之后,包括:
22、判断所述第二签名值是否为零;
23、若所述第二签名值为零,则对所述第一随机数做哈希运算得到新的第一随机数,并执行步骤:根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
24、若所述第二签名值不为零,则执行步骤:将所述第一签名值和所述第二签名值构成所述待签名消息的签名信息。
25、根据第一方面,或者以上第一方面的任意一种实现方式,在所述根据所述第一随机数和预设椭圆曲线对所述待签名消息进行签名,生成所述待签名消息的签名信息的步骤之后,所述消息签名方法还包括:
26、获取第二整数值和所述私钥对应的公钥,其中所述第二整数值为对所述待签名消息做哈希运算得到的第一哈希值按照预设固定长度进行截取确定的整数值;
27、将所述第二整数值、所述公钥和所述签名信息发送至验证端,以使所述验证端对所述签名信息进行验证。
28、第二方面,本技术提供了一种消息签名装置,所述消息签名装置包括:
29、获取模块,用于获取待签名消息、伪随机数和所述待签名消息的私钥;
30、生成模块,用于根据所述待签名消息、所述伪随机数和所述私钥,生成对应的第一随机数;
31、签名模块,用于根据所述第一随机数和预设椭圆曲线对所述待签名消息进行签名,生成所述待签名消息的签名信息。
32、根据第二方面,生成模块,还用于:
33、将所述待签名消息、所述伪随机数和所述私钥按照预设拼接规则进行拼接,生成对应的字节序列;
34、对所述字节序列做哈希运算,获得所述字节序列对应的第一整数值,并将所述第一整数值作为第一随机数。
35、根据第二方面,或者以上第二方面的任意一种实现方式,签名模块,还用于:
36、根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
37、基于所述预设基点的阶次对所述第一解点坐标的横坐标做取余处理得到第一签名值;
38、对所述待签名消息做哈希运算得到第一哈希值,并根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值;
39、将所述第一签名值和所述第二签名值构成所述待签名消息的签名信息。
40、根据第二方面,或者以上第二方面的任意一种实现方式,签名模块,还用于:
41、对所述第一哈希值按照预设固定长度进行截取,获得第二整数值;
42、基于预设运算规则对所述第一随机数、所述第二整数值、所述私钥和所述第一签名值进行运算得到第二签名值。
43、根据第二方面,或者以上第二方面的任意一种实现方式,签名模块,还用于:
44、判断所述第一签名值是否为零;
45、若所述第一签名值为零,则对所述第一随机数做哈希运算得到新的第一随机数,并执行步骤:根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
46、若所述第一签名值不为零,则执行步骤:对所述待签名消息做哈希运算得到第一哈希值,并根据所述第一哈希值、所述第一随机数、所述私钥和所述第一签名值,确定对应的第二签名值。
47、根据第二方面,或者以上第二方面的任意一种实现方式,签名模块,还用于:
48、判断所述第二签名值是否为零;
49、若所述第二签名值为零,则对所述第一随机数做哈希运算得到新的第一随机数,并执行步骤:根据所述第一随机数和所述预设椭圆曲线上预设基点,确定第一解点坐标;
50、若所述第二签名值不为零,则执行步骤:将所述第一签名值和所述第二签名值构成所述待签名消息的签名信息。
51、根据第二方面,或者以上第二方面的任意一种实现方式,消息签名装置还包括发送模块;发送模块,用于:
52、获取第二整数值和所述私钥对应的公钥,其中所述第二整数值为对所述待签名消息做哈希运算得到的第一哈希值按照预设固定长度进行截取确定的整数值;
53、将所述第二整数值、所述公钥和所述签名信息发送至验证端,以使所述验证端对所述签名信息进行验证。
54、第三方面,本技术提供了一种消息签名设备,所述消息签名设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上所述的消息签名方法的步骤。
55、第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
56、第四方面,本技术提供了一种计算机可读存储介质,所述计算机可读存储介质中存储了计算机程序,当所述计算机程序被处理器执行时,使得处理器执行如上述第一方面或第一方面的可能的实现方式中任一项所述的消息签名方法。
57、第四方面以及第四方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
58、第五方面,本技术实施例提供了一种计算机程序,该计算机程序包括用于执行第一方面以及第一方面的任意可能的实现方式中的消息签名方法的操作指令。
59、第五方面以及第五方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第五方面以及第五方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
60、本技术提供了一种消息签名方法、装置、设备及可读存储介质,通过获取待签名消息、伪随机数和所述待签名消息的私钥;根据所述待签名消息、所述伪随机数和所述私钥,生成对应的第一随机数;根据所述第一随机数和预设椭圆曲线对所述待签名消息进行签名,生成所述待签名消息的签名信息。本技术通过待签名消息、伪随机数和所述待签名消息的私钥,生成第一随机数作为随机数用于椭圆曲线签名算法对待签名消息进行签名,由于私钥以及待签名消息本身也具备一定的私密性和随机性,从而通过伪随机数结合了待签名消息和私钥生成随机数的方式减轻了常规椭圆曲线签名算法选用的随机数之间的相关性,降低了数据的安全风险。