CN106411506B - 适用于数字货币的密钥派生方法及装置 - Google Patents

适用于数字货币的密钥派生方法及装置 Download PDF

Info

Publication number
CN106411506B
CN106411506B CN201610792595.8A CN201610792595A CN106411506B CN 106411506 B CN106411506 B CN 106411506B CN 201610792595 A CN201610792595 A CN 201610792595A CN 106411506 B CN106411506 B CN 106411506B
Authority
CN
China
Prior art keywords
key
sub
father
code
public key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610792595.8A
Other languages
English (en)
Other versions
CN106411506A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201610792595.8A priority Critical patent/CN106411506B/zh
Publication of CN106411506A publication Critical patent/CN106411506A/zh
Application granted granted Critical
Publication of CN106411506B publication Critical patent/CN106411506B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3066Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Power Engineering (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种适用于数字货币的密钥派生方法,属于信息安全领域。所述方法包括:将父公钥和子密钥索引顺序拼接,使用父链码作为哈希密钥,根据预设算法计算拼接数据的哈希值,根据哈希值截取得到子链码,对截取剩余数据做ECC加法模运算,若运算结果不为预设值,则将运算结果作为子私钥,对子私钥做ECC点乘运算,得到子公钥。本发明的有益效果在于根据密钥种子能够衍生出全部密钥,所以只需备份密钥种子,无需备份全部密钥,备份体积小,还能够避免密钥损坏带来的损失。

Description

适用于数字货币的密钥派生方法及装置
技术领域
本发明涉及信息安全领域,尤其涉及适用于数字货币的密钥派生方法及装置。
背景技术
数字货币是电子货币形式的替代货币,它采用P2P形式,不依靠特定货币机构发行,而是依据特定算法通过大量的计算产生。数字货币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节的安全性,基于密钥学的设计可以使数字货币只能被真实的拥有者转移或支付,确保了货币所有权与流通交易的匿名性。由于数字货币交易的匿名性,用户每次使用不同的地址接收数字货币,通常地址用ECC公钥表示,用户拥有一个钱包,每进行一笔数字货币交易,需要在钱包中保存与该笔交易对应的ECC密钥,然而钱包的空间是有限的,所以需要及时备份钱包中的ECC密钥。
发明人在实现本发明的过程中发现,现有技术中至少存在以下缺陷:
1、随着交易次数的增多,密钥的备份体积越来越大,不易管理;
2、密钥损坏后不能恢复,若密钥数据损坏,则与密钥数据对应的交易中的数字货币也将无法再消费。
发明内容
本发明的目的是克服现有技术的缺陷,提供适用于数字货币的密钥派生方法及装置。
本发明是通过下述技术方案实现的:
首先,本发明提供一种适用于数字货币的密钥派生方法及装置。
所述方法包括:根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
进一步地,所述步骤A1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
进一步地,所述方法还可以包括:根据父公钥、父链码和子密钥索引派生子公钥和子链码。
所述根据父公钥、父链码和子密钥索引派生子公钥和子链码可以具体包括:
步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
步骤C3、判断ECC加法运算结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将所述ECC加法运算结果作为子公钥。
所述步骤C1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
本方法中,所述父私钥为主私钥或上一级子私钥;所述父公钥为主公钥或上一级子公钥;所述父链码为主链码或上一级子链码。
进一步地,所述方法中还可以包括:生成主私钥、主公钥和主链码。
所述生成主私钥、主公钥和主链码可以具体包括:
步骤D1、获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
步骤D2、对所述密钥种子的哈希值进行截取,得到主链码和主私钥;
步骤D3、对所述主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
所述装置,包括:第一派生模块,用于根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述第一派生模块可以具体包括:
第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
第一递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
进一步地,所述装置还可以包括:
第一比较模块,用于比较子密钥索引和预设值;
第二派生模块,用于当所述第一比较模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
相应地,所述第一派生模块,具体用于当所述第一比较模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述第二派生模块可以具体包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断所述第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
进一步地,所述装置还可以包括:第三派生模块,用于根据父公钥、父链码和子密钥索引派生子公钥和子链码。
所述第三派生模块可以具体包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述预设椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
更进一步地,所述装置还可以包括:
第二比较模块,用于比较子密钥索引和预设值;
提示模块,用于当所述第二比较模块确定子密钥索引大于或者等于预设值时,提示失败;
相应地,所述第三派生模块,具体用于当所述第二比较模块确定子密钥索引小于预设值时,根据父公钥、父链码和子密钥索引派生子公钥和子链码。
本装置中,所述第一派生模块可以具体用于:将主私钥、主公钥和主链码分别作为父私钥、父公钥和父链码,或者将上一级子私钥、上一级子公钥和上一级子链码分别作为父私钥、父公钥和父链码,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
进一步地,所述装置还可以包括:生成模块,用于生成主私钥、主公钥和主链码。
所述生成模块,可以具体包括:
第四哈希单元,用于获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
第四截取单元,用于对所述第四哈希单元得到的密钥种子的哈希值进行截取,得到主链码和主私钥;
第四运算单元,用于对所述第四截取单元得到的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
其次,本发明提供另一种适用于数字货币的密钥派生方法及装置。
所述方法包括:分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
本方法中,所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,可以具体包括:
步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
所述步骤A1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
进一步地,所述方法还可以包括:获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
所述方法还可以包括:
步骤1-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤1-2、分别以所述第一子公钥和所述第一子链码为父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父公钥、父链码和子密钥索引派生子公钥和子链码,将派生得到的子公钥作为第二子公钥;
步骤1-3、对所述第二子公钥进行编码,得到数字货币收取地址。
本方法中,所述根据父公钥、父链码和子密钥索引派生子公钥和子链码,可以具体包括:
步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
步骤C3、判断ECC加法运算的结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将ECC加法运算的结果作为子公钥。
所述步骤C1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
所述步骤C3中,当判断ECC加法运算的结果不为预设值时,还包括:将子密钥索引的当前值保存为数字货币收取地址索引;
相应地,所述方法还可以包括:
步骤2-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤2-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将各已保存的数字货币收取地址索引依次作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子公钥作为第二子公钥;
步骤2-3、对各第二子公钥分别进行编码,得到各数字货币收取地址;
步骤2-4、依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量。
进一步地,所述方法还可以包括:
步骤3-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤3-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,得到预设数目的第二子私钥、第二子公钥和第二子链码;
步骤3-3、对各第二子公钥分别进行编码,得到预设数目的数字货币收取地址;
步骤3-4、依次查询各数字货币收取地址中是否有数字货币,若均没有则将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量;否则返回步骤3-2得到新的预设数目的第二子私钥、第二子公钥和第二子链码,然后执行步骤3-3。
所述装置包括:
第一获取模块,用于分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引;
第一派生模块,用于根据所述第一获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
账户密钥生成模块,用于将所述第一派生模块派生的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
一方面,本装置中,所述第一派生模块可以具体包括:
第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
另一方面,所述第一派生模块,可以具体包括:
第一比较子模块,用于比较子密钥索引和预设值;
第一派生子模块,用于当所述第一比较子模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
第二派生子模块,用于当所述第一比较子模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
所述第二派生子模块可以具体包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
进一步地,所述装置还可以包括:钱包密钥生成模块,用于获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
所述装置还可以包括:第二获取模块,用于分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
相应地,所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:第三获取模块、第二派生模块和货币收取地址生成模块;
所述第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
所述第二派生模块,用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码;
所述货币收取地址生成模块,用于对所述第二派生模块派生的子公钥进行编码,得到数字货币收取地址。
一方面,所述第二派生模块,可以具体包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
另一方面,所述第二派生模块可以具体包括:
第二比较子模块,用于比较所述第三获取模块获取的子密钥索引和预设值;
提示子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引大于或者等于预设值时,提示失败;
派生子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引小于预设值时,根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码。
进一步地,所述第三密钥获取单元还用于:将子密钥索引的当前值保存为数字货币收取地址索引;相应地:
所述装置还包括:第四获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子私钥、子公钥和子链码分别作为父私钥、父公钥和父链码,将所述第三密钥获取单元中保存的各数字货币收取地址索引依次作为子密钥索引;
所述第一派生模块还用于:根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:账户货币查询模块,用于将所述第一派生模块根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的各子公钥分别进行编码,得到各数字货币收取地址,依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量;
或者,进一步地:
所述装置还包括:第二获取模块,用于以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;
所述装置还包括:货币收取地址生成模块,用于对所述第一派生模块根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。
本发明的有益效果在于:采用本发明提供的技术方案,根据密钥种子能够衍生出全部密钥,因此只需要备份密钥种子,而不需要备份根据密钥种子派生出的子密钥,所述备份体积不会随密钥的增多而变大,易于管理,并且能够避免密钥损坏给用户造成损失。进一步地有益效果是,可以在不暴露私钥的前提下实现子公钥的派生,提高了密钥使用的安全性。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中提供的主密钥和主链码的生成方法的流程图;
图2为本发明实施例1中提供的子私钥、子公钥和子链码的生成方法的流程图;
图3为本发明实施例1中提供的子公钥和子链码的生成方法的流程图;
图4为查询数字货币账户的数字货币量的一种方法流程图;
图5为查询数字货币账户的数字货币量的另一种方法流程图;
图6为本发明实施例2提供的一种适用于数字货币的密钥派生装置的方框图;
图7为本发明实施例3提供的一种适用于数字货币的密钥派生装置的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在进行具体说明之前,对ECC和HMAC进行简单的说明,如下:
ECC(Elliptic Curve Cryptography,椭圆曲线密码学)是基于椭圆曲线数学的一种公钥密码的方法。密码学中,描述一条椭圆曲线,常用到六个参量:T=(p,a,b,G,n,h),其中p、a、b用于确定一条椭圆曲线,G为椭圆曲线的基点,n为G的阶(即nG=0(无穷远点)),h是椭圆曲线上所有点的个数m与n相除所得结果的整数部分。
HMAC(Hash-based Message Authentication Code,密钥相关的哈希运算消息认证码)运算运用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出,当运用的哈希算法具体为SHA512时,HMAC记作HMAC-SHA512。
实施例1
本实施例提供一种适用于数字货币的密钥派生方法,采用本实施例提供的方法派生出的密钥呈树状结构,树的根部为主密钥和主链码,以主密钥为父密钥、主链码为父链码生成的子密钥和子链码为树的第一级密钥和第一级链码,以第一级密钥为父密钥、第一级链码为父链码生成的子密钥和子链码为树的第二级密钥和第二级链码,以此类推。
根据父密钥生成子密钥时引入子密钥索引,根据不同的子密钥索引生成不同的子密钥,子密钥索引与子密钥是一一对应的。
所述方法具体包括:
1、主私钥、主公钥和主链码的派生过程,如图1所示,包括:
步骤101、使用伪随机数生成器生成一个伪随机数作为密钥种子。
例如,伪随机数生成器生成的伪随机数为5d 1c 8c 8d 5c b3 d0 46 d7 2f eebd 48 77 ec 85 d3 51 42 06 a9 ef a1 42 23 d9 b0 07 c7 c1 82 0a c2 35 89 84 0e67 67 9b 76 29 08 81 df 31 d4 7d 79 80 95 cd 71 c4 b9 70 fb cb ef 58 58 63 dca6,将其作为密钥种子,得到密钥种子如下:
5d 1c 8c 8d 5c b3 d0 46 d7 2f ee bd 48 77 ec 85 d3 51 42 06 a9 ef a142 23 d9 b0 07 c7 c1 82 0a c2 35 89 84 0e 67 67 9b 76 29 08 81 df 31 d4 7d 7980 95 cd 71 c4 b9 70 fb cb ef 58 58 63 dc a6。
步骤102、使用预设字符串作为哈希密钥,根据预设算法计算密钥种子的哈希值;
本实施例中,预设算法优选为HMAC-SHA512算法。
例如,预设字符串为“Bitcoin seed”的ASCII编码,密钥种子如步骤101中的例举,为5d 1c 8c 8d 5c b3 d0 46 d7 2f ee bd 48 77 ec 85 d3 51 42 06 a9 ef a1 42 23d9 b0 07 c7 c1 82 0a c2 35 89 84 0e 67 67 9b 76 29 08 81 df 31 d4 7d 79 80 95cd 71 c4 b9 70 fb cb ef 58 58 63 dc a6,则计算得到的哈希值如下:
0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3dc 29 f8 ee 82 53 e7 47 2f e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dccf c0 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c。
步骤103、将计算得到的哈希值的高位端预设长度的数据作为主私钥,低位端预设长度的数据作为主链码;
本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
例如,计算得到的哈希值如步骤102中的例举,为0d 39 a1 7e c1 44 3c 14 9545 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f e4 9c f6c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4 f6 91 5d 37 d5 a8 5d 27 976d 44 3c,则将其高256比特作为主私钥,低256比特作为主链码,得到:
主私钥——0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f;
主链码——e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c。
步骤104、对主私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为主公钥。
即本实施例中,主公钥=主私钥*椭圆曲线基点。
例如,主私钥如步骤103中的例举,为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,椭圆曲线基点为79 be66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce 28 d9 59 f2 81 5b16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8 fd 17 b4 48 a6 8554 19 9c 47 d0 8f fb 10 d4 b8,则对主私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果如下:
11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3eed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5ea5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89。
本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为主公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示主公钥的格式为未压缩;
例如,ECC点乘运算结果如上例举,为11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3ce7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 7507 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,则将其作为主公钥,得到的主公钥如下:
04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d43e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a05e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89。
2、子私钥、子公钥和子链码的派生过程:
1)派生子私钥、子公钥和子链码,如图2所示,包括:
步骤201、比较当前子密钥索引和预设值,若当前子密钥索引小于预设值则执行步骤202,否则执行步骤208;
具体地,子密钥索引的长度为32比特,初始值为00 00 00 00,每根据子密钥索引进行一次计算,将子密钥索引递增,例如加1。
本实施例中,预设值优选为80 00 00 00。
步骤202、将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
例如,父公钥为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 294c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,子密钥索引为00 0000 00,则将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d43e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a05e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00。
步骤203、用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
本实施例中,预设算法优选为HMAC-SHA512算法。
例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤202中的例举,为0411 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9ba4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00,则用父链码作密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,得到:
b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4ad1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 716d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04。
步骤204、将计算得到的哈希值的低位端预设长度的数据作为子链码,以椭圆曲线基点的阶为模对父私钥和计算得到的哈希值的告我段预设长度的数据做ECC加法模运算;
本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
例如,计算得到的哈希值如步骤203中的例举,为b1 85 93 8d 8e 60 c9 19 da3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2fd0 7c 04,椭圆曲线基点的阶为FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE BAAE DC E6 AF 48 A0 3B BF D2 5E 8C D0 36 41 41,父私钥为0d 39 a1 7e c1 44 3c 1495 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,则:
将计算得到的哈希值的低256比特作为子链码,得到的子链码为13 25 c2 ca 52e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c04;
以椭圆曲线基点的阶为模对父私钥和计算得到的哈希值的高256比特做ECC加法模运算,得到的ECC加法模运算为be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 186f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d。
步骤205、判断ECC加法模运算的结果是否为预设值,是则执行步骤206,否则执行步骤207;
即本实施例中,判断(父私钥+left hash)%n的结果是否为预设值,其中,lefthash为计算得到的哈希值的高256比特,n为椭圆曲线基点的阶。
本实施例中,预设值优选为0。
步骤206、将当前子密钥索引递增,返回步骤201;
具体地,将当前子密钥索引自加1。
步骤207、将ECC加法模运算的结果作为子私钥,对子私钥和椭圆曲线基点做ECC点乘运算,将运算结果作为子公钥。
即本实施例中,子公钥=子私钥*椭圆曲线基点。
例如,ECC加法模运算的结果如步骤204中的例举,为be bf 35 0c 4f a5 05 2e6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d,则将ECC加法模运算的结果作为子私钥,得到的子私钥如下:
be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3ead bc f8 c6 23 9c 4a d8 3d。
例如,子私钥如上例举,为be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 186f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d,椭圆曲线基点为79 be 66 7e f9dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce 28 d9 59 f2 81 5b 16 f8 1798 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8 fd 17 b4 48 a6 85 54 19 9c47 d0 8f fb 10 d4 b8,则对子私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果如下:
3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 6954 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d64e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
例如,ECC点乘运算结果如上例举,为3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 0885 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 271a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e,则将ECC点乘运算结果作为子公钥,得到的子公钥如下:
04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 0669 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 ddd6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
步骤208、在父私钥的高位端补位;
本实施例中,补位数据优选为00;
例如,父私钥为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,补位数据为00,则在父私钥的高位端补位,得到的补位后的父私钥如下:
00 0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9ef3 dc 29 f8 ee 82 53 e7 47 2f。
步骤209、将补位后的父私钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
例如,补位后的父私钥如步骤208中的例举,为00 0d 39 a1 7e c1 44 3c 14 9545 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,当前子密钥索引为80 00 00 00,则将补位后的父私钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
00 0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9ef3 dc 29 f8 ee 82 53 e7 47 2f 80 00 00 00。
步骤210、使用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
本实施例中,预设算法优选为HMAC-SHA512。
例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤209中的例举,为000d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8ee 82 53 e7 47 2f 80 00 00 00,则使用父链码作为哈希密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,得到的哈希值如下:
a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd18 85 f8 01 90 ec 83 ae 92 8f 91 8e 03 75 ff 5e ac fd 2f 77 ce b6 f8 36 e0 4793 73 3e aa 50 7a b4 46 3c 86 2e b7 d9 0b 5f。
步骤211、将计算得到的哈希值的低位端预设长度的数据作为子链码,以椭圆曲线基点的阶为模对补位前的父私钥和计算得到的哈希值的高位端预设长度的数据做ECC加法模运算;
本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
例如,计算得到的哈希值如步骤210中的例举,为a9 9b 65 8d 13 50 ef 0e 612d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92 8f 91 8e03 75 ff 5e ac fd 2f 77 ce b6 f8 36 e0 47 93 73 3e aa 50 7a b4 46 3c 86 2e b7d9 0b 5f,则:
将计算得到的哈希值的低256比特作为子链码,得到的子链码为8f 91 8e 03 75ff 5e ac fd 2f 77 ce b6 f8 36 e0 47 93 73 3e aa 50 7a b4 46 3c 86 2e b7 d9 0b5f;
计算得到的哈希值的高256比特为a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92。
例如,椭圆曲线基点的阶为FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFFE BA AE DC E6 AF 48 A0 3B BF D2 5E 8C D0 36 41 41,补位前的父私钥如步骤208中的例举,为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3dc 29 f8 ee 82 53 e7 47 2f,计算得到的哈希值的高256比特如上例举,为a9 9b 65 8d13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83ae 92,则以椭圆曲线基点的阶为模对补位前的父私钥和计算得到的哈希值的高256比特做ECC加法模运算,得到的ECC加法模运算的结果如下:
b6 d5 07 0b d4 95 2b 22 f6 72 ee 53 5c 95 53 03 c3 5c aa 42 96 35 d0f4 af f0 f0 13 40 6a f5 c1。
步骤212、判断ECC加法模运算的结果是否为预设值,是则执行步骤213,否则执行步骤214;
即本实施例中,判断(补位前的父私钥+left hash)%n的结果是否为预设值,其中,left hash为计算得到的哈希值的高256比特,n为椭圆曲线基点的阶。
本实施例中,预设值优选为0。
步骤213、将当前子密钥索引递增,返回步骤209;
具体地,将当前子密钥索引自加1。
步骤214、将ECC加法模运算的结果作为子私钥,对子私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为子公钥。
即本实施例中,子公钥=子私钥*椭圆曲线基点。
例如,ECC加法模运算的结果如步骤211中的例举,为b6 d5 07 0b d4 95 2b 22f6 72 ee 53 5c 95 53 03 c3 5c aa 42 96 35 d0 f4 af f0 f0 13 40 6a f5 c1,椭圆曲线基点为79 be 66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce28 d9 59 f2 81 5b 16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8fd 17 b4 48 a6 85 54 19 9c 47 d0 8f fb 10 d4 b8则:
将ECC加法模运算的结果作为子私钥,得到子私钥为b6 d5 07 0b d4 95 2b 22f6 72 ee 53 5c 95 53 03 c3 5c aa 42 96 35 d0 f4 af f0 f0 13 40 6a f5 c1;
对子私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果为8e 95 b6f6 21 33 07 77 11 4c 0d 79 a5 18 0b 45 21 55 ef 09 8c 9e 66 50 d3 2f d7 68 610c 8f 9e e7 38 c2 9a 44 da a1 93 fc fb 22 d4 0c 0a b9 d2 85 97 5b 75 a8 05 0bb6 c2 ba 20 a7 e0 82 3f 12。
本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
例如,ECC点乘运算结果如上例举,为8e 95 b6 f6 21 33 07 77 11 4c 0d 79 a518 0b 45 21 55 ef 09 8c 9e 66 50 d3 2f d7 68 61 0c 8f 9e e7 38 c2 9a 44 da a193 fc fb 22 d4 0c 0a b9 d2 85 97 5b 75 a8 05 0b b6 c2 ba 20 a7 e0 82 3f 12,则将ECC点乘运算结果作为子公钥,得到子公钥如下:
04 8e 95 b6 f6 21 33 07 77 11 4c 0d 79 a5 18 0b 45 21 55 ef 09 8c 9e66 50 d3 2f d7 68 61 0c 8f 9e e7 38 c2 9a 44 da a1 93 fc fb 22 d4 0c 0a b9 d285 97 5b 75 a8 05 0b b6 c2 ba 20 a7 e0 82 3f 12。
2)派生子公钥和子链码,如图3所示,包括:
步骤301、比较当前子密钥索引和预设值,若当前子密钥索引小于预设值则执行步骤302,否则提示失败;
本实施例中,预设值优选为80 00 00 00。
步骤302、将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
例如,父公钥为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 294c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,当前子密钥索引为00 00 00 00,则将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d43e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a05e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00。
步骤303、使用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
本实施例中,预设算法优选为HMAC-SHA512算法。
例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤302中的例举,为0411 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9ba4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00,则使用父链码作为哈希密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,计算得到的哈希值如下:
b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4ad1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 716d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04。
步骤304、将计算得到的哈希值的低位端预设长度的数据作为子链码;
本实施例中,低位端预设长度的数据优选为低256比特的数据。
例如,计算得到的哈希值如步骤303中的例举,为b1 85 93 8d 8e 60 c9 19 da3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2fd0 7c 04,则将计算得到的哈希值的低256比特作为子链码,得到的子链码如下:
13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f24 65 11 e5 d6 2f d0 7c 04。
步骤305、对椭圆曲线基点和计算得到的哈希值的高位端预设长度的数据做ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
本实施例中,高位端预设长度的数据优选为高256比特的数据。
例如,椭圆曲线基点为79 be 66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 029b fc db 2d ce 28 d9 59 f2 81 5b 16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fbfc 0e 11 08 a8 fd 17 b4 48 a6 85 54 19 9c 47 d0 8f fb 10 d4 b8,计算得到的哈希值如步骤303中的例举,为b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cbb5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04,则:
计算得到的哈希值的高256比特为b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9dd7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e;
对椭圆曲线基点和计算得到的哈希值的高256比特做ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算,得到的ECC加法运算结果为3d 08 74 22 e8 12 ab e5b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 2810 0a 8e 4e。
步骤306、判断ECC加法运算的结果是否为预设值,是则执行步骤307,否则执行步骤308;
即本实施例中,判断父公钥+G*left hash的结果是否为预设值,其中,G为椭圆曲线基点,left hash为计算得到的哈希值的高256比特。
本实施例中,预设值优选为0。
步骤307、将当前子密钥索引递增,返回步骤301;
具体地,将当前子密钥索引自加1。
步骤308、将ECC加法运算的结果作为子公钥。
本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
例如,ECC加法运算结果如步骤305中的例举,为3d 08 74 22 e8 12 ab e5 b8 84a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b341 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a8e 4e,则将ECC加法运算的结果作为子公钥,得到的子公钥如下:
04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 0669 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 ddd6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
本实施例中,使用方法1)和2)根据相同的父密钥、父链码、子密钥索引派生得到的子公钥相同。
本实施例以数字货币交易为应用场景,提供一种具体实施方式,具体包括:
初始化数字货币钱包(以下将数字货币钱包简称为钱包):
步骤401、获取密钥种子和数字货币种子;
步骤402、用数字货币种子作为哈希密钥,根据HMAC-SHA512算法计算密钥种子的哈希值,将密钥种子的哈希值的高256比特作为钱包的主私钥,低256比特作为钱包的主链码;
步骤403、对钱包的主私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为钱包的主公钥;
步骤404、分别将钱包的主私钥、主公钥和主链码作为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为钱包中数字货币账户的主私钥、主公钥和主链码;
本实施例中,数字货币钱包中可以有多个数字货币账户,对应不同类型的数字货币。
具体地,本实施例步骤404中,采用上述方法1)派生子私钥、子公钥和子链码。
步骤405、分别将钱包比特币账户的主私钥、主公钥和主链码作为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为钱包数字货币账户的第一子私钥、第一子公钥和第一子链码。
具体地,本实施例步骤405中,采用上述方法1)派生子私钥、子公钥和子链码。
生成数字货币收取地址:
步骤501、获取钱包数字货币账户的第一子公钥和第一子链码;
步骤502、分别将数字货币账户的第一子公钥和第一子链码作为父公钥和父链码,将第三子密钥索引作为子密钥索引,派生子公钥和子链码,对派生得到的子公钥进行编码,得到数字货币收取地址。
具体地,本实施例中,第三子密钥索引为一个变化的值,其初始值为00 00 0000,每根据第三子密钥索引进行一次计算,将第三子密钥索引的值加1;
本实施例步骤502中,采用上述方法2)派生子公钥和子链码。
本实施例中,对子公钥进行编码,得到数字货币收取地址可以优选地包括:
步骤1、对子公钥进行一次或多次哈希转换,得到哈希转换结果;
本实施例中,步骤1可以优选为:对子公钥依次进行SHA256哈希转换和RIPEMD160哈希转换;
步骤2、根据哈希转换结果计算校验值,根据校验值和哈希转换结果获取待编码数据;
本实施例中,步骤2可以优选为:在哈希转换结果前添加版本号,对添加了版本号的哈希转换结果进行两次SHA256哈希转换,取结果的前4个字节作为校验值,将添加了版本号的哈希转换结果与校验值顺序拼接,得到待编码数据;
步骤3、对待编码数据进行编码得到数字货币收取地址。
本实施例中,步骤3可以优选为:对待编码数据进行Base58编码,得到数字货币收取地址。
例如,子公钥为04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c31e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 292e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e,版本号为00,对子公钥依次进行SHA256哈希转换和RIPEMD160哈希转换,得到的哈希转换结果为c7 63 e9 9354 96 64 69 1e 08 33 c8 5d 4c e5 61 81 08 36 91,添加了版本号的哈希转换结果为00 c7 63 e9 93 54 96 64 69 1e 08 33 c8 5d 4c e5 61 81 08 36 91,对添加了版本号的哈希转换结果进行两次SHA256哈希转换得到的结果为be 5f bb 5d de 28 31 29 96 24dd b6 74 e2 ba 1d ec 9a 9f 22 84 da dd bf 44 16 18 e1 be 23 85 44,取结果的前4个字节得到的校验值为be 5f bb 5d,将添加了版本号的哈希转换结果与校验值顺序拼接得到的待编码数据为00 c7 63 e9 93 54 96 64 69 1e 08 33 c8 5d 4c e5 61 81 08 3691 be 5f bb 5d,对待编码数据进行Base58编码,得到的数字货币收取地址为1KBHADAoC4ys586g2LP1Jy1QBBaR9cofKJ。
查询钱包数字货币账户的数字货币量,如图4所示:
步骤601、分别将钱包数字货币账户的第一子私钥、第一子公钥和第一子链码作为父私钥、父公钥和父链码,将第三子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,得到预设数目的第二子私钥、第二子公钥和第二子链码;
具体地,本实施例步骤601中,采用上述方法1)派生子私钥、子公钥和子链码。
预设数目可优选为20个。
步骤602、对各第二子公钥分别进行预设编码,得到预设数目的数字货币收取地址;
步骤603、在数字货币网络中依次查询各数字货币收取地址中是否有数字货币,若均没有则执行步骤604,否则返回步骤601;
步骤604、将已查询到的有数字货币的数字货币收取地址中的数字货币数量依次相加,得到钱包数字货币账户的数字货币量。
进一步地,步骤502中,得到数字货币收取地址之后,还包括将第三子密钥索引的当前值作为数字货币收取地址索引保存到钱包中;
相应地,查询钱包数字货币账户的数字货币量还可以如图5所示,具体包括:
步骤701、分别将钱包数字货币账户的第一子私钥、第一子公钥和第一子链码作为父私钥、父公钥和父链码,将钱包中保存的各数字货币收取地址索引依次作为子密钥索引,派生子私钥、子公钥和子链码;
具体地,本实施例步骤701中,采用上述方法1)派生子私钥、子公钥和子链码。
步骤702、对派生得到的各子公钥分别进行预设编码,得到各数字货币收取地址;
步骤703、在数字货币网络中依次查询各数字货币收取地址中的数字货币的数量,将各数字货币收取地址中的数字货币的数量依次相加,得到钱包数字货币账户的数字货币量。
根据本实施例提供的方法,只需要备份密钥种子,不需要备份每笔交易对应的密钥,因此备份体积不会随交易次数的增多而变大,易于管理;根据备份的密钥种子即可衍生出全部密钥,以此可以防止密钥损坏给用户造成损失。进一步地有益效果是,用户可以在不暴露私钥的前提下实现数字货币的接收,提高了数字货币交易的安全性。
实施例2
本实施例提供一种适用于数字货币的密钥派生装置,采用本实施例提供的装置派生出的密钥呈树状结构,树的根部为主密钥和主链码,以主密钥为父密钥、主链码为父链码生成的子密钥和子链码为树的第一级密钥和第一级链码,以第一级密钥为父密钥、第一级链码为父链码生成的子密钥和子链码为树的第二级密钥和第二级链码,以此类推。
根据父密钥生成子密钥时引入子密钥索引,根据不同的子密钥索引生成不同的子密钥,子密钥索引与子密钥是一一对应的。
本实施例提供的装置如图6所示,包括:
第一派生模块81,用于根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
本实施例中,第一派生模块81可以具体用于:将主私钥、主公钥和主链码分别作为父私钥、父公钥和父链码,或者将上一级子私钥、上一级子公钥和上一级子链码分别作为父私钥、父公钥和父链码,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
具体地,第一派生模块81可以进一步包括:
第一拼接单元811,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元812,用于用父链码作为哈希密钥,根据预设算法计算第一拼接单元811得到的第一拼接数据的哈希值;
第一截取单元813,用于对第一哈希单元812得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元814,用于以预设椭圆曲线的基点的阶为模数,对父私钥和第一截取单元813得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元815,用于判断第一运算单元814得到的第一运算结果是否为预设值;
第一递增单元816,用于当第一判断单元815的判断结果为是时,将子密钥索引递增;
第一密钥获取单元817,用于当第一判断单元815的判断结果为否时,将第一运算单元814得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
其中,第一截取单元813可以具体用于:截取第一哈希单元812得到的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第一数据。
本实施例中,所述装置还可以包括:
第一比较模块82,用于比较子密钥索引和预设值;
第二派生模块83,用于当第一比较模块82确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
相应地,第一派生模块81,具体用于当第一比较模块82确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
具体地,第二派生模块83可以进一步包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断所述第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
其中,第二截取单元可以具体用于:截取所述第二哈希单元得到的第二拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第二数据。
本实施例中,所述装置还可以包括:第三派生模块,用于根据父公钥、父链码和子密钥索引派生子公钥和子链码。
具体地,第三派生模块可以进一步包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述预设椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
其中,第三截取单元可以具体用于:截取所述第三哈希单元得到的第三拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第三数据。
更进一步地,所述装置还可以包括:
第二比较模块,用于比较子密钥索引和预设值;
提示模块,用于当第二比较模块确定子密钥索引大于或者等于预设值时,提示失败;
相应地,第三派生模块,具体用于当第二比较模块确定子密钥索引小于预设值时,根据父公钥、父链码和子密钥索引派生子公钥和子链码。
本实施例中,所述装置还可以包括:生成模块,用于生成主私钥、主公钥和主链码。
具体地,生成模块可以进一步包括:
第四哈希单元,用于获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
第四截取单元,用于对所述第四哈希单元得到的密钥种子的哈希值进行截取,得到主链码和主私钥;
第四运算单元,用于对所述第四截取单元得到的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
其中,第四截取单元可以具体用于:截取所述第四哈希单元得到的密钥种子的哈希值的低位端预设长度的数据作为主链码,高位端预设长度的数据作为主私钥。
实施例3
本实施例提供一种适用于数字货币的密钥派生装置,如图7所示,包括:
第一获取模块91,用于分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引;
第一派生模块92,用于根据第一获取模块91获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
账户密钥生成模块93,用于将第一派生模块92派生的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
一方面,第一派生模块92可以进一步包括:
第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
另一方面,第一派生模块92可以具体包括:
第一比较子模块,用于比较子密钥索引和预设值;
第一派生子模块,用于当所述第一比较子模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
第二派生子模块,用于当所述第一比较子模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
其中,第二派生子模块可以具体包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
本实施例中,所述装置还可以包括:钱包密钥生成模块94,用于获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
本实施例中,所述装置还可以包括:第二获取模块95,用于分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;相应地:
第一派生模块92,还用于根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:
第三获取模块96,用于将第一派生模块92根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
第二派生模块97,用于根据第三获取模块96获取的父公钥、父链码和子密钥索引派生子公钥和子链码;
货币收取地址生成模块98,用于对第二派生模块97派生的子公钥进行编码,得到数字货币收取地址。
一方面,第二派生模块97可以进一步包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
另一方面,第二派生模块97可以具体包括:
第二比较子模块,用于比较第三获取模块96获取的子密钥索引和预设值;
提示子模块,用于当所述第二比较子模块确定第三获取模块96获取的子密钥索引大于或者等于预设值时,提示失败;
派生子模块,用于当所述第二比较子模块确定第三获取模块96获取的子密钥索引小于预设值时,根据第三获取模块96获取的父公钥、父链码和子密钥索引派生子公钥和子链码。
本实施例中,第三密钥获取单元,还可以用于:将子密钥索引的当前值保存为数字货币收取地址索引;相应地:
所述装置还包括:第四获取模块910,用于将第一派生模块92根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生的子私钥、子公钥和子链码分别作为父私钥、父公钥和父链码,将第三密钥获取单元中保存的各数字货币收取地址索引依次作为子密钥索引;
第一派生模块92还用于:根据第四获取模块910获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:账户货币查询模块99,用于将第一派生模块92根据第四获取模块910获取的父私钥、父公钥、父链码和子密钥索引派生的各子公钥分别进行编码,得到各数字货币收取地址,依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量;
或者,本实施例中,第一派生模块92,还用于根据第三获取模块96获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;相应地:
所述装置还包括:账户货币查询模块99,用于对第一派生模块92根据第三获取模块96获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

