首页 / 专利库 / 银行与财务事项 / 货币 / 数字货币 / 适用于数字货币的密钥派生方法及装置

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

阅读:1035发布:2020-06-17

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

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所述的装置,其特征在于:
所述装置还包括:第二获取模块,用于以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
所述装置还包括:第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
所述第一派生模块,还用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;
所述装置还包括:货币收取地址生成模块,用于对所述第一派生模块根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。

说明书全文

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

技术领域

[0001] 本发明涉及信息安全领域,尤其涉及适用于数字货币的密钥派生方法及装置。

背景技术

[0002] 数字货币是电子货币形式的替代货币,它采用P2P形式,不依靠特定货币机构发行,而是依据特定算法通过大量的计算产生。数字货币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节的安全性,基于密钥学的设计可以使数字货币只能被真实的拥有者转移或支付,确保了货币所有权与流通交易的匿名性。由于数字货币交易的匿名性,用户每次使用不同的地址接收数字货币,通常地址用ECC公钥表示,用户拥有一个钱包,每进行一笔数字货币交易,需要在钱包中保存与该笔交易对应的ECC密钥,然而钱包的空间是有限的,所以需要及时备份钱包中的ECC密钥。
[0003] 发明人在实现本发明的过程中发现,现有技术中至少存在以下缺陷
[0004] 1、随着交易次数的增多,密钥的备份体积越来越大,不易管理;
[0005] 2、密钥损坏后不能恢复,若密钥数据损坏,则与密钥数据对应的交易中的数字货币也将无法再消费。

发明内容

