3

我正在寻找crypt(3)在 javascript 中的实现。(不是通用的“crypt”算法,而是/etc/shadow在 Linux 系统中使用的 crypt(3) 算法)。有人见过吗?使用开放许可证?

我也有点担心性能:甚至可以用 javascript 编写一个吗?例如sha512-crypt 源有:

/* Repeatedly run the collected hash value through SHA512 to burn
   CPU cycles.  */
for (cnt = 0; cnt < rounds; ++cnt)
{ ... }

因此,如果算法在 C 中“消耗 CPU 周期”,它会在 javascript 中做什么?炒?(例如在 IE6 中?哎呀!)我不是在 javascript 中编写蛮力攻击工具,只是在蓝月亮中进行一次 crypt 调用,所以也许它会没事的。

背景:我们希望从用户提供的/etc/password//etc/shadow文件中为我们的 webapp 导入用户。由于我们拥有的关于用户密码的唯一信息是 crypt(3) 输出格式,因此为了避免以明文形式发送回用户密码,据我所知,我们需要一个客户端(javascript ) crypt(3) 的实现,因此当网络服务器提供 salt 时,客户端会发回 crypt(3) 输出(为安全起见适当散列)。

/etc/password使用 crypt(3) 客户端的任何替代方法,允许我们安全地针对/验证服务器端/etc/shadow并且不需要 https://,也将被视为有效答案。

4

1 回答 1

1

Javascript 密码学不安全。你必须使用 SSL这个链接有很多很好的理由,所以我在这里只发布一个:

如果您不相信网络会传递密码,或者更糟糕的是,不相信服务器不会保守用户机密,那么您就无法相信它们会传递安全码。在您引入加密之前嗅探密码或阅读日记的同一攻击者只是在您这样做之后劫持加密代码。

如果您通过 SSL 发送 Javascript 加密,则不再需要 Javascript 加密;你有“真正的”密码学。

此外,由于您只是发送密码的哈希并将其与您拥有的哈希进行比较,因此攻击者复制哈希并在需要时使用它是微不足道的。这称为重放攻击,它特别阴险,因为您无法判断正在发生的任何错误。

因此,您必须使用 SSL。让用户通过 SSL 连接发送密码,然后在服务器上执行 crypt(3)。根据您使用的 Web 框架,您可以使用预先存在的模块(例如 Django 的PAM 后端,它不能完全满足您的需求,但它是一个很好的入门参考)或推出您自己的实现。

于 2012-02-24T08:38:36.477 回答