一种区块链中使用国家密码进行加密的算法制造技术

技术编号:24129713 阅读:20 留言:0更新日期:2020-05-13 05:51
本发明专利技术涉及区块链加密技术领域,具体涉及一种区块链中使用国家密码进行加密的算法,本发明专利技术加密算法主要用在账号生成和交易签名与验证两个使用场景,其中应用在账号生成上,其通常是就是生成的一个公私钥对中的公钥,或者根据公钥计算的一个Hash值,应用在交易签名与验证上就是对交易序列化,利用Hash算法计算序列化结果的Hash值,然后,使用发起交易的账号的私钥对交易Hash进行签名,区块链节点利用公钥验证签名,确定交易的合法性,在上述两个使用场景中需要用到的两种算法:一种是非对称加密算法SM2,一种是计算Hash值的安全Hash算法SM3,本发明专利技术满足在我国商用环境下应用区块链技术,支持我国的商用加密安全标准,其保证了交易的安全性符合国家加密标准,同时保证了与链上其它加密算法的正确融合,实现了一链多种安全标准,确保了链的开放性。

【技术实现步骤摘要】
一种区块链中使用国家密码进行加密的算法
本专利技术涉及区块链加密
,具体涉及一种区块链中使用国家密码进行加密的算法。
技术介绍
加密算法是区块链中信息安全以及维持信任的基石。区块链技术的应用和开发,数字加密技术是关键。一旦加密方法遭到破解,区块链的数据安全将受到挑战,区块链的不可篡改性以及数字资产将不复存在。国密算法是国家商用密码算法的简称。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。其中SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、密钥交换和公钥加密,用于替换RSA/Diffie-Hellman/ECDSA/ECDH等国际算法;SM3为密码哈希算法,用于替代MD5/SHA-1/SHA-256等国际算法;通过部署国密算法,可以降低由弱密码和错误实现带来的安全风险和部署PKI/CA带来的开销。非对称密钥对具有两个特点:一是用其中一个密钥(公钥或私钥)加密信息后,只有另一个对应的密钥才能解开。二是公钥可向其他人公开,私钥则保密,其他人无法通过该公钥推算出相应的私钥。目前区块链技术中采用的加密算法主要是国外的商用非对称加密算法。这里存在如下问题:(1)一部分商密的设计中涉及到的一些具体步骤主要是美国的一些强力部门负责的。里面存在着不确定性的安全因素和法律风险。(2)国密是国密局制定和研发的,对于原理和实现细节对国内的开发人员和企业相对比较的清楚。技术且自主可控。(3)目前国密主要是对国内的产品,对于涉及到国家安全的产品可能需要有针对性的使用。
技术实现思路
为了满足在我国商用环境下应用区块链技术,支持我国的商用加密安全标准,本专利技术提出了一种基于我国国家加密标准算法应用到区块链中的方法,其保证了交易的安全性符合国家加密标准,同时保证了与链上其它加密算法的正确融合,实现了一链多种安全标准,确保了链的开放性。一种区块链中使用国家密码进行加密的算法,其特征在于,包括以下步骤:(1)用户输入一个密码,系统根据其计算一个128Bits的Hash值,作为后续产生公私钥的种子,称之为Seed;(2)根据Seed计算一个256Bits的Hash值,作为私钥,再根据SM2加密算法,计算产生一个公钥;(3)根据公钥使用RIPEMD160Hash算法,计算出一个160Bits的Hash值,再根据带校验和的Base58编码,生成最终的账号;(5)用户使用刚生成的账号的密钥,进行Base58解码,确定其加密算法类型,并根据相应算法计算出公/私钥对;(6)用户构造交易,其中包含了该账号信息以及所对应的公钥,对构造的交易按照确定格式进行序列化,得到一个交易字节序列S;(7)如果加密算法是SM2,则使用SM3算法,根据公钥和交易字节序列S计算出一个256Bits的Hash值,记为H1;(8)使用SM2算法,通过私钥,对H1进行签名,得到一个签名值,并记录到要提交到节点执行的交易请求中;(9)用户发起交易请求,节点收到后,取得交易的发起账号信息,以及验证签名的公钥,根据公钥计算出账号,并检验其与是否发起账号匹配,如果不匹配,则返回交易失败,否则继续后面的处理;(10)根据公钥确定加密算法类型,如果为SM2,则使用SM3算法,通过公钥和交易序列化的字节序列计算出256Bits的Hash值H2;(11)从交易中取得交易签名信息,使用SM2算法,通过公钥和H2,对签名进行验证,如果匹配,则发起交易的账号身份验证通过,继续后续处理,否则,返回失败。进一步的,Seed也可直接由系统或用户产生一个128Bits随机数形成。进一步的,根据公钥生成最终的账号之前,为公钥定义一个加密算法类型字节,考虑到SM2算法的第一个字节固定为0x02或0x03,为了避免增加额外的空间,且考虑兼容secp256k1算法,将之前生成的公钥的首字节修改为0x22或0x23,以做区分,支持公钥能够自描述其所采取的算法类型;进一步的,在Seed头部加上了一个至少一字节的类型前缀,使得能够得知该Seed使用系统中的所支持的哪一种加密算法计算公私钥,同时,为了更易于用户记录该Seed,我们对其采取带校验和的Base58进行编码。附图说明图1为基于SM2生成区块链账户地址的流程示意图;图2私钥、公钥、账户地址之间关系示意图。具体实施方式为了使本领域技术人员更好的理解本说明书实施例中的技术方案,下面将对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部实施例,基于本说明书中的实施例,本领域普通技术人员所获得的其他实施例,都应当属于保护范围。以下详细说明本说明书中各实施例提供的技术方案,需要说明的是,由于以下各实施例所基于的技术思想都是类似的,因此,下文各实施例可互相参照理解。实施例1:为了更有效地说明我们如何使用国密算法,我们需要首先说明一下在区块链中加密算法的主要使用场景:账号生成和交易签名与验证;(1)账号生成:在区块链中账号是匿名的,其通常是就是生成的一个公私钥对中的公钥,或者根据公钥计算的一个Hash值;(2)交易签名与验证:对交易序列化,利用Hash算法计算序列化结果的Hash值,然后,使用发起交易的账号的私钥对交易Hash进行签名,区块链节点利用公钥验证签名,确定交易的合法性;从上面的描述中,我们确定对于国密标准,需要使用其中的两种算法:一种是非对称加密算法SM2,一种是计算Hash值的安全Hash算法SM3,具体的使用方法如下:1.用户输入一个密码,系统根据其计算一个128Bits的Hash值,作为后续产生公私钥的种子,我们称之为Seed,Seed也可直接由系统或用户产生一个128Bits随机数形成;2.根据Seed计算一个256Bits的Hash值,作为私钥,再根据椭圆曲线公式(SM2是一种椭圆曲线加密算法),计算产生一个公钥,该公钥长度为33字节;3.根据Seed计算公私钥的过程是一个幂等的计算,所以,我们返回给用户的实际上不是私钥,而是对该Seed的编码后的结果,其更短更容易输入和记录,我们称之为用户密钥,为了能够知道根据该Seed使用系统中的所支持的哪一种加密算法计算公私钥,我们在头部加上了一个至少一字节的类型前缀,同时,为了更易于用户记录该Seed,我们对其采取带校验和的Base58进行编码;4.为了支持公钥能够自描述其所采取的算法类型,我们为公钥定义了一个加密算法类型字节,且考虑到SM2算法的第一个字节固定为0x02或0x03,为了避免增加额外的空间,且考虑兼容secp256k1算法,我们将之前生成的原始公钥的首字节修改为0x22或0x23,以做区分;5.根据修改后的公本文档来自技高网
...

