存储原始密码文本

时间:2010-06-14 04:25:26

标签: database security encryption passwords

我的网络应用程序存储外部网站登录/密码以与他们进行交互。要与这些网站进行交互,我需要使用原始密码文本,因此只在我的数据库中存储哈希是行不通的。

我应该如何存储这些密码?

编辑: 我担心有人可以访问我的服务器。如果我使用某种双向加密并且他们有服务器访问权限,那么他们就可以检查密码在我的后端代码中的解密方式。

5 个答案:

答案 0 :(得分:3)

如果你必须这样做,你应该使用双向加密。有很多算法(密码),但基本上你用加密密钥加密你的数据,并使用相同的密钥再次解密它们。

选择正确的密码取决于您选择的编程语言支持哪些,但示例如下:

  • 河豚
  • 3DES

它们有不同的复杂性,有些比其他更难破解。你应该意识到,如果有足够的时间,没有双向加密是安全的。所以这一切都取决于这些密码的敏感程度。

/卡斯滕

答案 1 :(得分:3)

决定你保护他们的是什么。选项包括(但不限于):意外披露,您披露,传输披露,代码错误披露,硬件物理盗窃等披露等。

如果这是一个Web应用程序,并且每个用户都在存储他/她自己的一组密码,那么您可以使用他们的应用程序登录密码加密这些密码。如果这是一个应用程序,每个用户单独安装,并保留自己的本地数据库,您可以有一个可选的主密码(如Firefox一样)。

如果您只是确保硬件被盗时数据是安全的,您可以使用完整的磁盘加密解决方案,如TrueCrypt或PGP WDE,或Ubuntu,Debian或Fedora的内置方法,并需要PIN或每次启动时都有密码。

如果您只关心安全传输,请使用代码确保您使用传输安全性,并且不必担心加密数据库中的数据。

答案 2 :(得分:3)

在我看来,您希望以与Firefox和Chrome类似的方式存储密码。那么为什么不看看他们是怎么做到的呢?

Chrome就是这样做的: http://www.switchonthecode.com/tutorials/how-google-chrome-stores-passwords

答案 3 :(得分:3)

我会通过以下方式解决这个问题。

保护数据免受硬件被盗:

使用先前帖子中讨论的光盘加密。

如果服务器遭到入侵(黑客攻击),则保护数据:

我会为这个项目使用两个不同的服务器,一个工作服务器和一个前端服务器。

A)工作服务器

  • 这有DB密码等, 它还连接到其他服务。
  • 连接到工作服务器,用户 可以通过API完成。 API应该 有函数,insertUserData, 允许插入用户数据, API转发了所有输入。
  • API使用 只有输入的DB用户 userData表上的特权。
  • 这是联系的唯一方式 这个服务器。
  • 仅允许SSL 连接。
  • 此服务器依次运行连接到外部服务的chron作业,从中提取数据并填充它的数据库。使用具有不同用户权限的其他DB。
  • 此服务器运行另一个chron JOB,它连接到前端服务器并将新数据推送到前端服务器。
  • 运行的服务量最少
  • 只有来自您的IP的SSH / SCP,严密的防火墙。如果连接超过X / min等阻止,因为它们只会偶尔插入。
  • 没有FTP等。

B)前端服务器

从工作服务器接收数据,从不使用密码本身。联系工作服务器的唯一方法是通过上面提到的API,仅用于新的用户信息。这是所有用户登录以查看其信息等的地方。

在同一台服务器上完成所有这一切的问题,如果你被黑客入侵,黑客可以坐下来嗅探所有传入的数据/密码等等。所以即使他们被安全地存储/加密/解密,有一点耐心他会嗤之以鼻他们都是。

答案 4 :(得分:1)

首次运行应用程序时,它将生成一个随机密钥。此密钥将用于加密和解密敏感数据。将密钥存储在本地文件中,并设置文件权限,以便其他人无法读取它。确保运行Web服务器的用户没有登录访问权限(无论如何这都是个好主意)。

打破这个系统的可能方法:

  1. 获取root权限。
  2. 获取sudo访问权。
  3. 在Web服务器上部署恶意应用程序 - 此应用程序将可以访问该密钥,并且可以将其发送到其他位置。
  4. 只要你对所有这些采取合理的预防措施,你应该没事。


    编辑:想想看,您可以将敏感数据直接存储在密钥文件中。加密将提供额外的安全层,但它不是一个非常强大的层;如果攻击者可以访问该文件,那么他也可以访问该数据库。