有用で安全なシステムを作成するためには、少なくとも3つの大きな障害があります。
まず、ユーザーは自分の秘密鍵をWebインターフェイスに入力する必要があります。 RSAキーの長さは通常1024ビット以上ですので、比較的効率的なBase64エンコーディングを使用しても(使用する文字の多くが視覚的に似ているため、おそらく悪い選択です)、ユーザーは無意味な文字を171文字入力する必要があります。キーボードの場合、これは面倒でエラーが起こりやすいでしょう。
第2に、クライアントが実行するjavascriptコードは、Webサーバーからのものです。クライアントで暗号化と復号化を行うことで、攻撃者がサーバー上の平文パスワードにアクセスするリスクを回避しようとしています。しかし、攻撃者がサーバに保存されている平文のパスワードにアクセスできる場合、おそらくサーバが送信するjavascriptコードを変更することもできます。攻撃者がjavascriptコードを変更できる場合、変更されたコードを使用してユーザーの秘密をキャプチャできます。
最後に、クライアントコードを実行するハードウェアとソフトウェアのセキュリティがあります。ユーザーが使用するハードウェアとソフトウェアが侵害された場合(例えば、キーロガーを使用して)、シークレットをそこに取り込むことができます。安全のために、ユーザーは彼が制御するコンピュータしか使用できません。管理しているコンピュータのみを使用できる場合、Webベースのシステムの従来のクライアント/サーバーシステムの利点の多くは否定されます。
これらの問題に取り組むことができれば、Inerdialとして公開鍵をサーバに格納することは良い選択と思われますが、ユーザがサーバから送信された公開鍵実際には、攻撃者ではなくパスワードを与えたい人によって制御されます。
ネイトローソンは、his Google Tech Talkのjavascript暗号化について言及しています。
パスワードをサーバに平文で保存できる場合は、各クライアントに暗号鍵の公開部分を送信させ、その暗号化されたパスワードを暗号化して転送することができます。共有者と受取人が実際の鍵交換をしなくても、あなたがうまくいくかどうかはわかりません。 – millimoose
プログラミングに関する質問ではありませんが、これが[暗号](http://crypto.stackexchange.com/)用であれば100%確信しているわけではありません。暗号やその他のフォーラムも試してみることをお勧めします。 –
ああ、私は暗号については知らなかった。提案をありがとう、私は間違いなくそこに投稿します。私はおそらく、これは本当にアーキテクチャ上の質問であるため、暗号が正確に正しいわけではないことに同意しますが、それは価値があります。 – Travis