【技术保护点】
1.一种区块链中使用国家密码进行加密的算法,其特征在于,包括以下步骤:/n(1)用户输入一个密码,系统根据其计算一个128 Bits的Hash值,作为后续产生公私钥的种子,称之为Seed;/n(2)根据Seed计算一个256 Bits的Hash值,作为私钥,再根据SM2加密算法,计算产生一个公钥;/n(3)根据公钥使用RIPEMD160 Hash算法,计算出一个160 Bits的Hash值,再根据带校验和的Base58编码,生成最终的账号;/n(5)用户使用刚生成的账号的密钥,进行Base58解码,确定其加密算法类型,并根据相应算法计算出公/私钥对;/n(6)用户构造交易,其中包含了该账号信息以及所对应的公钥,对构造的交易按照确定格式进行序列化,得到一个交易字节序列S;/n(7)如果加密算法是SM2,则使用SM3算法,根据公钥和交易字节序列S计算出一个256Bits的Hash值,记为H1;/n(8)使用SM2算法,通过私钥,对H1进行签名,得到一个签名值,并记录到要提交到节点执行的交易请求中;/n(9)用户发起交易请求,节点收到后,取得交易的发起账号信息,以及验证签名的公钥,根据公钥计算出账号,并检验其与是否发起账号匹配,如果不匹配,则返回交易失败,否则继续后面的处理;/n(10)根据公钥确定加密算法类型,如果为SM2,则使用SM3算法,通过公钥和交易序列化的字节序列计算出256 Bits的Hash值H2;/n(11)从交易中取得交易签名信息,使用SM2算法,通过公钥和H2,对签名进行验证,如果匹配,则发起交易的账号身份验证通过,继续后续处理,否则,返回失败。/n...

【技术特征摘要】
1.一种区块链中使用国家密码进行加密的算法,其特征在于,包括以下步骤:
(1)用户输入一个密码,系统根据其计算一个128Bits的Hash值,作为后续产生公私钥的种子,称之为Seed;
(2)根据Seed计算一个256Bits的Hash值,作为私钥,再根据SM2加密算法,计算产生一个公钥;
(3)根据公钥使用RIPEMD160Hash算法,计算出一个160Bits的Hash值,再根据带校验和的Base58编码,生成最终的账号;
(5)用户使用刚生成的账号的密钥,进行Base58解码,确定其加密算法类型,并根据相应算法计算出公/私钥对;
(6)用户构造交易,其中包含了该账号信息以及所对应的公钥,对构造的交易按照确定格式进行序列化,得到一个交易字节序列S;
(7)如果加密算法是SM2,则使用SM3算法,根据公钥和交易字节序列S计算出一个256Bits的Hash值,记为H1;
(8)使用SM2算法,通过私钥,对H1进行签名,得到一个签名值,并记录到要提交到节点执行的交易请求中;
(9)用户发起交易请求,节点收到后,取得交易的发起账号信息,以及验证签名的公钥,根据公钥计算出账号,并检验其与是否发起账号匹配,如果不匹配,则返回交易失败,否则继续后面的处理;
(10)根据...

【专利技术属性】
技术研发人员:崔春生周耀平许文波李伟
申请(专利权)人:江苏恒为信息科技有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1