使用NodeJS服务器散列文本的安全性

时间:2017-01-23 15:39:03

标签: node.js security encryption

我有一个NodeJS服务器,我需要从客户端散列密码。由于NodeJS应用程序没有编译,我用一种语言编写散列过程会更安全,我可以从中生成一个二进制文件来处理从我的NodeJS应用程序调用的进程,或者如果服务器被泄露,那么犯罪者能够像处理我的NodeJS应用程序的JS一样轻松地对处理散列过程的二进制文件进行逆向工程吗?

1 个答案:

答案 0 :(得分:1)

哈希 - 与加密相对 - 是一个单向过程。从纯文本中获取哈希很容易,但是反过来几乎不可能,除非你碰巧猜到了哈希文本是什么。

因此,您无需保持散列算法的安全性。你不应该这样,因为所有强者都是公开的,而且很难发明自己的。

例如,SHA-256算法是公共的。但是试着猜测我刚才所做的事情:

07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc

如果你尝试的话,你应该可以猜到它(如果你猜的话请评论!),因为我的文字非常简单,我故意使用快速哈希功能 - 制作很明显,你需要记住一些事情:

  1. 你的哈希算法需要很强大
  2. 即使对于强大的算法,您的密码也难以猜测
  3. 你的散列函数应该尽可能慢(这可能听起来像软件的一个奇怪的要求 - 见下面的更多信息)
  4. SHA-1或SHA-2速度很快,因此即使使用随机盐也不足以使密码安全。但是你可以使用具有任意复杂计算的散列算法(例如bcrypt)来使猜测变得更慢,但它总是可能的。

    另外,使用随机盐使彩虹表无法使用。

    您希望使用缓慢的CPU密集型算法,使猜测尽可能慢,同时仍然可以进行正常操作。例如。除了盐之外,bcrypt(不使用SHA-1或SHA-2但是Blowfish)有一个成本参数,可以用来使得结果函数成本高昂,使得猜测变慢到制作点没有意义。例如。如果您可以进行一次迭代持续100ms,那么等待真实用户进行密码验证仍然不是很长,但是攻击者很快就会慢慢猜出密码 - 每秒10次尝试每天不到一百万次。它的数字类似于您可以在一秒钟内计算出多少SHA-256哈希值。

    有关详细信息,请参阅:

    感谢 zaph LukePark ,以获取有关如何改进此答案的评论。

    我还在等待让任何人猜测我的哈希消息来证明我的SHA-1不足以用于散列密码。 提示:很短。