我正在javascript中寻找crypt(3)的实现。 (不是通用" crypt"算法,但是/etc/shadow
中使用的crypt(3),例如在Linux系统上。有人见过吗?有开放许可证吗?
我对性能有点担心:甚至可以在javascript中编写一个吗?例如。 sha512-crypt source有:
/* Repeatedly run the collected hash value through SHA512 to burn
CPU cycles. */
for (cnt = 0; cnt < rounds; ++cnt)
{ ... }
因此,如果算法&#34;燃烧CPU周期&#34;在C中,它会在javascript中做什么?炒? (例如,IE6?Yikes!)我没有在javascript中编写暴力攻击工具,只是在蓝色月亮中进行一次隐藏调用,所以也许它没问题。
背景:我们正在寻找从用户提供的/etc/password
/ /etc/shadow
文件导入用户的webapp。由于我们提供的关于用户的唯一信息&#39;密码将采用crypt(3)输出格式,然后避免发送用户&#39;密码以明文形式返回,据我所知,我们需要一个客户端(javascript)的crypt(3)实现,所以当webserver提供salt时,客户端发回crypt(3)输出(适当散列)为安全起见。)
使用crypt(3)客户端的任何替代方法都允许我们针对/etc/password
/ /etc/shadow
安全地对服务器端进行身份验证,并且不需要https://也将被视为有效答案。
答案 0 :(得分:1)
<强> Javascript cryptography isn't secure。你必须使用SSL 这个链接有很多很好的理由,所以我只在这里张贴一个:
如果您不相信网络提供密码,或者更糟糕的是,不信任服务器不保守用户机密,您不能相信它们提供安全代码。在你引入加密之前嗅探密码或阅读日记的同一个攻击者只是劫持了加密代码。
如果您通过SSL发送Javascript加密,则不再需要Javascript加密;你有“真正的”密码学。
此外,由于您只发送密码的哈希值并将其与您拥有的哈希值进行比较,因此攻击者可以复制哈希并随时使用它,这是微不足道的。这被称为replay attack,它特别阴险,因为你无法说出任何错误。
因此,您必须使用SSL。让用户通过SSL连接发送密码,并在服务器上执行crypt(3)。根据您正在使用的Web框架,您可以使用预先存在的模块(例如Django的PAM backend,它不是您想要的,但它是一个很好的起始参考)或推出您自己的实现。