【问题标题】:Private/Public key variant for encrypting data online and decrypting with multiple different keys用于在线加密数据并使用多个不同密钥解密的私钥/公钥变体
【发布时间】:2012-09-04 22:11:15
【问题描述】:

假设以下示例:

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

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

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

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

【问题讨论】:

    标签: database security encryption public-key-encryption


    【解决方案1】:

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

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

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

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

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的想法!非常有帮助。我现在看到了我的计划的问题。您能否为您的第一点链接资源?这样我就可以阅读有关它的更多信息。听起来很有趣
    • 我不知道通用链接,但我相信 EFS 作为示例大致以这种方式工作(尽管填补了一些漏洞:)):en.wikipedia.org/wiki/Encrypting_File_System
    猜你喜欢
    • 2011-07-24
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2020-02-28
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多