PGP暗号化/署名付きメッセージを作成するためにopenpgp.js( http://openpgpjs.org/ )を使用してWebアプリケーションを作成し、ユーザーの秘密鍵をlocalStorageに保存した場合、これは次のようになります。 MatasanoのWebページ( http://www.matasano.com/articles/javascript-cryptography/ )でのJavaScript暗号化に関する同じ苦情に対して脆弱ですか?
私が知る限り、マタサーノの要点は次のとおりです。
LocalStorageが秘密鍵のような機密性の高いものを格納するのに最適な場所でない場合、何がより良い場所でしょうか?
HTTPSは依然として絶対的な要件であり、Matasanoの主なポイントは、JavaScriptがHTTPSに置き換わることは決してないということです。 MITM攻撃は、ローカルストレージのシークレットを読み取ることができるカスタムJavaScriptペイロードを配信する可能性があり、XSSペイロードもこのデータを危険にさらす可能性があります。
JavaScriptの乱数ジェネレーターに関してMatasanoが間違っています。ほとんどのブラウザは、非常に安全な乱数ジェネレータwindow.crypto.getRandomValues()
を提供しています。 Matasanoは JavaScript用のw3c暗号化API を読んでいないと思います。このAPIには、オペレーティングシステムのエントロピープールを使用する乱数ジェネレータが含まれています。
シークレットをlocalStorageに格納する場合は、クリアテキストセッションキーを絶対にそこに格納しないでください。私はopenpgpjsに精通していませんが、おそらく鍵の安全な保管を容易にします(私が推測するある種の鍵リングクラス)。