基于国密算法的区块链处理方法、装置及系统与流程

文档序号:18702275发布日期:2019-09-17 23:05阅读:851来源:国知局
本发明涉及区块链领域,尤指一种基于国密算法的区块链处理方法、装置及系统。
背景技术
::区块链是一种分布式账本技术,具有去中心化、不可篡改、可溯源等特性。通常,区块链系统中的节点在发起交易请求时都会使用私钥对交易数据进行签名并使用对称加密密钥进行加密。其他节点在接收到交易请求后会对交易数据进行验签和解密。而区块链生成的区块中则会包含世界状态的哈希值和前一区块的哈希值。一系列密码算法的应用保证了区块链系统中数据传输的安全性以及账本数据的不可篡改性、不可伪造性。然而,目前区块链系统一般使用3des、sha-1、rsa、ecdsa等国际通用的密码算法体系及相关标准,在具体密码算法的选用上缺乏灵活性。国密算法是一系列的国产密码算法,主要包括sm2、sm3、sm4等。其中sm2属于非对称密码算法,sm3属于哈希算法,sm4属于对称密码算法。在区块链中应用我国自主设计的密码算法,可以为交易的安全性,真实性,可靠性和完整性提供更好的保障。另外,区块链系统在交易过程中需要大量使用密码算法来保证交易的安全性,会对系统性能造成较大影响。所以,区块链系统中密码算法的运算速度有待提高。技术实现要素:为了解决现有区块链中存在的不支持国产密码算法及运算速度慢等问题,本发明实施例提供一种基于国密算法的区块链处理方法,所述方法包括:接收交易请求,以及认证节点签发的登记证书及交易证书;将所述交易请求组装成交易;根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点。本发明实施例还提供一种基于国密算法的区块链处理方法,所述方法包括:接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。本发明实施例还提供一种基于国密算法的区块链处理方法,所述方法包括:根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明实施例还提供一种基于国密算法的区块链处理装置,所述装置包括:第一接收模块,用于接收交易请求,以及认证节点签发的登记证书及交易证书;交易组装模块,用于将所述交易请求组装成交易;交易加密模块,用于根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;交易签名模块,用于将签名及加密后的交易发送至验证节点。本发明实施例还提供一种基于国密算法的区块链处理装置,所述装置包括:第二接收模块,用于接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;交易解密模块,用于根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;交易验签模块,用于利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;共识执行模块,用于对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。本发明实施例还提供一种基于国密算法的区块链处理装置,所述装置包括:证书生成模块,用于根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;身份验证模块,用于验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;证书签名模块,用于利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;证书签发模块,用于向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明实施例还提供一种基于国密算法的区块链处理系统,所述系统包括:应用服务器、验证节点、非验证节点及认证节点;所述非验证节点接收所述应用服务器发送的交易请求,以及认证节点签发的登记证书及交易证书,将所述交易请求组装成交易,根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点;所述验证节点接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书,根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密,利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签,对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果;所述认证节点根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对,验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书,利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名,向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收交易请求,以及认证节点签发的登记证书及交易证书;将所述交易请求组装成交易;根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收交易请求,以及认证节点签发的登记证书及交易证书;将所述交易请求组装成交易;根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明在区块链系统中应用国密算法,为区块链在密码学方面的使用提供了更多的选择,提高了区块链系统的安全性、可靠性。还实现了针对使用国密算法的区块链系统,通过引入加速算法,在保证区块链系统安全性、可靠性的同时提高了系统效率,对促进区块链技术在安全方面的发展具有很大意义。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中一种基于国密算法的区块链中对应于非验证节点处理方法的流程图;图2为本发明实施例中一种基于国密算法的区块链中对应于验证节点处理方法的流程图;图3为本发明实施例中一种基于国密算法的区块链中对应于认证节点处理方法的流程图;图4为本发明实施例中一种基于国密算法的区块链中对应于非验证节点的处理装置的结构示意图;图5为本发明实施例中一种基于国密算法的区块链中对应于验证节点的处理装置的结构示意图;图6为本发明实施例中一种基于国密算法的区块链中对应于认证节点的处理装置的结构示意图;图7为本发明实施例中一种基于国密算法的区块链处理系统的结构示意图;图8为本发明实施例中的区块链验证节点的结构示意图;图9为本发明实施例中的区块链非验证节点的结构示意图;图10为本发明实施例中的区块链认证节点的结构示意图;图11为本发明实施例中的区块链加密模块的结构示意图;图12为本发明实施例中的区块链国密算法软加密模块的结构示意图;图13为本发明实施例中的区块链加速算法模块的结构示意图;图14为本发明一具体实施例中区块链软件加密方式的国密算法的数据处理方法的流程图;图15为本发明一具体实施例中区块链硬件加密方式的国密算法的数据处理方法的流程图。具体实施方式本发明实施例提供一种基于国密算法的区块链处理方法、装置及系统。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。如图1所示为本发明实施例中一种基于国密算法的区块链中对应于非验证节点处理方法的流程图,图中所示方法包括:步骤s11,接收交易请求,以及认证节点签发的登记证书及交易证书;步骤s12,将所述交易请求组装成交易;步骤s13,根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;步骤s14,将签名及加密后的交易发送至验证节点。在本实施例中,执行上述步骤的执行主体可以为区块链中的非验证节点。非验证节点在启动并加入区块链网络时,会向认证节点发送请求,获取认证节点签发的登记证书。区块链非验证节点可以接收应用层服务器所发送的交易请求,并对交易进行封装,组成交易。然后根据国际算法及加速算法,使用交易证书所对应的私钥对交易数据进行签名,并把经过签名的交易附上该交易证书,再使用交换密钥对该交易进行加密,最后把经过加密的交易转发给区块链中的验证节点。其中,加速算法包括蒙哥马利算法、费马小定律及布斯编码。作为本发明的一个实施例,所述根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易包括:利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;根据国密算法及所述交易证书中的私钥,利用所述基础参数对所述交易进行签名;根据国密算法,利用交换密钥对签名后的交易进行加密,得到所述签名及加密后的交易。在本实施例中,国密算法的sm2算法是一种椭圆曲线公钥密码算法,预先计算部分数值与椭圆曲线上的点的乘积并将其缓存起来,以便于后续运算使用。其中,使用预先计算的任意数与椭圆曲线基点的乘积,以及国密算法及所述交易证书中的私钥对所述交易进行签名,再利用交换密钥对签名后的交易进行加密。在本实施例中,在所述根据国密算法,利用交换密钥对签名后的交易进行加密,得到所述签名及加密后的交易之前还包括:根据所述国密算法及所述基础参数确定交换密钥。作为本发明的一个实施例,所述方法还包括:向所述认证节点发送第一身份信息,请求所述认证节点签发登记证书及交易证书。如图2所示为本发明实施例中一种基于国密算法的区块链中对应于验证节点处理方法的流程图,图中所示的方法包括:步骤s21,接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;步骤s22,根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;步骤s23,利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;步骤s24,对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。在本实施例中,执行上述步骤的执行主体可以为区块链中的验证节点。验证节点在启动并加入区块链网络时,会向认证节点发送请求,获取认证节点签发的登记证书。在接收区块链非验证节点转发交易后,广播至区块链网络中的其他验证节点。其他验证节点收到该交易后,根据国际算法及加速算法,使用交换密钥对交易进行解密,再使用附在交易里的交易证书的公钥,对交易进行验签。各验证节点采用拜占庭容错(pbft)算法对交易进行共识,达成共识的交易会被执行,而交易请求则会在缓存一定数量或经过一段时间后打包写入区块,进行持久化存储。其中,加速算法包括蒙哥马利算法、费马小定律及布斯编码。作为本发明的一个实施例,所述利用所述交易证书中的公钥,对所述签名及加密后的交易进行验签包括:利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;根据国密算法及所述交易证书中的公钥,利用所述基础参数对解密后的所述签名及加密后的交易进行验签。在本实施例中,与上一实施例类似的,国密算法的sm2算法是一种椭圆曲线公钥密码算法,预先计算部分数值与椭圆曲线上的点的乘积并将其缓存起来,以便于后续运算使用。其中,使用预先计算的任意数与椭圆曲线基点的乘积,以及国密算法及所述交易证书中的公钥对所述交易进行验签。作为本发明的一个实施例,所述方法还包括:向所述认证节点发送第二身份信息,请求所述认证节点签发登记证书及交易证书。如图3所示为本发明实施例中一种基于国密算法的区块链中对应于认证节点处理方法的流程图,图中所示方法包括:步骤s31,根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;步骤s32,验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;步骤s33,利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;步骤s34,向所述非验证节点及验证节点发送签名后的登记证书及交易证书。在本实施例中,执行上述步骤的执行主体可以为区块链中的认证节点。区块链认证节点主要为区块链验证节点和区块链非验证节点提供身份认证和签发证书服务。区块链认证节点启动时,根据国密算法及加速算法,会生成若干非对称加密密钥和自签名的证书,包括登记根证书和交易根证书,以及登记根证书和交易根证书分别对应的公私钥对。这些根证书将会为区块链中的验证节点和非验证节点签发下一级证书,其中登记根证书用于签发区块链节点的登记证书,交易根证书用于签发区块链节点的交易证书。其中,加速算法包括蒙哥马利算法、费马小定律及布斯编码。作为本发明的一个实施例,所述根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对包括:利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;根据国密算法及所述基础参数,生成登记根证书、交易根证书及对应的公私钥对。在本实施例中,与上述实施例类似的,国密算法的sm2算法是一种椭圆曲线公钥密码算法,预先计算部分数值与椭圆曲线上的点的乘积并将其缓存起来,以便于后续运算使用。其中,使用预先计算的任意数与椭圆曲线基点的乘积及国密算法,生成登记根证书、交易根证书及对应的公私钥对。本发明在区块链系统中应用国密算法,为区块链在密码学方面的使用提供了更多的选择,提高了区块链系统的安全性、可靠性。还实现了针对使用国密算法的区块链系统,通过引入加速算法,在保证区块链系统安全性、可靠性的同时提高了系统效率,对促进区块链技术在安全方面的发展具有很大意义。如图4所示为本发明实施例中一种基于国密算法的区块链中对应于非验证节点的处理装置的结构示意图,图中装置包括:第一接收模块101,用于接收交易请求,以及认证节点签发的登记证书及交易证书;交易组装模块102,用于将所述交易请求组装成交易;交易加密模块103,用于根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;交易签名模块104,用于将签名及加密后的交易发送至验证节点。作为本发明的一个实施例,所述交易加密模块包括:预计算单元,用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;签名单元,根据国密算法及所述交易证书中的私钥,利用所述基础参数对所述交易进行签名;加密单元,用于根据国密算法,利用交换密钥对签名后的交易进行加密,得到所述签名及加密后的交易。在本实施例中,所述加密单元包括交换密钥子单元,用于根据所述国密算法及所述基础参数确定交换密钥。作为本发明的一个实施例,所述装置还包括第一请求模块,用于向所述认证节点发送第一身份信息,请求所述认证节点签发登记证书及交易证书。基于与上述一种基于国密算法的区块链中对应于非验证节点的处理方法相同的申请构思,本发明还提供了上述一种基于国密算法的区块链中对应于非验证节点的处理装置。由于该一种基于国密算法的区块链中对应于非验证节点的处理装置解决问题的原理与一种基于国密算法的区块链中对应于非验证节点的处理方法相似,因此该一种基于国密算法的区块链中对应于非验证节点的处理装置的实施可以参见一种基于国密算法的区块链中对应于非验证节点的处理方法的实施,重复之处不再赘述。如图5所示为本发明实施例中一种基于国密算法的区块链中对应于验证节点的处理装置的结构示意图,图中所示装置包括:第二接收模块201,用于接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;交易解密模块202,用于根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;交易验签模块203,用于利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;共识执行模块204,用于对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。作为本发明的一个实施例,所述交易验签模块包括:预计算单元,用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;验签单元,用于根据国密算法及所述交易证书中的公钥,利用所述基础参数对解密后的所述签名及加密后的交易进行验签。作为本发明的一个实施例,所述装置还包括还包括第二请求模块,用于向所述认证节点发送第二身份信息,请求所述认证节点签发登记证书及交易证书。基于与上述一种基于国密算法的区块链中对应于验证节点的处理方法相同的申请构思,本发明还提供了上述一种基于国密算法的区块链中对应于验证节点的处理装置。由于该一种基于国密算法的区块链中对应于验证节点的处理装置解决问题的原理与一种基于国密算法的区块链中对应于验证节点的处理方法相似,因此该一种基于国密算法的区块链中对应于验证节点的处理装置的实施可以参见一种基于国密算法的区块链中对应于验证节点的处理方法的实施,重复之处不再赘述。如图6所示为本发明实施例中一种基于国密算法的区块链中对应于认证节点的处理装置的结构示意图,图中所示装置包括:证书生成模块301,用于根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;身份验证模块302,用于验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;证书签名模块303,用于利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;证书签发模块304,用于向所述非验证节点及验证节点发送签名后的登记证书及交易证书。作为本发明的一个实施例,所述证书生成模块包括:预计算单元,用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;证书生成单元,用于根据国密算法及所述基础参数,生成登记根证书、交易根证书及对应的公私钥对。基于与上述一种基于国密算法的区块链中对应于认证节点的处理方法相同的申请构思,本发明还提供了上述一种基于国密算法的区块链中对应于认证节点的处理装置。由于该一种基于国密算法的区块链中对应于认证节点的处理装置解决问题的原理与一种基于国密算法的区块链中对应于认证节点的处理方法相似,因此该一种基于国密算法的区块链中对应于认证节点的处理装置的实施可以参见一种基于国密算法的区块链中对应于认证节点的处理方法的实施,重复之处不再赘述。本发明在区块链系统中应用国密算法,为区块链在密码学方面的使用提供了更多的选择,提高了区块链系统的安全性、可靠性。还实现了针对使用国密算法的区块链系统,通过引入加速算法,在保证区块链系统安全性、可靠性的同时提高了系统效率,对促进区块链技术在安全方面的发展具有很大意义。如图7所示,本发明实施例还提供一种基于国密算法的区块链处理系统,所述系统包括:应用服务器1、验证节点2、非验证节点3及认证节点4;所述非验证节点接收所述应用服务器发送的交易请求,以及认证节点签发的登记证书及交易证书,将所述交易请求组装成交易,根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点;所述验证节点接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书,根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密,利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签,对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果;所述认证节点根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对,验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书,利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名,向所述非验证节点及验证节点发送签名后的登记证书及交易证书。作为本发明的一个实施例,所述非验证节点还用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积;根据国密算法及所述交易证书中的私钥,利用所述基础参数对所述交易进行签名;根据国密算法,利用交换密钥对签名后的交易进行加密,得到所述签名及加密后的交易。在本实施例中,所述非验证节点还用于根据所述国密算法及所述基础参数确定交换密钥。作为本发明的一个实施例,所述非验证节点还用于向所述认证节点发送第一身份信息,请求所述认证节点签发登记证书及交易证书。作为本发明的一个实施例,所述验证节点还用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积,根据国密算法及所述交易证书中的公钥,利用所述基础参数对解密后的所述签名及加密后的交易进行验签。作为本发明的一个实施例,所述验证节点还用于向所述认证节点发送第二身份信息,请求所述认证节点签发登记证书及交易证书。作为本发明的一个实施例,所述认证节点还用于利用国密算法及加密算法预计算基础参数,其中,所述基础参数包括任意数与椭圆曲线基点的乘积,根据国密算法及所述基础参数,生成登记根证书、交易根证书及对应的公私钥对。在本发明一具体实施例中,如图7所示的基于国密算法的区块链处理系统的结构示意图所示,该系统包括前端的应用层服务器1、验证节点2、非验证节点3、认证节点4。其中,应用层服务器1与区块链验证节点2和非验证节点3中的一台或若干台连接并进行双向的数据传输。区块链验证节点2与非验证节点3每个节点之间均相互连接并进行双向的数据传输。区块链认证节点4与每个验证节点2和非验证节点3均保持连接并进行双向的数据传输。应用层服务器1可以是一台服务器或多台服务器组成的服务器集群,主要负责处理区块链以外的业务逻辑。通常,区块链验证节点2和非验证节点3会向应用层提供服务接口。应用层根据具体的业务逻辑构造请求报文,向区块链发送请求调用区块链所提供的服务接口,等待区块链系统执行交易并返回交易结果后,继续执行后续的业务逻辑。区块链验证节点2可以是一台服务器或多台服务器组成的服务器集群。验证节点2在启动并加入区块链网络时则会向认证节点4发送请求,获取认证节点4签发的登记证书。为了保证交易的匿名性和安全性,验证节点2在发送交易请求时会使用认证节点4批量签发的交易证书对交易进行签名,并使用由密钥交换算法生成的对称加密密钥对交易数据进行加密。通常,一个区块链网络中存在3f+1(f为可容忍的拜占庭节点个数)个验证节点2,每一个验证节点2都负责接收应用层服务器1发送(或者是区块链非验证节点3转发)的交易请求,在对交易请求进行签名和加密(签名和加密的方式与区块链非验证节点3一致)后,广播至区块链网络中的其他验证节点。其他验证节点收到该交易后,会使用附在交易里的交易证书的公钥,对交易进行验签,再使用对称密钥对交易进行解密。各验证节点采用拜占庭容错(pbft)算法对交易进行共识,达成共识的交易会被执行,而交易请求则会在缓存一定数量或经过一段时间后打包写入区块,进行持久化存储。每个区块均会保存前一区块的哈希值和世界状态的哈希值。区块链验证节点2的结构示意图见图8。区块链非验证节点3可以是一台服务器或多台服务器组成的服务器集群。非验证节点3在启动并加入区块链网络时则会向认证节点4发送请求,获取认证节点4签发的登记证书。为了保证交易的匿名性和安全性,非验证节点3在发送交易请求时会使用认证节点4批量签发的交易证书对交易进行签名,并使用由密钥交换算法生成的对称加密密钥对交易数据进行加密。区块链非验证节点3可以接收应用层服务器1所发送的交易请求,并对交易进行封装,然后根据配置选用软件加密方式的国际算法、软件加密方式的国密算法和硬件加密方式的国密算法中的一种,使用交易证书所对应的私钥对交易数据进行签名,并把经过签名的交易附上该交易证书,再使用对称密钥对该交易进行加密,最后把经过加密的交易转发给区块链验证节点2。区块链非验证节点3本身并不参与共识,也不会执行交易或保存区块数据。区块链非验证节点3的结构示意图见图9。区块链认证节点4可以是一台服务器或多台相互备份的服务器。区块链认证节点4主要为区块链验证节点2和区块链非验证节点3提供身份认证和签发证书服务。区块链认证节点4启动时,会生成若干非对称加密密钥和自签名的证书,包括登记根证书和交易根证书。这些根证书将会为区块链中的验证节点2和非验证节点3签发下一级证书,其中登记根证书用于签发区块链节点的登记证书,交易根证书用于签发区块链节点的交易证书。可以说,区块链认证节点4是整个区块链网络的信任锚。区块链认证节点4的结构示意图见图10。如图8一种区块链验证节点的结构示意图所示,区块链验证节点2包括通信模块21,加密模块22,共识模块23,存储模块24。通信模块21主要负责与其他节点交互,发送和接收各种类型的消息,包括交易请求、共识消息、交易结果等。加密模块22属于技术支撑模块,主要负责交易的加密、解密、签名和验签,各类证书和密钥的申请和管理,计算哈希值等功能。需要说明的是,区块链验证节点2、区块链非验证节点3、区块链认证节点4所使用的加密模块在实现上完全相同。加密模块22的结构示意图见图11。共识模块23采用拜占庭容错(pbft)算法对交易进行共识,并根据共识的结果确定交易的执行顺序。在交易顺序确定后,对应的交易将在智能合约中被调用,智能合约可在执行过程中访问存储模块24。存储模块24主要负责将验证节点生成的区块和交易相关的业务数据持久化存储到数据库中。如图9一种区块链非验证节点的结构示意图所示,区块链非验证节点3包括通信模块31,加密模块32。通信模块31主要负责与其他节点交互,发送和接收各种类型的消息,包括交易请求、交易结果等。加密模块32属于技术支撑模块,主要负责交易的加密和签名,各类证书和密钥的申请和管理,计算哈希值等功能。需要说明的是,区块链验证节点2、区块链非验证节点3、区块链认证节点4所使用的加密模块在实现上完全相同。加密模块32的结构图见图11。如图10一种区块链认证节点的结构示意图所示,区块链认证节点4包括通信模块41,加密模块42,存储模块43,登记证书管理模块44,交易证书管理模块45。其中通信模块41主要负责与其他节点交互,发送和接收各种类型的消息,包括登记证书申请,交易证书申请等。加密模块42主要负责交易的加密、解密、签名、验签和哈希等功能。区块链验证节点2、区块链非验证节点3、区块链认证节点4所使用的加密模块在实现上完全相同。存储模块43主要负责将登记的用户信息、生成的密钥和证书持久化存储到本地的数据库中。登记证书管理模块44主要负责为区块链验证节点2和非验证节点3签发登记证书。区块链认证节点4启动时,登记证书管理模块44会生成一对非对称加密密钥和一个自签名的证书作为登记根证书。当区块链验证节点2或区块链非验证节点3启动并加入区块链网络时,会向认证节点4上送用户名、密码等信息。认证节点4在验证区块链节点的身份后,会利用登记根证书所对应的私钥为新生成的登记证书签名,然后再将证书发送给区块链验证节点2或非验证节点3。登记证书主要用于在共识过程中认证用户的身份。交易证书管理模块45主要负责为区块链验证节点2和非验证节点3签发交易证书。区块链认证节点4启动时,交易证书管理模块45会生成一对非对称加密密钥和一个自签名的证书作为交易根证书。当区块链验证节点2或非验证节点3需要为交易签名时,会先从本地查找是否有未使用的交易证书,若没有,则向认证节点4发送请求。认证节点接收到请求后,按照配置的数量批量生成一批交易证书,并用根证书对应的私钥对这些证书进行签名,然后发送给区块链验证节点2或非验证节点3。交易证书主要用于保证交易的匿名性,所有的交易证书仅使用一次。如图11一种区块链加密模块的结构示意图所示,加密模块22包括配置管理模块221,国密算法软加密模块222,通信模块223,国密算法硬件加密机集群224、国际算法软加密模块225。加密模块22可以提供三种不同的加密方式,包括软件加密方式的国际算法、软件加密方式的国密算法和硬件加密方式的国密算法。配置管理模块221用于设置加密模块的一些关键参数。可以通过参数设置区块链网络所使用的密码算法和加密方式。可选的配置有三种,分别为:软件加密方式的国际算法、软件加密方式的国密算法和硬件加密方式的国密算法。国密算法软加密模块222提供了一个软件实现的国密算法接口。为了提高国密算法接口的效率,还引入了一种加速算法对计算过程进行优化。软加密方式的国密算法可以作为一个模块直接嵌入区块链系统,因此相较于硬加密方式的国密算法在部署上更为灵活,但是,使用软加密方式的国密算法也会消耗一定的系统资源。国密算法软加密模块222的结构图见图12。通信模块223负责与国密算法硬件加密机224建立socket连接并对连接池进行管理。国密算法硬件加密机224可以是一台硬件加密机或一个硬件加密机集群。硬件加密机224提供硬件实现的sm2、sm3、sm4算法接口,可以通过与国密算法硬件加密机224建立的socket连接发送指定格式的报文以调用sm2、sm3、sm4算法接口,并从返回的报文中解析出计算结果。国际算法软加密模块225提供了一个软件实现的国际算法接口。如图12一种区块链国密算法软加密模块的结构示意图所示,国密算法软加密模块222包括sm2模块2221,sm3模块2227,sm4模块2228,x509模块2229。而sm2模块2221又包括密钥生成模块2222,签名模块2223,验签模块2224,密钥交换模块2225,加速算法模块2226。其中,sm2模块2221实现了非对称加密的sm2算法。sm2算法是一种椭圆曲线公钥密码算法。sm2算法使用定义在素数域fp(p是大于3的素数)上的椭圆曲线,其方程如下:y2=x3+ax+b其中a,b∈fp且(4a3+27b2)modp≠0满足上述方程的点p=(xp,yp)和无穷远点o一起构成了椭圆曲线e(fp)。sm2算法所使用的椭圆曲线参数中,p为一个素数,是椭圆曲线上的点坐标的模,a和b为椭圆曲线方程的系数,n为椭圆曲线的阶,(xg,yg)是椭圆曲线基点g的坐标。详细参数如下:p=0xfffffffeffffffffffffffffffffffffffffffff00000000ffffffffffffffffa=p-3b=0x28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93n=0xfffffffeffffffffffffffffffffffff7203df6b21c6052b53bbf40939d54123xg=0x32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7yg=0xbc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0密钥生成模块2222主要用于生成椭圆曲线公私钥对,其计算过程如下:1、产生一个随机的整数d∈[1,n-2],n为椭圆曲线的阶;2、以g为椭圆曲线的基点,计算p=(xp,yp)=d·g;3、密钥对为(d,p),其中d为私钥,p为公钥。以上步骤为现有的sm2生成密钥的步骤,但是其中计算d·g如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。签名模块2223提供了椭圆曲线私钥签名的接口。设用户a的私钥为da,公钥为pa=da·g=(xa,ya),用户a具有长度为entlena比特标识ida,entlena是由整数entlena转换而成的两个字节,将椭圆曲线方程参数a、b、基点g的坐标xg和yg、公钥pa的坐标xa和ya转化为比特串并使用哈希算法计算哈希值za=h(entlena||ida||a||b||xg||yg||xa||ya),其中h为哈希方法,如果在配置管理模块221中设置的数字摘要方式是软加密方式的国密算法,则此哈希方法由sm3模块2227提供。对于消息m的数字签名的计算完整过程如下:1、计算e=h(za||m);2、生成随机整数k∈[1,n-1];3、计算椭圆曲线点(x1,y1)=k·g;4、计算r=(e+x1)modn,若r=0或r+k=n,则返回步骤2;5、计算s=((1+da)-1·(k-r·da))modn,若s=0则返回步骤2;6、消息m的签名即为(r,s)。以上步骤为现有的sm2签名的步骤,但是其中计算k·g和(1+da)-1如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。验签模块2224提供了椭圆曲线公钥验签的接口。设接收到的消息为m,数字签名为(r,s),公钥为pa,则验签的计算过程如下:1、检验r∈[1,n-1]是否成立,若不成立则验证不通过;2、检验s∈[1,n-1]是否成立,若不成立则验证不通过;3、计算e=h(za||m);4、计算t=(r+s)modn,若t=0,则验证不通过;5、计算椭圆曲线点(x1,y1)=s·g+t·pa;6、计算r=(e+x1)modn,检验r=r是否成立,若成立则验证通过,否则验证不通过。以上步骤为现有的sm2验签的步骤,但是其中计算s·g+t·pa如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。密钥交换模块2225实现了ecdh密钥交换算法。ecdh算法主要用于密钥协商。设有用户a和用户b,则ecdh算法计算过程如下:1、用户a随机生成私钥为da;2、用户b随机生成私钥为db;3、用户a计算公钥pa=(xa,ya)=da·g;4、用户b计算公钥pb=(xb,yb)=db·g;5、用户a将pa传递给用户b,用户b计算q=db·pa;6、用户b将pb传递给用户a,用户a计算q′=da·pb;7、因为q=db·pa=db·(da·g)=da·(db·g)=da·pb=q′,用户a和用户b可以用相同的q生成相同的对称加密密钥。其中,计算da·g、db·g、da·pb、db·pa如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。加速算法模块2226引入了加速算法,以提高椭圆曲线加法运算、倍点运算、多倍点运算和大数求逆的效率。加速算法模块2226的结构示意图见图13。sm3模块2227实现了sm3哈希算法。sm3算法能够对长度为l(l<264)bit的消息进行填充,使其长度为512的整数倍,然后对填充后的消息进行迭代压缩,生成长度为256bit的杂凑值。sm4模块2228实现了sm4分组密码算法。sm4算法采用32轮非平衡feistel迭代结构,其分组长度和密钥长度均为128bit。x509模块2229主要用于生成x509格式的数字证书,对证书格式进行转换,并实现了支持国密算法的证书池以校验证书的合法性。如图13为一种区块链加速算法模块的结构示意图所示,加速算法模块2226包括蒙哥马利算法模块22261,求逆模块22262,布斯编码模块22263,椭圆曲线加法运算模块22264,椭圆曲线倍点运算模块22265,坐标转换模块22266,预计算模块22267,椭圆曲线多倍点运算模块22268。sm2算法在生成密钥,签名,验签时,需要进行椭圆曲线多倍点运算,包括计算任意数字与椭圆曲线基点g的乘积和任意数字和椭圆曲线任意点的乘积,这些计算较为复杂,需要消耗大量的时间。为了提高计算效率,加速算法模块2226引入了预计算,预先将一部分计算结果缓存起来,在随后进行椭圆曲线多倍点运算时,设置一个滑动窗口,窗口大小为7bit或5bit,每次从乘数中取出固定长度的位数(8bit或6bit)进行布斯编码(boothencoding),根据布斯编码的结果从缓存中选取预计算的结果,滑动窗口依次累加这些预计算的结果即可求得任意数字与椭圆曲线上的点的乘积。同时,由于sm2算法所使用的椭圆曲线参数p和n均为素数,因此在计算大数求逆时,可以使用费马小定律以提高计算效率。蒙哥马利算法模块22261实现了蒙哥马利(montgomery)算法,用于计算在椭圆曲线参数n或者p的模下大数乘积的运算。设两个乘数为a和b,p为模,l为整数,2l>p,a和b经过蒙哥马利算法相乘的结果mm(a,b)满足如下关系:mm(a,b)=a×b×2-l(modp)sm2算法所使用的椭圆曲线参数n为256位的素数,取l=256,s=64,k=4,l=s×k,n<2l,k0=-n-1(mod2s),则以n为模的蒙哥马利乘法计算过程如下:input:0≤a,b<noutput:a×b×2-l(modn)1.t=a×bfori=1tokdo2.t1=t(mod2s)3.y=t1×k0(mod2s)4.t2=y×n5.t3=(t+t2)6.t=t3/2sendfor7.ift≥nthenx=t-nelsex=t8.returnxsm2算法所使用的椭圆曲线参数p为256位的素数,取l=256,s=64,k=4,l=s×k,p<2l,k0=-p-1(mod2s)=1,则以p为模的蒙哥马利乘法简化如下:input:0≤a,b<poutput:a×b×2-l(modp)1.t=a×bfori=1tokdo2.t1=t(mod2s)3.t2=t1×p4.t3=(t+t2)5.t=t3/2sendfor6.ift≥pthenx=t-pelsex=t7.returnx求逆模块22262用于对以椭圆曲线参数p或n为模的大数求逆。设p是素数,且gcd(a,p)=1,那么根据费马小定律有a(p-1)≡1(modp),进而可以得出a-1=a(p-2)(modp)。椭圆曲线参数p和n均为素数,因此可以使用费马小定律对大数求逆。求逆模块22262用于对大数求逆的过程中会调用蒙哥马利算法模块22261计算乘模和幂模。布斯编码模块22263主要用于在进行椭圆曲线多倍点运算时,对乘数的一部分进行布斯编码(boothencoding)。当计算任意整数与椭圆曲线基点g的乘积时,设置滑动窗口大小为7bit,每次取乘数中的8bit进行编码。设进行编码的8位二进制数为x7x6x5x4x3x2x1x0,则编码值如下:x=-26x7+25x6+24x5+23x4+22x3+2x2+x1+x0当计算任意整数与椭圆曲线上任意点的乘积时,设置滑动窗口大小为5bit,每次取6bit进行编码。进行编码的6位二进制数为x5x4x3x2x1x0,则编码值如下:x=-24x5+23x4+22x3+2x2+x1+x0椭圆曲线加法运算模块22264主要用于计算椭圆曲线上两个点的和,这一计算过程在射影坐标系上完成。设两个点在射影坐标系上的坐标分别为(x1,y1,z1)和(x2,y2,z2),point_at_infinity表示无穷远点,point_double(x1,y1,z1)表示椭圆曲线倍点运算(由椭圆曲线倍点运算22265实现),其计算过程在椭圆曲线参数p的模下完成,详细如下:pointadditioninput:(x1,y1,z1),(x2,y2,z2)if(u1==u2)thenif(s1!=s2)returnpoint_at_infinityelsereturnpoint_double(x1,y1,z1)abortendh=u2-u1;r=s2-s1x3=r2-h3-2u1h2y3=r(u1h2-x3)-s1h3z3=hz1z2output:(x3,y3,z3)椭圆曲线倍点运算模块22265用于计算椭圆曲线上任意点与2的乘积,这一计算过程在射影坐标系上完成。设点在射影坐标系上的坐标为(x,y,z),其计算过程在椭圆曲线参数p的模下完成,详细如下:pointdoublinginput:(x,y,z)s=4xy2;m=3x2+az4x′=m2-2sy′=m(s-x′)-8y4z′=2yzoutput:(x′,y′,z′)坐标转换模块22266用于完成直角坐标系和射影坐标系之间的坐标转换。设椭圆曲线上的点在直角坐标系下的坐标为(x,y),则对应的射影坐标系下的坐标为(x,y,z),有:x=xy=yz=1设椭圆曲线上的点在射影坐标系下的坐标为(x,y,z),若z=0,则该点为无穷远点,若z≠0,则对应的直角坐标系下的坐标为(x,y),有:x=x/z2y=y/z3预计算模块22267会计算部分数值与椭圆曲线上的点的乘积并将其缓存起来。对于计算任意数与椭圆曲线基点g的乘积的情况,会将预计算的结果保存在一个大小为37×64的二维数组中,此数组仅在系统启动时计算一次,此后就会缓存起来。该二维数组如下:table[i][j]=27i×((j+1)×g)其中0≤i≤36,0≤j≤63对于计算任意数与椭圆曲线上任意点的乘积的情况,会将1到16与椭圆曲线上的点的乘积保存在一个一维数组中,此数组仅在一次椭圆曲线乘法运算中有效,每次计算任意数与椭圆曲线上任意点的乘积的时都要重新计算。p表示椭圆曲线上任意点,该一维数组如下:table[j]=(j+1)×p其中0≤j≤15椭圆曲线多倍点运算模块22268用于计算任意数与椭圆曲线线上的点的乘积。设无符号二进制数k=kn-1···k1k0长度为n=7n-1(若不足7n-1则在前面补0直至长度变成7n-1,n为大于0的整数),k7n-1=0,k-1=0,则有如下:令ei=-26k7i+6+25k7i+5+24k7i+4+23k7i+3+22k7i+2+2k7i+1+k7i+k7i-1,则有如下:因此在计算任意数与椭圆曲线基点g的乘积时,设置滑动窗口为7bit,每次取乘数中的8bit进行编码(即计算ei),根据编码的结果在缓存的二维数组table[i][j]中选取部分积27i×((j+1)×g)(0≤i≤36,0≤j≤63)。如果需要选取为负数的部份积,而二维数组中物理存储的均为正数的部份积,根据椭圆曲线对取反运算的定义,此时只需要把选取的正数部份积的y坐标取反,例如需要选取-2g时只需要选取2g并把该点的y坐标取反得到(x2g,-y2g)即可。最后将这些部分积累加起来即可得到任意数与椭圆曲线基点g的乘积。设无符号二进制数t=tn-1···t1t0长度为n=5n-1(若不足5n-1则在前面补0直至长度变成5n-1,n为大于0的整数),t5n-1=0,t-1=0,则有如下:令ei=-24t5i+4+23t5i+3+22t5i+2+2t5i+1+t5i+t5i-1,p为椭圆曲线上任意点,则有如下:因此在计算任意数与椭圆曲线上任意点的乘积时,设置滑动窗口为5bit,每次取乘数中的6bit进行编码(即计算ei),根据编码的结果在缓存的一维数组table[j]中选取部分积(j+1)×p(0≤j≤15)。如果需要选取为负数的部份积,而一维数组中物理存储的均为正数的部份积,根据椭圆曲线对取反运算的定义,此时只需要把选取的正数部份积的y坐标取反,例如需要选取-2p时只需要选取2p并把该点的y坐标取反得到(x2p,-y2p)即可。最后将这些部分积分别与对应的25i进行多次椭圆曲线倍点运算,然后累加起来即可得到任意数与椭圆曲线上任意点的乘积。在本发明一具体实施例中,如图14一种区块链软件加密方式的国密算法的数据处理方法的流程图,步骤如下:步骤s101:验证节点2、非验证节点3、认证节点4分别的配置管理模块221,设置密码算法和加密方式,本例设置使用软件加密方式的国密算法。在确定加密方式后,配置管理模块221继续设置该加密方式下的相关参数,本方案详细讲解软件加密方式的国密算法,该加密方式为非对称加密的sm2算法。sm2算法是一种椭圆曲线公钥密码算法。sm2算法使用定义在素数域fp(p是大于3的素数)上的椭圆曲线,其方程如下:y2=x3+ax+b其中a,b∈fp且(4a3+27b2)modp≠0满足上述方程的点p=(xp,yp)和无穷远点o一起构成了椭圆曲线e(fp)。sm2算法所使用的椭圆曲线参数中,p为一个素数,是椭圆曲线上的点坐标的模,a和b为椭圆曲线方程的系数,n为椭圆曲线的阶,(xg,yg)是椭圆曲线基点g的坐标。详细参数如下:p=0xfffffffeffffffffffffffffffffffffffffffff00000000ffffffffffffffffa=p-3b=0x28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93n=0xfffffffeffffffffffffffffffffffff7203df6b21c6052b53bbf40939d54123xg=0x32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7yg=0xbc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0步骤s102:验证节点2、非验证节点3、认证节点4分别的预计算模块22267计算部分数值与椭圆曲线上的点的乘积并将其缓存起来。对于计算任意数与椭圆曲线基点g的乘积的情况,会将预计算的结果保存在一个大小为37×64的二维数组中,此数组仅在系统启动时计算一次,此后就会缓存起来。该二维数组如下:table[i][j]=27i×((j+1)×g)其中0≤i≤36,0≤j≤63任意数与椭圆曲线基点g的乘法运算是由椭圆曲线算法定义的加法和倍点运算组合而来,例如椭圆曲线上的点3g是由基点g经过一次倍点再与基点g进行加法得出(即3g=2×g+g)。在进行椭圆曲线加法和倍点运算前,需要先把直角坐标系下的点坐标,转换为射影坐标系下的点坐标,椭圆曲线的所有运算是基于射影坐标系上完成。坐标转换模块22266用于完成直角坐标系和射影坐标系之间的坐标转换。设椭圆曲线上的点在直角坐标系下的坐标为(x,y),则对应的射影坐标系下的坐标为(x,y,z),有:x=xy=yz=1之后由椭圆曲线加法和倍点运算组合得出任意数与椭圆曲线基点g的乘法运算的结果。椭圆曲线加法运算模块22264主要用于计算椭圆曲线上两个点的和,这一计算过程在射影坐标系上完成。设两个点在射影坐标系上的坐标分别为(x1,y1,z1)和(x2,y2,z2),point_at_infinity表示无穷远点,point_double(x1,y1,z1)表示椭圆曲线倍点运算(由椭圆曲线倍点运算22265实现),其计算过程在椭圆曲线参数p的模下完成,详细如下:pointadditioninput:(x1,y1,z1),(x2,y2,z2)if(u1==u2)thenif(s1!=s2)returnpoint_at_infinityelsereturnpoint_double(x1,y1,z1)abortendh=u2-u1;r=s2-s1x3=r2-h3-2u1h2y3=r(u1h2-x3)-s1h3z3=hz1z2output:(x3,y3,z3)椭圆曲线倍点运算模块22265用于计算椭圆曲线上任意点与2的乘积,这一计算过程在射影坐标系上完成。设点在射影坐标系上的坐标为(x,y,z),其计算过程在椭圆曲线参数p的模下完成,详细如下:pointdoublinginput:(x,y,z)s=4xy2;m=3x2+az4x′=m2-2sy′=m(s-x′)-8y4z′=2yzoutput:(x′,y′,z′)其中椭圆曲线加法和倍点运算步骤,为现有的公开的运算步骤,涉及大数在椭圆曲线参数p的模下的乘法运算,如果使用常规的做法需要大量的运算,为了提高运算效率使用蒙哥马利算法对该运算进行优化。蒙哥马利算法模块22261实现了蒙哥马利算法,用于计算在椭圆曲线参数p的模下大数乘积的运算。设两个乘数为a和b,p为模,l为整数,2l>p,a和b经过蒙哥马利算法相乘的结果mm(a,b)满足如下关系:mm(a,b)=a×b×2-l(modp)sm2算法所使用的椭圆曲线参数p为256位的素数,取l=256,s=64,k=4,l=s×k,p<2l,k0=-p-1(mod2s)=1,则以p为模的蒙哥马利乘法简化如下:input:0≤a,b<poutput:a×b×2-l(modp)1.t=a×bfori=1tokdo2.t1=t(mod2s)3.t2=t1×p4.t3=(t+t2)5.t=t3/2sendfor6.ift≥pthenx=t-pelsex=t7.returnx因为两个乘数经过蒙哥马利算法后得到的乘积被缩小了2l倍,所以在实际的使用中,两个乘数会预先扩大2l倍,再参与蒙哥马利算法运算,得到的乘积也同样是扩大了2l倍。因此,在整个对射影坐标的运算过程中,x、y、z实际上的值均处于被放大了2l倍的状态。至此,计算得出任意数与椭圆曲线基点g的乘积在射影坐标系上的坐标,在存储进数组table[i][j]前,需要还原为直角坐标。坐标转换模块22266用于完成直角坐标系和射影坐标系之间的坐标转换。设椭圆曲线上的点在射影坐标系下的坐标为(x,y,z),若z=0,则该点为无穷远点,若z≠0,则对应的直角坐标系下的坐标为(x,y),有:x=x/z2y=y/z3其中,计算1/z2和1/z3需要预先计算1/z,这涉及大数求逆的运算,交由求逆模块22262进行运算。求逆模块22262用于对以椭圆曲线参数p或n为模的大数求逆。设p是素数,且gcd(a,p)=1,那么根据费马小定律有a(p-1)≡1(modp),进而可以得出a-1=a(p-2)(modp)。椭圆曲线参数p和n均为素数,因此可以使用费马小定律对大数求逆。因此,计算1/z只需要计算z(p-2)(modp)即可,此处可以继续调用蒙哥马利算法,过程同上。然后,还原后的直角坐标(x,y),实际上仍然被放大了2l倍,只需要把x和y分别与1代入蒙哥马利算法,即达到了缩小2l倍的效果,即得到了真实的值。步骤s103:区块链认证节点4的登记证书管理模块44和交易证书管理模块45,分别生成自签名的登记根证书和交易根证书,及对应的公私钥对。密钥生成模块2222主要用于生成椭圆曲线公私钥对,其计算过程如下:1、产生一个随机的整数d∈[1,n-2],n为椭圆曲线的阶;2、以g为椭圆曲线的基点,计算p=(xp,yp)=d·g;3、密钥对为(d,p),其中d为私钥,p为公钥。以上步骤为现有的sm2生成密钥的步骤,但是其中计算d·g涉及任意数与椭圆曲线基点g的乘法运算,如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成,加速方法参考步骤s109。步骤s104:区块链验证节点2和区块链非验证节点3启动并加入区块链网络,通信模块21和通信模块31,向认证节点4上送用户名、密码等信息,请求认证节点4签发登记证书和交易证书。步骤s105:区块链认证节点4的登记证书管理模块44和交易证书管理模块45,分别为区块链验证节点2或区块链非验证节点3签发登记证书和交易证书。步骤s106:区块链验证节点2和区块链非验证节点3分别的加密模块22和加密模块32,把登记证书和交易证书存储并进行管理。步骤s107:应用层服务器1,向非验证节点3发送交易请求。步骤s108:区块链非验证节点3的通信模块31接收该请求,并组装成交易。步骤s109:区块链非验证节点3的加密模块32,会使用交易证书所对应的私钥,对交易进行签名。签名模块2223提供了椭圆曲线私钥签名的接口。设用户a的私钥为da,公钥为pa=da·g=(xa,ya),用户a具有长度为entlena比特标识ida,entlena是由整数entlena转换而成的两个字节,将椭圆曲线方程参数a、b、基点g的坐标xg和yg、公钥pa的坐标xa和ya转化为比特串并使用哈希算法计算哈希值za=h(entlena||ida||a||b||xg||yg||xa||ya),其中h为哈希方法,如果在配置管理模块221中设置的数字摘要方式是软加密方式的国密算法,则此哈希方法由sm3模块2227提供的sm3算法实现。对于消息m的数字签名的计算完整过程如下:1、计算e=h(za||m);2、生成随机整数k∈[1,n-1];3、计算椭圆曲线点(x1,y1)=k·g;4、计算r=(e+x1)modn,若r=0或r+k=n,则返回步骤2;5、计算s=((1+da)-1·(k-r·da))modn,若s=0则返回步骤2;6、消息m的签名即为(r,s)。以上步骤为现有的sm2签名的步骤,但是其中计算k·g和(1+da)-1如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。设无符号二进制数k=kn-1···k1k0长度为n=7n-1(若不足7n-1则在前面补0直至长度变成7n-1,n为大于0的整数),k7n-1=0,k-1=0,则有如下:令ei=-26k7i+6+25k7i+5+24k7i+4+23k7i+3+22k7i+2+2k7i+1+k7i+k7i-1,则有如下:因此在计算任意数与椭圆曲线基点g的乘积时,设置滑动窗口为7bit,每次取乘数中的8bit进行编码(即计算ei),根据编码的结果在缓存的二维数组table[i][j]中选取部分积27i×((j+1)×g)(0≤i≤36,0≤j≤63)。如果需要选取为负数的部份积,而二维数组中物理存储的均为正数的部份积,根据椭圆曲线对取反运算的定义,此时只需要把选取的正数部份积的y坐标取反,例如需要选取-2g时只需要选取2g并把该点的y坐标取反得到(x2g,-y2g)即可。最后将这些部分积累加起来即可得到任意数与椭圆曲线基点g的乘积。另外,计算(1+da)-1涉及以n为模的求逆运算,为了提高效率这一计算过程由加速算法模块2226提供的接口来完成。求逆模块22262根据费马小定律,得出:(1+da)-1=(1+da)(n-2)(modn)。因此,可以进一步利用在模n上的蒙哥马利算法解决此问题。sm2算法所使用的椭圆曲线参数n为256位的素数,取l=256,s=64,k=4,l=s×k,n<2l,k0=-n-1(mod2s),则以n为模的蒙哥马利乘法计算过程如下:input:0≤a,b<noutput:a×b×2-l(modn)1.t=a×bfori=1tokdo2.t1=t(mod2s)3.y=t1×k0(mod2s)4.t2=y×n5.t3=(t+t2)6.t=t3/2sendfor7.ift≥nthenx=t-nelsex=t8.returnx在对交易进行签名后,交易会被附上该签名所用的交易证书。步骤s110:区块链非验证节点3的加密模块32,会与作为交易接收方的验证节点2,根据ecdh密钥交换算法生成交换密钥。密钥交换模块2225实现了ecdh密钥交换算法。ecdh算法主要用于密钥协商。设有用户a和用户b,则ecdh算法计算过程如下:1、用户a随机生成私钥为da;2、用户b随机生成私钥为db;3、用户a计算公钥pa=(xa,ya)=da·g;4、用户b计算公钥pb=(xb,yb)=db·g;5、用户a将pa传递给用户b,用户b计算q=db·pa;6、用户b将pb传递给用户a,用户a计算q′=da·pb;7、因为q=db·pa=db·(da·g)=da·(db·g)=da·pb=q′,用户a和用户b可以用相同的q生成相同的对称加密密钥。其中,计算da·g、db·g涉及任意数与椭圆曲线基点g的乘法运算,如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成,加速方法参考步骤s109。另外,计算da·pb、db·pa涉及任意数与椭圆曲线上任意点的乘法算法,如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成,加速方法参数步骤s112。该生成交换密钥的步骤,只会在双方节点在第一次交易发送往来时,才需要执行并存储执行的结果(即交换密钥),后续发送交易和接收交易时,均使用存储下来的交换密钥直接加密或解密。然后,加密模块32使用得到的交换密钥,对交易进行加密,加密方法由sm4模块2228提供的sm4算法实现。经过签名和加密后的交易,会被发送给验证节点2。步骤s111:验证节点2收到交易后,会使用加密模块22,对交易进行解密。解密所用的密钥,为交易发送双方节点协商生成的交换密钥。交换密钥的生成过程参考步骤s110。然后,加密模块22使用得到的交换密钥,对交易进行解密,如果在配置管理模块221中设置的加密方式是软加密方式的国密算法,则此解密方法由sm4模块2228提供的sm4算法实现。步骤s112:验证节点2的加密模块22,对交易进行验签,验签所使用的公钥为该交易里所附上的交易证书里的公钥。验签模块2224提供了椭圆曲线公钥验签的接口。设接收到的消息为m,数字签名为(r,s),公钥为pa,则验签的计算过程如下:1、检验r∈[1,n-1]是否成立,若不成立则验证不通过;2、检验s∈[1,n-1]是否成立,若不成立则验证不通过;3、计算e=h(za||m);4、计算t=(r+s)modn,若t=0,则验证不通过;5、计算椭圆曲线点(x1,y1)=s·g+t·pa;6、计算r=(e+x1)modn,检验r=r是否成立,若成立则验证通过,否则验证不通过。以上步骤为现有的sm2验签的步骤,但是其中计算s·g+t·pa如果按照常规的做法需要大量的运算,为了提高效率这一计算过程由引入了加速算法的加速算法模块2226提供的接口来完成。加速方法参考步骤s109。另外,计算t·pa涉及任意数与椭圆曲线上任意点的乘法算法,为了提高效率这一计算过程由加速算法模块2226提供的接口来完成。对于计算任意数与椭圆曲线上任意点的乘积的情况,会将1到16与椭圆曲线上的该点的乘积保存在一个一维数组中,此数组仅在一次椭圆曲线乘法运算中有效,每次计算任意数与椭圆曲线上任意点的乘积的时都要重新计算。p表示椭圆曲线上任意点,该一维数组如下:table[j]=(j+1)×p其中0≤j≤15设无符号二进制数t=tn-1···t1t0长度为n=5n-1(若不足5n-1则在前面补0直至长度变成5n-1,n为大于0的整数),t5n-1=0,t-1=0,则有如下:令ei=-24t5i+4+23t5i+3+22t5i+2+2t5i+1+t5i+t5i-1,p为椭圆曲线上任意点,则有如下:因此在计算任意数与椭圆曲线上任意点的乘积时,设置滑动窗口为5bit,每次取乘数中的6bit进行编码(即计算ei),根据编码的结果在缓存的一维数组table[j]中选取部分积(j+1)×p(0≤j≤15)。如果需要选取为负数的部份积,而一维数组中物理存储的均为正数的部份积,根据椭圆曲线对取反运算的定义,此时只需要把选取的正数部份积的y坐标取反,例如需要选取-2p时只需要选取2p并把该点的y坐标取反得到(x2p,-y2p)即可。最后将这些部分积分别与对应的25i进行多次椭圆曲线倍点运算,然后累加起来即可得到任意数与椭圆曲线上任意点的乘积。步骤s113:验证节点2的共识模块23,对交易进行共识并执行该交易。步骤s114:验证节点2的存储模块24,对交易的执行结果进行存储。为对本发明实施前后做性能对比测试,参见表1,在cpu为8核2294mhz,内存为4g的测试机上对国密算法接口接口进行测试。其中,gmssl是一种开源的c语言国密算法接口。生成密钥一项统计的是sm2算法生成密钥1000次消耗的时间,签名一项统计的是sm2算法对长度为32字节的随机序列签名1000次消耗的时间,验签一项统计的是sm2算法验签1000次消耗的时间,哈希一项统计的是sm3算法对长度为1000字节的随机序列计算哈希值1000次消耗的时间,加密一项统计的是sm4算法对长度为16字节的随机序列加密1000次消耗的时间,解密一项统计的是sm4算法对长度为16字节的序列解密1000次消耗的时间。表1由表中的数据可以看出,本发明的sm2、sm3算法接口较gmssl和开源的go语言的sm2、sm3算法接口在性能上均有一定提升,而本发明的sm4算法接口较gmssl的sm4算法接口性能基本相当,较开源的go语言sm4算法接口在性能上有一定提升。在本发明另一具体实施例中,如图15一种区块链硬件加密方式的国密算法的数据处理方法的流程图,步骤如下:步骤s201:验证节点2、非验证节点3、认证节点4分别的配置管理模块221,设置密码算法和加密方式,本例设置使用硬件加密方式的国密算法。步骤s202:验证节点2、非验证节点3、认证节点4分别按照配置的ip地址和端口,通过通信模块223,与国密算法硬件加密机224建立连接。步骤s203:区块链认证节点4的登记证书管理模块44和交易证书管理模块45,分别生成自签名的登记根证书和交易根证书,及对应的公私钥对。其中生成公私钥对及签名,通过通信模块223,调用国密算法硬件加密机224完成,处理过程与传统调用硬件加密机方法一致,不在本例赘述。步骤s204:区块链验证节点2和区块链非验证节点3启动并加入区块链网络,通信模块21和通信模块31,向认证节点4上送用户名、密码等信息,请求认证节点4签发登记证书和交易证书。步骤s205:区块链认证节点4的登记证书管理模块44和交易证书管理模块45,分别为区块链验证节点2或区块链非验证节点3签发登记证书和交易证书。步骤s206:区块链验证节点2和区块链非验证节点3分别的加密模块22和加密模块32,把登记证书和交易证书存储并进行管理。步骤s207:应用层服务器1,向非验证节点3发送交易请求。步骤s208:区块链非验证节点3的通信模块31接收该请求,并组装成交易。步骤s209:区块链非验证节点3的加密模块32,使用交易证书所对应的私钥,通过通信模块223,调用国密算法硬件加密机224对交易进行签名。签名处理过程与传统调用硬件加密机方法一致,不在本例赘述。步骤s210:区块链非验证节点3的加密模块32,会与作为交易接收方的验证节点2,根据ecdh密钥交换算法生成交换密钥。交换密钥的生成过程参考步骤s110。然后,加密模块32使用得到的交换密钥,通过通信模块223,调用国密算法硬件加密机224对交易进行加密,处理过程与传统调用硬件加密机方法一致,不在本例赘述。经过签名和加密后的交易,会被发送给验证节点2。步骤s211:验证节点2收到交易后,会使用加密模块22,通过通信模块223,调用国密算法硬件加密机224对交易进行解密,处理过程与传统调用硬件加密机方法一致,不在本例赘述。解密所用的密钥,为交易发送双方节点协商生成的交换密钥。交换密钥的生成过程参考步骤s110。步骤s212:验证节点2的加密模块22,通过通信模块223,调用国密算法硬件加密机224对交易进行验签,验签所使用的公钥为该交易里所附上的交易证书里的公钥。验签处理过程与传统调用硬件加密机方法一致,不在本例赘述。步骤s213:验证节点2的共识模块23,对交易进行共识并执行该交易。步骤s214:验证节点2的存储模块24,对交易的执行结果进行存储。本发明可以实现在区块链系统中应用软加密和硬加密方式的国密算法,并可根据实际需求通过配置使用不同的加密方式,为区块链在密码学方面的使用提供了更多的选择,在区块链中应用我国自主设计的密码算法,可以为交易的安全性,真实性,可靠性和完整性提供更好的保障。本发明还针对使用软加密方式国密算法的区块链系统的进行优化,通过引入加速算法,有效提升了使用软加密方式国密算法的区块链系统的效率。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收交易请求,以及认证节点签发的登记证书及交易证书;将所述交易请求组装成交易;根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收交易请求,以及认证节点签发的登记证书及交易证书;将所述交易请求组装成交易;根据国密算法及加速算法,利用所述交易证书对所述交易进行签名及加密,得到签名及加密后的交易;将签名及加密后的交易发送至验证节点。基于与上述一种基于国密算法的区块链中对应于非验证节点的处理方法相同的申请构思,本发明还提供了上述一种计算机设备及一种计算机可读存储介质。由于该一种计算机设备及一种计算机可读存储介质解决问题的原理与一种基于国密算法的区块链中对应于非验证节点的处理方法相似,因此该一种计算机设备及一种计算机可读存储介质的实施可以参见一种基于国密算法的区块链中对应于非验证节点的处理方法的实施,重复之处不再赘述。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收非验证节点发送的签名及加密后的交易,以及认证节点签发的登记证书及交易证书;根据国密算法,利用交换密钥对所述签名及加密后的交易进行解密;利用所述交易证书中的公钥,对解密后的所述签名及加密后的交易进行验签;对验签后的所述签名及加密后的交易进行共识及执行,生成并存储执行结果。基于与上述一种基于国密算法的区块链中对应于验证节点的处理方法相同的申请构思,本发明还提供了上述一种计算机设备及一种计算机可读存储介质。由于该一种计算机设备及一种计算机可读存储介质解决问题的原理与一种基于国密算法的区块链中对应于验证节点的处理方法相似,因此该一种计算机设备及一种计算机可读存储介质的实施可以参见一种基于国密算法的区块链中对应于验证节点的处理方法的实施,重复之处不再赘述。本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;向所述非验证节点及验证节点发送签名后的登记证书及交易证书。本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:根据国密算法及加速算法,生成登记根证书、交易根证书及对应的公私钥对;验证非验证节点发送的第一身份信息及验证节点发送的第二身份信息,验证成功后,利用所述登记根证书及所述交易根证书,生成登记证书及交易证书;利用所述登记根证书对应的私钥对所述登记证书进行签名,以及利用交易根证书对应的私钥对所述交易证书进行签名;向所述非验证节点及验证节点发送签名后的登记证书及交易证书。基于与上述一种基于国密算法的区块链中对应于认证节点的处理方法相同的申请构思,本发明还提供了上述一种计算机设备及一种计算机可读存储介质。由于该一种计算机设备及一种计算机可读存储介质解决问题的原理与一种基于国密算法的区块链中对应于认证节点的处理方法相似,因此该一种计算机设备及一种计算机可读存储介质的实施可以参见一种基于国密算法的区块链中对应于认证节点的处理方法的实施,重复之处不再赘述。本发明在区块链系统中应用国密算法,为区块链在密码学方面的使用提供了更多的选择,提高了区块链系统的安全性、可靠性。还实现了针对使用国密算法的区块链系统,通过引入加速算法,在保证区块链系统安全性、可靠性的同时提高了系统效率,对促进区块链技术在安全方面的发展具有很大意义。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,比如rom/ram、磁碟、光盘等。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1