客户端100%安全密码POST

时间:2014-04-21 19:30:41

标签: javascript security post md5

我想出了这个理论,以避免密码窃取形式的POST嗅探。 想法是连接一个salt字符串(在php session_start()上随机生成)。

enter image description here

请注意,salt_hash是在每次访问时随机生成的...它不是在客户端计算的。

基本上JS代码将添加到HTML中:

<script>
var salt_hash='654236426556424655643645462321560356';
</script>

然后在发布之前,我计算......

cryptoPass = md5(md5(password)+salt_hash);
passowrd = ''; // clear user password input
submit POST...;

然后在login.php上我将$ _POST [&#39; cryptoPass&#39;]与md5(用md5存储的MySQL用户密码加上salt_hash)进行比较

它真的有用还是无意义理论?

1 个答案:

答案 0 :(得分:5)

首先,我将以旁注开头,安全性的第一条规则是永远不要尝试制作和使用自己的加密。有些专业人士非常善于制作cryto算法,人们仍然可以破解它们。

您的方案实际上并没有为该方案增加那么多安全性。如果攻击者知道您正在计算哈希:

  

cryptoPass = md5(md5(密码)+ salt_hash);

然后,如果他们知道盐值,他们可以使用相同的算法蛮力。这几乎没有增加任何安全性,因为它几乎需要同时破解:

  

cryptoPass = md5(密码+盐);

这两种破解算法都是一样的。它们是同一时间的复杂性。您只是使用两种不同的函数进行散列。

这里最好的解决方案就是使用TLS,这很容易实现。

客户端100%安全插入任何内容 的概念是不现实的。不幸的是,没有办法确保100%的东西。如果人类制造它,那么有足够的时间,人就可以破解它。


为什么在客户端使用散列+ salt作为加密机制很糟糕:

让我们假设你使用RANDOM哈希,就像你提到的那样。客户端启动服务器的登录序列,服务器向其发送salt值:

  

718904732197

攻击者现在知道盐值。现在,客户端使用散列函数散列他/她的密码:

  

cryptoPass = md5(md5(密码)+ salt_hash);

salt哈希是随机的,但已知,算法也是如此。由此攻击者使用简单的强力算法破解哈希(破解简单的6位密码需要几秒钟)。他们还可以使用彩虹表和字典攻击哈希来提高破解速度。

攻击者将使用您已知的函数生成哈希值:

  

cryptoPass = md5(md5(密码)+ salt_hash);

他们已经知道盐的价值了。他们将使用暴力从哈希中提取密码。现在他们有明文密码,可能还有用户名,现在他们可以登录该用户的帐户。


也许这对你有帮助:

这比不安全更好吗?是

散列+盐比单独散列更好吗?是

使用随机盐值更安全吗?是的,在某种程度上。

除此之外,您使用的方案并不符合当今的标准。一个经验丰富的破解者可以在几个小时内找到你的整个算法。