いいえ、ブラウザのJavaScriptを使用してパスワードのセキュリティを向上させる方法はありません。この記事を読むことを強くお勧めします。あなたの場合、最大の問題は鶏卵問題です:
Javascript暗号化の配信に伴う「鶏卵問題」とは何ですか?
ネットワークがパスワードを配信することを信頼しない場合、またはさらに悪いことに、サーバーがユーザーの秘密を保持しないことを信頼しない場合、セキュリティコードを配信することは信頼できません。暗号を導入する前にパスワードを盗聴したり、日記を読んだりした同じ攻撃者は、暗号を導入した後、単に暗号コードを乗っ取っているだけです。
[...]
TLS / SSLを使用してJavascript暗号コードを配信できないのはなぜですか?
あなたはできる。思ったより難しいですが、SSLを使用してJavascript暗号をブラウザに安全に送信できます。問題は、SSLで安全なチャネルを確立すると、Javascript暗号化が不要になることです。「本当の」暗号法があります。
これにつながる:
JavaScriptで暗号コードを実行する際の問題は、暗号が依存する実質的にすべての機能が、ホスティングページの構築に使用されるコンテンツの一部によって暗黙的にオーバーライドされる可能性があることです。暗号セキュリティは、プロセスの早い段階で(偽の乱数を生成するか、アルゴリズムで使用される定数とパラメーターを改ざんすることにより)、または後で(キーマテリアルを攻撃者にスピリットさせることにより)、または--- 最も可能性の高いシナリオで元に戻すことができます---暗号を完全にバイパスする。
Javascriptコードがその実行環境を検証するための信頼できる方法はありません。Javascriptの暗号コードは、「乱数ジェネレーターを実際に扱っているのか、それとも攻撃者から提供されたものの一部をファクシミリで扱っているのか」と尋ねることはできません。そして、それは「著者、私が承認する方法を除いて、誰もこの暗号の秘密で何もすることを許可されていない」と断言することはできません。これらは、暗号を使用する他の環境でしばしば提供される2つのプロパティであり、JavaScriptでは不可能です。
基本的に問題はこれです:
- クライアントはサーバーを信頼していないため、セキュリティコードを追加したいと考えています。
- そのセキュリティコードは、サーバー(サーバーが信頼しないサーバー)によって配信されます。
または、代わりに
- クライアントはSSLを信頼していないため、追加のセキュリティコードを使用してほしいと考えています。
- そのセキュリティコードはSSL経由で配信されます。
注:また、SHA-256は、ソルト処理されていない非反復パスワードをブルートフォースで攻撃するのが非常に簡単であるため、これには適していません。とにかくこれを行うことにした場合は、bcrypt、scryptまたはPBKDF2の実装を探してください。