How to Share a Secret论文翻译

本文探讨了一种(k,n)阈值加密方案,通过将数据拆分为碎片,使得只有当持有至少kk个碎片时才能恢复原始数据,而少于k个碎片则无法获取信息。这种方法用于密钥管理,即使部分碎片丢失或被暴露,也能确保数据的安全性。文章以一个涉及科学家的案例介绍了此概念,并提出一个基于多项式插值的实现方法,展示了其在密钥分发和安全签名等场景中的应用。
摘要由CSDN通过智能技术生成


写在前面

新人小白,仅供交流,如有错误,请留言,一定尽快更改。
论文:
Shamir, A… “How to share a secret.” Commun. ACM 22 (1979): 612-613.


论文翻译

摘要

在这篇文章中,我们展示了如何将数据 D D D 分成 n n n 份,这样它可以很容易地从任何 n n n 份中的 k k k 份重构成 D D D,但是与此同时,即使有 k − 1 k - 1 k1 份完整的知识也完全不能泄漏关于 D D D 的任何信息。这种技术为密码系统构建了健壮的密钥管理方案,这种方案即使不幸摧毁了一半的数据和暴露了一半的安全漏洞, 剩余的 ( 2 n − 1 ) (2n - 1) (2n1)也能安全可靠地运行。
关键词和短语:密码学、密钥管理、插值

1.介绍

在[4]中,刘考虑了以下问题:

11 位科学家正在从事一个秘密项目。他们希望将文件锁在一个柜子里,这样当且仅当有六个或更多科学家在场时才能打开柜子。最少需要多少锁?每个科学家必须携带的锁的最少钥匙数量是多少?

不难证明最小的解决方案每个科学家使用 462 把锁和 252 把钥匙。这些数字显然是不切实际的,而且随着科学家数量的增加,它们会呈指数级恶化。

译者思路:至少有6名科学家在场时才能打开柜子,求锁的最小数量,那么在某一次开柜子的事件中,有6把锁和6把钥匙,对应着6位科学家,从11位科学家选出6位的可能性有 C 11 6 = 462 C^6_{11}=462 C116=462 种。对于每一位科学家而言,其他10人都差一把钥匙,此时可能性有 C 10 5 = 252 C^5_{10}=252 C105=252 种。

在本文中,我们将问题概括为一个问题,其中秘密是一些数据 D D D (例如,安全组合)并且还允许使用非机械解决方案(操作这些数据)。我们的目标是将 D D D 分成 n n n D 1 , ⋯   , D n D_1,\cdots, D_n D1,,Dn ,满足: (1) 任意 k k k 个或更多个 D i D_i Di 碎片的知识使 D D D 易于计算; (2) 任何 k − 1 k-1 k1 个或更少的 D i D_i Di 个碎片的知识使 D D D 完全无法确定(从某种意义上说,它的所有可能值都是等可能性的)。

这样的方案称为(k, n)阈值方案。

有效的阈值方案在密钥管理中非常有用。为了保护数据,我们可以加密数据,但为了保护加密密钥,我们需要一种不同的方法(进一步的加密只会改变问题,而不是解决问题)。最安全的密钥管理方案将密钥保存在一个单独的、守卫严密的位置(计算机、人脑或保险箱)。这个方案是非常不可靠的,因为某个意外就可以使信息无法访问(例如,计算机故障、人意外去世或保险箱被破坏)。一个显而易见的解决方案是将密钥的多个副本存储在不同的位置,但这提高了安全漏洞的威胁(计算机渗透、背叛或人为错误)。通过使用一个 ( k , n ) (k, n) (k,n) 阈值方案 ( n = 2 k − 1 ) (n = 2 k - 1) (n=2k1),我们得到了一个非常健壮的密钥管理方案:即使 n n n 个碎片中 ⌊ n / 2 ⌋ = k − 1 \lfloor n / 2 \rfloor = k - 1 n/2=k1 个碎片都被摧毁了,我们也可以恢复初始密钥;同时即使安全漏洞暴露了剩余 k k k 个碎片中的 ⌊ n / 2 ⌋ = k − 1 \lfloor n / 2 \rfloor = k - 1 n/2=k1 个,我们的对手也不能重构密钥。

译者总结上方自然段:要保护数据就加密,要保护密钥就不能加密了,否则就是密钥套娃。 n n n 个密钥碎片中, k − 1 k-1 k1 个碎片都暴露了,敌手也不能恢复密钥,但暴露了 k k k 个密钥的话,就敌手就能恢复密钥了。

在其他应用中,需要权衡的不是保密性和可靠性,而是安全性和使用方便性。例如,考虑一个公司对其所有支票进行数字签名(参见RSA[5])。如果给每个高管一份公司的秘密签名密钥副本,该系统很方便,但很容易被滥用。如果为了签署每张支票,需要公司所有高管的合作,那么这个系统是安全的,但很不方便。标准解决方案要求每张支票至少需要三个签名,并且要很容易通过 ( 3 , n ) (3,n) (3,n) 阈值方案实现。每个高管都拥有一个携带一份碎片 D i Di Di 的小磁卡,公司的签名生成设备用任意三个碎片生成(以及过后的破坏)实际签名密钥 D D D 的临时副本。设备不包含任何秘密信息,因此它不需要防止检查。不忠的高管必须至少有两名同伙才能在该方案中伪造公司的签名。

