如果只有三分之二的用户提供秘密,我如何允许访问加密数据?

信息安全 加密 密钥管理 文件加密 密钥生成
2021-08-23 09:04:41

我想加密数据,但要确保没有单个用户可以解密数据。

此外,重要的是不要要求所有用户都在场进行解密。如果/当秘密丢失时,这将允许一些灵活性并减少后果。提供 3 个秘密中的 2 个就足够了,或者提供更多用户的可配置部分。

这种安全方案是否存在并有名字?如果是这样,它通常是如何实现的?

3个回答

它被称为阈值加密(或者,在这里,解密)。

一个著名的方案是Shamir 的秘密共享它允许将秘密值分成n份,这样任何t份都足以重建秘密。nt可以随意选择(尽管在实践中你会希望n大于t)。对于阈值加密问题,您将 Shamir 方案应用于解密密钥。t个股东见面时,他们可以重建解密密钥,然后解密数据。

尽管 Shamir 的方案很好(事实上,即使针对具有无限计算能力的攻击者,它也被证明是安全的——很少有密码算法可以声称同样安全),但它有以下限制:它重建了一个秘密这使得它以某种方式“一枪毙命”:如果股东重建了秘密,那么他们就有了秘密。他们每个人都可以通过简单地记住重建的秘密来单独进行进一步的解密。

根据您的上下文,这可能是也可能不是问题。例如,有使用同态加密的投票系统(例如,使用 ElGamal),其中加密的选票在不解密的情况下被计算在一起(这就是同态的重点);但最终计数仍必须解密。我们希望在这里进行阈值解密:多个权限必须相互协作才能进行解密。这样,当局就可以相互控制。但是,如果他们在此过程中自己学习了私钥,那么此后每个机构都可以解密个人选票,这与整个目的背道而驰。

如果这个问题适用于你的上下文,那么你必须做更多的数学。有一些阈值解密方案允许,例如,阈值 ElGamal 解密,这样t共享持有者必须为每个解密实例相互交谈,交换“部分解密的消息”。私钥永远不会真正重建,但它的动作(解密)会逐渐重现。

关于阈值密码系统的理论很多,具有各种特征(多少股,可能的阈值,当一些股东积极作弊时,该方案是否能很好地抵抗,必须交换多少消息,等等)。如果你手头的问题可以用 Shamir 的方案解决,那么,一定要去做。实现起来相当简单(特别是,如果您在GF(2 8 )中进行所有计算,则共享文件很容易)。

你所追求的是Shamir Secret Sharing目标是给定一组k个用户,其中任何n 个用户一起工作都可以解密数据。另一方面,少于n 个用户的组不应该能够了解有关解密密钥的任何信息。

其工作原理的总体思路使用了一些几何图形。假设我们希望任何两个用户都能够解密。想象一下具有水平轴和垂直轴的标准二维平面。要设置系统,您可以在垂直轴上选择一个介于 0 和 2^128 之间的随机点;这对应于 128 位密钥。

接下来,您在与该点相交的平面上选择一条随机线。你告诉你的每个用户那条线上一个点的坐标(每个用户学习一个不同的点)。任何两个用户都可以结合他们的观点来找出你选择的线——实际上是通过连接点——然后从那里找出关键是什么。

如果您希望两个以上的用户需要一起工作,则选择高阶多项式(如抛物线,用于三个用户)而不是直线。

这里有一个技术要点,即不是使用标准的乘法和加法,而是以一种特殊的方式定义这些操作。(从数学上讲,您在有限域中工作)。非正式地,这样做的原因是您可以从定义明确的范围(例如,x 和 y 坐标在 0 和 2^128 - 1 之间)分配用户点,同时仍然防止他们消除可能的键值(除非他们与指定数量的人一起工作)。

我确定这有一个正式的名称,但它让我无法理解。一种解决方案是生成一个包含 64 个十六进制字符的 256 位密钥。

给 Alice 关键字符 1-22 和 22-43。给 Bob 关键字符 22-43 和 43-64。给 Carol 关键字符 1-22 和 43-64。

这样任何两个都可以执行解密,但没有一个人拥有完整的密钥。

这里的问题是,对于 Alice、Bob 或 Carol 来说,只有大约 22 个字符/85 位的缺失数据可以进行暴力破解。也许如果您使用具有高达 448 位密钥的http://en.wikipedia.org/wiki/Blowfish_(cipher)之类的东西进行加密,就可以解决这个问题。