Claims (40)

1.一种适用于数字货币的密钥派生方法,其特征在于,包括:根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码具体包括:
步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
2.如权利要求1所述的方法,其特征在于,所述对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,具体包括:截取所述第一拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第一数据。
3.如权利要求1所述的方法,其特征在于,所述步骤A1之前还包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
4.如权利要求3所述的方法,其特征在于,所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码具体包括:
步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
5.如权利要求4所述的方法,其特征在于,所述对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,具体包括:截取所述第二拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第二数据。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:根据父公钥、父链码和子密钥索引派生子公钥和子链码;
所述根据父公钥、父链码和子密钥索引派生子公钥和子链码具体包括:
步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
步骤C3、判断ECC加法运算结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将所述ECC加法运算结果作为子公钥。
7.如权利要求6所述的方法,其特征在于,所述步骤C1之前还包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
8.如权利要求6所述的方法,其特征在于,所述对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,具体包括:截取所述第三拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第三数据。
9.如权利要求1所述的方法,其特征在于,所述父私钥为主私钥或上一级子私钥;所述父公钥为主公钥或上一级子公钥;所述父链码为主链码或上一级子链码。
10.如权利要求1所述的方法,其特征在于,所述方法还包括生成主私钥、主公钥和主链码;
所述生成主私钥、主公钥和主链码具体包括:
步骤D1、获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
步骤D2、对所述密钥种子的哈希值进行截取,得到主链码和主私钥;
步骤D3、对所述主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
11.如权利要求10所述的方法,其特征在于,所述对所述密钥种子的哈希值进行截取,得到主链码和主私钥,具体包括:截取所述密钥种子的哈希值的低位端预设长度的数据作为主链码,高位端预设长度的数据作为主私钥。
12.一种适用于数字货币的密钥派生装置,其特征在于,包括:第一派生模块,用于根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述第一派生模块具体包括:
第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
第一递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
13.如权利要求12所述的装置,其特征在于,所述第一截取单元具体用于:截取所述第一哈希单元得到的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第一数据。
14.如权利要求12所述的装置,其特征在于,所述装置还包括第一比较模块和第二派生模块;
所述第一比较模块,用于比较子密钥索引和预设值;
所述第二派生模块,用于当所述第一比较模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述第一派生模块,具体用于当所述第一比较模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
15.如权利要求14所述的装置,其特征在于,所述第二派生模块具体包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断所述第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
16.如权利要求15所述的装置,其特征在于,所述第二截取单元具体用于:截取所述第二哈希单元得到的第二拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第二数据。
17.如权利要求12所述的装置,其特征在于,所述装置还包括:第三派生模块,用于根据父公钥、父链码和子密钥索引派生子公钥和子链码;
所述第三派生模块具体包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述预设椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
18.如权利要求17所述的装置,其特征在于,所述装置还包括第二比较模块和提示模块;
所述第二比较模块,用于比较子密钥索引和预设值;
所述提示模块,用于当所述第二比较模块确定子密钥索引大于或者等于预设值时,提示失败;
所述第三派生模块,具体用于当所述第二比较模块确定子密钥索引小于预设值时,根据父公钥、父链码和子密钥索引派生子公钥和子链码。
19.如权利要求17所述的装置,其特征在于,所述第三截取单元具体用于:截取所述第三哈希单元得到的第三拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第三数据。
20.如权利要求12所述的装置,其特征在于,所述第一派生模块具体用于:将主私钥、主公钥和主链码分别作为父私钥、父公钥和父链码,或者将上一级子私钥、上一级子公钥和上一级子链码分别作为父私钥、父公钥和父链码,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
21.如权利要求12所述的装置,其特征在于,所述装置还包括:生成模块,用于生成主私钥、主公钥和主链码;
所述生成模块,具体包括:
第四哈希单元,用于获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
第四截取单元,用于对所述第四哈希单元得到的密钥种子的哈希值进行截取,得到主链码和主私钥;
第四运算单元,用于对所述第四截取单元得到的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
22.如权利要求21所述的装置,其特征在于,所述第四截取单元具体用于:截取所述第四哈希单元得到的密钥种子的哈希值的低位端预设长度的数据作为主链码,高位端预设长度的数据作为主私钥。
23.一种适用于数字货币的密钥派生方法,其特征在于,包括:分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码;
所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,具体包括:
步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
24.如权利要求23所述的方法,其特征在于,所述步骤A1之前还包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
25.如权利要求24所述的方法,其特征在于,所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码具体包括:
步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
26.如权利要求23所述的方法,其特征在于,所述方法还包括:获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
27.如权利要求23所述的方法,其特征在于,所述方法还包括:
步骤1-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤1-2、分别以所述第一子公钥和所述第一子链码为父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父公钥、父链码和子密钥索引派生子公钥和子链码,将派生得到的子公钥作为第二子公钥;
步骤1-3、对所述第二子公钥进行编码,得到数字货币收取地址。
28.如权利要求27所述的方法,其特征在于,所述步骤1-2中的根据父公钥、父链码和子密钥索引派生子公钥和子链码,具体包括:
步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
步骤C3、判断ECC加法运算的结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将ECC加法运算的结果作为子公钥。
29.如权利要求28所述的方法,其特征在于,所述步骤C1之前还包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
30.如权利要求28所述的方法,其特征在于,所述步骤C3中,当判断ECC加法运算的结果不为预设值时,还包括:将子密钥索引的当前值保存为数字货币收取地址索引;
所述方法还包括:
步骤2-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤2-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将各已保存的数字货币收取地址索引依次作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子公钥作为第二子公钥;
步骤2-3、对各第二子公钥分别进行编码,得到各数字货币收取地址;
步骤2-4、依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量。
31.如权利要求23所述的方法,其特征在于,所述方法还包括:
步骤3-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
步骤3-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,得到预设数目的第二子私钥、第二子公钥和第二子链码;
步骤3-3、对各第二子公钥分别进行编码,得到预设数目的数字货币收取地址;
步骤3-4、依次查询各数字货币收取地址中是否有数字货币,若均没有则将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量;否则返回步骤3-2得到新的预设数目的第二子私钥、第二子公钥和第二子链码,然后执行步骤3-3。
32.一种适用于数字货币的密钥派生装置,其特征在于,包括:
第一获取模块,用于分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引;
第一派生模块,用于根据所述第一获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
账户密钥生成模块,用于将所述第一派生模块派生的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码;
所述第一派生模块具体包括:
第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
33.如权利要求32所述的装置,其特征在于,所述第一派生模块,具体包括:
第一比较子模块,用于比较子密钥索引和预设值;
第一派生子模块,用于当所述第一比较子模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
第二派生子模块,用于当所述第一比较子模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
34.如权利要求33所述的装置,其特征在于,所述第二派生子模块具体包括:
第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
第二判断单元,用于判断第二运算单元得到的第二运算结果是否为预设值;
第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
35.如权利要求32所述的装置,其特征在于,所述装置还包括:钱包密钥生成模块,用于获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
36.如权利要求32所述的装置,其特征在于,所述装置还包括:第二获取模块,用于分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:第三获取模块、第二派生模块和货币收取地址生成模块;
所述第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
所述第二派生模块,用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码;
所述货币收取地址生成模块,用于对所述第二派生模块派生的子公钥进行编码,得到数字货币收取地址。
37.根据权利要求36所述的装置,其特征在于,所述第二派生模块,具体包括:
第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
第三运算单元,用于对所述椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
38.如权利要求37所述的装置,其特征在于,所述第二派生模块具体包括:
第二比较子模块,用于比较所述第三获取模块获取的子密钥索引和预设值;
提示子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引大于或者等于预设值时,提示失败;
派生子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引小于预设值时,根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码。
39.如权利要求37所述的装置,其特征在于:
所述第三密钥获取单元还用于:将子密钥索引的当前值保存为数字货币收取地址索引;
所述装置还包括:第四获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子私钥、子公钥和子链码分别作为父私钥、父公钥和父链码,将所述第三密钥获取单元中保存的各数字货币收取地址索引依次作为子密钥索引;
所述第一派生模块还用于:根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:账户货币查询模块,用于将所述第一派生模块根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的各子公钥分别进行编码,得到各数字货币收取地址,依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量。
40.如权利要求32所述的装置,其特征在于:
所述装置还包括:第二获取模块,用于以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;
所述装置还包括:货币收取地址生成模块,用于对所述第一派生模块根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。
CN201610792595.8A 2016-08-31 2016-08-31 适用于数字货币的密钥派生方法及装置 Active CN106411506B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610792595.8A CN106411506B (zh) 2016-08-31 2016-08-31 适用于数字货币的密钥派生方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610792595.8A CN106411506B (zh) 2016-08-31 2016-08-31 适用于数字货币的密钥派生方法及装置

