【问题标题】:Encryption algorithm: user only decrypt加密算法:用户只解密
【发布时间】:2012-03-29 06:08:06
【问题描述】:

什么加密算法可以使用2个密钥: 管理员 - 加密和解密用户 - 仅解密 ?

【问题讨论】:

    标签: encryption cryptography public-key-encryption encryption-asymmetric


    【解决方案1】:

    您可以通过使用私钥进行加密(就像您要签名一样)对RSA 执行此操作。元组 (d,n) 将是管理员密钥(通常命名为私钥),(e,n) 将是用户密钥(通常命名为公钥)。管理员密钥用于加密,用户密钥用于解密。只有管​​理员拥有管理员密钥,而用户和管理员都知道用户密钥。现在只有管理员可以加密,而用户只能解密。

    请注意,我特意为加密管理员密钥选择指数d,而不是反之亦然,因为e 通常选择非常小以获得更好的性能,如果您使用管理员密钥执行此操作而不是用户密钥,那么系统就会被破坏。

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

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

    但是,在设计这样的加密系统时,您应该非常小心,有很多可能出错并完全危及系统安全的事情。寻求专家建议。

    【讨论】:

      【解决方案2】:

      编辑:这是不正确的(见丹尼尔的评论)。

      您可以修改任何算法以允许使用两个密钥,方法是生成一个会话密钥,使用该密钥加密有效负载,然后使用两个密钥分别加密会话密钥。

      例如,如果Ak 是管理员密钥,Uk 是用户密钥,Sk 是随机会话密钥,e(k, p) 是对称加密函数,那么您可以使用:

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

      【讨论】:

      • 您的提案没有用户只能解密的所需属性。由于用户可以解密Sk,他们可以使用Sk加密不同的payloadp'并从中构造一个新的密文。
      • 天啊!你说的很对。谢谢。我会在此处留下我的答案,以警告如何不要这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2011-10-13
      • 2021-05-16
      • 2021-05-19
      相关资源
      最近更新 更多