2012-02-24 2 views
3

私はcrypt(3)の実装をjavascriptで探しています。 (一般的な "crypt"アルゴリズムではなく、たとえばLinuxシステムでは/etc/shadowで使用されているcrypt(3))。誰か見た人は?オープンライセンスで?誰かがJavascriptでcrypt(3)の実装を見た?

パフォーマンスについても少し気になります.JavaScriptで書くことも可能でしょうか?例えば。 sha512-crypt sourceがあります

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

だからアルゴリズムはCで「CPUサイクルを燃やす」場合、それはJavaScriptで何をしますか?稚魚? (例:IE6?Yikes!)私はjavascriptでブルートフォース攻撃utilを書いていません。青い月に一度だけ暗号化呼び出しを行うので、おそらく大丈夫です。

背景:ユーザーが提供する//etc/shadowファイルからユーザーをインポートすることを検討しています。私たちがユーザのパスワードについて持っている唯一の情報はcrypt(3)の出力形式であるため、ユーザーのパスワードを平文で送り返すのを避けるために、クライアント側(javascript )crypt(3)を実装しているので、Webサーバがsaltを提供すると、クライアントはcrypt(3)の出力を返します(セキュリティのために適切にハッシュされます)。

/etc/password//etc/shadowに対してサーバーサイドを安全に認証できるようにし、https://を必要としないcrypt(3)クライアント側を使用する代わりに、有効な回答と見なされます。

答えて

1

Javascript cryptography isn't secure。悪化し、ドン」、

パスワードを提供する、またはするためにネットワークを信頼していない場合:あなたは、SSLリンクがなぜ良い理由の多くを持っていることをを使用する必要がありますので、私はちょうど1ここに投稿しますセキュリティコードを配信することを信用できません。暗号を導入する前にパスワードを盗んだり、日記を読むのと同じ攻撃者は、暗号コードを単純にハイジャックしてしまいます。

SSLでJavascript暗号を送信すると、Javascript暗号化は不要になります。あなたは「本当の」暗号を持っています。

さらに、パスワードのハッシュを送信してそれをあなたが持っているハッシュと比較しているだけなので、攻撃者はハッシュをコピーしていつでも使うことができます。これはreplay attackと呼ばれ、何か間違っていることを伝えることができないため、特に陰気です。

そのため、SSLを使用する必要があります。ユーザーにSSL接続を介してパスワードを送信させ、サーバー上でcrypt(3)を実行させます。使用しているWebフレームワークに応じて、既存のモジュール(DjangoのPAM backendなど)を使用することもできます。

+0

攻撃者がman-in-the-middle攻撃を実行できると、クリアテキストのユーザーパスワードにアクセスできるようになります。期間。しかし、私はこれが必然的に[ノンス](http://en.wikipedia.org/wiki/Cryptographic_nonce)を使っても簡単なリプレイ攻撃の影響を受けやすいとは考えていません。ウェブサーバが '(nonce、crypt_salt)'を送り、クライアントが 'sha512(concat(nonce、crypt(password、salt)))'を返すと、 https://そして、クリアテキストでパスワードを送るだけで動作しますが、私の質問から明示的に除外されています(私の手の中から、悲しいことに) –

関連する問題