【问题标题】:Encrypting data for storage in database加密数据以存储在数据库中
【发布时间】:2011-06-22 22:14:43
【问题描述】:

我们有一个网站,用户将在我们的数据库中保存极其个人和敏感的数据。

我们当然需要在将这些数据存储到数据库之前对其进行加密,并使用 SSL。这是一个将使用表单身份验证的 MVC 应用程序。确保这些数据从我们保存到解密以显示在他们的个人页面上的最佳方法是什么?

我们还需要确保即使我们的开发人员和 dba 在应用程序上工作,它也是安全的。

处理这种情况的最佳方法是什么?

【问题讨论】:

  • 你想保护什么/谁来保护数据?
  • 任何想得到它的人。基本上,我们只需要能够确保用户他们将是唯一可以看到数据的人。 (虽然我知道不可能 100% 保证,但我们需要尽可能接近它)
  • 那么你基本上需要在运行时使用用户提供的密钥进行加密。当然,如果用户丢失了该密钥(请记住,我们所说的是用户),请与数据说再见。
  • 还请记住,它的成本会。例如,您将无法执行简单的搜索查询(无需解密条件中涉及的所有列的所有行)。
  • @twal:你最后做了什么?我很好奇,我也有同样的情况……

标签: c# .net asp.net-mvc security encryption


【解决方案1】:

SQL Server 有一些内置的 encryption capabilities (dead link) encryption capabilities 你可以看看。

【讨论】:

    【解决方案2】:

    除非您使用公钥加密并且最终用户必须对此进行控制,否则无法阻止 DBA 访问数据。如果最终用户丢失了密钥,他们将丢失所有数据。

    您可以有一个单独的数据库来存储密钥,而您的 DBA 将无权访问该数据库。

    您必须有两名 DBA,一名负责数据,一名负责密钥。

    这是假设您不信任您的 DBA,但您不应该雇用他们。

    如果您信任您的 DBA,那么您可以让他们访问这两个 DB,但要求他们拥有单独的帐户,这样如果一个帐户遭到入侵,他们(黑客)将无法访问所有内容。

    通常,在设计良好的系统中,DBA/管理员有单独的帐户用于他们的个人工作,并有一个提升的帐户用于工作。

    我假设程序员只能访问测试环境。如果他们可以访问生产环境,那么他们将可以访问密钥和数据。

    【讨论】:

    • 我们信任他们,如前所述,我们只是尽力向客户保证尽可能多的隐私,我理解我所描述的情况是理想主义的。当然,我们最终理解,如果内部人员真的想要/需要获取数据,他们将有权访问数据。我们只是试图尽可能接近理想的情况。这些 cmets 帮助很大。谢谢
    【解决方案3】:

    每个加密都有一个密钥,密钥是(获取/不获取)该密钥:) 最好的方法是在 web.config 上设置密钥,无需任何编程背景即可完成


    我看到了一个漂亮的AES Encryption Algorithm implementation at StackOverflow。我建议你使用它。

    【讨论】:

    • 在 web.config 中设置密钥将允许开发人员访问数据,除非我遗漏了什么。
    • @mxmissile:生产 web.config ≠ 开发 web.config。另外,生产数据库≠开发数据库。
    • @mxmissile:让开发人员使用他们知道的密钥进行开发。我们可以在部署后更改它。
    • 如果您在其中存储加密密钥,请加密您的 web.config:msdn.microsoft.com/en-us/library/bb986855.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2018-12-15
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多