5

誰もが Web 上のトランスポート層セキュリティとして TLS/SSL を使用していることを知っています。

キーペアを手動で生成し、クライアント側で (たとえば JS を使用して) その公開キーでデータを暗号化し、そのデータを http の GET/POST 要求でサーバーに送信することを妨げるものは何ですか?

つまり、JSライブラリを使用して、その公開鍵でフォームデータを暗号化できますか?

秘密鍵を持っている人だけが復号化できます。もちろん、秘密鍵はサーバー上に保持されます。送信は通常の http リクエストであるため、キーの警告は表示されません。では、なぜ TLS が必要なのでしょうか?

4

5 に答える 5

5

ブラウザーに配信された Javascript が、正しい鍵で暗号化する Javascript であることをどのように信頼できますか?

少し考えてみてください。セキュリティのベスト プラクティスは非常に微妙で微妙な違いがあり、単純に暗号化を上に置くだけでは解決策にならないことを認識してください。

また、「キー ポップアップ」を扱っている場合は、署名されていないサーバー証明書を使用して、TLS 信頼モデル (信頼された認証局) の 1 つの足を壊しています。

于 2012-12-15T03:07:43.283 に答える
2

あなたは正しいです。それができれば、実際には SSL/TLS の基盤となるコンポーネントの 1 つである強力な暗号化を利用したことになります。

問題の 1 つは、すべてのデータに対してそれを計算すると計算コストが高くつくことです。また、クライアントとサーバーには、暗号化/復号化プロセスを処理する相互互換性のあるライブラリが必要です。

ただし、秘密を保持する必要があるすべてのデータに対してこの暗号化プロセスを実行する必要があるため、Web アプリケーションの透明性が失われます。

TLS はセッション指向であるため、これは単純な比較ではありません。TLS が行っていることは、クライアントとサーバーに対して透過的な暗号化されたセッションを設定することです。暗号化されたパイプを作成し、データがそこを流れるようにします。また、「信頼」とアイデンティティの概念が組み込まれているため、クライアントは、送信している情報が自分が思っている人に送信されていることを示すことができます.

あなたが説明しているのは、データの一部を取り、それらを暗号化し、暗号化されたバージョンを送信し、使用する前に反対側で復号化を要求することです. 面倒な設定をしたいのであれば、あなたのスキームは機能しますが、何を得たのでしょうか? さらに、あなたのスキームには中間者攻撃を防ぐために TLS が持っているものがないため、アプリが起動するように誰かが独自のライブラリとキーをクライアントに注入するなど、さまざまな方法でこれらの問題の影響を受けやすくなります。あなたの代わりに彼らにデータを送信するか、あなたとクライアントの間に入り込み、あなたのサーバーが彼らから直接来ていると信じて代わりに攻撃者から来ていると信じているデータをあなたに送信します。

于 2012-12-15T03:34:24.377 に答える
2

これがどのようにうまくいかないかの例を挙げましょう。暗号化しようとしているのは何らかのフォーム データであり、それをサーバーに送信するとします。サーバーは、その公開鍵をクライアントに送信して暗号化します。JavaScript のクライアントは、このデータを暗号化し、サーバーに送信します。それが起こったと仮定すると、あなたは大丈夫でしょう。

それでは、これがどのようにうまくいかないかを調べてみましょう。最近のスイッチングなどの状況では、ハードウェアにアクセスせずに他人のパケットを傍受することはかなり困難です。したがって、回避しようとしているほとんどのケースでは、攻撃者が中間者攻撃を提示することもできます。この場合、攻撃者は任意の JavaScript をクライアントに提供できます。データを盗む秘密の方法は、元の JavaScript が行うすべてのことを行う JavaScript を提供し、暗号化されていないデータを別のサーバーに送信することです。

これは、サーバーからクライアントに送信されるデータについても同様に発生する可能性があります。

PS問題がCA署名証明書の欠如である場合は、http://www.startssl.com/から無料のものを入手することをお勧めします

于 2012-12-15T03:14:09.193 に答える
1

デジタル証明書には、秘密鍵を使用して CA によってデジタル署名されたサブジェクトの公開鍵が含まれます。ブラウザーには、公開鍵 (ルート証明書の場合は同じ秘密鍵で署名されたもの) を識別する証明書が含まれており、ブラウザーは、プリインストールされた CA 証明書を信頼していると仮定して、身元を確認できます。サーバーにアクセスすると、サーバー側の証明書を使用してサーバーの公開鍵がブラウザに送信され、ブラウザはこの公開鍵を使用して資格情報の最初の交換を暗号化します。クライアント側の証明書が必要な場合、同様の考慮事項により、サーバーはユーザーを識別できます。

JS ライブラリで公開鍵を使用してデータを暗号化することを止めるものは何もありませんが、サーバーはどのようにしてそれを復号化するのでしょうか? 秘密鍵を渡すと、公開鍵で暗号化された情報を自分だけが解読できるようにするという秘密鍵の目的が無効になります。したがって、続行する正しい方法は秘密鍵で暗号化することですが、公開鍵を持っている人は誰でも復号化できます (この手法は通常、デジタル署名に使用されます)。

実際には、サーバーの公開鍵を使用して送信を暗号化し、秘密鍵を使用して復号化する必要があります。安全な鍵交換のビジネス全体は非常に微妙であり、アルゴリズムのプライバシーに依存して独自の暗号化システムを開発している企業や人々の多くの例があります (IBM 以下)。それらは比較的壊れやすいことが常に証明されています。もう少しセキュリティの経験を積むまでは、独自のシステムを設計しないことをお勧めします ...

于 2012-12-15T03:21:50.010 に答える
0

あなたの質問は意味がありません。

キーペアを生成し、公開キーで暗号化する場合、そのメッセージを復号化できるのは自分だけです。したがって、他の人に送信するのは無駄です。サーバーの公開鍵を使用して暗号化することはできますが、それが何であるかを安全に確立するという問題があります。

そして、サーバーは公開鍵を使用しない限り、データを暗号化して返す方法がありません。公開鍵を使用すると、クライアントとして既に持っているIDを認証するという同じ問題が発生します。

TLS / SSLはこれらの問題を解決し、他にもまだ考えていない問題がいくつかあります。

于 2012-12-15T23:18:45.333 に答える