web-dev-qa-db-ja.com

TLSにTCPが必要なのはなぜですか?

私は今度の口頭ネットワークセキュリティ試験を行っており、過去の試験で教授がTLSにTCPが必要な理由について質問したことを知っています。 DTLSがあることは知っていますが、それは講義の一部ではありませんでした。したがって、問題はTLSの基礎となるプロトコルがTCPであることを要求することによってTLSがどのような利点を得るかについてです。私はすでにいくつかのワイルドな推測を聞きましたが、説得力のある議論はありません。

RFCの最初に、それは言っています

TLS Record Protocolは、信頼できるトランスポートプロトコル(TCP [TCP])など)の最上位にある最下位レベルです。

(私の判断によると)他のあらゆる場所で、RFCは「信頼できるトランスポートプロトコル」を必要とするだけでなく、TCP.

40
UTF-8

TLSには信頼できるトランスポートが必要です。 UDPでは信頼性が提供されないため、インターネットではTCPのみが残ります。

TLSは、(ISO/OSI参照モデルの階層化アーキテクチャーに準拠して)IPで発生する可能性のあるトランスポートエラー、失われたパケット、またはその他の障害を処理しないため、信頼できるトランスポートを必要とします。

TLSは、信頼性の高いトランスポートの上に安全なチャネルを提供するように設計されており、これは非常にうまく機能します。 DTLSは、プロトコル内で必要なエラー処理を行います(私はそう思います)。

UDPを介してTLSを実行する場合、パケットが転送中に失われ、誰も気付かないために、接続とハンドシェイクが失敗する可能性があります。

このような問題の軽減は、(ISO/OSI参照モデルによると)信頼できるトランスポートの指定されたタスクです。信頼性の高いトランスポートは理論的には機能しますが、IPネットワークのすべての実用的な目的にとって、これは通常TCPを意味します。

65
Tobi Nary

TLSはTCPを必要とせず、信頼できるトランスポートのみを必要とします。 TLS over SCTPの標準 もあり、これは別の信頼できるトランスポートプロトコルです。

しかし、今日のインターネットを利用している場合、通常、IP上のトランスポートプロトコルとしてUDPとTCPのみがあり、これら2つからTCPが唯一の信頼できるものです。 。つまり、使用可能なトランスポートプロトコルのこの限られた選択肢しかない場合、TLSにはTCPが必要です。これはUDPでは機能しないためです。UDPで機能するために、同様のプロトコルDTLSが設計されています。信頼できないトランスポート上で動作します。

35
Steffen Ullrich

他の人がすでに言ったことに加えて、TLSはすべてのデータパケットを受信し、順番に受信し、破損せずに受信する必要があるため、信頼できるトランスポート層プロトコルを必要とします。これにはいくつかの理由があります。

  • パケットがドロップまたは破損した場合、TLSはそのパケットからデータを回復してアプリケーション層に提示する方法がないため、アプリケーション層に提示された信頼性の仮定は失われます。

  • パケットが1ビットでも破損している場合、特にブロック暗号が使用されている場合は、暗号化によりパケットが完全に文字化けする可能性があります。

  • パケットが失われたり、破損したり、順不同で処理されたりした場合、 Cipher Block Chaining に基づく暗号化スキームは、現在のブロックの復号化に失敗するだけでなく、その後のすべてのブロックでも失敗します、各ブロックはその前のブロックに依存するため(したがって、前のすべてのブロックに依存します。)したがって、ネットワーク上のパケットエラーは、TLS接続を切断して再ネゴシエートする必要があります。暗号ブロックチェーニングは、暗号文を監視している誰かが暗号文から重複する平文のパターンを検出できないようにするために、暗号化する前に、暗号ブロックの平文を前のブロックの暗号文とXORします。

  • レコードが1ビットでも破損している場合、 メッセージ認証コード は一致せず、TLSは(正しく)送信中にメッセージが変更されたと見なし、その結果、TLS接続が発生します。取り壊される。

  • ストリーム暗号が使用されているときにレコードが順不同で受信された場合、そのレコードのメッセージの一部が(ストリームの誤った部分を使用して)正しく復号化されないため、MACチェックが失敗し、 TLS接続は切断されます。

もちろん、基になるトランスポートプロトコルが信頼性の保証を提供する限り、TLS自体は問題なく動作します。 TLS自体には、基になるトランスポートプロトコルをTCPにする必要はありません。もちろん、TCPは、一般的にインターネットが関係する信頼できるプロトコルです。

13
reirab

TLSはTCPを必要としません。たとえば、OpenVPNでTLS認証キーを使用します(私の構成ではオーバーヘッドを下げるため)[〜#〜] udp [〜#〜]に乗るTUNインターフェイスを経由します。 TLSは両方で、そしておそらく私が気付いていない他のものの上で使用することができます。

3