JavascriptでRSA鍵ペアを生成する必要があります。このキーペアは、データの1回限りのblob(20-100kb)の暗号化に使用され、その後破棄されます。安全のために必要なデータのみを暗号化し、アプリケーションの画像ファイルなどの他のリソースは暗号化しない場合、このデータは数百kb以下に削減できます。
独自の実装を作成する必要がありますか、それとも安定していて安全であると信頼できるライブラリはありますか?
GWT Crypto パッケージをご覧ください。 BouncyCastle の一部をGWTに移植したため、コンパイルされた出力を取得して少しマッサージすると、現在のJavaScriptから呼び出すことができます。現在、RSAキーペアの生成と暗号化/復号化、およびAESとDESをサポートしています。それについてはそれだけだと思います。
私は個人的にはこのライブラリを使用していませんが、BCから移植されたため、独自の実装を作成するよりも安全なはずです。とは言っても、SecureRandom実装のソースをどこから取得したかはわかりません。実際に暗号的に安全な実装であるかどうかを確認する必要がある場合があります。私は簡単に見て、SHAとシードバイトで何かをしているだけですが、それが当てはまるかどうかわかりません。
最後に一つだけ。 RSAを使用して大量のデータを暗号化するのは非常に遅いことがわかりました。おそらく、RSA鍵ペアを使用してAES256鍵を暗号化し、次にAESを使用してデータを暗号化する、ある種のハイブリッドソリューションを使用することをお勧めします。より速くなる可能性があります...
JavaScriptで暗号化を行うことは本当に避けるべきです。短い理由は、JavaScriptプログラムを信頼できないためです。長い答えはここにあります:
WebアプリケーションがXSS、CSRFなどの攻撃から保護されるように作成されている場合でも、JavaScriptは仮想マシンで実行され、セキュリティの証明はありません。 JavaScript JITコンパイラーは、コードにショートカットを導入し、タイミング攻撃に対して脆弱にする可能性があります。
データの送信を暗号化する必要がある場合は、TLSを使用する必要があります。保存されたデータを暗号化する必要がある場合は、適切な対称アルゴリズム(GCMモードのAES 256など)を使用する必要があります。
より適切な回答が必要な場合は、RSAが必要だと思う理由を教えてください。それで解決したい問題は何ですか?たぶんRSA(JavaScriptであるかどうかにかかわらず)は最良の解決策ではありません(あるいは良い解決策でさえありません)。