代码改变世界

04.3_密钥分存和密钥共享

2019-08-26 21:15  StevenZhao  阅读(726)  评论(0编辑  收藏  举报

N<=M)..把密钥放在保险箱或者写在纸上,这样会造成一个问题就是,一毁具毁。为了解决这个问题,密码学有一个“密码分存”技术。

  方法:密钥被分为N个片段,我们只需要获取其中的K个片段,就可以把原密钥重新还原。如果获取的片段少于K个,就无法知道关于密钥的任何信息。

密钥不是简单的切分为N个片段,而是将密钥转换成若干“子密钥”。

  例如:设定N=2,K=2,意味着我们想把原密钥转换成两个子密钥,只有同时获得这两个子密钥,才能拼出原密钥。我们把原密钥成为S,S是一个很大的数(比如128位)。然后,我们就可以随机产生另一个128位的数字R,让R作为其中一个子密钥,另外一个子密钥就是S和R的异或,称之为“密文”。然后把子密钥和密文存储在两个不同的地方。单独的子密钥或密文都无法推出原密钥。

  

  门限密码(threshold cryptography)

    M密码分存还有一个问题就是,密码分存之后,如果我们需要原密钥来签名,那么我们就需要取得子密钥,还原原密钥,才能够签名,这个过程可能被黑客趁虚而入。盗取密钥。

    如果子密钥存储在不同的设备中,可以以去中心化的方式还原原密钥,而不是在某台设备上完成。这种技术“门限签名”技术。

      例如把2个子密钥分别存储在电脑上和手机中,你可以在电脑上发起一个付款,这是电脑会生成一个签名片段,并发送给手机,手机会收到提示付款信息(收款人和金额等),如果你确认了付款信息,手机会利用它的子密钥完成整个签名,然后广播到区块链中。

    多重签名:就是把账户的控制权交给多个密钥M,不同密钥分别生成不同的地址,这些密钥交给不同的人,只有达到N(N<=M).个人的签名才能取走比特币