我们如何存储除纯文本以外的密码?

时间:2010-04-18 21:47:31

标签: linux security authentication

我在stackoverflow上发现了很多关于如何存储用户密码的帖子。但是,我需要知道存储密码的最佳方法是什么,我的应用程序需要通过网络与另一个应用程序进行通信?目前,我们的网络应用程序需要将数据传输到远程网站。要上传数据,我们的网络应用程序会从文本文件中读取密码,并创建包含有效负载的标头并通过https提交。

此文件系统上的纯文本密码是个问题。有没有办法更安全地存储密码?

这是一个linux操作系统,应用程序是用python编写的,不会编译。

谢谢!

进一步澄清: 根本没有用户参与此过程。其他Web应用程序使用存储在文件系统中的密码来验证发出请求的Web应用程序。用下面的评论者的话说: “在这种情况下,应用程序是另一个远程应用程序的客户端。” (感谢Joe帮我澄清。)

8 个答案:

答案 0 :(得分:4)

我认为你不会找到一种万无一失的方法来做到这一点。我会提出一些组合来实现“默默无闻”的安全性:

  • 将密码文件存储在与将使用它的计算机不同的计算机上
  • 将文件路径存储在app nachine
  • 上的单独配置文件中
  • 使用权限将配置和密码文件的访问权限仅限于您的流程
  • 如果系统允许,则审核文件访问权限(记录谁触摸文件的日志)
  • 给出文件夹和文件无害的名字(/usr/joe/kittens.txt?)
  • 阻止对计算机的物理访问(异地托管或锁定的壁橱或其他东西)

答案 1 :(得分:4)

从问题来看,您似乎需要以这种方式存储密码,以便可以在与其他网站的自动交易中读取和使用密码。您可以加密密码并将其加密存储在文件中,然后在使用之前使用存储在系统中其他位置的密钥对其进行解密。这使得使用密码访问该文件的人遇到困难,因为他们现在必须找到所使用的密钥和加密算法,因此他们可以解密它。

作为防守,更少的防守总是优于一个在被攻击时失败的强大防守。此外,我还会保护包含密码的文件,而不是密码本身。配置您的Web服务器以禁用提供包含密码的文件的可能性,并尝试设置需要该文件在单独帐户下运行的进程,因此您可以将对文件的访问权限限制为仅运行进程和管理员帐户的帐户。 / p>

答案 2 :(得分:0)

您可以使用双向密钥加密算法,如RSA, 密码在文件系统上以加密方式(通过密钥存储在用户的大脑中)存储,但要解码密码,用户必须输入密钥。

答案 3 :(得分:0)

至少你应该使用权限(如果你在支持它们的文件系统上),以确保你是唯一一个能够读取文件的人。

此外,如果您的应用程序已编译,则使用硬编码密码加密密码并不会太困难。如果代码没有编译,这种方法实际上没有用,因为潜在的攻击者只能读取源并确定加密。

答案 4 :(得分:-1)

您可以将其存储为哈希算法的结果,这是单向算法(例如MD5或SHA)。在身份验证时,您计算用户键入的密码的MD5,并检查与此用户存储的MD5密码哈希的相等性。如果是相同的密码就可以了。

有关哈希算法的更多信息,请访问:

答案 5 :(得分:-1)

您的Web应用程序是否在服务器场上托管?如果没有,那么DPAPI等技术将允许您加密密码,以便只能在加密的机器上解密。

从内存中可能会出现在Web场中使用它的问题,因为您需要重新加密每个服务器的值。

如果它是一个Web场,那么您可能希望使用某种形式的RSA加密,如其他答案中所建议的那样。

编辑:DPAPI只有当你在Windows上托管时才有用......

答案 6 :(得分:-1)

Protecting the Automatic Logon Password

服务器应用程序可以使用LsaStorePrivateData函数来存储客户端和机器密码。

仅限Windows

答案 7 :(得分:-3)

我认为您不了解所提供的答案。您不会在任何地方存储纯文本密码,也不会将其传输到其他设备。

  

你写道:对不起,但问题是存储一个   文件系统上的密码......这个   需要密码才能进行身份验证   另一个网络应用程序。

您不能指望文件系统保护以保持纯文本安全,这就是为什么其他人已经回复您需要SHA或类似的原因。如果您认为散列密码不足以进行身份​​验证,则您无法理解相关算法:

  1. 从用户
  2. 获取密码P.
  3. 加密存储(例如盐渍哈希) 密码Q相对于某个地方 安全
  4. 忘记P(甚至清除你的缓冲区 用来读它)
  5. 将Q发送到远程主机H
  6. H从用户获取密码P' 需要
  7. H从P'计算Q',比较Q' 以Q为平等