[0006] 本发明的目的是克服现有技术的缺陷,提供适用于数字货币的密钥派生方法及装置。
[0007] 本发明是通过下述技术方案实现的:
[0008] 首先,本发明提供一种适用于数字货币的密钥派生方法及装置。
[0009] 所述方法包括:根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0010] 所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
[0011] 步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
[0012] 步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
[0013] 步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
[0014] 所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
[0015] 进一步地,所述步骤A1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0016] 所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
[0017] 步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
[0018] 步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
[0019] 步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0020] 进一步地,所述方法还可以包括:根据父公钥、父链码和子密钥索引派生子公钥和子链码。
[0021] 所述根据父公钥、父链码和子密钥索引派生子公钥和子链码可以具体包括:
[0022] 步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
[0023] 步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0024] 步骤C3、判断ECC加法运算结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将所述ECC加法运算结果作为子公钥。
[0025] 所述步骤C1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
[0026] 本方法中,所述父私钥为主私钥或上一级子私钥;所述父公钥为主公钥或上一级子公钥;所述父链码为主链码或上一级子链码。
[0027] 进一步地,所述方法中还可以包括:生成主私钥、主公钥和主链码。
[0028] 所述生成主私钥、主公钥和主链码可以具体包括:
[0029] 步骤D1、获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
[0030] 步骤D2、对所述密钥种子的哈希值进行截取,得到主链码和主私钥;
[0031] 步骤D3、对所述主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
[0032] 所述装置,包括:第一派生模,用于根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0033] 所述第一派生模块可以具体包括:
[0034] 第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
[0035] 第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
[0036] 第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
[0037] 第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
[0038] 第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
[0039] 第一递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
[0040] 第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0041] 所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
[0042] 进一步地,所述装置还可以包括:
[0043] 第一比较模块,用于比较子密钥索引和预设值;
[0044] 第二派生模块,用于当所述第一比较模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0045] 相应地,所述第一派生模块,具体用于当所述第一比较模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0046] 所述第二派生模块可以具体包括:
[0047] 第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
[0048] 第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
[0049] 第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
[0050] 第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
[0051] 第二判断单元,用于判断所述第二运算单元得到的第二运算结果是否为预设值;
[0052] 第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
[0053] 第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0054] 进一步地,所述装置还可以包括:第三派生模块,用于根据父公钥、父链码和子密钥索引派生子公钥和子链码。
[0055] 所述第三派生模块可以具体包括:
[0056] 第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
[0057] 第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
[0058] 第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
[0059] 第三运算单元,用于对所述预设椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0060] 第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
[0061] 第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
[0062] 第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
[0063] 更进一步地,所述装置还可以包括:
[0064] 第二比较模块,用于比较子密钥索引和预设值;
[0065] 提示模块,用于当所述第二比较模块确定子密钥索引大于或者等于预设值时,提示失败;
[0066] 相应地,所述第三派生模块,具体用于当所述第二比较模块确定子密钥索引小于预设值时,根据父公钥、父链码和子密钥索引派生子公钥和子链码。
[0067] 本装置中,所述第一派生模块可以具体用于:将主私钥、主公钥和主链码分别作为父私钥、父公钥和父链码,或者将上一级子私钥、上一级子公钥和上一级子链码分别作为父私钥、父公钥和父链码,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0068] 进一步地,所述装置还可以包括:生成模块,用于生成主私钥、主公钥和主链码。
[0069] 所述生成模块,可以具体包括:
[0070] 第四哈希单元,用于获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
[0071] 第四截取单元,用于对所述第四哈希单元得到的密钥种子的哈希值进行截取,得到主链码和主私钥;
[0072] 第四运算单元,用于对所述第四截取单元得到的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
[0073] 其次,本发明提供另一种适用于数字货币的密钥派生方法及装置。
[0074] 所述方法包括:分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
[0075] 本方法中,所述根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,可以具体包括:
[0076] 步骤A1、将父公钥与子密钥索引顺序拼接得到第一拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第一拼接数据的哈希值;
[0077] 步骤A2、对所述第一拼接数据的哈希值进行截取,得到子链码和第一数据,以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一数据做ECC加法模运算,得到第一运算结果;
[0078] 步骤A3、判断所述第一运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父公钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
[0079] 所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
[0080] 所述步骤A1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤A1,否则根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0081] 所述根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码可以具体包括:
[0082] 步骤B1、对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第二拼接数据的哈希值;
[0083] 步骤B2、对所述第二拼接数据的哈希值进行截取,得到子链码和第二数据,以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二数据做ECC加法模运算,得到第二运算结果;
[0084] 步骤B3、判断所述第二运算结果是否为预设值,是则将子密钥索引递增,根据父私钥、父链码和递增后的子密钥索引重新派生子私钥、子公钥和子链码;否则将所述第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0085] 进一步地,所述方法还可以包括:获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
[0086] 所述方法还可以包括:
[0087] 步骤1-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
[0088] 步骤1-2、分别以所述第一子公钥和所述第一子链码为父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父公钥、父链码和子密钥索引派生子公钥和子链码,将派生得到的子公钥作为第二子公钥;
[0089] 步骤1-3、对所述第二子公钥进行编码,得到数字货币收取地址。
[0090] 本方法中,所述根据父公钥、父链码和子密钥索引派生子公钥和子链码,可以具体包括:
[0091] 步骤C1、将父公钥与子密钥索引顺序拼接得到第三拼接数据;用父链码作为哈希密钥,根据预设算法计算所述第三拼接数据的哈希值;
[0092] 步骤C2、对所述第三拼接数据的哈希值进行截取,得到子链码和第三数据,对所述预设椭圆曲线的基点和所述第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0093] 步骤C3、判断ECC加法运算的结果是否为预设值,是则将子密钥索引递增,根据父公钥、父链码和递增后的子密钥索引重新派生子公钥和子链码;否则将ECC加法运算的结果作为子公钥。
[0094] 所述步骤C1之前还可以包括:比较子密钥索引和预设值,当子密钥索引小于所述预设值时,执行步骤C1,否则提示失败。
[0095] 所述步骤C3中,当判断ECC加法运算的结果不为预设值时,还包括:将子密钥索引的当前值保存为数字货币收取地址索引;
[0096] 相应地,所述方法还可以包括:
[0097] 步骤2-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
[0098] 步骤2-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将各已保存的数字货币收取地址索引依次作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子公钥作为第二子公钥;
[0099] 步骤2-3、对各第二子公钥分别进行编码,得到各数字货币收取地址;
[0100] 步骤2-4、依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量。
[0101] 进一步地,所述方法还可以包括:
[0102] 步骤3-1、分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为第一子私钥、第一子公钥和第一子链码;
[0103] 步骤3-2、分别以所述第一子私钥、第一子公钥和第一子链码为父私钥、父公钥和父链码,将第三子密钥索引作为子密钥索引,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码,得到预设数目的第二子私钥、第二子公钥和第二子链码;
[0104] 步骤3-3、对各第二子公钥分别进行编码,得到预设数目的数字货币收取地址;
[0105] 步骤3-4、依次查询各数字货币收取地址中是否有数字货币,若均没有则将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量;否则返回步骤3-2得到新的预设数目的第二子私钥、第二子公钥和第二子链码,然后执行步骤3-3。
[0106] 所述装置包括:
[0107] 第一获取模块,用于分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引;
[0108] 第一派生模块,用于根据所述第一获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0109] 账户密钥生成模块,用于将所述第一派生模块派生的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
[0110] 一方面,本装置中,所述第一派生模块可以具体包括:
[0111] 第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
[0112] 第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
[0113] 第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
[0114] 第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
[0115] 第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
[0116] 递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
[0117] 第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
[0118] 所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
[0119] 另一方面,所述第一派生模块,可以具体包括:
[0120] 第一比较子模块,用于比较子密钥索引和预设值;
[0121] 第一派生子模块,用于当所述第一比较子模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0122] 第二派生子模块,用于当所述第一比较子模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0123] 所述第二派生子模块可以具体包括:
[0124] 第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
[0125] 第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
[0126] 第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
[0127] 第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
[0128] 第二判断单元,用于判断第二运算单元得到的第二运算结果是否为预设值;
[0129] 第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
[0130] 第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0131] 进一步地,所述装置还可以包括:钱包密钥生成模块,用于获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
[0132] 所述装置还可以包括:第二获取模块,用于分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
[0133] 相应地,所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0134] 所述装置还包括:第三获取模块、第二派生模块和货币收取地址生成模块;
[0135] 所述第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
[0136] 所述第二派生模块,用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码;
[0137] 所述货币收取地址生成模块,用于对所述第二派生模块派生的子公钥进行编码,得到数字货币收取地址。
[0138] 一方面,所述第二派生模块,可以具体包括:
[0139] 第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
[0140] 第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
[0141] 第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
[0142] 第三运算单元,用于对所述椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0143] 第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
[0144] 第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
[0145] 第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
[0146] 另一方面,所述第二派生模块可以具体包括:
[0147] 第二比较子模块,用于比较所述第三获取模块获取的子密钥索引和预设值;
[0148] 提示子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引大于或者等于预设值时,提示失败;
[0149] 派生子模块,用于当所述第二比较子模块确定所述第三获取模块获取的子密钥索引小于预设值时,根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生子公钥和子链码。
[0150] 进一步地,所述第三密钥获取单元还用于:将子密钥索引的当前值保存为数字货币收取地址索引;相应地:
[0151] 所述装置还包括:第四获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子私钥、子公钥和子链码分别作为父私钥、父公钥和父链码,将所述第三密钥获取单元中保存的各数字货币收取地址索引依次作为子密钥索引;
[0152] 所述第一派生模块还用于:根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0153] 所述装置还包括:账户货币查询模块,用于将所述第一派生模块根据所述第四获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的各子公钥分别进行编码,得到各数字货币收取地址,依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量;
[0154] 或者,进一步地:
[0155] 所述装置还包括:第二获取模块,用于以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;
[0156] 所述第一派生模块,还用于根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0157] 所述装置还包括:第三获取模块,用于将所述第一派生模块根据所述第二获取模块获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
[0158] 所述第一派生模块,还用于根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;
[0159] 所述装置还包括:货币收取地址生成模块,用于对所述第一派生模块根据所述第三获取模块获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。
[0160] 本发明的有益效果在于:采用本发明提供的技术方案,根据密钥种子能够衍生出全部密钥,因此只需要备份密钥种子,而不需要备份根据密钥种子派生出的子密钥,所述备份体积不会随密钥的增多而变大,易于管理,并且能够避免密钥损坏给用户造成损失。进一步地有益效果是,可以在不暴露私钥的前提下实现子公钥的派生,提高了密钥使用的安全性。附图说明
[0161] 为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0162] 图1为本发明实施例1中提供的主密钥和主链码的生成方法的流程图
[0163] 图2为本发明实施例1中提供的子私钥、子公钥和子链码的生成方法的流程图;
[0164] 图3为本发明实施例1中提供的子公钥和子链码的生成方法的流程图;
[0165] 图4为查询数字货币账户的数字货币量的一种方法流程图;
[0166] 图5为查询数字货币账户的数字货币量的另一种方法流程图;
[0167] 图6为本发明实施例2提供的一种适用于数字货币的密钥派生装置的方框图
[0168] 图7为本发明实施例3提供的一种适用于数字货币的密钥派生装置的方框图。

