Security 保护散列码?

Security 保护散列码?,security,hash,shared-hosting,vps,salt,Security,Hash,Shared Hosting,Vps,Salt,我相信这一切都有一些基本的东西,可以简化我所缺少的整个概念,但下面是: 好的,为了安全起见,您需要对密码进行加密和哈希,但是用于加密的代码呢 如果你在主机或vps上,难道没有人能知道你在那里编译的源代码b/c吗?或者,如果他们可以访问您的数据库,他们不能访问进行加密/解密的程序,并在获得算法之前对其进行强制执行吗 我知道没有任何东西是100%安全的,但是在这种情况下如何提高安全性呢?关于哈希算法,您的源代码中没有隐藏任何内容。事实上,您应该使用经过验证的、众所周知的强散列实现,而不是自己实现算法

我相信这一切都有一些基本的东西,可以简化我所缺少的整个概念,但下面是:

好的,为了安全起见,您需要对密码进行加密和哈希,但是用于加密的代码呢

如果你在主机或vps上,难道没有人能知道你在那里编译的源代码b/c吗?或者,如果他们可以访问您的数据库,他们不能访问进行加密/解密的程序,并在获得算法之前对其进行强制执行吗


我知道没有任何东西是100%安全的,但是在这种情况下如何提高安全性呢?

关于哈希算法,您的源代码中没有隐藏任何内容。事实上,您应该使用经过验证的、众所周知的强散列实现,而不是自己实现算法

盐是需要保护的部分。salt不是您代码的一部分,或者不应该是,而是应该根据您的应用程序存储在某种文件存储/数据库中,并且应该应用在每个用户的基础上。用户Joe的密码应该与用户Fred的密码不同

可以肯定的是,保护每个用户密码使用的salt是至关重要的。这就是适当的文件系统/数据库权限发挥作用的地方


另一方面,您的代码也应该受到保护,不被任何未经授权的用户使用,但不是为了保护salt,至少不是直接保护salt。。。如果有人可以访问salt,或者只是用自己的代码替换您的代码,完全绕过身份验证检查。

您的源代码中没有隐藏任何有关哈希算法的内容。事实上,您应该使用经过验证的、众所周知的强散列实现,而不是自己实现算法

盐是需要保护的部分。salt不是您代码的一部分,或者不应该是,而是应该根据您的应用程序存储在某种文件存储/数据库中,并且应该应用在每个用户的基础上。用户Joe的密码应该与用户Fred的密码不同

可以肯定的是,保护每个用户密码使用的salt是至关重要的。这就是适当的文件系统/数据库权限发挥作用的地方


另一方面,您的代码也应该受到保护,不被任何未经授权的用户使用,但不是为了保护salt,至少不是直接保护salt。。。如果有人可以访问salt,或者只是用他们自己的代码替换您的代码,则完全绕过身份验证检查。

如果您的数据被泄露,salt将在一定程度上保护数据免受字典或彩虹表攻击。暴力并非不可能,但速度会很慢,需要对每个密码哈希再次执行。如果不进行腌制,暴力攻击将更容易实现

与一些人所说的相反,salt没有以任何特殊的方式进行保护,也不需要进行保护,而是以明文的形式存在于散列中。但是,对于每个散列,它确实需要是唯一的,否则对于这种使用就没有意义了。这与用于所有哈希的胡椒形成对比,必须加以保护。由于这一区别,通常首选腌制,除非保证限制食用胡椒——这不是一项容易的任务


如果您希望提高安全性,请不要使用共享主机。不允许直接访问数据库。并且不允许未经预筛选的任何人访问您的系统。从实际意义上讲,这些并不总是可行的选择。因此,只需使用salt就可以了:

如果您的数据被破坏,salt将在一定程度上保护数据免受字典或彩虹表攻击。暴力并非不可能,但速度会很慢,需要对每个密码哈希再次执行。如果不进行腌制,暴力攻击将更容易实现

与一些人所说的相反,salt没有以任何特殊的方式进行保护,也不需要进行保护,而是以明文的形式存在于散列中。但是,对于每个散列,它确实需要是唯一的,否则对于这种使用就没有意义了。这与用于所有哈希的胡椒形成对比,必须加以保护。由于这一区别,通常首选腌制,除非保证限制食用胡椒——这不是一项容易的任务


如果您希望提高安全性,请不要使用共享主机。不允许直接访问数据库。并且不允许未经预筛选的任何人访问您的系统。从实际意义上讲,这些并不总是可行的选择。所以,只要用一种盐来生活:

盐一般不被认为是秘密。盐一般不被认为是秘密。哈哈,最后一段说了all@PinnyM:帮助我理解盐不需要保护的说法。如果我知道与某个特定帐户一起使用的salt,我就不能构建一个彩虹表吗
就好像密码是不加盐的一样轻松?@EricJ.-是的,您可以使用这个salt来构建彩虹表,但是当您为每个密码应用不同的salt时,您必须为每个密码构建这样的表。没有人会这么做,因为蛮力更快,如果你找到了匹配项,那么构建彩虹表的其余部分就没有意义了。盐和胡椒:它们并不相互排斥,盐是必须的,胡椒在某些情况下有助于保护脆弱的密码。@martinstoeckli:如果盐是已知的,暴力强迫也会变得非常简单,因为我只需要猜测密码加上盐并创建一个散列,而不是排列所有可能的密码加上盐值。因此,弱密码仍然是弱的。@EricJ。salt本身并不是为了保护弱密码而设计的。它的设计不允许一张彩虹桌在一次通过时将它们全部破解。由于需要为每个密码创建一个单独的表,这将大大增加强制执行所有密码所需的时间数个数量级。但是,您是正确的,在同一时间段内可以强制使用单个密码。试图隐藏salt可能不会带来太多好处,因为在数据库被破坏的情况下,代码库和salt没有被破坏的可能性有多大?哈哈,最后一段说了all@PinnyM:帮助我理解盐不需要保护的说法。如果我知道salt与某个特定帐户一起使用,我就不能像密码未被使用一样轻松地构建彩虹表吗?@EricJ.-是的,您可以使用这个salt来构建彩虹表,但是当您为每个密码应用不同的salt时,您必须为每个密码构建这样的表。没有人会这么做,因为蛮力更快,如果你找到了匹配项,那么构建彩虹表的其余部分就没有意义了。盐和胡椒:它们并不相互排斥,盐是必须的,胡椒在某些情况下有助于保护脆弱的密码。@martinstoeckli:如果盐是已知的,暴力强迫也会变得非常简单,因为我只需要猜测密码加上盐并创建一个散列,而不是排列所有可能的密码加上盐值。因此,弱密码仍然是弱的。@EricJ。salt本身并不是为了保护弱密码而设计的。它的设计不允许一张彩虹桌在一次通过时将它们全部破解。由于需要为每个密码创建一个单独的表,这将大大增加强制执行所有密码所需的时间数个数量级。但是,您是正确的,在同一时间段内可以强制使用单个密码。试图隐藏salt可能不会带来太多好处,因为在数据库被破坏的情况下,代码库和salt没有被破坏的几率有多大?