基于共识的信息披露

时间:2011-04-18 11:50:08

标签: encryption cryptography

问题描述

我对以下问题的解决方案感兴趣:

  

有一些秘密信息   一群 n 的人愿意   锁定,直到最小数量   1< = m < = n 他们同意发布它。例如,比如所有人的名字   该小组的参与者。

     

我们如何加密这些信息   并将 n '键'分发给它   信息仍然是私密的   永远,除非至少在某个时刻    m 提交密钥以解锁信息?

约束

对于任何 k < m (甚至 m-1 ),至关重要的是成功概率极低仅使用 k 键检索信息。同样重要的是,对于任何 k > = m ,成功的概率应该非常高。

最佳(但不一定),我想要一个具有以下属性的解决方案:

  • 功能可扩展(解决任何 m ,* n *的问题)。
  • 速度/内存可扩展(需要合理的时间来加密/解密)。

最初,我认为一个好的解决方案可能只涉及加密信息并分割出(私人)密钥,但我无法找到分割密钥的好方法。

特别是,当 m n 变得非常大时,问题似乎变得更加困难,因为有和没有> = m之间的界限愿意小组成员变得越来越瘦(可以这么说)。

如果你知道一个解决方案,那么正确方向的推动将比完整答案更可取

2 个答案:

答案 0 :(得分:7)

要进行密钥拆分,请查找Shamir's Secret Sharing。这是一种经典的方法(1979年出版)。

答案 1 :(得分:0)

您可以使用基于XOR的分割,以下是它的工作原理:

您提供所需的件数 - n和密钥 - K.要生成n个密钥,您需要创建(n - 1)个随机数:R1,R2,R3,.... 。 。 ,Rn-1。为此,您可以使用SecureRandom数字生成器,这将防止我们重复。然后您在这些Rn-1件上操作XOR功能和您的密钥 - K:
Rn =R1⊕R2⊕R3⊕。 。 。 ⊕Rn-1⊕K

现在你有n件:R1,R2,R3,......,Rn-1,Rn,你可以销毁K.这些件可以在你的代码中传播或发送给用户。

为了重新组装钥匙,我们在Rn件上使用XOR操作:
K =R1⊕R2⊕R3⊕。 。 。 ⊕Rn-1⊕Rn

使用XOR函数(⊕),每个部分在重建密钥时都具有固有的重要性,如果任何部分中的任何位被更改,则密钥不可恢复。

有关更多信息,您可以查看我为此目的编写的Android实用程序:
GitHub项目:https://github.com/aivarsda/Secret-Key-Split-Util

此外,您可以尝试使用该实用程序的Secret Key Splitter演示应用程序:
GooglePlay:https://play.google.com/store/apps/details?id=com.aivarsda.keysplitter