任何人都看到过用Javascript实现crypt(3)

Anybody seen a crypt(3) implementation in Javascript?

本文关键字:crypt 实现 Javascript 任何人      更新时间:2023-09-26

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

我也有点担心性能:用javascript写一个可能吗?例如,sha512密码源具有:

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

因此,如果算法在C中"消耗CPU周期",那么它在javascript中会做什么?油炸(例如,在IE6中?哎呀!)我不是在用javascript编写暴力攻击util,只是偶尔调用一次密码,所以也许没关系。

背景:我们正在为我们的网络应用程序从用户提供的/etc/password//etc/shadow文件中导入用户。由于我们所掌握的关于用户密码的唯一信息是crypt(3)输出格式,因此为了避免以明文形式发送回用户密码,据我所见,我们需要crypt的客户端(javascript)实现,因此当网络服务器提供salt时,客户端会发送回crypt。

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

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

如果您不信任网络提供密码,或者更糟的是,不信任服务器不保守用户机密,您就不能信任他们提供安全代码。在你引入加密之前嗅探密码或阅读日记的同一个攻击者只是在你引入后劫持加密代码。

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

此外,由于您只发送密码的哈希并将其与现有哈希进行比较,因此攻击者复制哈希并随时使用它是很简单的。这被称为重放攻击,它特别阴险,因为你无法判断出发生了什么错误。

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