假设我有一个方案从N
不同的输入中派生出密钥。每个输入可能不完全安全(f.x.错误的密码),但组合它们是安全的。执行此操作的简单方法是按顺序连接所有输入,并使用散列作为结果。纠正密钥加密的错误
现在我想允许从N
输入中只给出N-1
的密钥派生(或更确切地说是密钥解密)。一个简单的方法来做到这一点是生成一个随机密钥K
,产生N
临时密钥对输入的不同N
子集,每一个输入缺失(即Hash(input_{1}, ..., input_{N-1}), Hash(input_{0}, input_{2}, ..., input_{N-1}), Hash(input_{0}, input_{1}, input_{3},..., input_{N-1}), ..., Hash(input_{0}, ..., input_{N-2})
),然后与每个N
键加密K
和存储所有的结果。
现在我想要一个广义的解决方案,我可以在N
输入中使用K
解密密钥。要扩大上述方案的天真方式需要存储(N
选择N-K
)值,这很快就变得不可行。
是否有一个良好的算法对于这一点,这并不意味着这多少存储空间?
我曾经想过一个办法使用类似Shamir的秘密共享方案,但想不出一个好办法,因为投入是固定的。
我曾考虑过类似的情况。但考虑一个极端情况:N = 256,每个输入只包含一位。然后,连接和散列方案具有256位安全性,我期望254/256门限方案具有254位安全性。但是我可以用分而治之的方法来破解这个方案:首先尝试第一个输入的两个可能值,然后尝试第二个输入的两个可能值等等,从而使系统最多使用2 * 254 * 100000迭代PBKDF2。 – 2010-10-28 13:25:14
(但是也许系统可以通过不包含MAC来抢救?这将要求分离密钥的组件与随机数据无法区分,但AFAIK应该是真实的)。 – 2010-10-28 13:26:17
这种可能性绝对会使问题更加有趣。我假定每个输入都可以归类或以某种方式排列它们,并知道你有哪些和哪些丢失了?这在您的散列解决方案中是隐含的,但是想确认这在设计中是可行的。 – 2010-10-28 16:07:57