具有多个解密结果的非对称加密

时间:2014-10-23 19:59:34

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

修改

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

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

让我们看一个例子。

  • A部门
    • 结算系统,密码:“你好”
  • B部门
    • 邮件,密码:“世界”

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

  • A部门
    • 结算系统,密码:加密(“你好”,0000,'A')
  • B部门
    • 邮件,密码:加密(“世界”,0000,'B')

此外,部门A的密码是9999,部门B 7777的密码。现在我正在寻找用密码9999解密计费系统密码的可能性,并用7777解密邮件密码。但它应该< strong>不可以使用9999解密邮件密码,反之亦然。

  • 结算系统:解密(加密(“你好”,0000,'A'),9999)=“你好”
  • 结算系统:解密(加密(“你好”,0000,'A'),7777)!=“你好”
  • 邮件:解密(加密(“世界”,0000,'B'),9999)!=“世界”
  • 邮件:解密(加密(“世界”,0000,'B'),7777)=“世界”

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

  • 结算系统:解密(加密(“你好”,0000,'A'),0000)=“你好”
  • 邮件:解密(加密(“世界”,0000,'B'),0000)=“世界”

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

1 个答案:

答案 0 :(得分: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

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

这也可以让您无可挽回地撤销个人用户对特定信息的访问权限,只需通过查看用户版本的随机加密密钥即可。