私钥/公钥变体,用于在线加密数据和使用多个不同的密钥进行解密

时间:2012-09-11 22:31:23

标签: database security encryption public-key-encryption

假设以下示例:

我有一个在线服务,用户可以在其中注册和输入个人数据。现在我想加密这些数据。我有一个私钥Pr1和公钥Pu1。

  1. 用户使用我的在线服务登录密码
    • 转换登录密码以适合私钥格式= Pr2
    • 从Pr2
    • 获取公钥Pu2
  2. 用户输入数据以在线存储数据库
  3. 使用Pu1和添加 - 收件人Pu2 加密用户输入的数据,如Encryption with multiple different keys?
  4. 现在,我可以将加密数据从在线数据库复制到本地计算机,并使用我的本地Pr1解密数据
  5. 用户可以使用正常密码在线解密他们已经输入的数据,当他们登录时会转换为他们的Pr2 (步骤2a)但整个会话
  6. 使用这种方法即使攻击者可以访问我的服务器所有文件和数据库,也无法解密数据,对吗?当然,蛮力攻击是可能的,但每次尝试需要计算私钥时需要一些时间。 但是没有私钥在线存储或需要交换。所以这应该很节省。

    这里的问题是:如果这种方法安全可行,那么必须已经有类似或更好的东西具有这些功能并使用一些不错的安全标准。它是什么?

1 个答案:

答案 0 :(得分:0)

一堆看似随机的想法:为什么人们不会这样做...

首先,用于多用户访问。我通常看到的系统希望让两个用户使用自己的信息访问某些东西,但只保护一次,就是创建一个密钥来保护内容,然后使用多个凭据保护该密钥并将密钥存储在这种形式中多次。也就是说,您将密钥存储在项目本身旁边,但密钥存储N次,每个访问者一次。如果我授予您访问权限,我的信用卡将用于解密密钥,然后将其与您的资料一起再次存储。

沿着相同的多用户线,“授权访问”流程是有问题的。您在上面建议的方案要求为了让我授予您访问权限,系统需要拥有我的凭证(以验证我是谁,我是谁,并且拥有密钥)以及您的密钥(为了让您访问)在同一时刻。这在现实世界中是非常有问题的。

此方案无法为用户提供“忘记密码”的体验。忘记密码 - >失去了关键。

此方案假设用户选择了良好的密码。

此方案意味着具有相同密码的两个用户具有相同的密钥。

你断言DB的盗窃并不是他们必须计算所有密码(这意味着下游密钥)的问题,但实际上这并不难做,也不太昂贵。我只需要计算一次Password123,然后就可以扫描整个数据库。

希望这有帮助。