ローカルストレージは安全だと考えられるでしょうか? [closed] 質問する

ローカルストレージは安全だと考えられるでしょうか? [closed] 質問する

長期間オフラインで機能する Web アプリケーションを開発する必要があります。これを実現するには、機密データ (個人データですが、ハッシュ化してのみ保存する種類のデータではありません) をローカル ストレージに保存する必要があります。

これは推奨される方法ではないことは承知していますが、選択肢がほとんどないため、データを保護するために次のことを行っています。

  • スタンフォード JavaScript 暗号ライブラリと AES-256 を使用して、ローカル ストレージに送信されるすべてのデータを暗号化します。
  • ユーザーパスワードは暗号化キーであり、デバイスには保存されません。
  • すべてのコンテンツ(オンライン時)を SSL 経由で単一の信頼できるサーバーから提供します。
  • owasp antisamy プロジェクトを使用して、サーバー上のローカル ストレージとの間で送受信されるすべてのデータを検証する
  • appcache のネットワーク セクションで、* を使用せず、信頼できるサーバーとの接続に必要な URI のみをリストします。
  • 一般的には、OWASP XSSチートシートで提案されているガイドラインを適用しようとする

細部にこそ問題が潜んでいることはよく理解していますし、ローカル ストレージや JavaScript ベースのセキュリティ全般について懐疑的な見方が多いことも知っています。以下の点についてコメントできる方はいますか。

  • 上記のアプローチには根本的な欠陥があるのでしょうか?
  • このような欠陥に対する解決策はあるでしょうか?
  • HTML 5 アプリケーションを長期間オフラインで機能させる必要がある場合に、ローカル ストレージを保護するより良い方法はありますか?

ご協力いただきありがとうございます。

ベストアンサー1

ウェブクリプト

クライアント側(ブラウザ)JavaScriptの暗号化に関する懸念事項については、以下で詳しく説明します。これらの懸念事項のうち1つを除いて、すべては、WebCrypto API、現在はかなりよくサポートされている

オフライン アプリの場合でも、安全なキーストアを設計して実装する必要があります。

補足:Node.jsを使用している場合は、WebCrypto/ノードまたは組み込み暗号API。

ネイティブ JavaScript 暗号化 (WebCrypto 以前)

主な懸念は、コンピューターに物理的にアクセスできる誰かがlocalStorageサイトの情報を読み取ることであり、そのアクセスを防止するために暗号化が必要であると考えられます。

誰かが物理的にアクセスできる場合、読み取り以外の悪質な攻撃を受ける可能性もあります。これには、キーロガー、オフライン スクリプトの変更、ローカル スクリプトの挿入、ブラウザー キャッシュ ポイズニング、DNS リダイレクトなどが含まれます (ただし、これらに限定されません)。これらの攻撃は、ユーザーがマシンが侵害された後にそのマシンを使用する場合にのみ機能します。ただし、このようなシナリオで物理的にアクセスできるということは、より大きな問題が発生することを意味します。

したがって、ローカルの暗号が価値を持つのは、マシンが盗まれた場合のみという限定されたシナリオであることに留意してください。

必要な機能を実装しているライブラリは存在します。例えば、スタンフォード Javascript 暗号ライブラリただし、固有の弱点があります(@ircmaxell の回答のリンクで言及されているように)。

  1. エントロピー/乱数生成の欠如;
  2. 安全なキーストアがないため、秘密鍵をローカルに保存する場合、またはサーバーに保存する場合(オフライン アクセスを禁止する)は、パスワードで保護する必要があります。
  3. 安全な消去の欠如;
  4. タイミング特性の欠如。

これらの弱点はそれぞれ、暗号侵害のカテゴリに対応しています。言い換えれば、名前は「暗号」であっても、実際には目指す厳密さをはるかに下回るものになります。

とはいえ、保険数理評価は「Javascript の暗号は弱いので使用しないでください」というほど簡単ではありません。これは推奨ではなく、あくまで警告であり、上記の弱点の危険性、直面するベクトルの頻度とコスト、および障害が発生した場合の緩和策または保険の能力を完全に理解する必要があります。Javascript の暗号は、その弱点にもかかわらず、危険性を軽減する可能性がありますが、技術的能力が限られている泥棒に対してのみです。ただし、その情報を狙う断固とした有能な攻撃者に対しては、Javascript の暗号は価値がないと想定する必要があります。実装に固有の多くの弱点がわかっている場合、データを「暗号化されている」と呼ぶのは誤解を招くと考える人もいます。つまり、技術的な危険性はわずかに軽減できますが、開示による金銭的な危険性は増加します。もちろん、状況はそれぞれ異なります。そして、技術的な危険性を金銭的な危険性に減らす分析は簡単ではありません。以下に、わかりやすい例えを示します。一部の銀行では弱いパスワードが要求される固有のリスクがあるにもかかわらず、弱いパスワードによる損失のリスクは、強力なパスワードをサポートするためのエンドユーザーのコストよりも低いため、セキュリティは確保されています。

�� 最後の段落を読んで「インターネット上のブライアンという人が、Javascript 暗号を使用できると言っている」と思った場合は、Javascript 暗号を使用しないでください。

質問で説明されているユースケースでは、ユーザーがローカル パーティションまたはホーム ディレクトリを暗号化し、強力なパスワードを使用する方が合理的であると思われます。このタイプのセキュリティは、一般的に十分にテストされ、広く信頼されており、一般的に利用可能です。

おすすめ記事