在仍然需要访问明文时安全地存储密码

时间:2011-02-24 02:54:53

标签: security encryption passwords

  

可能重复:
  PHP 2-way encryption: I need to store passwords that can be retrieved

我知道存储用户密码的最佳做法是只存储不可逆转的密码哈希值。

但是,我正在开发一个应用程序,我需要为另一个Web服务存储用户的登录信息 - 我需要定期登录并执行一些维护任务。不幸的是,该服务不提供授权令牌,所以我(非常担心)必须以我可以访问其纯文本值的方式存储密码。我不拥有或控制我正在验证的服务,唯一的方法是“借用”用户的用户名和密码并进行身份验证。

我打算在数据库中AES_ENCRYPT密码,这意味着如果有人能以某种方式访问​​数据库,他们将无法获得明文。但是,我的代码需要访问密钥才能解密它们,因此如果整个服务器遭到破坏,这将无法保护,密码将被泄露。

除了上述加密之外,我是否可以尽可能安全地采取最佳做法或步骤?

修改

我知道无论我做什么,最终密码必须以明文形式访问,因此受损的服务器意味着密码将被泄露,但我想知道我可以采取哪些措施来降低风险。例如。加密数据库可以保护我在数据库受损但不是整个服务器的情况下。其他类似的缓解措施将不胜感激。

2 个答案:

答案 0 :(得分:5)

但是,我正在开发一个应用程序,我需要为另一个Web服务存储用户的登录信息 - 我需要定期登录并执行一些维护任务。

好的......我仔细阅读了答案和评论,而我所能说的就是我希望你有一支精干的法律团队。在我看来,您所提供的服务取决于用户的信任。这是一个很好的用户控制的开关,而不是背后的帮助,但我认为你想要一个非常铁的服务协议。

那就是说,你可以调用很多安全性偏执狂。如果发生中断,您必须根据产品,公司和用户的损害来确定您想要经历多少。这是想法:

  • 数据存储 - 将密码存储在远离攻击者可以进入的位置。高度访问受控文件,后端计算机上的数据库等。让任何攻击者都可以通过层层防御来到达该位置数据存储。同样具有防火墙和最新安全补丁等网络保护。这里没有任何事情可以孤立起来。
  • 加密 - 任何加密技术都是一种延迟策略 - 攻击者拥有您的数据,他们最终会在无限的时间内破解您的加密。因此,大多数情况下,您的目标是让它们放慢足够长的时间,让系统的其余部分发现您已被黑客入侵,提醒您的用户,并让用户有时间更改密码或禁用帐户。 IMO - 对称或不对称加密技术都可以工作 - 只要您安全地存储密钥。作为一名PKI人,我倾向于使用非对称加密,因为我更了解它并且知道许多COTS硬件解决方案,可以非常安全地存储我的私钥。
  • 密钥存储 - 您的加密功能与密钥存储一样好。如果密钥位于加密数据旁边,那么按理说攻击者不需要破解加密,他们只需使用密钥即可。 HSM(硬件安全模块)是密钥存储的高端选择 - 在较高的范围内,这些是安全盒,可防篡改,既可以保存密钥,也可以为您执行加密。在低端,USB令牌或智能卡可以执行相同的功能。其中一个关键部分是,最终,如果您在服务器启动时使管理员激活密钥访问,那么最好。否则,当您试图找出如何安全存储最终密码时,最终会出现鸡蛋和鸡蛋的情况。
  • 入侵检测 - 拥有一个良好的系统,如果你被黑客攻击,很有可能发出警报。如果您的密码数据受到损害,您希望在任何威胁之前向您的用户宣传。
  • 审核日志记录 - 确实记录了谁在系统上做了什么 - 特别是在密码附近。虽然您可以创建一个非常棒的系统,但是特权用户做坏事(或愚蠢)的威胁与外部威胁一样糟糕。典型的高端审计系统以高权限用户无法查看或篡改的方式跟踪高权限用户行为 - 相反,还有第二个“审计员”帐户仅处理审计日志而不处理任何其他内容。

这是系统安全性高点的一个亮点。我的一般观点是 - 如果你认真保护用户密码,你就不能只考虑数据。只是加密密码可能不足以真正保护用户并保护信任。

解决这个问题的标准方法是考虑开支的成本与保护成本。如果两个成本对于该功能的价值都太高,那么您就有一个很好的迹象表明您不应该费心去做...

答案 1 :(得分:3)

正如您所说,您的代码最终将需要密钥,因此如果服务器受到损害,密码也将如此。没有办法解决它。

您可以做的是拥有一个非常小的代理,其唯一的工作就是拥有密码,收听主应用程序的请求,连接到相关服务,并将响应返回给您的应用程序。如果这个非常简单的代理是在服务器上运行的所有代理,那么它将比在具有许多服务的服务器上运行的复杂应用程序更不可能被泄露。