我有一个存储登录信息的表,例如loginID、密码、logTime等。我创建了两个存储过程:一个用于加密,另一个用于比较密码。加密和比较密码需要一个密钥。我想知道应该把密钥放在哪里。如果我把它放在存储过程或应用程序中,我的开发团队将能够看到它。我想知道保留密钥的最佳实践。请给予建议。谢谢。
有许多用例需要存储认证凭据,每个用例都需要不同的解决方案:如果凭据是用于用户登录您的系统,则最佳做法是根本不存储密码。而是创建密码的单向加密哈希,并将其存储。当用户尝试登录时,请对提供的密码进行哈希处理并将结果与存储的哈希进行比较。哈希应包括每次用户更改密码时更改的“盐”。这使得如果有人成功窃取了系统的哈希密码文件,他们很难应用暴力攻击来反转哈希代码。如果凭据是用于用户登录第三方系统,则可以为登录到您的系统的用户生成一个不同的密码单向哈希,并将其用作对称密码器的密钥,以加密/解密存储的用户凭据。再次强调的核心原则是不存储解密用户凭据所需的信息。在这种情况下,不应存储用作密钥的哈希。如果凭据是用于系统向其他系统进行身份验证,则通常的解决方案是使用密钥库,并依赖主机操作系统来保护它和用于解锁它的密钥短语。(如果有更好的解决方案,我会非常感兴趣!)明文或加密存储用户密码是一个坏主意,因为总有可能有人会闯入并窃取它们。即使密码已加密,解密密钥也必须存储在某个地方。一个决心强大的黑客可能会找到它。或者,可信任的管理员可能会被说服透露密码和/或解密密钥。通过存储哈希而不是密码,即使您的数据库和/或应用程序的密钥库受到攻击,您也具有额外的保护程度。等式的第二部分是许多用户在许多系统中使用相同的密码。因此,如果您的系统被攻破以显示密码,则可能会暴露用户在其他系统上的帐户。