假设一个组想要加密一些信息,然后在组成员之间共享加密密钥,这种方式需要组的共识来解密信息。我对各种场景感兴趣,其中共识的广度从一致同意到绝对多数不等。一种有用的技术可以应用于对称密钥、私钥或两者。
我可以尝试使用自己的方法,我相信许多 SO 成员都可以。但就这个问题而言,我只对已广泛发表并经受住密码分析专家审查的方法感兴趣。期刊引用很好,但对学术来源的解释也非常有用。
假设一个组想要加密一些信息,然后在组成员之间共享加密密钥,这种方式需要组的共识来解密信息。我对各种场景感兴趣,其中共识的广度从一致同意到绝对多数不等。一种有用的技术可以应用于对称密钥、私钥或两者。
我可以尝试使用自己的方法,我相信许多 SO 成员都可以。但就这个问题而言,我只对已广泛发表并经受住密码分析专家审查的方法感兴趣。期刊引用很好,但对学术来源的解释也非常有用。
我一直对这种秘密分享技术很着迷。我在互联网上看到过实现它的代码,但从未见过实际的应用程序。 Shamir 的秘密分享 维基百科文章链接到一些实际代码,以及原始学术文章。
你所描述的听起来很像“秘密分裂”(第 12.1 节。Cyptography 简介。Trappe 和华盛顿。第 2 版)基本思想是你可以想出一个多项式,其中包括你的“秘密”(一个键)作为一个点在线上。您可以通过选择该多项式上的其他点来分配“份额”。两点定义了一条 f(x) = ax + b 形式的直线,三个点定义了一个 f(x) = ax^2 + bx + c 形式的多项式,四个点定义了一个 f(x) 形式的东西= ax^3 + bx^2 + cx + d,以此类推。您可以选择一个多项式,其中包含您的秘密作为一个点,并且该多项式的次数足以让任何 N 个人都可以重建它。
这是被称为“沙米尔阈值方案”的基本思想。
参见关于Secret Splitting和Shamir's Secret Sharing 的维基百科 维基百科页面有一些指向这个想法的实现的链接,包括Windows和UNIX的 GPL 代码。
这很容易通过纠错码实现。您可以使用命令行工具,例如par2(顺便说一句,它并不完全适合此特定目的,因为它会生成大小不同的恢复块)。假设您有 (n+m) 个选民,并且想要获得 n 票的法定人数。您生成 n 个私钥 K₁∘、K₂、... Kn,并生成 m 个额外的相同大小的 ECC 块 Pₓ。这样任何 n 块都足以重构密码 K₁∘K₂∘...∘Kn
去这里讨论 Shamir 秘密分享的数学基础,并简要讨论它所具有的实际应用类型。向下滚动页面到关于多项式和秘密共享的讲义。这可能是对该地区的基本概述,但对您来说应该很有趣。 离散数学笔记
Lotus Notes 提供了“Silo 密码”的实用实现,其中对某些资源(数据/信息/文档)的访问被锁定为“共享 ID” - 设置了 ID(我认为基于 RSA 的经过认证的 PKI 系统的一部分)有 2 个或更多(我认为最多 16 个)个人用户密码。验证者/管理员设置了一个方案,其中任何数量的可用密码或所有密码都是必要的,以“打开”id 以供主动使用。此过程通常用于将 Org 或 OU 证书锁定给 5 名中的 2 名或 5 名中的 3 名管理员/公司官员授予访问权限,从而确保可以控制高级证书的使用/访问并避免管理员人员缺席。