Encryption 在何处存储用于加密和解密密码的密钥

Encryption 在何处存储用于加密和解密密码的密钥,encryption,key-storage,Encryption,Key Storage,我有一个存储登录信息的表,比如loginID、密码、logTime等等。。。我创建了两个存储过程:一个用于加密,另一个用于比较密码。加密和比较密码需要密钥。我想知道我应该把钥匙放在哪里。如果我把存储过程或我的应用程序中,我的开发团队将能够看到它。我想知道保管钥匙的最佳做法。请给我一些建议 谢谢。您需要散列密码,而不是加密密码。那你就根本不需要钥匙了 无论您将密码存储在何处,最终都可以找到它。因此,如果您想对其他开发人员隐藏身份验证凭据,它将不起作用。存储身份验证凭据有多种使用情况,每种情况都需要

我有一个存储登录信息的表,比如loginID、密码、logTime等等。。。我创建了两个存储过程:一个用于加密,另一个用于比较密码。加密和比较密码需要密钥。我想知道我应该把钥匙放在哪里。如果我把存储过程或我的应用程序中,我的开发团队将能够看到它。我想知道保管钥匙的最佳做法。请给我一些建议


谢谢。

您需要散列密码,而不是加密密码。那你就根本不需要钥匙了


无论您将密码存储在何处,最终都可以找到它。因此,如果您想对其他开发人员隐藏身份验证凭据,它将不起作用。

存储身份验证凭据有多种使用情况,每种情况都需要不同的解决方案:

如果凭据是供登录系统的用户使用的,那么最好的做法是根本不存储密码。而是创建密码的单向加密散列,并将其存储。当用户尝试登录时,对提供的密码进行散列,并将结果与存储的散列进行比较。散列应该包括一个“salt”,每次用户密码更改时都会更改它。这使得如果某人试图窃取您系统的哈希密码文件,就更难应用暴力攻击来反转哈希代码

如果凭据用于登录第三方系统的用户,则可以为登录系统的用户密码生成不同的单向散列,并将其用作加密/解密存储的用户凭据的对称密码的密钥。同样,核心原则是不存储解密用户凭据所需的信息。在这种情况下,不应存储用作密钥的哈希

如果凭据用于系统向其他系统进行自身身份验证,通常的解决方案是使用密钥存储,并依赖主机操作系统对其进行保护以及用于解锁的密钥短语。(如果有更好的解决方案,我真的很想听听!!)

这是一个坏主意,以清晰或加密的方式存储用户密码,因为总有人可以破门而入,窃取他们。即使密码是加密的,解密密钥也必须存储在某个地方。一个坚定的黑客可能会找到它。或者,可以说服受信任的管理员透露密码和/或解密密钥。通过存储散列而不是密码,即使数据库和/或应用程序的密钥库遭到破坏,您也可以获得额外的保护


等式的第二部分是,许多用户对许多系统使用相同的密码。因此,如果您的系统被泄露密码,您就有可能暴露其他系统上用户的帐户。

在这个主题上有几个问题……Sambath:不太可能。散列密码通常是“salt”,这意味着在使用一些加密散列函数(如sha1)对密码进行散列之前,要向密码添加一个随机前缀(称为salt)。然后将salt(以明文形式)与散列的salt+密码一起存储。这使得某人更难进行暴力或字典攻击。不是SHA1,而是更强大的东西。