Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在传输过程中确保密码的安全_Security_Hash_Passwords_Password Hash - Fatal编程技术网

Security 在传输过程中确保密码的安全

Security 在传输过程中确保密码的安全,security,hash,passwords,password-hash,Security,Hash,Passwords,Password Hash,在我的web应用程序中,我实现了一个用户无法选择的密码黑名单。正如Jeff在文章中提到的,这是因为一些密码非常常用,存在于暴力工具中 我曾计划将列入黑名单的密码存储在一个数据库表中(在clear中),并使用一个。因此,当查询发送到服务器时,如下所示: SELECT 1 FROM blacklist AS a WHERE MD5(a.password) = 'MD5stringOfPasswordSubmitted'; 我不认为这些密码的“透明”存储是一个问题,因为这些密码被列入黑名单。任何

在我的web应用程序中,我实现了一个用户无法选择的密码黑名单。正如Jeff在文章中提到的,这是因为一些密码非常常用,存在于暴力工具中

我曾计划将列入黑名单的密码存储在一个数据库表中(在clear中),并使用一个。因此,当查询发送到服务器时,如下所示:

SELECT 1 
FROM blacklist AS a 
WHERE MD5(a.password) = 'MD5stringOfPasswordSubmitted';
我不认为这些密码的“透明”存储是一个问题,因为这些密码被列入黑名单。任何用户都不能将其设置为这些。。那么,谁在乎这个表中的密码是否存储在clear中呢

但是,将此查询传输到数据库服务器是我应该担心的问题吗?

如果我的用户试图设置他们的密码,此时应用程序将MD5输入密码,并将其发送到数据库以查询此黑名单表。如果没有返回结果,应用程序将允许他们将其作为密码(只要还满足其他验证要求)

这是我应该担心的吗

这是否可以通过另一种方式实现,以便用户试图设置的密码仍然保持安全?即使只是为了使用黑名单,也真的有必要通过Bcrypt(就像在我的用户表中一样)来存储一个盐渍散列吗?在我的应用程序的本地目录结构中使用YAML文件会有同样的风险吗


其目的是防止用户选择一个通用的密码,并在验证过程中以一种非常快速的方式(因此是MD5)检查该密码。

我不认为查询的传输会是一个问题。如果您的web应用程序执行MD5编码,而攻击者截获了与数据库的通信,则无法从数据库中获取用户密码

MD5存储密码不安全,因为攻击者可能会找到导致相同哈希值(冲突)的密码,但无法将哈希值转换回其来源的明文


如果您担心在查询数据库时泄露其他敏感数据,可以考虑加密通信信道。

< P>我不担心密码的传输,因为它们是用单向算法散列的(如USER 18044指出的)。不过,如果您没有使用salt,我将不使用该算法。原因是MD5是为大量可能的密码组合而创建的。事实上,您所引用的密码列表很可能是在搜索MD5表后生成的,或者使用该列表将通过提交MD5散列(如果密码以前已被破解或在某个表中)为您提供密码。我建议使用salt或其他算法,如SHA-256。安全性是我的专长,我有一个能够以每秒数千亿次的速度破解MD5哈希的装备,但是如果涉及到一种盐,它要么会减慢我的速度,要么会一起阻止我(如果不知道盐的话)。同一台钻机可以破解SHA-256,但破解每一台需要更长的时间,因为SHA-256自身迭代次数足够多,使得每次迭代速度足够慢,从而降低破解的可行性

正如前面提到的,我肯定会使用SSL来更好地保护传输的所有数据

但是,将此查询传输到数据库服务器是我应该担心的问题吗

这取决于您的网络拓扑。e、 g

  • 数据库服务器是否在同一个专用本地网络上?那么这是低风险的
  • 数据库服务器位于同一网络上,但与其他计算机和用户共享。那么这是中等风险(您需要信任所有其他机器和用户)
  • 数据库服务器是否在internet上?那么这就是高风险
根据可接受的风险级别,您可能希望使用SSL/TLS保护与数据库的连接

即使您使用MD5进行散列,MD5也被认为是一种弱散列算法,因此如果MITM在数据库中查询密码时获取密码,他们可以通过诸如使用单词列表之类的工具运行该密码,并截取用户设置的任何密码

您可以尝试使用另一种算法对密码进行哈希查询,但是这意味着在您的系统上实现一个“静态salt”(称为pepper),以避免对截获的数据进行任何哈希比较。简单地使用SSL/TLS连接可能更容易完全避免这种情况


对于密码本身的存储(一旦它通过了您的检查),请务必在此处使用安全算法,如bcrypt或scrypt。

需要更多帮助吗?如果是这样,我会更新我的答案。