我的网络应用程序存储外部网站登录/密码以与他们进行交互。要与这些网站进行交互,我需要使用原始密码文本,因此只在我的数据库中存储哈希是行不通的。
我应该如何存储这些密码?
编辑: 我担心有人可以访问我的服务器。如果我使用某种双向加密并且他们有服务器访问权限,那么他们就可以检查密码在我的后端代码中的解密方式。
答案 0 :(得分:3)
如果你必须这样做,你应该使用双向加密。有很多算法(密码),但基本上你用加密密钥加密你的数据,并使用相同的密钥再次解密它们。
选择正确的密码取决于您选择的编程语言支持哪些,但示例如下:
它们有不同的复杂性,有些比其他更难破解。你应该意识到,如果有足够的时间,没有双向加密是安全的。所以这一切都取决于这些密码的敏感程度。
/卡斯滕
答案 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)工作服务器
B)前端服务器
从工作服务器接收数据,从不使用密码本身。联系工作服务器的唯一方法是通过上面提到的API,仅用于新的用户信息。这是所有用户登录以查看其信息等的地方。
在同一台服务器上完成所有这一切的问题,如果你被黑客入侵,黑客可以坐下来嗅探所有传入的数据/密码等等。所以即使他们被安全地存储/加密/解密,有一点耐心他会嗤之以鼻他们都是。
答案 4 :(得分:1)
首次运行应用程序时,它将生成一个随机密钥。此密钥将用于加密和解密敏感数据。将密钥存储在本地文件中,并设置文件权限,以便其他人无法读取它。确保运行Web服务器的用户没有登录访问权限(无论如何这都是个好主意)。
打破这个系统的可能方法:
只要你对所有这些采取合理的预防措施,你应该没事。
编辑:想想看,您可以将敏感数据直接存储在密钥文件中。加密将提供额外的安全层,但它不是一个非常强大的层;如果攻击者可以访问该文件,那么他也可以访问该数据库。