【问题标题】:Asymmetric encryption with multiple decryption results具有多个解密结果的非对称加密
【发布时间】:2014-12-19 14:38:35
【问题描述】:

编辑

我正在尝试为公司开发密码管理工具。我的想法是某种数据库中的密码使用只有管理员拥有的主密码进行加密。

公司的每个部门都应该有一个自己的密码,该密码只允许该部门的用户访问他们的密码。

让我们看一个例子。

  • A部
    • 计费系统,密码:“你好”
  • B部
    • 邮件,密码:“世界”

密码使用管理员的主密码加密。让我们假设它是 0000。所以在数据库中会有这样的东西

  • A部
    • 计费系统,密码:encrypt("Hello",0000,'A')
  • B部
    • 邮件、密码:encrypt("World",0000,'B')

此外,A部门的密码是9999,B部门的密码是7777。现在我正在寻找一种可能性,用密码9999解密计费系统的密码,用7777解密邮件密码。但它应该无法用 9999 解密邮件密码,反之亦然。

  • 计费系统:decrypt(encrypt("Hello",0000,'A'), 9999) = "Hello"
  • 计费系统:decrypt(encrypt("Hello",0000,'A'), 7777) != "Hello"
  • 邮件:decrypt(encrypt("World",0000,'B'), 9999) != "World"
  • 邮件:decrypt(encrypt("World",0000,'B'), 7777) = "World"

这还不够难,管理员用户必须有可能用他的主密码 0000 解密任何密码

  • 计费系统:decrypt(encrypt("Hello",0000,'A'), 0000) = "Hello"
  • 邮件:解密(encrypt("World",0000,'B'), 0000) = "World"

我希望我的想法现在越来越清晰......

【问题讨论】:

  • 您始终使用目的地的 public 密钥进行加密。然后只有私钥所有者才能解密。使用私钥加密仅对签名文档进行,当哈希摘要使用私钥加密并且任何人都可以使用公钥对其进行解密,从而验证签名。
  • 嗯,是的,你是正确的标准非对称加密。也许在这里使用私钥和公钥很烦人...您对命名有更好的想法吗?
  • 绝对不清楚您要做什么和题外话,而且这不会发展编程。你可以在加密上发帖,但只有当你可以使用某种标准符号来描述你的协议时,这个协议几乎会立即关闭。
  • 是的,如果不向世界大声喊出我的想法,就很难描述我的想法/问题;)但我想否则没有人会理解我在寻找什么。所以我重写了文字...
  • 你想要实现的已经实现为key hierarchy

标签: encryption encoding public-key-encryption decoding encryption-asymmetric


【解决方案1】:

前言:你不能在不知道其全部意图和目的的情况下设计一个密码系统,所以我给出的任何建议都可能完全不适合你的最终目标。此外,您可能更愿意通过http://security.stackexchange.comhttp://crypto.stackexchange.com 向专家咨询。另外,我对密码学有更多的一般知识,这是一个通用的编程论坛,所以请对以下内容持保留态度。


话虽如此,以加密形式存储一条信息但让多方使用不同密码访问它的常用方法是使用中间加密密钥。你有你的明文。您生成一个随机密钥并使用它来加密明文。您现在使用用户的个人密码加密随机生成的密钥并存储结果。

plaintext  = 'Hello World'
key        = make_random_string(128)
ciphertext = encrypt(plaintext, key)
keys = {
    user1: encrypt(key, user1password),
    user2: encrypt(key, user2password),
    ...
}

要解密,您使用用户的密码来解密密钥,然后解密实际信息。

key       = decrypt(keys.user1, user1password)
plaintext = decrypt(ciphertext, key)

print plaintext

这种间接方式允许您在多个用户之间共享同一条信息。在实践中,您可能会使用对称加密使用随机密钥加密明文,使用非对称加密使用每个用户的公钥加密随机密钥。这意味着在实践中,每次您生成一个新的随机对称加密密钥时,系统都需要创建一个副本,该副本使用应该有权访问它的每个用户的公钥单独加密。

这还允许您通过核销该用户版本的随机加密密钥来不可挽回地撤销单个用户对特定信息的访问权限。

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多