发明内容
本发明的目的在于提出一种数字资产私钥存储提取方法及装置,以解决现有技术中私钥安全性不高、不方便查询、方法可移植性弱问题。
第一方面,本申请提供了一种数字资产私钥存储使用方法,应用于生成器端,方法包括:
生成私钥明文;
根据所述私钥明文计算对应的公钥和地址;
将私钥明文加密,得到第一私钥密文;
将包含第一私钥密文、公钥和地址的数据包发送至存储器端。
可选的,所述将包含第一私钥密文、公钥和地址的数据包发送至存储器端的步骤包括:
对所述第一私钥密文、公钥和地址进行加密,得到加密数据包;
采用第一传输协议发送加密数据包;
当加密数据包到达存储器端后,对加密数据包进行解密,得到所述第一私钥密文、公钥和地址。
可选的,所述将私钥明文加密,得到第一私钥密文步骤包括:
根据第一盐值,采用AES算法对私钥明文加密,得到第一私钥密文。
可选的,所述根据第一盐值,采用AES算法对私钥明文加密包括:
将私钥明文采用预设规则分成N个明文分组;其中N为大于1的整数;
将第一个明文分组结合第一初始化向量后添加第一盐值,得到第一个密文分组;
将第i个明文分组结合第i-1个密文分组后添加第一盐值,得到第i个密文分组;其中i=2~N;
将N个密文分组合并为第一私钥密文。
可选的,所述私钥明文采用椭圆曲线数字签名算法随机生成。
第二方面,本申请提供了一种数字资产私钥存储使用方法,应用于存储器端,方法包括:
接收生成器端发送的包含第一私钥密文、公钥和地址的数据包;
将第一私钥密文加密,得到第二私钥密文;
将包含第二私钥密文、公钥和地址的数据包存储至数据库。
可选的,所述将包含第二私钥密文、公钥和地址的数据包存储至数据库的步骤包括:
在数据库中建立关系数据表;
关联第二私钥密文以及与所述第二私钥密文对应的公钥和地址,生成关联数据;
将关联数据写入所述关系数据表。
可选的,所述将第一私钥密文加密,得到第二私钥密文的步骤包括:
根据第二盐值,采用AES算法对第一私钥密文加密,得到第二私钥密文;其中,所述第二盐值与得到第一私钥密文时加密采用的第一盐值不同。
可选的,所述根据第二盐值,采用AES算法对第一私钥密文加密的步骤包括:
将第一私钥密文采用预设规则分成N个密文分组;其中N为大于1的整数;
将第一个密文分组结合第二初始化向量后添加第二盐值,得到第一个二层密文分组;
将第i个密文分组结合第i-1个二层密文分组后添加第二盐值,得到第i个二层密文分组;其中i=2~N;
将N个二层密文分组合并为第二私钥密文。
第三方面,本申请提供了一种数字资产私钥提取方法,应用于存储器端,方法包括:
获取交易端的交易请求;所述交易请求包含地址;
根据交易请求中的地址,在数据库中查询与所述地址对应的第二私钥密文;
将第二私钥密文解密,得到第一私钥密文;
将包含第一私钥密文、公钥和地址的数据包发送至交易端。
第四方面,本申请提供了一种数字资产私钥提取方法,应用于交易端,方法包括:
获取用户输入的交易信息,根据交易信息生成交易请求;所述交易请求包含地址;
发送交易请求至存储器端;
接收存储器端发送的第一私钥密文、公钥和地址的数据包;
将第一私钥密文采用生成器端所采用加密算法相对应的解密算法解密,得到私钥明文。
第五方面,本申请提供了一种数字资产私钥存储装置,包括:
私钥生成单元,用于生成私钥明文;
计算单元,用于根据所述私钥明文计算对应的公钥和地址;
第一加密单元,用于将私钥明文加密,得到第一私钥密文;
第一发送单元,将包含第一私钥密文、公钥和地址的数据包发送至存储器端。
可选的,所述第一发送单元包括:
加密子单元,用于对所述第一私钥密文、公钥和地址进行加密,得到加密数据包;
发送子单元,用于采用第一传输协议发送加密数据包;
解密子单元,用于当加密数据包到达存储器端后,对加密数据包进行解密,得到所述第一私钥密文、公钥和地址。
可选的,所述第一加密单元还用于根据第一盐值,采用AES算法对私钥明文加密,得到第一私钥密文。
可选的,所述第一加密单元包括:
第一拆分子单元,用于将私钥明文采用预设规则分成N个明文分组;其中N为大于1的整数;
第一加盐子单元,用于将第一个明文分组结合第一初始化向量后添加第一盐值,得到第一个密文分组;还用于将第i个明文分组结合第i-1个密文分组后添加第一盐值,得到第i个密文分组;其中i=2~N;
第一合并子单元,用于将N个密文分组合并为第一私钥密文。
第六方面,本申请提供了一种数字资产私钥存储装置,包括:
第一接收单元,用于接收生成器端发送的包含第一私钥密文、公钥和地址的数据包;
第二加密单元,用于将第一私钥密文加密,得到第二私钥密文;
存储单元,用于将包含第二私钥密文、公钥和地址的数据包存储至数据库。
可选的,所述存储单元包括:
建表子单元,用于在数据库中建立关系数据表;
关联子单元,用于关联第二私钥密文以及与所述第二私钥密文对应的公钥和地址,生成关联数据;
写入子单元,用于将关联数据写入所述关系数据表。
可选的,所述第二加密单元还用于根据第二盐值,采用AES算法对第一私钥密文加密,得到第二私钥密文;其中,所述第二盐值与得到第一私钥密文时加密采用的第一盐值不同。
可选的,所述第二加密单元包括:
第二拆分子单元,用于将第一私钥密文采用预设规则分成N个密文分组;其中N为大于1的整数;
第二加盐子单元,用于将第一个密文分组结合第二初始化向量后添加第二盐值,得到第一个二层密文分组;还用于将第i个密文分组结合第i-1个二层密文分组后添加第二盐值,得到第i个二层密文分组;其中i=2~N;
第二合并子单元,用于将N个二层密文分组合并为第二私钥密文。
第七方面,本申请提供了一种数字资产私钥提取装置,包括:
请求获取单元,用于获取交易端的交易请求;所述交易请求包含地址;
查询单元,用于根据交易请求中的地址,在数据库中查询与所述地址对应的第二私钥密文;
第一解密单元,用于将第二私钥密文解密,得到第一私钥密文;
第二发送单元,用于将包含第一私钥密文、公钥和地址的数据包发送至交易端。
第八方面,本申请提供了一种数字资产私钥提取装置,包括:
请求生成单元,用于获取用户输入的交易信息,根据交易信息生成交易请求;所述交易请求包含地址;
第三发送单元,用于发送交易请求至存储器端;
第二接收单元,用于接收存储器端发送的第一私钥密文、公钥和地址的数据包;
第二解密单元,用于将第一私钥密文采用生成器端所采用加密算法相对应的解密算法解密,得到私钥明文。
本申请提供的方案通过在生成器端和存储器端分别采用AES对称加密算法加密私钥,并且采用不同加密盐加密,保证了存储系统或交易系统均不能单方面解密获得明文私钥,进而确保存储层的私钥数据安全;同时将地址和经二次加密后的私钥密文存储在企业级的数据库中,方便企业通过地址能快速检索到对应的私钥密文。
本申请采用HTTPS(HyperText Transfer Protocol Secure)超文本安全通信传输协议,利用SSL/TLS来加密数据包,保证了密钥生成系统和存储系统和交易系统之间信息传递的可靠性和私密性。
本申请提供的方案独立于区块链交易模块,且采用了普适的加密、传输和存储手段,因此具备较强的可移植性和通用性,不受区块链本身实现差异的限制,任何区块链数字钱包相关的企业均可采用本申请提供的方案进行多种区块链账户私钥的管理。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,为本申请一种数字资产私钥存储方法流程图;
由图1可知,本申请提供了一种数字资产私钥存储方法,该方法应用于生成器端,所述方法包括:
S10:生成私钥明文;
在本实施例中,生成器端是指集成特定的私钥生成算法或提供有SDK(软件开发工具包Software Development Kit)等功能的终端的总称,其硬件表现形式可为私钥生成器、私钥发生器等;
在区块链的各个节点中,由于区块链不同,采用的私钥生成算法可能不同,因此在步骤S10中需要根据不同区块链的性质生成满足不同算法的私钥,本文中以目前区块链中比较常用的椭圆曲线数字签名算法为例,应当认为,其它生成私钥的算法也包括在本申请所限定的范围之内。
椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm,缩写:ECDSA),其原理如下:
该算法的签名过程如下:
步骤一、选择一条椭圆曲线Ep(a,b),和基点G;
步骤二、选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;
步骤三、产生一个随机整数r(r<n),计算点R=rG;
步骤四、将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);
步骤五、计算s≡r-Hash*k(mod n)
步骤六、r和s做为签名值,如果r和s其中一个为0,重新从步骤三开始执行
该算法的验证过程如下:
步骤一、接受方在收到消息(m)和签名值(r,s)后,进行以下运算
步骤二、计算:sG+H(m)P=(x1,y1),r1≡x1 mod p。
步骤三、验证等式:r1≡r mod p。
步骤四、如果等式成立,接受签名,否则签名无效。
采用算法生成的私钥明文通常是一串64位16进制字符(32字节),用于证明对应地址下的数字资产所有权,该私钥一旦生成,说明该用户拥有了该私钥对应的数字资产。
S20:根据所述私钥明文计算对应的公钥和地址;
在私钥明文生成后,随即一同产生的是与私钥明文对应的公钥和地址,在本实施例中,对于公钥和地址的计算过程可采用现有技术中常见的算法,在此不作限制。需要说明的是,本申请中同样不作限制的是对于公钥和地址的传输状态,即公钥和地址既可以作为单独数据进行发送,也可以和其它数据打包一并发送;另外,对于一组私钥对应的公钥和地址,应当是具备相同特征,以便于与其它私钥间进行区分,还有利于后续对于存储私钥的查询高效进行。
S30:将私钥明文加密,得到第一私钥密文;
对私钥明文加密可以采用多种加密方法,示例性的,在本实施例中可根据第一盐值,采用AES算法对私钥明文加密,得到第一私钥密文;AES(Advanced Encryption Standard)也称对称加密算法,AES不是将拿到的明文一次性加密,而是分组加密,就是先将明文切分成长度相等的块,每块大小128bit,再对每一小块进行加密,具体的,由图2示出的一种可行性实施例中,所述步骤S30可由下述过程说明:
S31:将私钥明文采用预设规则分成N个明文分组;其中N为大于1的整数;在AES标准规范中,将私钥明文分成长度相等的多个明文分组,每次加密一组数据,直到加密完整个私钥明文;每个明文分组的长度为128位,即每个分组16个字节(每个字节8位),而密钥的长度可以是128位、192位或256位,因此,要想获得不同长度的加密私钥,可以通过不同的加密轮数对明文分组进行加密。
S32:将第一个明文分组结合第一初始化向量后添加第一盐值,得到第一个密文分组;第一初始化向量可根据实际需求设置,其数据结构应与明文分组对应,以便在执行运算后得到指定长度的分组;
S33:将第i个明文分组结合第i-1个密文分组后添加第一盐值,得到第i个密文分组;其中i=2~N;当第一组明文分组加密完成后,得到了第一组密文分组,该第一组密文分组即作为第二组明文分组加密时的初始化向量,用于得到第二组密文分组;以此类推,下一组明文分组的加密都需要结合前一组生成的密文分组,使得密文分组的安全性更高。
S34:将N个密文分组合并为第一私钥密文;具体的,可以根据预设的顺序将生成的密文分组顺次排列而成,还可以根据预设规则排列密文分组,进而增加解密难度,提高安全性。
进一步的,当将私钥明文加密得到第一私钥密文之后,所述方法还包括立即删除生成器端程序内存中的私钥明文数据,使得私钥明文仅在生成后的一段较短时长内存在,这样,即使攻击者在后续过程中盗取了数据,也无法得到私钥明文,增加了安全性。
S40:将包含第一私钥密文、公钥和地址的数据包发送至存储器端。
在本实施例中,完成步骤S40可以通过生成器端配置发送功能的模块来完成,还可通过将生成器端外接发送设备来完成,例如外接传输器;当传输数据时,为了防止攻击者在传输过程中盗取传输的数据,由图3可知,在一种可行性实施例中,步骤S40还可分解为:
S41:对所述第一私钥密文、公钥和地址进行加密,得到加密数据包;具体的,可利用SSL/TLS来加密数据包,保证了密钥生成系统和存储系统和交易系统之间信息传递的可靠性和私密性;
S42:采用第一传输协议发送加密数据包;具体的,可采用HTTPS(HyperText Transfer Protocol Secure)超文本安全通信传输协议。
S43:当加密数据包到达存储器端后,对加密数据包进行解密,得到所述第一私钥密文、公钥和地址。具体的,可在存储器端配置的接收单元中存储有步骤S41中加密方法的解密规则,采用逆向的方法解密得到发送前的数据结构。
由上述技术方案可知,本申请提供的一种数字资产私钥存储方法中,生成器端通过对生成的私钥计算得到对应的公钥和地址,并且采用AES算法立即对私钥明文进行第一次加密,得到第一私钥密文;最后再利用传输协议将加密的数据包发送至存储器端;该方法使得生成的私钥明文仅在生成的一瞬间存在于程序内存中,在外部传输和存储中都不会存在私钥明文,从而保证了私钥的安全性。
由图1可知,本申请提供的一种数字资产私钥存储方法,在存储器端中应用时,所述方法包括:
S50:接收生成器端发送的包含第一私钥密文、公钥和地址的数据包;
S60:将第一私钥密文加密,得到第二私钥密文;
对私钥密文加密可以采用多种加密方法,示例性的,在本实施例中可根据第二盐值,采用AES算法对私钥密文加密,得到第二私钥密文;需要说明的是,所述第二盐值与得到第一私钥密文时加密采用的第一盐值不同,即存储器端在执行加密过程时虽然与生成器端采用相同的算法,但由于采用的盐值不同,不能通过相同的方式进行解密。与上述步骤30类似的,由图4示出的一种可行性实施例中,所述步骤S60可由下述过程说明:
S61:将第一私钥密文采用预设规则分成N个密文分组;其中N为大于1的整数;此时的方法演变为将私钥密文分成长度相等的多个密文分组,每次加密一组数据,直到加密完整个第一私钥密文;此时密文分组的长度可以是128位、192位或256位,因此,要想获得不同长度的加密私钥,仍然可以通过不同的加密轮数对密文分组进行加密。
S62:将第一个密文分组结合第二初始化向量后添加第二盐值,得到第一个二层密文分组;第二初始化向量可根据实际需求设置,其数据结构应与密文分组对应,以便在执行运算后得到指定长度的分组。
S63:将第i个密文分组结合第i-1个二层密文分组后添加第二盐值,得到第i个二层密文分组;其中i=2~N;当第一组密文分组加密完成后,得到了第一组二层密文分组,该第一组二层密文分组即作为第二组密文分组加密时的初始化向量,用于得到第二组二层密文分组;以此类推,下一组密文分组的加密都需要结合前一组生成的二层密文分组,使得二层密文分组的安全性更高。
S64:将N个二层密文分组合并为第二私钥密文;具体的,可以根据预设的顺序将生成的二层密文分组顺次排列而成,还可以根据预设规则排列二层密文分组,进而增加解密难度,提高安全性。
在本实施例中,存储器端对由生成器端加密得到的第一私钥密文进行第二次的加密,得到第二私钥密文用于存储,由于两次加密过程由两端分别采用两种不同盐值进行,如果被攻击者盗取后,即使攻击者掌握了其中一端的加密规则用于解密,也无法获取到原始的私钥明文,进而提高了私钥的解密难度,提高安全性。
S70:将包含第二私钥密文、公钥和地址的数据包存储至数据库。
在本实施例中,在将第二私钥密文、公钥和地址打包前,存储器端通常需要对打包内容进行加工、整理和关联操作,例如通过格式化数据的方式,将数据转化为行数据存储在数据库中,其表现形式可为二维图标等结构;数据库是指存储器端内置或外接的企业级的数据单元,企业或个人用户可通过输入地址等信息在数据库中查询与地址相对应的私钥或公钥以及其他信息。
具体的,由图5可知,在一种可行性实施例中,上述存储过程可以分解为:
S71:在数据库中建立关系数据表;关系数据表中的项目不限于包括用户名称、用户地址、代表私钥密文的数据、公钥、助记词等等。
S72:关联第二私钥密文以及与所述第二私钥密文对应的公钥和地址,生成关联数据;具体的,可以采取将属于同一私钥的数据添加标识,并集中存储;
S73:将关联数据写入所述关系数据表;这样,通过某一数据信息(例如地址)就可以快速检索到加密私钥、公钥或其它信息。
由上述技术方案可知,本申请提供的一种数字资产私钥存储方法中,存储器端通过对接收到的经生成器加密后的私钥密文进行二次加密,得到安全性更高的第二私钥密文,再通过对数据关联存储,既能保证私钥存储的安全性,又能方便用户进行私钥的查询或提取等操作。
参见图6,为本申请提供的一种数字资产私钥提取方法流程图;
由图6可知,本申请还提供了一种数字资产私钥提取方法,该方法是上述存储过程的逆向过程,当适用于存储器端时,所述方法包括:
S100:获取交易端的交易请求;所述交易请求包含地址;
当用户想要进行交易而需要使用私钥时,可由交易端向存储有第二私钥密文的存储器端发送交易请求,请求获得其中存储的私钥内容。
S110:根据交易请求中的地址,在数据库中查询与所述地址对应的第二私钥密文;
由于数据库中存储的数据经过关联处理,因此可以在数据库中查询与所述地址相同的地址,进而找到一系列相关的数据;其中即包括第二私钥密文、公钥等;
S120:将第二私钥密文解密,得到第一私钥密文;此时存储器端采用的是与加密过程中对应的解密规则进行解密,具体解密过程在此不再赘述。
S130:将包含第一私钥密文、公钥和地址的数据包发送至交易端;与前述方法相同的,其数据传输时也采用HTTPS+SSL安全传输密文的方法,在此不再赘述。
当所述方法适用于交易端时,所述方法包括:
S80:获取用户输入的交易信息,根据交易信息生成交易请求;所述交易请求包含地址;用户输入的交易信息代表了用户身份,其可以是用户账号、密码、交易订单等整合而成,根据交易信息判断当前用户的身份,并对应该用户的地址。
S90:发送交易请求至存储器端;
S140:接收存储器端发送的第一私钥密文、公钥和地址的数据包;
S150:将第一私钥密文采用生成器端所采用加密算法相对应的解密算法解密,得到私钥明文;这里,需要交易端提前知晓执行加密第一私钥密文的生成器端采用的加密规则,并配置相应的解密算法;这时,交易端就可以在进程内部把第一私钥密文解密为私钥明文,并一次性将交易签名打包。
进一步的,在完成交易签名打包过程后,可将交易端进程内部存储空间的私钥明文数据删除,以防止攻击者从交易端盗取私钥明文。
从上述技术方案可知,当对存储的私钥密文进行提取时,任何第三方都不能单一方面解开密文,必须通过存储器端和配置有与生成器端对应解密算法的交易端分别执行解密,才能得到私钥明文用于签名交易,并且,敏感的私钥明文只在使用签名交易的较短时间内存在与程序内存中,任何外部传输和存储中都不会存在私钥明文,从而保证了存储私钥的安全可靠。
参见图7,为本申请一种数字资产私钥存储装置构成图;
由图7可知,所述装置包括:
私钥生成单元10,用于生成私钥明文;
计算单元20,用于根据所述私钥明文计算对应的公钥和地址;
第一加密单元30,用于将私钥明文加密,得到第一私钥密文;
第一发送单元40,将包含第一私钥密文、公钥和地址的数据包发送至存储器端。
进一步的,由图8可知,所述第一发送单元40包括:
加密子单元41,用于对所述第一私钥密文、公钥和地址进行加密,得到加密数据包;
发送子单元42,用于采用第一传输协议发送加密数据包;
解密子单元43,用于当加密数据包到达存储器端后,对加密数据包进行解密,得到所述第一私钥密文、公钥和地址。
进一步的,所述第一加密单元30还用于根据第一盐值,采用AES算法对私钥明文加密,得到第一私钥密文。
进一步的,由图9可知,所述第一加密单元30包括:
第一拆分子单元31,用于将私钥明文采用预设规则分成N个明文分组;其中N为大于1的整数;
第一加盐子单元32,用于将第一个明文分组结合第一初始化向量后添加第一盐值,得到第一个密文分组;还用于将第i个明文分组结合第i-1个密文分组后添加第一盐值,得到第i个密文分组;其中i=2~N;
第一合并子单元33,用于将N个密文分组合并为第一私钥密文。
本实施例中各结构单元在执行上述方法时起的功能作用参见图1所示方法实施例中的说明,在此不再赘述。
参见图10,为本申请一种数字资产私钥存储装置构成图;
由图10可知,所述装置包括:
第一接收单元50,用于接收生成器端发送的包含第一私钥密文、公钥和地址的数据包;
第二加密单元60,用于将第一私钥密文加密,得到第二私钥密文;
存储单元70,用于将包含第二私钥密文、公钥和地址的数据包存储至数据库。
进一步的,由图11可知,所述存储单元70包括:
建表子单元71,用于在数据库中建立关系数据表;
关联子单元72,用于关联第二私钥密文以及与所述第二私钥密文对应的公钥和地址,生成关联数据;
写入子单元73,用于将关联数据写入所述关系数据表。
进一步的,所述第二加密单元60还用于根据第二盐值,采用AES算法对第一私钥密文加密,得到第二私钥密文;其中,所述第二盐值与得到第一私钥密文时加密采用的第一盐值不同。
进一步的,由图12可知,所述第二加密单元60包括:
第二拆分子单元61,用于将第一私钥密文采用预设规则分成N个密文分组;其中N为大于1的整数;
第二加盐子单元62,用于将第一个密文分组结合第二初始化向量后添加第二盐值,得到第一个二层密文分组;还用于将第i个密文分组结合第i-1个二层密文分组后添加第二盐值,得到第i个二层密文分组;其中i=2~N;
第二合并子单元63,用于将N个二层密文分组合并为第二私钥密文。
本实施例中各结构单元在执行上述方法时起的功能作用参见图1所示方法实施例中的说明,在此不再赘述。
参见图13,为本申请一种数字资产私钥提取装置构成图;
由图13可知,所述装置包括:
请求获取单元80,用于获取交易端的交易请求;所述交易请求包含地址;
查询单元90,用于根据交易请求中的地址,在数据库中查询与所述地址对应的第二私钥密文;
第一解密单元100,用于将第二私钥密文解密,得到第一私钥密文;
第二发送单元110,用于将包含第一私钥密文、公钥和地址的数据包发送至交易端。
本实施例中各结构单元在执行上述方法时起的功能作用参见图6所示方法实施例中的说明,在此不再赘述。
参见图14,为本申请一种数字资产私钥提取装置构成图;
由图14可知,所述装置包括:
请求生成单元120,用于获取用户输入的交易信息,根据交易信息生成交易请求;所述交易请求包含地址;
第三发送单元130,用于发送交易请求至存储器端;
第二接收单元140,用于接收存储器端发送的第一私钥密文、公钥和地址的数据包;
第二解密单元150,用于将第一私钥密文采用生成器端所采用加密算法相对应的解密算法解密,得到私钥明文。
本实施例中各结构单元在执行上述方法时起的功能作用参见图6所示方法实施例中的说明,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。