密钥存储的密码是如何存储的?我们已经加密了所有密码,要加密的密钥存储在密钥存储库中,那么密钥存储库的密码是如何存储的呢?明文吗?如果加密了,那么我们应该在哪里存储要加密的密钥?ie似乎是一个递归的问题,如何在不使用硬件安全产品HCM的情况下解决这类问题。在存储用于加密的密钥方面,最佳实践是什么?
发布于 2014-04-28 10:35:38
最佳做法是根本不加密密码,而是对密码进行散列,这正是出于这个原因:如果加密,那么服务器就需要拥有可用的密钥。
如果您的系统绝对必须存储实际密码--例如,您的服务器连接到其他模拟用户的服务--那么您可以做一些事情,比如使用HCM,或者将密钥存储在另一台服务器上,希望它不会与主服务器一起被盗,或者使用OAuth之类的东西,以便您所存储的凭据仅供服务器使用,从而减少对攻击者的使用。
但这些只是部分缓解。如果您将密码存储在服务器上,那么服务器就知道密码,如果有人对服务器进行妥协,他们也可以学习密码。
发布于 2014-04-28 14:54:56
根据我的理解,这样做的最好方法是散列密码,而不是加密密码。是的,散列是一种单向的方法,但是无论如何你都不需要检索密码,所以只有一种方式才是你想要的。
假设用户向您发送用户名和密码以进行身份验证。在这个场景中,您只需要散列传入的密码,并将其与与该用户名关联的存储(也是哈希)的密码进行比较。如果有匹配,可以对用户进行身份验证。
发布于 2015-03-06 07:27:28
它们应该以明文形式存储,或者用base64编码。您可以参考Tomcat是如何配置的。
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"/>如果您的加密文本位于数据库中,则此方法只能在攻击者掌握数据库但无法访问文件系统以发现密码时才能保护您。如果攻击者能够访问该文件系统,那么您在这里就不会走运了。
唯一的其他方法是让用户每次运行应用程序时都要输入它,这很麻烦,也不太常见。
https://security.stackexchange.com/questions/56800
复制相似问题