node.js - NodeJS 服务器文本哈希的安全性

标签 node.js security encryption

我有一个 NodeJS 服务器,我需要在其中对客户端的密码进行哈希处理。由于 NodeJS 应用程序未编译,对于我来说,用一种语言编写哈希过程是否会更安全,我可以从中生成一个二进制文件来处理从我的 NodeJS 应用程序调用的该过程,或者如果服务器受到威胁,会不会犯罪者能够对处理哈希过程的二进制文件进行逆向工程,就像从我的 NodeJS 应用程序的 JS 中读取它一样容易吗?

最佳答案

散列 - 与加密相反 - 是一种单向过程。从纯文本中获取哈希很容易,但几乎不可能执行相反的操作,除非您碰巧猜到哈希文本是什么。

因此,您无需对哈希算法保密。你不应该真的这样做,因为所有的强者都是公开的,你很难发明自己的。

例如,SHA-256 算法是公开的。但尝试猜测我刚刚散列的内容:

07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc

如果您尝试的话,您应该能够猜到(如果您能猜到,请发表评论!),因为我的文本故意非常简单,并且我故意使用了快速哈希函数 - 使很明显,您需要记住以下几点:

  1. 您的哈希算法需要强大
  2. 即使使用强大的算法,您的密码也必须难以猜测
  3. 您的哈希函数应该尽可能慢(这可能听起来像是对软件的奇怪要求 - 有关详细信息,请参阅下文)

SHA-1 或 SHA-2 速度很快,因此不足以确保密码安全,即使使用随机盐也是如此。但是您可以使用具有任意复杂计算的哈希算法(例如 bcrypt)来减慢猜测速度,但这始终是可能的。

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

您希望使用缓慢的、CPU 密集型算法来使猜测尽可能慢,同时仍使正常操作成为可能。例如。 bcrypt(不使用 SHA-1 或 SHA-2,但使用 Blowfish)除了 salt 之外还有一个成本参数,您可以使用该参数使结果函数的成本达到您想要的程度,从而使猜测速度变慢这毫无意义。例如。如果你可以在 100 毫秒内进行一次迭代,那么等待真实用户验证密码的时间仍然不会很长,但攻击者快速猜测密码的速度就慢得多 - 每秒 10 次尝试少于每天 100 万次。这个数字类似于您在一秒钟内可以计算出的 SHA-256 哈希值。

更多信息请参见:

感谢 zaphLukePark 对于如何改进此答案的评论。

我仍在等待任何人猜测我的哈希消息,以证明我的 SHA-1 不足以对密码进行哈希处理。 提示:它很短。

关于node.js - NodeJS 服务器文本哈希的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810092/

相关文章:

node.js - 测试错误通过 Mocha 回调传回,应该

node.js - 如何递归卸载所有 node_modules 文件夹

php - 通过 PHP 运行时 Node 不起作用

node.js - 带有 Node 的轻量级桌面应用程序——这可能吗?

c - 防止 Ubuntu 12 中缓冲区溢出演示中的段错误

ruby-on-rails - 如何避免 Rails 应用程序中任何地方的信用卡信息为 "saved"?

安全风险 : OLEDB Excel

java - 不同平台中相同的哈希+加密生成不同的值

android - Android应用程序是否可以实现 "RSA/NONE/PKCS1Padding"RSA加密

java - 如何使用公钥/私钥对加密 SSO token ?