web-dev-qa-db-ja.com

Stanford Crypto Libraryを使用したクライアント側の暗号化のリスク

暗号化されたチャット用のシンプルなWebアプリケーションを構築しています。各メッセージは、Stanford Javascript Crypto Libraryを使用して、クライアント側で256ビットのAES暗号化を受けます。暗号化されていないデータやパスワード情報がユーザーのブラウザに残ることはありません。

SSLがなくても、クライアント側の暗号化を使用してこのスキームを実装しても安全ですか?

7
hawkharris

Javascriptはサーバーからクライアントに送信されます。クライアント側で行う暗号化は、クライアントが実行するコードが転送中に変更されていない限り、セキュリティを提供します-つまり、少なくともクライアントが実際に受信して実行するものであることを確認するには、SSLが依然として必要ですプロトコルの本物の実装。

これは、サーバーがクライアントに対して敵対的である場合、サーバーが勝ち、クライアントが破滅することを意味します。これに対応して、クライアントの計算をサーバーから保護するのは無駄な試みです。この(やや単純化した)議論から、クライアント上のデータを暗号化することはほとんど意味がないと結論付けるかもしれません。 SSLを使用してデータをサーバーに送信し、サーバーにその仕事を任せるだけです。サーバーはtrustedです。つまり、サーバーがあなたを裏切りたい場合、あなたは無防備です。

Stanford Javascript Crypto Library は依然として優れた科学ですが、従来のWebコンテキストでのJavascriptの使用にうまく対応していません。これは、ブラウザー拡張機能の一部として、またはコードの特定の独立した安全な配布メカニズムから恩恵を受ける同様にスクリプト化されたものとして、はるかに理にかなっています。

(上記のすべてが適用されることに注意してくださいeven暗号化の観点からプロトコルが堅固である場合-そして多くの暗号学者がそれをあえて装うわけではありません大規模なピアレビューなしで、彼らは自分でそのような偉業を成し遂げることができます。

7
Tom Leek

十分な情報ではなく、その音から...いいえ!独自のスキームを展開しないでください。

ここでの問題は暗号化ではありません。AESは非常に強力です。問題はプロトコルです。プロトコルには、鍵の合意、整合性の保証方法など、多くのニュアンスがあります。

これは、安全なメッセージングのために独自のプロトコルを展開している一部の開発者の見出しから抜粋した最近の例です。 Moxieは、間違いを犯した可能性のある場所を指摘するのに優れています。

Sjclを1回使用してAESで暗号化すると、攻撃者はおそらくその結果を理解できない暗号文になります。

AESが機密性のために使用される完全な安全なチャットプロトコルを実装することは良いかもしれません...しかし、誰かを刑務所に投げ入れるかもしれない深刻な問題を抱えているかもしれません。

1
user11869