こういう質問が出てくるのはわかっていますが、簡単な答えは見つかりませんでした。ほとんどの答えは「それをしないでください」です。
プレイのために、私は自分でWebアプリケーションを構築しました。それはsjclを使用して、クライアント上のノートを暗号化および復号化し、暗号化されたフォームをサーバーに送り返します。
ローカルストレージにキーを保存しています。
私の研究から、私は以下のリスクにさらされています:
私は無数の他の攻撃ベクトルを見逃したと確信しています。
一見すると、サーバーにキーを送信しないクライアント側の暗号化されたメモ作成アプリケーションを設計することは不可能だと感じています。プログラミングには、ほとんど常に方法があります。
アプリを実際に使用できるようにする方法はありますか?
基本的に、キーが安全であれば、データも安全です(ただし、暗号化アルゴリズムが適切で、キーが十分に長い場合、私はそれを当然と見なします)。
私が正しく理解していれば、暗号化されたデータのみを送信し、キー自体は送信しません。そうでない場合は、この回答全体を破棄してください。
キーがネットワーク経由で送信されることはないと仮定します。データを危険にさらす唯一の方法は、キーを発見することです。これは次の場合に発生する可能性があります。
...完全なセキュリティを実現するのは困難です。しかし、あなたの場合、攻撃者はそれをハッキングするためにかなりの時間を費やさなければならないようです、またはユーザーは最初からマシンが危険にさらされています。通常、ボトルネックはユーザー自身です。 ;)
基本的な用語では、クライアント側でデータを暗号化(トークンを作成)し、HTTP経由でサーバーにトークンを送信すると、安全になります-これは真実ではありません。
ハッカーは ネットワーク監視ソフトウェア (パスワードは不要)-でトークンを取得できます以上です。これをバイパスするための推定時間は15分未満です。
まず、私が理解していることから、他のユーザーからのデータをユーザーに表示しないので、XSSについて心配する必要はありません。表示する場合は、文字のエスケープなどの対策を講じる必要があります(実際にはとにかく使用する必要があります)。ハッキングされたマシンとブラウザのセキュリティ上の欠陥は、予測できないものです。
次に、作成した暗号化機能は実際には機能しません。ごめんなさい。セキュリティに関する長年の経験を持つ天才でなくても、この質問をする必要はありません。暗号化を設計する際に考慮すべき事項は次のとおりです。
SSLのようなライブラリがあり、長年の経験を持つ人々によって作成されています。おそらくご存じのように、間違いが発生したとしても、なんらかの理由で代替手段を実装することに特に熱心な人はいないようです。
セキュリティの場合、おそらく最も安全なソリューションであるため、チェック済みの一般的なソリューションを使用することをお勧めします。利用可能なオープンソースとフリーのライブラリがかなりあるので、それは問題にはならないはずです。ブラウザでサポートされているレディ暗号化は、おそらく想像する以上に多くの問題を処理します。
もちろん、私があなたを誤解していない限り、あなたはそれのwebappの部分のためにではなく、セキュリティのためにwebappsで遊んでいませんでした。その後、挑戦を続け、作成したアプリを攻撃することで多くのことを学ぶことも覚えておいてください。