【问题标题】:Password Encryption / Database Layer AES or App Layer AES密码加密/数据库层 AES 或应用层 AES
【发布时间】:2009-05-18 12:53:48
【问题描述】:

我需要加密/解密新应用程序的密码。规范要求我使用 AES;任何人都可以提出一个很好的理由

  1. 使用 CLR 函数在数据库层进行所有加密或
  2. 在 .Net 应用层做这件事?
  3. 数据库和服务器的混合体

我将成为验证密码;该应用程序使用 Telerik ORM 进行了 n 层分层。唯一真正的功能将是创建/更新密码并检查输入的值。

在我的直觉中,我认为

  1. 数据库更适合根据现有记录验证用户输入的密码;和
  2. 用于创建/更新密码的前端(因此永远不会传输纯文本密码)

我对其他想法和建议感兴趣,为什么我可以做一个替代方案。如果您建议我在前端执行此操作,您对加密密钥有何看法? XML 中的每个用户一个或配置文件中的每个应用一个?

感谢您的任何建议:)

【问题讨论】:

    标签: .net security sql-server-2008 clr passwords


    【解决方案1】:

    根本不存储密码 - 只存储它们的 salted 哈希值。

    仅加密密码的问题很明显——您必须将密钥存储在某个地方。如果你进行客户端加密,我只会使用Reflector在代码中找到密钥或者附加一个调试器,等待客户端从服务器获取密钥。

    如果您在服务器上执行加密,获取密钥将变得更加困难 - 但每个有权访问服务器的人都可以使用与前面提到的相同的技术,因为您仍然需要将密钥存储在某个地方。当然,您必须加密客户端和服务器之间的连接,否则攻击变得微不足道。

    将加密转移到数据库服务器不会有太大变化,您必须加密两个连接 - 客户端和服务器之间以及服务器和数据库服务器之间。

    我建议在服务器中执行加密,否则您必须信任客户端。这当然需要客户端和服务器之间的安全连接。服务器和数据库服务器之间的连接可能是未加密的。

    【讨论】:

    • 虽然我通常会避开“不要那样做”的答案,但在这种情况下,我希望我可以投票两次。
    【解决方案2】:

    我只需要验证密码,使用单向加密可能会更好。

    这里有一些关于这个话题的讨论: Encrypting/Hashing plain text passwords in database

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-05
      • 2016-09-22
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多