Publications (2)

Publication Number Publication Date
CN106411506A CN106411506A (zh) 2017-02-15
CN106411506B true CN106411506B (zh) 2019-04-16

Family

ID=58001091

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610792595.8A Active CN106411506B (zh) 2016-08-31 2016-08-31 适用于数字货币的密钥派生方法及装置

Country Status (1)

Country Link
CN (1) CN106411506B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836717B2 (en) 2017-12-04 2023-12-05 Vijay Madisetti System and method for processing payments in fiat currency using blockchain and tethered tokens

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11538031B2 (en) 2017-03-31 2022-12-27 Vijay Madisetti Method and system for identity and access management for blockchain interoperability
GB201705749D0 (en) 2017-04-10 2017-05-24 Nchain Holdings Ltd Computer-implemented system and method
CN107480986B (zh) * 2017-08-14 2019-08-09 飞天诚信科技股份有限公司 一种利用硬件实现数字货币钱包的方法及硬件钱包
CN108092765A (zh) * 2017-11-23 2018-05-29 深圳市文鼎创数据科技有限公司 一种支持无限个用户密钥的方法、装置及设备
CN110535645A (zh) * 2018-05-24 2019-12-03 上海赢亥信息科技有限公司 一种数字资产管理装置的备份系统和方法
CN109067526A (zh) * 2018-08-15 2018-12-21 数字钱包(北京)科技有限公司 层次公私钥对生成方法和装置
CN109471744B (zh) * 2018-11-21 2021-08-17 北京蓝石环球区块链科技有限公司 基于区块链的主链加并行多子链系统架构
CN109816362B (zh) * 2019-01-28 2021-07-06 杭州复杂美科技有限公司 红包处理方法、设备和存储介质
CN109873828B (zh) * 2019-03-05 2021-07-02 腾讯科技(深圳)有限公司 资源管理方法、装置、设备和存储介质
CN110505061B (zh) * 2019-09-06 2022-05-03 北京天诚安信科技股份有限公司 一种数字签名算法及系统
CN111464297B (zh) * 2020-03-30 2023-05-26 百度国际科技(深圳)有限公司 基于区块链的事务处理方法、装置、电子设备和介质
CN111447063B (zh) * 2020-05-13 2021-02-26 江苏恒宝智能系统技术有限公司 一种冷钱包派生密钥的生成方法及装置
CN112865971B (zh) * 2021-03-29 2023-01-31 中信银行股份有限公司 私钥的生成方法、装置、电子设备及计算机可读存储介质
CN114039726B (zh) * 2021-11-08 2022-11-11 腾讯科技(深圳)有限公司 一种密钥生成的方法、密钥获取的方法、相关装置及介质
CN114697019B (zh) * 2022-02-24 2023-12-15 南京工程学院 一种用户账号隐私保护方法及系统
CN114465726B (zh) * 2022-04-13 2022-06-28 北京银联金卡科技有限公司 基于安全单元和可信执行环境的数字钱包安全框架系统
CN114760054A (zh) * 2022-06-14 2022-07-15 浙江毫微米科技有限公司 基于数字钱包的密钥管理方法、装置及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102111266A (zh) * 2009-12-28 2011-06-29 航天信息股份有限公司 基于椭圆曲线的组密钥产生方法
CN102651743A (zh) * 2012-05-02 2012-08-29 飞天诚信科技股份有限公司 一种令牌种子的生成方法
WO2012172080A1 (en) * 2011-06-17 2012-12-20 Universite Libre De Bruxelles Generation of cryptographic keys
US8639625B1 (en) * 1995-02-13 2014-01-28 Intertrust Technologies Corporation Systems and methods for secure transaction management and electronic rights protection
CN103888243A (zh) * 2014-04-15 2014-06-25 飞天诚信科技股份有限公司 一种种子密钥安全传输的方法
CN105306492A (zh) * 2015-11-25 2016-02-03 成都三零瑞通移动通信有限公司 一种针对安全即时通信的异步密钥协商方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8639625B1 (en) * 1995-02-13 2014-01-28 Intertrust Technologies Corporation Systems and methods for secure transaction management and electronic rights protection
CN102111266A (zh) * 2009-12-28 2011-06-29 航天信息股份有限公司 基于椭圆曲线的组密钥产生方法
WO2012172080A1 (en) * 2011-06-17 2012-12-20 Universite Libre De Bruxelles Generation of cryptographic keys
CN102651743A (zh) * 2012-05-02 2012-08-29 飞天诚信科技股份有限公司 一种令牌种子的生成方法
CN103888243A (zh) * 2014-04-15 2014-06-25 飞天诚信科技股份有限公司 一种种子密钥安全传输的方法
CN105306492A (zh) * 2015-11-25 2016-02-03 成都三零瑞通移动通信有限公司 一种针对安全即时通信的异步密钥协商方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836717B2 (en) 2017-12-04 2023-12-05 Vijay Madisetti System and method for processing payments in fiat currency using blockchain and tethered tokens

