3

javascriptでのcrypt(3)の実装を探しています。(一般的な「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の場合は?

/etc/password背景:ウェブアプリのユーザー提供//etc/shadowファイルからユーザーをインポートしようとしています。ユーザーのパスワードに関する情報はcrypt(3)出力形式のみであるため、ユーザーのパスワードがクリアテキストで返送されないようにするには、私が見る限り、クライアント側(javascript)が必要になります。 )crypt(3)の実装。これにより、Webサーバーがソルトを提供すると、クライアントはcrypt(3)出力を送り返します(セキュリティのために適切にハッシュ化されます)。

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

4

1 に答える 1

1

Javascript暗号化は安全ではありません。SSLを使用する必要がありますそのリンクには多くの理由があるので、ここに1つだけ投稿します。

ネットワークがパスワードを配信することを信頼していない場合、またはさらに悪いことに、ユーザーの秘密を保持しないようにサーバーを信頼していない場合、セキュリティコードを配信することを信頼することはできません。暗号を導入する前にパスワードを盗聴したり日記を読んだりしていた同じ攻撃者は、暗号を導入した後に単に暗号コードを乗っ取っています。

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

さらに、パスワードのハッシュを送信して自分の持っているハッシュと比較するだけなので、攻撃者がハッシュをコピーして、いつでも使用できるようにするのは簡単です。これはリプレイアタックと呼ばれ、何が起こっているのかわからないため、特に陰湿です。

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

于 2012-02-24T08:38:36.477 に答える