技术领域
[0001] 本技术所属的技术领域为
区块链的数字签名安全技术领域,具体涉及一种基于多重签名的比特币防盗方法。
背景技术
[0002] 目前的
比特币钱包账号里面比特币的存入以及取出都是基于数字签名技术。当从外部往某个账号存入一笔比特币以后,需要这个账号的私钥来进行签名,才能花费这个账号的比特币。根据这个账号的类型,私钥需要的数量也不一样。如果账号是单地址型账号,那么只需要一个私钥就可以支配这个账号里面的比特币。如果是多地址型账号,那么创建的时候可以
指定需要多少个私钥来开启账号。比如一共有三个地址,需要三个地址中的其中两个地址的私钥里开启账号。
[0003] 现有比特币钱包只能将签名和账号一起保管,保存在同一个地方,如果一个钱包被盗,那么账号和账号所需的签名就就直接被泄露,比特币就可以被直接提取。
发明内容
[0004] 针对上述技术问题,本发明的目的在于提出一种新的比特币防盗方法,采用新的比特币存取方式,从而保证比特币资金的安全性。
[0005] 本发明提供一种基于多重签名的比特币防盗方法,该方法引入其他钱包做为主钱包的从钱包,在每个从钱包里生成地址;然后将多个从钱包的地址合成一个多重签名的地址导入主钱包,并且把所述多重签名的地址的私钥保存在从钱包里;当需要对主钱包中的比特币进行存取操作时,先使用从钱包的私钥对所述事务进行签名,再通过主钱包所在
服务器调用主钱包的RPC
接口将事务发送出去,完成所述事务的具体内容。
[0006] 进一步的,该方法包括以下步骤:步骤1,在独立的服务器或者
控制器上部署若干主钱包的从钱包,根据钱包地址生成方法在每一个钱包中生成需要单密钥的地址;
步骤2,将所述步骤1生成的单密钥地址存放到独立服务器上;
步骤3,将多个单密钥的地址利用主钱包的RPC服务合成一个多重签名地址,导入到主钱包里面;
步骤4,所述主钱包以多重签名的地址作为存取比特币的账号;
步骤5,当需要从账号中对比特币进行存取事务时,通过RPC协议,由主钱包所在服务器启动程序生成对应的事务以及需要签名的钱包ID的列表,存到一个独立内存
数据库里;
步骤6,从钱包所在的服务器不断查看独立内存数据库里的需要签名的列表,看是否有需要该从钱包签名的事务;如果有,找到需要签名的地址,通过地址在该从钱包里面找到地址对应的密钥,用密钥将现有事务签名,然后再将经过其签名的事务以及需要签名的钱包ID列表除去本次签名的钱包ID,写回所述独立内存数据库中;
步骤7,主钱包所在服务器不断查看所述内存数据库里是否有已经签名完毕的事务;如果有事务,并且需要的签名的钱包的列表为空,则认为签名完毕。直接调用主钱包的RPC接口将事务发送出去,完成所述事务的具体内容。
[0007] 作为一种优选,根据预先设置的额度,在完成事务时,如果超过额度时则需要特定人控制的钱包进行签名。
[0008] 进一步的,所述步骤1中,根据钱包地址生成方法在每一个钱包中生成需要单密钥的地址的具体方式为:用钱包提供的Remote Procedure Call Protocol (RPC)服务,在每一个从钱包上生成需要单密钥的地址。
[0009] 如果觉得利用钱包的RPC服务太耗费资源的话,作为替代,可以利用第三方的库生成地址,并将地址保存在文件或者数据库中。
[0010] 本发明采用以上技术方案与
现有技术相比,具有以下技术效果:主钱包和从钱包分开存放,使得同时非法
访问主钱包和从钱包的难度增大。
[0011] 主钱包和从钱包不直接进行通信,使得追踪各个钱包的
位置难度增大。
[0012] 由于采用了多钱包,比特币的主钱包或从钱包里面一部分被非法访问,不会造成资金的损失。
附图说明
[0013] 图1是本发明基于多重签名的比特币防盗方法的
流程图。
具体实施方式
[0014] 为了使本发明的控制方法和优点更加清楚,下面结合本发明
实施例以及附图,对本发明的控制方法进行清晰、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
[0015] 如图1所示,本发明提供的技术方案具体包括以下步骤:步骤1,在独立的服务器或者控制器上部署若干主钱包的从钱包,根据钱包地址生成方法在每一个钱包中生成需要单密钥的地址,每个从钱包有个ID来唯一标识,比如XYZ;
步骤2,将所述步骤1生成的单密钥地址存放到独立的内存服务器上;
步骤3,将多个单密钥的地址利用主钱包的RPC服务合成一个多重签名地址,导入到主钱包里面;
步骤4,所述主钱包以多重签名的地址作为存取比特币的账号;
步骤5,当需要从账号中对比特币进行存取事务时,通过RPC协议,由主钱包所在服务器启动程序生成对应的事务以及需要签名的钱包ID的列表,存到一个独立的内存数据器里;
步骤6,从钱包所在的服务器不断查看独立的内存数据器里是否有需要该从钱包签名的事务;如果有,找到需要签名的地址,通过地址在该从钱包里面找到地址对应的密钥,用密钥将现有事务签名,然后再将经过其签名的事务写回所述独立的内存数据器中;
步骤7,主钱包所在服务器不断查看所述数据库里是否有已经签名完毕的事务;如果有直接调用主钱包的RPC接口将事务发送出去,完成所述事务的具体内容。
[0016] 作为一种优选,做成事务的时候,可以根据预先设置的额度,当超过某一个额度的时候,就需要特定人控制的钱包进行签名,比如特定的离线
硬件钱包。当低于这个额度的时候,可以不需要人工干预。
[0017] 进一步的,所述步骤1中,根据钱包地址生成方法在每一个钱包中生成需要单密钥的地址的具体方式为:用钱包提供的Remote Procedure Call Protocol RPC服务,在每一个从钱包上生成需要单密钥的地址。
[0018] 如果觉得利用钱包的RPC服务,太耗费资源的话,作为替代,利用第三方的库生成地址,并将地址保存在文件或者数据库中。
[0019] 实施例1步骤1,分别在3台PC机器上安装bitcoin core钱包,一台机器作为主钱包,另外2台作为从钱包。3个钱包的编号分别为main,sub1,sub2,其中main为主钱包,sub1,sub2为从钱包。另外准备一台pc给比特币的硬件钱包使用,硬件钱包同样作为从钱包,硬件钱包只在需要的时候才会接入这台pc,记为sub3。
[0020] 步骤2,在另外的一台PC上安装redis内存数据库,此内存数据库记为db1。
[0021] 步骤3,在从钱包所在的三台服务器上分别通过钱包的RPC接口生成单签名的地址,硬件钱包通过支持硬件钱包的程序库,生成的地址存入上述的db1之中,三个地址分别记为addr1,addr2,addr3。
[0022] 步骤4,在主钱包所在的服务器访问db1,将上述的addr1,addr2以及addr3取出,并调用主钱包的RPC接口,合成多重签名的地址,并导入主钱包。合成的多重签名地址记为multi_addr,作为对外的账号使用。往multi_addr里面存入比特币和一般的单签名的使用方式一致。
[0023] 步骤5,当需要从mutti_addr里面取小额比特币,如本实施例中,以取50比特币为例,在主钱包所在的pc机器上,发起一个取币事务,事务需要sub1以及sub2的签名才能发送。将事务存入上述的db1之中,等待钱包sub1和sub2的签名。
[0024] 步骤6,钱包sub1所在的pc启动一个程序查看内存中是否有需要sub1签名的事务,如果有需要签名的事务,调用sub1的RPC接口,将改事务签名并将签名后的事务回写入db1,同时将db1里面的需要签名的钱包列表除去sub1。
[0025] 步骤7,钱包sub2所在pc执行类似步骤6钱包sub1的操作,不过对象为sub2钱包。
[0026] 步骤8,主钱包所在pc启动一个程序,查看db1里面事务有无事务。事务的待签名列表是否为空。如果有事务且待签名列表为空,则发送事务,取币结束。
[0027] 实施例2步骤1,分别在3台PC机器上安装bitcoin core钱包,一台机器作为主钱包,另外2台作为从钱包。3个钱包的编号分别为main,sub1,sub2,其中main为主钱包,sub1,sub2为从钱包。另外准备一台pc给比特币的硬件钱包使用,硬件钱包同样作为从钱包,硬件钱包只在需要的时候才会接入这台pc,记为sub3。
[0028] 步骤2,在另外的一台PC上安装redis内存数据库,此内存数据库记为db1。
[0029] 步骤3,在从钱包所在的三台服务器上分别通过钱包的RPC接口生成单签名的地址(硬件钱包通过支持硬件钱包的程序库),生成的地址存入上述的db1之中,三个地址分别记为addr1,addr2,addr3。
[0030] 步骤4,在主钱包所在的服务器访问db1,将上述的addr1,addr2以及addr3取出,并调用主钱包的RPC接口,合成多重签名的地址,并导入主钱包。合成的多重签名地址记为multi_addr,作为对外的账号使用。往multi_addr里面存入比特币和一般的单签名的使用方式一致。
[0031] 步骤5,当需要从mutti_addr里面取大额比特币,如本实施例中以取1000比特币的情况做为案例进行介绍,在主钱包所在的pc机器上,发起一个取币事务,事务需要sub1,sub2以及sub3的签名才能发送。将事务存入上述的db1之中,等待钱包sub1,sub2以及sub3的签名。同时通过程序发送邮件(或者短信)给硬件钱包的持有者,通知他需要授权的事务。
[0032] 步骤6,钱包sub1所在的pc启动一个程序查看内存中是否有需要sub1签名的事务。如果有需要签名的事务,调用sub1的RPC接口,将改事务签名并将签名后的事务回写入db1,同时将db1里面的需要签名的钱包列表除去sub1。
[0033] 步骤7,钱包sub2所在pc执行类似步骤6钱包sub1的操作,不过对象为sub2钱包。
[0034] 步骤8,钱包sub3,即硬件钱包的持有者,将硬件钱包接入事先准备的PC。
[0035] 钱包sub3所在的pc启动一个程序,查看是否有需要sub3签名的事务。如果有需要签名的事务,程序利用硬件钱包的接口,将改事务签名并将签名后的事务回写入db1,同时将db1里面需要签名的钱包列表除去sub3。
[0036] 步骤9,主钱包所在pc启动一个程序,查看db1里面事务有无事务。事务的待签名列表是否为空。如果有事务且待签名列表为空,则发送事务,取币结束。
[0037] 实施例1本发明提供一种基于多重签名的比特币防盗方法,该方法引入其他钱包做为主钱包的从钱包,在每个从钱包里生成地址;然后将多个从钱包的地址合成一个多重签名的地址导入主钱包,并且把所述多重签名的地址的私钥保存在从钱包里;当需要提对主钱包中的比特币进行存取操作时,先使用从钱包的私钥对所述事务进行签名,再通过主钱包所在服务器调用主钱包的RPC接口将事务发送出去,完成所述事务的具体内容。
[0038] 数字签名技术包含了加密解密技术、身份认证技术,在区块链领域更是账户的安全
锁。单纯的一个签名对应一个账号的方式很难保证账号的安全性。一个签名的丢失,就意味着整个账号里面
虚拟货币的丢失。多重签名无疑是加强账号安全性的一个理想的手段。采用本发明提供的技术方案使主钱包和从钱包分开存放,使得同时非法访问主钱包和从钱包的难度增大;并且,主钱包和从钱包不直接进行通信,使得追踪各个钱包的位置难度增大。
[0039] 上述方案由于采用了多钱包,比特币的主钱包或从钱包里面一部分被非法访问,不会造成资金的损失。并且设置了
阈值,当需要取大额比特币时,可以通过离线的硬件钱包对待办事务进行签名,来确保资金的安全。
[0040] 本发明的思路及方法,具体实现该技术方案的方法和途径很多,以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。