一.关于钱包的私钥
现在市场上的大部分数字货币钱包,如果你把助记词和钱包私钥搞丢了,整个钱包基本上算是丢失了。笔者就遇到过这样的问题,笔者使用biwork钱包,钱包里面有10000LET、3个EOS和0.45个以太坊,biwork钱包是一个去中心化的钱包,它的私钥和助记词编码串是存储在客户端。后来我不小心把手机的内屏和外屏的砸碎,修手机的费用已经超过我钱包中币的价值。当时我备份的助记词找不到了,到现在为止我这个币也没有拿出来。
做区块链钱包开发的开发者应该都知道,目前最流行的是HD钱包(确定性分层钱包),它支持多钱包,多币种,多账户。对于每个钱包,最核心的部分是助记词,助记词在客户端存储方式一个编码串;通过这个编码串可以恢复助记词,通过助记词又恢复整个账户。对于每个钱包,它还有一个主私钥可以恢复这个钱包;而对于每个账户,都拥有自己的私钥,通过私钥是完全能找回这个账户的。也可以转走这个钱包中的数字资产。
不管是助记词编码串,钱包私钥,还是每个账户的私钥,它都是一个十六进制的一个字符串。对于这个字符串呢,我们有很多种处理方式。
二.抗丢失的钱包助记词、钱包私钥、钱包账户私钥存储方案
去中心化的钱包,不管是助记词,钱包私钥,还是钱包账户的私钥,都是存储在客户端。一旦我们的备份存储助记词,钱包私钥,钱包账户的私钥的文件丢失,我们客户端的钱包损坏,对于加密数字资产持有者是致命的,这将意味着数字资产持有者将会损失所有的加密货币。
我们做一个产品的原则是让用户使用起来更简单,现在我们市场的数字资产钱包总是喜欢让用户自己去备份助记词或者私钥,实际上这种做法是比较愚蠢的。为什么这样说呢,对于一个非技术人员来说,助记词,私钥这些东西,在用户的心里面是没有什么概念的。你在钱包内部发出的提示语很多用户可能都懒得看一眼。总的一句话来说,目前市场的数字资产钱包使用是有门槛的。
1.从硬件角度解决这个问题
助记词(助记词可编码存储)或密钥在本地客户端生成之后,使用蓝牙的通信方式将密钥下发到小型硬件设备。
.:
这种方式的优点是保证了私钥和助记词编码串存储的私密行,当客户端彻底崩溃的时候,助记词或私钥还可以通过小型的硬件设备来找回。助记词或私钥不再强烈依靠客户端,也不再依靠用户的备份。在这里面,硬件只是做了一个助记词或私钥的备份功能,钱包只有在助记词或密钥找回的时候才会依赖于小型硬件设备。其他的任何时候钱包是可以独立使用的。
当然,事情总是有对立面,解决问题的同时它也带来来一些问题。使用这种小型硬件会使钱包的造价和使用成本偏高。
5G 时代的到来将会使得物联网的高速发展,物联网的发展也将给区块链钱包私钥的存储带来很好的解决方案,将来你的私钥可以存储在很多自己家里的设备中,当你私钥丢失时,只要将家里的设备接入网络,你就可以找回私钥。当然,物联网中的“物”是处在网络环境中的,这也是有安全性问题的。
1.1.小型硬件解决密钥丢失方案详细设计
下面的图是小型硬件设备存储密钥的一个简单的逻辑设计图,数据传输的方式采用蓝牙传输,包括密钥的备份和恢复两个过程。
.:
密钥的备份过程
钱包通过助记词算法产生助记词,将助记词编码,并将编码串使用密码加密,然后通过蓝牙通信的方式将加密的助记词编码串传输到小型硬件设备;或者钱包生成私钥之后,用密码将私钥加密,然后通过蓝牙通信方式传输到小型硬件设备。这个过程称为密钥的备份过程。
密钥的恢复过程
当用的承载钱包的设备坏,并且忘记助记词的情况下,就需要启动密钥的恢复过程。正常小型硬件设备里面会存储一些验证用户的数据,当小型硬件设备验证用户通过之后,就可以发起蓝牙连接。蓝牙连接完成后,硬件设备将加密的私钥或者加密的助记词编码串发送到钱包,钱包接到加密串之后,让用户输入密码解密编码串或者私钥。解密之后用户就可以使用助记词和私钥恢复自己的钱包了。
2.密钥共享托管
秘密的共享是信息安全研究的一个重要的分支,密码主要是为了对重要信息进行加密,保证信息的安全新,而秘密共享却可以保证密钥的安全性,它为密码学的发展提供了一个崭新的思路。秘密共享的原理是将秘密分成若干份,交给不同的人去保管,设定管理秘密的一定数量的人贡献出自己持有的秘密,就可以恢复秘密了。
秘密共享的概念最早由著名密码学家 Shamir 和 Blakley 于 1979 年分别独立提出并给出了各自的方案。Shamir 的( t,n) 门限方案基于 Lagrnage ( 拉格朗日) 插值法来实现,Blakley 的( t,n) 门限方案是利用多维空间点的性质来建立的。
秘密共享的概念一经提出,受到专家学者们的极大的关注与研究。 这些年取得的成果颇丰。大致可以分为如下几类。
门限密钥共享
在( t,n) 门限秘密共享方案中,任何包含至 少 t 个参与者的集合都是授权子集,而包含 t-1 或更少参与者的集合都是非授权子集,实现( t, n) 门限秘密共享的方法除了 Shamir 和 Blakley 的方案外,还有基于中国剩余定理的 Asmuth-Bloom 法以及使用矩阵乘法的 Karnin-Greene Hellman 方法等。
一般访问结构上秘密共享方案
门限方案是实现门限访问结构的秘密共享方案,对于其它更广泛的访问结构存在局限性, 如在 甲 、乙 、丙 、丁 四 个成员中共享秘 密 ,使甲和丁或乙和丙合作能恢复秘密,门限秘密共享方案就不能解决这样的情况. 针对这类问题,1987 年密码学研究人士提出了一般访问结构上的秘密共享方案。1988 年有人又提出了一个更简单有效的方法—单调电路构造法,并且证明了任何访问结构都能够通过完备的秘密共享方案加以实现。
多重秘密共享方案
只需保护一个子秘密就可以实现多个秘密的共享,在多重秘密共享方案中每个参与者的子秘密可以使用多次,但是一次秘密共享过程只能共享一个秘密。
多秘密共享方案
多重秘密共享解决了参与者的子秘密重用 的问题,但其在一次秘密共享过程中只能共享一个秘密。
可验证秘密共享方案
参与秘密共享的成员可以通过公开变量验证自己所拥有的子秘密的正确性,从而有效地防止了分发者与参与者,以及参与者之间的相互欺骗的问题。可验证秘密共享方案分为交互式和非交互式两种。交互式可验证的秘密共享方案是指各个参与者在验证秘密份额的正确性时需要相互之间交换信息;非交互式可验证的秘密共享是指各个参与者在验证秘密份额的正确性时不需要相互之间交换信息。在应用方面,非交互式可验证秘密共享可以减少网络通信费用,降低秘密泄漏的机会,因此应用领域也更加广泛。
动态秘密共享方案
动态秘密共享方案是 1990 年提出,它具有很好的安全性与灵活性,它允许新增或删除参与者、定期或不定期更新参与者的子秘密以及在不同的时间恢复不同的秘密等等. 以上是几种经典的秘密共享方案. 需要说明的是,一个具体的秘密共享方案往往是几个类型的集合体。
其他秘密共享
量子秘密共享、可视秘密共享、 基于多分辨滤波的秘密共享、基于广义自缩序列的秘密共享。
2.1.经典秘密共享方案介绍
2.1.1.shamir 门限秘密共享方案
Shamir 的( t,n) 门限方案基于 Lagrnage ( 拉格朗日) 插值法来实现,简单地说,设秘密通过秘密共享算法分发给个成员共享,每一个成员持有一个子密钥也称为 shadow 或 Secret debris,如果满足:
任何不少于 t 个的有效成员使用他持有的正确的碎片都可以恢复秘密。
任何 t 个以下的成员集都无法恢复秘密。
我们称这种方案为 (t ,n) 门限秘密共享方案,简称为门限方案,t 称为方案的门限值。
作为各种秘密共享方案中最简单实用的门限秘密共享方案,(k,n) 门限秘密共享方案也是这些方案中最具有代表性和广泛应用的方案。
下面简单介绍一下这个方案。
系统参数
假定 n 是参与者的数目,n 是门限值,p 是一个大素数要求 p > n 并且大于 p 秘密 s 的可能的最大取值;秘密空间与份额空间均为有限域 GF§。
秘密分发
秘密分发者 D 给 n 个参与者 Pi(0 ≤ i ≤ n) 分配份额的过程,即方案的分配算法如下:
随机选择一个 GF§ 上的 k - 1 次多项式 使得 f(0) = a0 = s要在个参与者中分享的秘密 D 对 f(x) 保密。
D 在 Zp 中选择 n 个互不相同的非零元素 x1, x2, …, xn,计算 (0≤ i ≤ n)。
将 ( xi , yi ) 分配给参与者 Pi( 0 ≤ i ≤ n),值 xi 是公开的,yi 作为的秘密份额,不公开。
秘密重构
给定任何 t 个点,不妨设为前 t 个点(x1, y1),(x2, y2),…, (xt, yt)。由插值公式:
.:
Shamir 方案作为一种被广泛选用的门限方案,具有以下优点:
t 个秘密份额可以确定出整个多项式,并可计算出其他的秘密份额。
在原有分享者的秘密份额保持不变的情况下,可以增加新的分享者,只要增加后分享者的总数不超过。
还可以在原有共享密钥未暴露之前,通过构造常数项仍为共享密钥的具有新系数的次多项式,重新计算新一轮分享者的秘密份额,从而使得分享者原有的秘密份额作废。
但同时方案存在以下问题
在秘密分发阶段,不诚实的秘密分发者可分发无效的秘密份额给参与者
在秘密重构阶段,某些参与者可能提交无效的秘密份额使得无法恢复正确秘。
秘密分发者与参与者之间需点对点安全通道。
2.1.2.基于中国剩余定理的秘密共享方案
中国剩余定理最早出现在我国古代数学名著《孙子算经》中,因而又被称为孙子定理,中国剩余定理在密码学中被广泛的使用。
令 p1, p2,…,pm 表示 m 个两两互素的正整数。给定任意 m 个整数,k1,k2,k3,…,km,存在唯一的一个整数 K 属于 GF(p1p2 …, pm)满足:
K = K1 mod p1
K = K2 mod P2
…
K = Km mod Pm
1983 年,密码学专家提出两一种基于中国剩余定理的秘密共享方案,整体思路如下。
初始化阶段
设 P = {p1, p2, … , Pn} 为参与者的集合。{p, d1, d2, … dn} 是一组满足下列条件的整数。
s < p, s 是需要共享的密明。
d1 < d2 < … dn。
对i = 1,2, … , n, 有 gcd(di, p) = 1,其中 gcd(x, y) 表示 x 和 y 的最大公约数。
对于所有 i 不等于 j,有 gcd(di, dj) = 1。
d1d2…dk > pdn-t+2dn-k+3 … dn。
其中第 5 条意味着最小的 k 个 di 的乘积要大于 p 和 k—1 个最大的di之积。
密明分发阶段
令 N = d1d2…dt,则 N/p 大于任意的 k-1 个 di 之积。令 r 是 [0, N/p-1] 中一个随机数。为了将密明 s 分割为 n 份,密朗分发者 D 计算 s’ = s + rp,这里将 s’ 限制在 [0, N - 1] 中,则每个参与者 Pi 的子密钥 xi 为:
xi = s’ mod (di)
密钥重构阶段
任意 k 个参与者,不妨假设为 P1, P2, … Pk 拿出他们的 k 个子密钥 x1, x2, … xk,由中国剩余定理可得到对应的模:
N1 = d1d2 … dk
因为 N1 大于等于 N,可由中国剩余定理唯一的确定 s’。而后可由 s’, r, p 计算出密钥:
s = s’ - rp
如果仅仅知道 k-1 个子密朗,虽然由N2可知s’,
N2 = d1d2 … dk-1
但由于 N/N2 > p,且gcd(N2, p) = 1,所以使 x 大于等于 N 和 x=s’mod§ 的数 x 在模 p 下的同余类上均匀分布,因此没有足够的信息决定s’。在该方案中,密钢恢复算法的时间复杂度为O(k),空间复杂度为O(n)。
2.2.密钥抗丢失方案
关于的密钥的共享,咱们就说上面这些,基于上面的这些理论知识,我想大家已经知道了怎么去对私钥进行保存了,那就是密钥共享。根据门限共享理论可知,秘密可以被切割为 n 份,其中的 k(k < n)份就可以恢复出秘密。这样的话我们就可以把我们的私钥切割为 n 份,交 n 个人或者设备去管理并设置其中 k 份秘密可以帮助我们恢复密钥。当我们的密钥丢失了之后,我们可以发起恢复,只要那到其中的 k 份秘密之后,我们就可以恢复私钥了。具体你的秘密是交给人存储还是交给设备去存储由你的业务决定。
3.去中心化的密钥存储方案
基于 2 中的秘密拆分,我们可以将拆分的秘密存储到区块链上去。
区块链钱包技术指南:https://github.com/guoshijiang/blockchain-wallet