Also Published As

Publication number Publication date
CN106411506A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN106411506B (zh) 适用于数字货币的密钥派生方法及装置
CN102891898B (zh) 一种基于云存储的网络招投标系统
CN103714458B (zh) 基于二维码的移动终端交易加密方法
CN105610793B (zh) 一种外包数据加密存储与密文查询系统及其应用方法
JP2019508950A (ja) 統合ブロックチェーンに基づくデータ転送制御方法及びシステム
CN106961427B (zh) 一种基于5g通信标准的密文数据搜索方法
CN108632028A (zh) 认证网络
CN110689349A (zh) 一种区块链中的交易哈希值存储和搜索方法及装置
CN110601815B (zh) 一种区块链数据处理方法以及设备
CN109067526A (zh) 层次公私钥对生成方法和装置
KR102142955B1 (ko) 개인키 관리 방법
CN115147111A (zh) 密钥生成方法以及装置、电子设备、存储介质
CN102222188A (zh) 一种信息系统用户密码的生成方法
Li et al. Phantom: An efficient privacy protocol using zk-SNARKs based on smart contracts
CN103118351B (zh) 充值卡数据的生成方法和装置
CN108881122A (zh) App信息验证的方法和装置
CN110245520A (zh) 一种文档加密方法、文档加密装置及终端设备
CN110034928A (zh) 电能计量信息传输装置及方法
CN108365952A (zh) 一种注册的方法、系统及智能密钥安全设备
CN110324364A (zh) 一种离线抽奖方法及电子终端
CN111861485A (zh) 一种基于区块链的数字货币管控方法及设备
CN104462994B (zh) 一种数据加密及解密操作方法
CN112953716A (zh) 一种兑换码生成及其验证方法和装置
CN110086633A (zh) 一种区块链技术中密文防篡改方法
CN104967516A (zh) 多用户加密数据可比较加密方法及加密数据比较方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant