2

假设以下示例:

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

  1. 用户在我的在线服务中使用密码登录
    • 将登录密码转换为适合私钥格式 = Pr2
    • 从 Pr2 获取公钥 Pu2
  2. 用户输入数据以在线存储在数据库中
  3. 使用 Pu1 加密用户输入的数据并添加--recipient Pu2类似使用多个不同密钥的加密?
  4. 现在我可以将在线数据库中的加密数据复制到我的本地机器并使用我本地的 Pr1 解密数据
  5. 用户可以使用他们的普通密码在线解密他们已经输入的数据,每次登录时都会转换为他们的 Pr2(步骤 2a),但在整个会话期间都有效

使用这种方法,即使攻击者可以访问我的服务器以及所有文件和数据库,也无法解密数据,对吧?当然,暴力攻击是可能的,但每次尝试都需要计算私钥,因此需要一些时间。但是没有私钥在线存储或需要交换。所以这应该很省钱。

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

4

1 回答 1

0

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

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

沿着相同的多用户路线,“授予访问”流程是有问题的。您在上面建议的方案要求,为了让我授予您访问权限,系统需要在同一时刻。这在现实世界中是相当有问题的。

该方案不会为用户提供“忘记密码”的体验。丢失密码 -> 丢失密钥。

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

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

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

希望这可以帮助。

于 2012-09-12T15:12:10.260 回答