web-dev-qa-db-ja.com

HTML5 localStorageの秘密鍵を使用してブラウザでopenpgp.jsを実行するセキュリティ

PGP暗号化/署名付きメッセージを作成するためにopenpgp.js( http://openpgpjs.org/ )を使用してWebアプリケーションを作成し、ユーザーの秘密鍵をlocalStorageに保存した場合、これは次のようになります。 MatasanoのWebページ( http://www.matasano.com/articles/javascript-cryptography/ )でのJavaScript暗号化に関する同じ苦情に対して脆弱ですか?

私が知る限り、マタサーノの要点は次のとおりです。

  • 「ブラウザへのJavascriptの安全な配信は、鶏卵の問題です。」 (これはHTTPSを使用して修正できます)
  • JavaScriptは暗号化にあまり適していません
  • ブラウザは複数の攻撃ベクトルを含む可能性があるため、暗号化には複雑すぎます。

LocalStorageが秘密鍵のような機密性の高いものを格納するのに最適な場所でない場合、何がより良い場所でしょうか?

16
Souvik Banerjee

HTTPSは依然として絶対的な要件であり、Matasanoの主なポイントは、JavaScriptがHTTPSに置き換わることは決してないということです。 MITM攻撃は、ローカルストレージのシークレットを読み取ることができるカスタムJavaScriptペイロードを配信する可能性があり、XSSペイロードもこのデータを危険にさらす可能性があります。

JavaScriptの乱数ジェネレーターに関してMatasanoが間違っています。ほとんどのブラウザは、非常に安全な乱数ジェネレータwindow.crypto.getRandomValues()を提供しています。 Matasanoは JavaScript用のw3c暗号化API を読んでいないと思います。このAPIには、オペレーティングシステムのエントロピープールを使用する乱数ジェネレータが含まれています。

10
rook

シークレットをlocalStorageに格納する場合は、クリアテキストセッションキーを絶対にそこに格納しないでください。私はopenpgpjsに精通していませんが、おそらく鍵の安全な保管を容易にします(私が推測するある種の鍵リングクラス)。

0
Tim Lamballais