回答

0

编辑:这是不正确(请参阅Daniel的评论)。

您可以修改任何算法以允许通过生成会话密钥来允许两个密钥,使用该密钥加密有效负载,然后使用两个密钥对会话密钥进行加密。

例如,如果Ak是管理的关键,Uk是用户的关键,Sk是随机会话密钥,并e(k, p)是对称加密功能,那么你可以使用:

ciphertext = e(Ak, Sk) . e(Uk, Sk) . e(Sk, p) 
+0

您的提议没有用户只能解密的期望属性。由于用户可以解密Sk,他们可以使用Sk来加密不同的有效载荷p,并从中构造一个新的密文。 – 2013-01-21 17:01:51

+0

D'oh!你说得很对。谢谢。我将在这里留下我的答案,作为警告如何不这样做。 – 2013-01-21 18:11:29

2

你可以做这与RSA通过使用私钥进行加密(就好像你将签名一样)。元组(d,n)将是管理密钥(通常称为私钥),(e,n)将是用户密钥(通常称为公钥)。管理密钥用于加密,用于解密的用户密钥。只有管​​理员拥有管理员密钥,而用户和管理员都知道用户密钥。现在只有管理员可以加密,而用户只能解密。

注意,我特意选择了加密管理的关键,而不是反之亦然指数d,因为e通常选择为获得更好的性能非常小,如果你这样做与管理的关键,而不是用户密钥,那么系统将被破坏。

请注意,如果为此构建混合系统,则仅需要解密属性就会中断,因为用户也可以获得对称会话密钥并修改消息。

我怀疑你可能希望只用解密的属性来真正实现潜在的大量加密数据的认证(即,使用户知道数据必须来自管理员并且没有被篡改)。如果是这样,你真正需要的是一个更复杂的方案,它具有适当的数字签名(提供认证)和某种形式的机密性加密。使用对称密码进行批量加密以及例如RSA用于加密对称密钥。

但是,在设计像这样的密码系统时,您应该非常小心,因为存在可能出错并且完全危及系统安全性的事情lot。寻求专家意见。