具体实施方式

[0169] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0170] 在进行具体说明之前,对ECC和HMAC进行简单的说明,如下:
[0171] ECC(Elliptic Curve Cryptography,椭圆曲线密码学)是基于椭圆曲线数学的一种公钥密码的方法。密码学中,描述一条椭圆曲线,常用到六个参量:T=(p,a,b,G,n,h),其中p、a、b用于确定一条椭圆曲线,G为椭圆曲线的基点,n为G的阶(即nG=0(无穷远点)),h是椭圆曲线上所有点的个数m与n相除所得结果的整数部分。
[0172] HMAC(Hash-based Message Authentication Code,密钥相关的哈希运算消息认证码)运算运用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出,当运用的哈希算法具体为SHA512时,HMAC记作HMAC-SHA512。
[0173] 实施例1
[0174] 本实施例提供一种适用于数字货币的密钥派生方法,采用本实施例提供的方法派生出的密钥呈树状结构,树的根部为主密钥和主链码,以主密钥为父密钥、主链码为父链码生成的子密钥和子链码为树的第一级密钥和第一级链码,以第一级密钥为父密钥、第一级链码为父链码生成的子密钥和子链码为树的第二级密钥和第二级链码,以此类推。
[0175] 根据父密钥生成子密钥时引入子密钥索引,根据不同的子密钥索引生成不同的子密钥,子密钥索引与子密钥是一一对应的。
[0176] 所述方法具体包括:
[0177] 1、主私钥、主公钥和主链码的派生过程,如图1所示,包括:
[0178] 步骤101、使用伪随机数生成器生成一个伪随机数作为密钥种子。
[0179] 例如,伪随机数生成器生成的伪随机数为5d 1c 8c 8d 5c b3 d0 46 d7 2f ee bd 48 77 ec 85 d3 51 42 06 a9 ef a1 42 23 d9 b0 07 c7 c1 82 0a c2 35 89 84 0e 67 67 9b 76 29 08 81 df 31 d4 7d 79 80 95 cd 71 c4 b9 70 fb cb ef 58 58 63 dc a6,将其作为密钥种子,得到密钥种子如下:
[0180] 5d 1c 8c 8d 5c b3 d0 46 d7 2f ee bd 48 77 ec 85 d3 51 42 06 a9 ef a1 42 23 d9 b0 07 c7 c1 82 0a c2 35 89 84 0e 67 67 9b 76 29 08 81 df 31 d4 7d 79 
80 95 cd 71 c4 b9 70 fb cb ef 58 58 63 dc a6。
[0181] 步骤102、使用预设字符串作为哈希密钥,根据预设算法计算密钥种子的哈希值;
[0182] 本实施例中,预设算法优选为HMAC-SHA512算法。
[0183] 例如,预设字符串为“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 23 d9 b0 07 c7 c1 82 0a c2 35 89 84 0e 67 67 9b 76 29 08 81 df 31 d4 7d 79 80 95 cd 71 c4 b9 70 fb cb ef 58 58 63 dc a6,则计算得到的哈希值如下:
[0184] 0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 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 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c。
[0185] 步骤103、将计算得到的哈希值的高位端预设长度的数据作为主私钥,低位端预设长度的数据作为主链码;
[0186] 本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
[0187] 例如,计算得到的哈希值如步骤102中的例举,为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 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 b4 f6 91 5d 37 d5 a8 5d 27 97 
6d 44 3c,则将其高256比特作为主私钥,低256比特作为主链码,得到:
[0188] 主私钥——0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f;
[0189] 主链码——e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c。
[0190] 步骤104、对主私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为主公钥。
[0191] 即本实施例中,主公钥=主私钥*椭圆曲线基点。
[0192] 例如,主私钥如步骤103中的例举,为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,椭圆曲线基点为79 be 66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce 28 d9 59 f2 81 5b 
16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8 fd 17 b4 48 a6 85 
54 19 9c 47 d0 8f fb 10 d4 b8,则对主私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果如下:
[0193] 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89。
[0194] 本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为主公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示主公钥的格式为未压缩;
[0195] 例如,ECC点乘运算结果如上例举,为11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,则将其作为主公钥,得到的主公钥如下:
[0196] 04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 
5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89。
[0197] 2、子私钥、子公钥和子链码的派生过程:
[0198] 1)派生子私钥、子公钥和子链码,如图2所示,包括:
[0199] 步骤201、比较当前子密钥索引和预设值,若当前子密钥索引小于预设值则执行步骤202,否则执行步骤208;
[0200] 具体地,子密钥索引的长度为32比特,初始值为00 00 00 00,每根据子密钥索引进行一次计算,将子密钥索引递增,例如加1。
[0201] 本实施例中,预设值优选为80 00 00 00。
[0202] 步骤202、将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
[0203] 例如,父公钥为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,子密钥索引为00 00 
00 00,则将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
[0204] 04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 
5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00。
[0205] 步骤203、用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
[0206] 本实施例中,预设算法优选为HMAC-SHA512算法。
[0207] 例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤202中的例举,为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 
10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00,则用父链码作密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,得到:
[0208] b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04。
[0209] 步骤204、将计算得到的哈希值的低位端预设长度的数据作为子链码,以椭圆曲线基点的阶为模对父私钥和计算得到的哈希值的告我段预设长度的数据做ECC加法模运算;
[0210] 本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
[0211] 例如,计算得到的哈希值如步骤203中的例举,为b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04,椭圆曲线基点的阶为FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE BA AE DC E6 AF 48 A0 3B BF D2 5E 8C D0 36 41 41,父私钥为0d 39 a1 7e c1 44 3c 14 
95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,则:
[0212] 将计算得到的哈希值的低256比特作为子链码,得到的子链码为13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04;
[0213] 以椭圆曲线基点的阶为模对父私钥和计算得到的哈希值的高256比特做ECC加法模运算,得到的ECC加法模运算为be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d。
[0214] 步骤205、判断ECC加法模运算的结果是否为预设值,是则执行步骤206,否则执行步骤207;
[0215] 即本实施例中,判断(父私钥+left hash)%n的结果是否为预设值,其中,left hash为计算得到的哈希值的高256比特,n为椭圆曲线基点的阶。
[0216] 本实施例中,预设值优选为0。
[0217] 步骤206、将当前子密钥索引递增,返回步骤201;
[0218] 具体地,将当前子密钥索引自加1。
[0219] 步骤207、将ECC加法模运算的结果作为子私钥,对子私钥和椭圆曲线基点做ECC点乘运算,将运算结果作为子公钥。
[0220] 即本实施例中,子公钥=子私钥*椭圆曲线基点。
[0221] 例如,ECC加法模运算的结果如步骤204中的例举,为be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d,则将ECC加法模运算的结果作为子私钥,得到的子私钥如下:
[0222] be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d。
[0223] 例如,子私钥如上例举,为be bf 35 0c 4f a5 05 2e 6f 7f 74 74 f6 ad fa 18 6f 0e c3 66 01 49 3e ad bc f8 c6 23 9c 4a d8 3d,椭圆曲线基点为79 be 66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce 28 d9 59 f2 81 5b 16 f8 17 
98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8 fd 17 b4 48 a6 85 54 19 9c 
47 d0 8f fb 10 d4 b8,则对子私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果如下:
[0224] 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 
4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
[0225] 本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
[0226] 例如,ECC点乘运算结果如上例举,为3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 
1a 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点乘运算结果作为子公钥,得到的子公钥如下:
[0227] 04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
[0228] 步骤208、在父私钥的高位端补位;
[0229] 本实施例中,补位数据优选为00;
[0230] 例如,父私钥为0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f,补位数据为00,则在父私钥的高位端补位,得到的补位后的父私钥如下:
[0231] 00 0d 39 a1 7e c1 44 3c 14 95 45 29 b1 58 d6 c2 fa 7e 43 0e 1a 2f 9e f3 dc 29 f8 ee 82 53 e7 47 2f。
[0232] 步骤209、将补位后的父私钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
[0233] 例如,补位后的父私钥如步骤208中的例举,为00 0d 39 a1 7e c1 44 3c 14 95 45 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,则将补位后的父私钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
[0234] 00 0d 39 a1 7e c1 44 3c 14 95 45 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。
[0235] 步骤210、使用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
[0236] 本实施例中,预设算法优选为HMAC-SHA512。
[0237] 例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤209中的例举,为00 0d 39 a1 7e c1 44 3c 14 95 45 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,则使用父链码作为哈希密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,得到的哈希值如下:
[0238] a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92 8f 91 8e 03 75 ff 5e ac fd 2f 77 ce b6 f8 36 e0 47 
93 73 3e aa 50 7a b4 46 3c 86 2e b7 d9 0b 5f。
[0239] 步骤211、将计算得到的哈希值的低位端预设长度的数据作为子链码,以椭圆曲线基点的阶为模对补位前的父私钥和计算得到的哈希值的高位端预设长度的数据做ECC加法模运算;
[0240] 本实施例中,高位端预设长度的数据优选为高256比特的数据,低位端预设长度的数据优选为低256比特的数据。
[0241] 例如,计算得到的哈希值如步骤210中的例举,为a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92 8f 91 8e 
03 75 ff 5e ac fd 2f 77 ce b6 f8 36 e0 47 93 73 3e aa 50 7a b4 46 3c 86 2e b7 d9 0b 5f,则:
[0242] 将计算得到的哈希值的低256比特作为子链码,得到的子链码为8f 91 8e 03 75 ff 5e ac fd 2f 77 ce b6 f8 36 e0 47 93 73 3e aa 50 7a b4 46 3c 86 2e b7 d9 0b 5f;
[0243] 计算得到的哈希值的高256比特为a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92。
[0244] 例如,椭圆曲线基点的阶为FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE 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 f3 dc 29 f8 ee 82 53 e7 47 2f,计算得到的哈希值的高256比特如上例举,为a9 9b 65 8d 13 50 ef 0e 61 2d c4 a2 03 be 90 09 45 19 9c 28 66 96 dd 18 85 f8 01 90 ec 83 ae 92,则以椭圆曲线基点的阶为模对补位前的父私钥和计算得到的哈希值的高256比特做ECC加法模运算,得到的ECC加法模运算的结果如下:
[0245] b6 d5 07 0b d4 95 2b 22 f6 72 ee 53 5c 95 53 03 c3 5c aa 42 96 35 d0 f4 af f0 f0 13 40 6a f5 c1。
[0246] 步骤212、判断ECC加法模运算的结果是否为预设值,是则执行步骤213,否则执行步骤214;
[0247] 即本实施例中,判断(补位前的父私钥+left hash)%n的结果是否为预设值,其中,left hash为计算得到的哈希值的高256比特,n为椭圆曲线基点的阶。
[0248] 本实施例中,预设值优选为0。
[0249] 步骤213、将当前子密钥索引递增,返回步骤209;
[0250] 具体地,将当前子密钥索引自加1。
[0251] 步骤214、将ECC加法模运算的结果作为子私钥,对子私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为子公钥。
[0252] 即本实施例中,子公钥=子私钥*椭圆曲线基点。
[0253] 例如,ECC加法模运算的结果如步骤211中的例举,为b6 d5 07 0b d4 95 2b 22 f6 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 ce 28 d9 59 f2 81 5b 16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 0e 11 08 a8 fd 17 b4 48 a6 85 54 19 9c 47 d0 8f fb 10 d4 b8则:
[0254] 将ECC加法模运算的结果作为子私钥,得到子私钥为b6 d5 07 0b d4 95 2b 22 f6 72 ee 53 5c 95 53 03 c3 5c aa 42 96 35 d0 f4 af f0 f0 13 40 6a f5 c1;
[0255] 对子私钥和椭圆曲线基点做ECC点乘运算,得到的ECC点乘运算结果为8e 95 b6 f6 21 33 07 77 11 4c 0d 79 a5 18 0b 45 21 55 ef 09 8c 9e 66 50 d3 2f d7 68 61 0c 8f 9e e7 38 c2 9a 44 da a1 93 fc fb 22 d4 0c 0a b9 d2 85 97 5b 75 a8 05 0b b6 c2 ba 20 a7 e0 82 3f 12。
[0256] 本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
[0257] 例如,ECC点乘运算结果如上例举,为8e 95 b6 f6 21 33 07 77 11 4c 0d 79 a5 18 0b 45 21 55 ef 09 8c 9e 66 50 d3 2f d7 68 61 0c 8f 9e e7 38 c2 9a 44 da a1 
93 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点乘运算结果作为子公钥,得到子公钥如下:
[0258] 04 8e 95 b6 f6 21 33 07 77 11 4c 0d 79 a5 18 0b 45 21 55 ef 09 8c 9e 66 50 d3 2f d7 68 61 0c 8f 9e e7 38 c2 9a 44 da a1 93 fc fb 22 d4 0c 0a b9 d2 
85 97 5b 75 a8 05 0b b6 c2 ba 20 a7 e0 82 3f 12。
[0259] 2)派生子公钥和子链码,如图3所示,包括:
[0260] 步骤301、比较当前子密钥索引和预设值,若当前子密钥索引小于预设值则执行步骤302,否则提示失败;
[0261] 本实施例中,预设值优选为80 00 00 00。
[0262] 步骤302、将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接;
[0263] 例如,父公钥为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89,当前子密钥索引为
00 00 00 00,则将父公钥和当前子密钥索引分别作为高位端数据和低位端数据进行拼接,拼接得到的数据如下:
[0264] 04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 
5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00。
[0265] 步骤303、使用父链码作为哈希密钥,根据预设算法计算拼接得到的数据的哈希值;
[0266] 本实施例中,预设算法优选为HMAC-SHA512算法。
[0267] 例如,父链码为e4 9c f6 c0 03 7b 1c 18 01 74 13 1c 1b 49 96 1f dc cf c0 b4 f6 91 5d 37 d5 a8 5d 27 97 6d 44 3c,拼接得到的数据如步骤302中的例举,为04 11 ef a5 b3 85 94 70 ff 35 b2 ea 23 3c e7 3a e5 f4 f5 ac 75 b2 d4 3e ed c2 3a 
10 2a a7 03 2e 11 73 b9 14 34 38 59 75 07 6a e9 4f 29 4c cb 98 a0 5e a5 0c 9b a4 f2 18 d2 5d c8 ec d3 58 ea 34 89 00 00 00 00,则使用父链码作为哈希密钥,根据HMAC-SHA512算法计算拼接得到的数据的哈希值,计算得到的哈希值如下:
[0268] b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04。
[0269] 步骤304、将计算得到的哈希值的低位端预设长度的数据作为子链码;
[0270] 本实施例中,低位端预设长度的数据优选为低256比特的数据。
[0271] 例如,计算得到的哈希值如步骤303中的例举,为b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04,则将计算得到的哈希值的低256比特作为子链码,得到的子链码如下:
[0272] 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04。
[0273] 步骤305、对椭圆曲线基点和计算得到的哈希值的高位端预设长度的数据做ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0274] 本实施例中,高位端预设长度的数据优选为高256比特的数据。
[0275] 例如,椭圆曲线基点为79 be 66 7e f9 dc bb ac 55 a0 62 95 ce 87 0b 07 02 9b fc db 2d ce 28 d9 59 f2 81 5b 16 f8 17 98 48 3a da 77 26 a3 c4 65 5d a4 fb fc 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 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e 13 25 c2 ca 52 e1 7b d9 6b ae 7e 6e 
64 3f 47 cc 71 6d 68 64 10 58 2f 24 65 11 e5 d6 2f d0 7c 04,则:
[0276] 计算得到的哈希值的高256比特为b1 85 93 8d 8e 60 c9 19 da 3a 4a c3 9d d7 37 1d f0 cb b5 4b d1 aa 4a d1 92 ff d7 a1 48 63 91 0e;
[0277] 对椭圆曲线基点和计算得到的哈希值的高256比特做ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算,得到的ECC加法运算结果为3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 
10 0a 8e 4e。
[0278] 步骤306、判断ECC加法运算的结果是否为预设值,是则执行步骤307,否则执行步骤308;
[0279] 即本实施例中,判断父公钥+G*left hash的结果是否为预设值,其中,G为椭圆曲线基点,left hash为计算得到的哈希值的高256比特。
[0280] 本实施例中,预设值优选为0。
[0281] 步骤307、将当前子密钥索引递增,返回步骤301;
[0282] 具体地,将当前子密钥索引自加1。
[0283] 步骤308、将ECC加法运算的结果作为子公钥。
[0284] 本实施例中的公钥采用未压缩格式,即将ECC点乘运算结果作为子公钥时,需在ECC点乘运算结果前添加一个字节04,用于表示子公钥的格式为未压缩;
[0285] 例如,ECC加法运算结果如步骤305中的例举,为3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 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加法运算的结果作为子公钥,得到的子公钥如下:
[0286] 04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 2e 19 d9 dd d6 4e 88 bf b4 54 56 ca 13 37 73 28 10 0a 8e 4e。
[0287] 本实施例中,使用方法1)和2)根据相同的父密钥、父链码、子密钥索引派生得到的子公钥相同。
[0288] 本实施例以数字货币交易为应用场景,提供一种具体实施方式,具体包括:
[0289] 初始化数字货币钱包(以下将数字货币钱包简称为钱包):
[0290] 步骤401、获取密钥种子和数字货币种子;
[0291] 步骤402、用数字货币种子作为哈希密钥,根据HMAC-SHA512算法计算密钥种子的哈希值,将密钥种子的哈希值的高256比特作为钱包的主私钥,低256比特作为钱包的主链码;
[0292] 步骤403、对钱包的主私钥和椭圆曲线基点做ECC点乘运算,将ECC点乘运算结果作为钱包的主公钥;
[0293] 步骤404、分别将钱包的主私钥、主公钥和主链码作为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为钱包中数字货币账户的主私钥、主公钥和主链码;
[0294] 本实施例中,数字货币钱包中可以有多个数字货币账户,对应不同类型的数字货币。
[0295] 具体地,本实施例步骤404中,采用上述方法1)派生子私钥、子公钥和子链码。
[0296] 步骤405、分别将钱包比特币账户的主私钥、主公钥和主链码作为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,将派生得到的子私钥、子公钥和子链码分别作为钱包数字货币账户的第一子私钥、第一子公钥和第一子链码。
[0297] 具体地,本实施例步骤405中,采用上述方法1)派生子私钥、子公钥和子链码。
[0298] 生成数字货币收取地址:
[0299] 步骤501、获取钱包数字货币账户的第一子公钥和第一子链码;
[0300] 步骤502、分别将数字货币账户的第一子公钥和第一子链码作为父公钥和父链码,将第三子密钥索引作为子密钥索引,派生子公钥和子链码,对派生得到的子公钥进行编码,得到数字货币收取地址。
[0301] 具体地,本实施例中,第三子密钥索引为一个变化的值,其初始值为00 00 0000,每根据第三子密钥索引进行一次计算,将第三子密钥索引的值加1;
[0302] 本实施例步骤502中,采用上述方法2)派生子公钥和子链码。
[0303] 本实施例中,对子公钥进行编码,得到数字货币收取地址可以优选地包括:
[0304] 步骤1、对子公钥进行一次或多次哈希转换,得到哈希转换结果;
[0305] 本实施例中,步骤1可以优选为:对子公钥依次进行SHA256哈希转换和RIPEMD160哈希转换;
[0306] 步骤2、根据哈希转换结果计算校验值,根据校验值和哈希转换结果获取待编码数据;
[0307] 本实施例中,步骤2可以优选为:在哈希转换结果前添加版本号,对添加了版本号的哈希转换结果进行两次SHA256哈希转换,取结果的前4个字节作为校验值,将添加了版本号的哈希转换结果与校验值顺序拼接,得到待编码数据;
[0308] 步骤3、对待编码数据进行编码得到数字货币收取地址。
[0309] 本实施例中,步骤3可以优选为:对待编码数据进行Base58编码,得到数字货币收取地址。
[0310] 例如,子公钥为04 3d 08 74 22 e8 12 ab e5 b8 84 a4 e6 08 85 4d df 91 c3 1e 58 67 06 69 54 24 c2 24 b0 ee 56 16 5e b0 fb 85 b3 41 55 27 1a 85 d3 8f 29 
2e 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 93 
54 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 24 dd 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 36 
91 be 5f bb 5d,对待编码数据进行Base58编码,得到的数字货币收取地址为1KBHADAoC4ys586g2LP1Jy1QBBaR9cofKJ。
[0311] 查询钱包数字货币账户的数字货币量,如图4所示:
[0312] 步骤601、分别将钱包数字货币账户的第一子私钥、第一子公钥和第一子链码作为父私钥、父公钥和父链码,将第三子密钥索引作为子密钥索引,派生子私钥、子公钥和子链码,得到预设数目的第二子私钥、第二子公钥和第二子链码;
[0313] 具体地,本实施例步骤601中,采用上述方法1)派生子私钥、子公钥和子链码。
[0314] 预设数目可优选为20个。
[0315] 步骤602、对各第二子公钥分别进行预设编码,得到预设数目的数字货币收取地址;
[0316] 步骤603、在数字货币网络中依次查询各数字货币收取地址中是否有数字货币,若均没有则执行步骤604,否则返回步骤601;
[0317] 步骤604、将已查询到的有数字货币的数字货币收取地址中的数字货币数量依次相加,得到钱包数字货币账户的数字货币量。
[0318] 进一步地,步骤502中,得到数字货币收取地址之后,还包括将第三子密钥索引的当前值作为数字货币收取地址索引保存到钱包中;
[0319] 相应地,查询钱包数字货币账户的数字货币量还可以如图5所示,具体包括:
[0320] 步骤701、分别将钱包数字货币账户的第一子私钥、第一子公钥和第一子链码作为父私钥、父公钥和父链码,将钱包中保存的各数字货币收取地址索引依次作为子密钥索引,派生子私钥、子公钥和子链码;
[0321] 具体地,本实施例步骤701中,采用上述方法1)派生子私钥、子公钥和子链码。
[0322] 步骤702、对派生得到的各子公钥分别进行预设编码,得到各数字货币收取地址;
[0323] 步骤703、在数字货币网络中依次查询各数字货币收取地址中的数字货币的数量,将各数字货币收取地址中的数字货币的数量依次相加,得到钱包数字货币账户的数字货币量。
[0324] 根据本实施例提供的方法,只需要备份密钥种子,不需要备份每笔交易对应的密钥,因此备份体积不会随交易次数的增多而变大,易于管理;根据备份的密钥种子即可衍生出全部密钥,以此可以防止密钥损坏给用户造成损失。进一步地有益效果是,用户可以在不暴露私钥的前提下实现数字货币的接收,提高了数字货币交易的安全性。
[0325] 实施例2
[0326] 本实施例提供一种适用于数字货币的密钥派生装置,采用本实施例提供的装置派生出的密钥呈树状结构,树的根部为主密钥和主链码,以主密钥为父密钥、主链码为父链码生成的子密钥和子链码为树的第一级密钥和第一级链码,以第一级密钥为父密钥、第一级链码为父链码生成的子密钥和子链码为树的第二级密钥和第二级链码,以此类推。
[0327] 根据父密钥生成子密钥时引入子密钥索引,根据不同的子密钥索引生成不同的子密钥,子密钥索引与子密钥是一一对应的。
[0328] 本实施例提供的装置如图6所示,包括:
[0329] 第一派生模块81,用于根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0330] 本实施例中,第一派生模块81可以具体用于:将主私钥、主公钥和主链码分别作为父私钥、父公钥和父链码,或者将上一级子私钥、上一级子公钥和上一级子链码分别作为父私钥、父公钥和父链码,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0331] 具体地,第一派生模块81可以进一步包括:
[0332] 第一拼接单元811,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
[0333] 第一哈希单元812,用于用父链码作为哈希密钥,根据预设算法计算第一拼接单元811得到的第一拼接数据的哈希值;
[0334] 第一截取单元813,用于对第一哈希单元812得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
[0335] 第一运算单元814,用于以预设椭圆曲线的基点的阶为模数,对父私钥和第一截取单元813得到的第一数据做ECC加法模运算,得到第一运算结果;
[0336] 第一判断单元815,用于判断第一运算单元814得到的第一运算结果是否为预设值;
[0337] 第一递增单元816,用于当第一判断单元815的判断结果为是时,将子密钥索引递增;
[0338] 第一密钥获取单元817,用于当第一判断单元815的判断结果为否时,将第一运算单元814得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0339] 其中,第一截取单元813可以具体用于:截取第一哈希单元812得到的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第一数据。
[0340] 本实施例中,所述装置还可以包括:
[0341] 第一比较模块82,用于比较子密钥索引和预设值;
[0342] 第二派生模块83,用于当第一比较模块82确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0343] 相应地,第一派生模块81,具体用于当第一比较模块82确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0344] 具体地,第二派生模块83可以进一步包括:
[0345] 第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
[0346] 第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
[0347] 第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
[0348] 第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
[0349] 第二判断单元,用于判断所述第二运算单元得到的第二运算结果是否为预设值;
[0350] 第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
[0351] 第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0352] 其中,第二截取单元可以具体用于:截取所述第二哈希单元得到的第二拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第二数据。
[0353] 本实施例中,所述装置还可以包括:第三派生模块,用于根据父公钥、父链码和子密钥索引派生子公钥和子链码。
[0354] 具体地,第三派生模块可以进一步包括:
[0355] 第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
[0356] 第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
[0357] 第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
[0358] 第三运算单元,用于对所述预设椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0359] 第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
[0360] 第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
[0361] 第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
[0362] 其中,第三截取单元可以具体用于:截取所述第三哈希单元得到的第三拼接数据的哈希值的低位端预设长度的数据作为子链码,高位端预设长度的数据作为第三数据。
[0363] 更进一步地,所述装置还可以包括:
[0364] 第二比较模块,用于比较子密钥索引和预设值;
[0365] 提示模块,用于当第二比较模块确定子密钥索引大于或者等于预设值时,提示失败;
[0366] 相应地,第三派生模块,具体用于当第二比较模块确定子密钥索引小于预设值时,根据父公钥、父链码和子密钥索引派生子公钥和子链码。
[0367] 本实施例中,所述装置还可以包括:生成模块,用于生成主私钥、主公钥和主链码。
[0368] 具体地,生成模块可以进一步包括:
[0369] 第四哈希单元,用于获取一个伪随机数作为密钥种子,用预设字符串作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;
[0370] 第四截取单元,用于对所述第四哈希单元得到的密钥种子的哈希值进行截取,得到主链码和主私钥;
[0371] 第四运算单元,用于对所述第四截取单元得到的主私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到主公钥。
[0372] 其中,第四截取单元可以具体用于:截取所述第四哈希单元得到的密钥种子的哈希值的低位端预设长度的数据作为主链码,高位端预设长度的数据作为主私钥。
[0373] 实施例3
[0374] 本实施例提供一种适用于数字货币的密钥派生装置,如图7所示,包括:
[0375] 第一获取模块91,用于分别以数字货币钱包的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第一子密钥索引作为子密钥索引;
[0376] 第一派生模块92,用于根据第一获取模块91获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0377] 账户密钥生成模块93,用于将第一派生模块92派生的子私钥、子公钥和子链码分别作为数字货币账户的主私钥、主公钥和主链码。
[0378] 一方面,第一派生模块92可以进一步包括:
[0379] 第一拼接单元,用于将父公钥与子密钥索引顺序拼接得到第一拼接数据;
[0380] 第一哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第一拼接单元得到的第一拼接数据的哈希值;
[0381] 第一截取单元,用于对所述第一哈希单元得到的第一拼接数据的哈希值进行截取,得到子链码和第一数据;
[0382] 第一运算单元,用于以预设椭圆曲线的基点的阶为模数,对父私钥和所述第一截取单元得到的第一数据做ECC加法模运算,得到第一运算结果;
[0383] 第一判断单元,用于判断所述第一运算单元得到的第一运算结果是否为预设值;
[0384] 递增单元,用于当所述第一判断单元的判断结果为是时,将子密钥索引递增;
[0385] 第一密钥获取单元,用于当所述第一判断单元的判断结果为否时,将所述第一运算单元得到的第一运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥;
[0386] 所述父私钥和所述父公钥均为所述预设椭圆曲线上的点。
[0387] 另一方面,第一派生模块92可以具体包括:
[0388] 第一比较子模块,用于比较子密钥索引和预设值;
[0389] 第一派生子模块,用于当所述第一比较子模块确定子密钥索引小于预设值时,根据父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0390] 第二派生子模块,用于当所述第一比较子模块确定子密钥索引大于或者等于预设值时,根据父私钥、父链码和子密钥索引派生子私钥、子公钥和子链码。
[0391] 其中,第二派生子模块可以具体包括:
[0392] 第二拼接单元,用于对父私钥进行高位端补位,将补位后的父私钥与子密钥索引顺序拼接得到第二拼接数据;
[0393] 第二哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第二拼接单元得到的第二拼接数据的哈希值;
[0394] 第二截取单元,用于对所述第二哈希单元得到的哈希值进行截取,得到子链码和第二数据;
[0395] 第二运算单元,用于以所述预设椭圆曲线的基点的阶为模数,对补位前的父私钥和所述第二截取单元得到的第二数据做ECC加法模运算,得到第二运算结果;
[0396] 第二判断单元,用于判断第二运算单元得到的第二运算结果是否为预设值;
[0397] 第二递增单元,用于当所述第二判断单元的判断结果为是时,将子密钥索引递增;
[0398] 第二密钥获取单元,用于当所述第二判断单元的判断结果为否时,将所述第二运算单元得到的第二运算结果作为子私钥,对子私钥和所述预设椭圆曲线的基点做ECC点乘运算,得到子公钥。
[0399] 本实施例中,所述装置还可以包括:钱包密钥生成模块94,用于获取密钥种子和数字货币种子,用所述数字货币种子作为哈希密钥,根据预设算法计算所述密钥种子的哈希值;对所述密钥种子的哈希值进行截取,得到数字货币钱包的主私钥和主链码;对所述数字货币钱包的主私钥和所述椭圆曲线的基点做ECC点乘运算,得到数字货币钱包的主公钥。
[0400] 本实施例中,所述装置还可以包括:第二获取模块95,用于分别以数字货币账户的主私钥、主公钥和主链码为父私钥、父公钥和父链码,将第二子密钥索引作为子密钥索引;相应地:
[0401] 第一派生模块92,还用于根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0402] 所述装置还包括:
[0403] 第三获取模块96,用于将第一派生模块92根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生的子公钥和子链码分别作为父公钥和父链码,将第三子密钥索引作为子密钥索引;
[0404] 第二派生模块97,用于根据第三获取模块96获取的父公钥、父链码和子密钥索引派生子公钥和子链码;
[0405] 货币收取地址生成模块98,用于对第二派生模块97派生的子公钥进行编码,得到数字货币收取地址。
[0406] 一方面,第二派生模块97可以进一步包括:
[0407] 第三拼接单元,用于将父公钥与子密钥索引顺序拼接得到第三拼接数据;
[0408] 第三哈希单元,用于用父链码作为哈希密钥,根据预设算法计算所述第三拼接单元得到的第三拼接数据的哈希值;
[0409] 第三截取单元,用于对所述第三哈希单元得到的第三拼接数据的哈希值进行截取,得到子链码和第三数据;
[0410] 第三运算单元,用于对所述椭圆曲线的基点和所述第三截取单元得到的第三数据进行ECC点乘运算,对父公钥和ECC点乘运算结果做ECC加法运算;
[0411] 第三判断单元,用于判断第三运算单元得到的ECC加法运算结果是否为预设值;
[0412] 第三递增单元,用于当所述第三判断单元的判断结果为是时,将子密钥索引递增;
[0413] 第三密钥获取单元,用于当所述第三判断单元的判断结果为否时,将所述第三运算单元得到的ECC加法运算结果作为子公钥。
[0414] 另一方面,第二派生模块97可以具体包括:
[0415] 第二比较子模块,用于比较第三获取模块96获取的子密钥索引和预设值;
[0416] 提示子模块,用于当所述第二比较子模块确定第三获取模块96获取的子密钥索引大于或者等于预设值时,提示失败;
[0417] 派生子模块,用于当所述第二比较子模块确定第三获取模块96获取的子密钥索引小于预设值时,根据第三获取模块96获取的父公钥、父链码和子密钥索引派生子公钥和子链码。
[0418] 本实施例中,第三密钥获取单元,还可以用于:将子密钥索引的当前值保存为数字货币收取地址索引;相应地:
[0419] 所述装置还包括:第四获取模块910,用于将第一派生模块92根据第二获取模块95获取的父私钥、父公钥、父链码和子密钥索引派生的子私钥、子公钥和子链码分别作为父私钥、父公钥和父链码,将第三密钥获取单元中保存的各数字货币收取地址索引依次作为子密钥索引;
[0420] 第一派生模块92还用于:根据第四获取模块910获取的父私钥、父公钥、父链码和子密钥索引派生子私钥、子公钥和子链码;
[0421] 所述装置还包括:账户货币查询模块99,用于将第一派生模块92根据第四获取模块910获取的父私钥、父公钥、父链码和子密钥索引派生的各子公钥分别进行编码,得到各数字货币收取地址,依次查询和累加各数字货币收取地址中的数字货币的数量,得到数字货币账户的数字货币量;
[0422] 或者,本实施例中,第一派生模块92,还用于根据第三获取模块96获取的父公钥、父链码和子密钥索引派生预设数目的子私钥、子公钥和子链码;相应地:
[0423] 所述装置还包括:账户货币查询模块99,用于对第一派生模块92根据第三获取模块96获取的父公钥、父链码和子密钥索引派生的预设数目的子私钥分别进行编码,得到预设数目的数字货币收取地址,依次查询各数字货币收取地址中是否有数字货币,当均没有时将已查询到的有数字货币的数字货币收取地址中的数据货币数量依次相加,得到数字货币账户的数字货币量。
[0424] 以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