这里重点谈一下对Adi Shamir的关于阈值密钥分 享方案的论文《How to Share a Secret 》的理解,以及这两周密码学课堂的学习感想。
想要看懂一篇论文,首先要知道它是为了解决什么问题,然后看它为了解决这个问题采用了什么样 的方法,最后再总结这个方法的效果。Adi Shamir的这篇论文是为了解决多方计算的数据隐私问题,提 出了一种基于拉格朗日插值多项式的门限方案,从而实现了安全计算。下面具体进行解释。
一个比较直观的方法就是基于噪音的安全计算方法,通过对计算过程添加噪音进行干扰,让原始数 据淹没在噪音中,使攻击者或黑客无法从得到的结果反推原始数据,噪音可以在数据源、模型参数或输 出中添加。这种方法的优点是效率高,只需添加某些服从特定分布的随机数即可,但也有明显的缺点, 最后得到的结果不够准确,在复杂的计算任务中可能无法使用。
另一个方案就是通过密码学方法将数据编码或加密,得到加密的数字后进行通信,加密的方法主要 有混淆电路(Garbled Circuit)、密钥分享(Secret Sharing)和同态加密(Homomorphic Encryption)这三种。混淆电路方法通过设置电门来实现数据加密+打乱的过程,当在执行复杂的计算任 务时门的设计也会越来越复杂,同态加密是后来提出来的,本论文主要介绍了密钥分享的实现机制。
密钥分享的基本思路是将秘密 S 进行特定运算,拆分成 w 个秘密碎片 Si (0 < i <= w),并将这些秘 密碎片 Si 分发到 w 个参与方中保存,每个参与方拿到的都是原始秘密数据的一部分,一个或少数几个 参与方无法还原出原始秘密,只有当至少 k 个参与方同时拿出自己所拥有的秘密碎片 Si 时,才能还原出 最初的秘密 S。形式化描述为:将原始数据D分为n份,任意k份可以重组成D,任意小于等于k-1份的数 据碎片不会泄露任何关于D的信息。这种技术不仅能对数据进行加密,还能为密码系统构建鲁棒的密钥 管理机制,即使数据被破坏的只剩一部分也仍能安全可靠的运行。
论文首先探讨了这样的问题:11个科学家从事一个秘密项目,他们希望把文档所在一个箱子里,箱 子只有在6个或更多科学家在场时才能打开。最少需要多少锁?每个科学家最少需要保管几把钥匙?不难 证明最小的解决方案是使用462把锁和每人252个钥匙。这个数目显然是不实用的,当科学家人数增加时 会呈指数级增加。
文章接着提出了一种简化的解决方案:(k, n)门限机制。将上述问题归纳为:秘密为某个数据D,将 D分成n份D1,D2,...Dn,满足:(1)任意k或多余k份Di可以很容易地计算出D;
(2)任意k-1或少于k-1份 Di信息不能准确计算出D(所有可能的值相同)。
门限机制适合这样的应用:一组有矛盾的、相互怀疑的个体必须合作。理想情况下,我们希望合作 是基于多方同意的,但是这种机制会赋予每个成员投票权,这可能导致组织的活动陷于瘫痪。 通过适当 选择参数K和n,我们可以给予任何足够多的多数人采取一些行动的权力,同时阻止那些数量不足的少数 方的权力。
这种(k,n)门限机制的优点是:
(1)每部分信息的大小不会超过原始数据; (2)当k固定时,Di可以动态地增删而不影响其他信息片(pieces);
(3)可以在不改变原始数据D的情况下容易的改变Di,我们需要的只是一个新的有相同自由项的多项式 q(x)。这种类型的频繁变化可以提高安全性,这样由安全漏洞暴露的pieces就不回累积,除非它们都是 同一个版本的q(x)多项式的值;
(4)通过使用多项式值数组作为Di,我们可以得到一个分层机制,决定D所需的pieces数量依赖于它们 的重要性;