阈值方案非常适合于一些应用:一组相互怀疑、利益冲突的个体必须合作。理想情况下,我们希望合作建立在相互同意的基础上,但这一机制给予每个成员的否决权会使该组活动瘫痪。通过适当地选择 k k k n n n 的参数,我们可以给出任意足够多的大多数权力来采取某些行动,期间还要给任意足够多的大少数人权力来阻止。

2.一个简单的 ( k , n ) (k,n) (k,n) 阈值方案

我们的方案基于多项式插值:给定二维平面 ( x 1 , y 1 ) , ⋯   , ( x k , y k ) (x_1, y_1),\cdots,(x_k,y_k) (x1,y1),,(xk,yk) 上的 k k k 个点。对于不同的 x i x_i xi,有且只有一个 k − 1 k - 1 k1 次的多项式 q ( x ) q(x) q(x),使所有 i i i 满足 q ( x i ) = y i q(x_i) =y_i q(xi)=yi。为了不失去一般性,我们可以假设数据 D D D 是(或可以被转化为)一个数字。为了把它分成 D i D_i Di 份,我们随机选取一个 k − 1 k-1 k1 次多项式 q ( x ) = a o + a 1 x + ⋯ + a k − 1 x k − 1 q(x)=a_o+a_1x+\cdots+a_{k-1}x^{k-1} q(x)=ao+a1x++ak1xk1,其中 a o = D a_o=D ao=D,并计算:
D 1 = q ( 1 ) , ⋯   , D i = q ( i ) , ⋯   , D n = q ( n ) . D_1 = q(1),\cdots, D_i = q(i),\cdots,D_n = q(n). D1=q(1),,Di=q(i),,Dn=q(n).

这段第一行的多项式可以被任意其他函数集合替代,这些函数很容易被求值和插值。

给定这些 D i D_i Di 值的 k k k 的任意子集(连同它们的识别指数),我们可以通过插值找到 q ( x ) q(x) q(x) 的系数,然后求 D = q ( 0 ) D=q(0) D=q(0)。另一方面,仅仅知道这些值的 k − 1 k-1 k1的知识,是不足以计算D的。

为了使这个断言更精确,我们使用模运算而不是实数运算。对素数p取模的整数集构成了一个可以进行插值的域。给定一个整数数据 D D D,我们选择一个比 D D D n n n 都大的素数 p p p q ( x ) q(x) q(x) 的系数 a 1 , ⋯   , a k − 1 a_1, \cdots,a_{k-1} a1,,ak1 是从 [ 0 , p ) [0,p) [0,p) 中的整数的均匀分布中随机选取的,并且计算 D 1 , ⋯   , D n D_1, \cdots,D_n D1,,Dn 的值模 p p p

现在让我们假设这 n n n 份碎片中有 k − 1 k-1 k1 份被透露给了对手。对于 [ 0 , p ) [0,p) [0,p) 上的每个候选值 D ′ D' D,他可以构造一个且仅有一个 k − 1 k-1 k1 次的多项式 q ′ ( x ) q '(x) q(x),这样对于 k − 1 k-1 k1 个给定的参数满足 q ′ ( 0 ) = D ′ q '(0) =D' q(0)=D q ′ ( i ) = D i q '(i)=D_i q(i)=Di。通过构造,这些 p p p 个可能的多项式是等可能的,因此对手绝对不能推导出 D D D 的真实值。

[1] 和 [3] 中讨论了用于多项式评估和插值的高效 O ( n l o g n 2 ) O(n log^2_n) O(nlogn2) 算法,但即使是简单的二次算法对于实际的密钥管理方案也足够快。如果数字 D D D 很长,建议将其分成较短的位块(短位块单独处理)以避免多精度算术运算。块不能任意短,因为 p p p 的最小可用值是 n + 1 n+1 n+1(在 [ 0 , p ) [0, p) [0,p) 中必须至少有 n + 1 n+1 n+1 个独立参数来计算 q ( x ) q(x) q(x))。然而,这并不是一个严重的限制,因为十六位模数(可以由廉价的十六位算术单元处理)足以满足多达 64,000 个 D i D_i Di 份的应用程序。

这种 ( k , n ) (k, n) (k,n) 阈值方案的一些有用属性(与机械锁和密钥解决方案相比)是:

(1)每份碎片的大小不超过原始数据的大小。
(2)当 k 保持不变时, D i D_i Di 份碎片可以动态添加或删除(例如,当高管加入或离开公司时),而不会影响其他 D i D_i Di 碎片。 (只有当离职的高管使一个碎片完全无法访问,甚至对他自己也无法访问时,该碎片就会被删除。)
(3)在不改变原始数据 D D D 的情况下很容易改变 D i D_i Di 碎片——我们只需要一个具有相同自由项的新多项式 q ( x ) q(x) q(x)。这种类型的频繁更改可以大大增强安全性,因为安全漏洞暴露的碎片不能累积,除非它们都是 q ( x ) q(x) q(x) 多项式的相同版本的值。
(4)通过使用多项式值的元组作为 D i D_i Di 碎片,我们可以得到一个分层方案,其中确定 D 所需的片段数量取决于它们的重要性。例如,如果我们给公司总裁 q ( x ) q(x) q(x) 的三个值,每个副总裁 q ( x ) q(x) q(x) 的两个值,每个高管 q ( x ) q(x) q(x) 的一个值,那么一个 ( 3 , n ) (3, n) (3,n) 阈值方案可以由任何三名高管,或任何两名高管(其中一位是副总裁)签署支票,或由总裁单独签署。

G.R. Blakley[2]最近开发了一种不同(且效率稍低)的阈值方案。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值