使用Key子集进行身份验证/解密

时间:2014-09-26 18:54:54

标签: cryptography

是否存在可以对用户进行身份验证(或者他们可以解锁文档)的加密系统,只有当他们提供多个有效密钥的子集时才会进行身份验证?

提前致谢。

1 个答案:

答案 0 :(得分:0)

非匿名身份验证

如果您不要求有助于成功身份验证的用户保持匿名,那么很简单:服务器会生成一个随机的nonce并将其发送给用户子集。每个用户使用他/她的私人签名密钥对nonce进行签名,并将签名发送给服务器。服务器验证每个签名,如果存在足够的签名,则该子集已成功通过身份验证。

(匿名)解密

此处的其他人可能知道用于此目的的RFC或库,但如果没有,我会像这样设计:将秘密拆分为n部分,其中k是使用Shamir's Secret Sharing重新创建秘密所必需的。对于每个n用户,使用他/她的公共加密密钥加密拆分秘密的不同部分。当k他们解密他们分离秘密的部分时,他们可以重新创建秘密。

如果公钥加密是确定性的,您甚至可以将其设为匿名,如果您可以获得秘密,您可以检查k用户的每个其他子集是否也能够获取秘密:在准备协议运行时,除了公共加密密钥之外,还必须为每个用户指定固定的x坐标。当用户子集成功重建秘密并因此重新创建多项式时,他们可以在每个用户x坐标处对其进行评估,并使用其公钥对其进行加密。如果结果与服务器生成的结果相同,则k个用户的每个子集都可以解密该密钥。

(请注意,确定性加密有一些注意事项。例如,如果明文空间很小,攻击者只能加密每个明文并将结果与​​给定的密文进行比较。)

推论:匿名身份验证

使用匿名解密,您可以通过让服务器以上述方式加密kn人的随机nonce来创建匿名身份验证协议,并将其发送给用户子集。他们解密nonce,检查k个用户的每个子集是否也能解密它并将该nonce发送回服务器。