############################## DTLS ############################## :最終更新日: 2020-07-25 DTLS とは ========= DTLS とはデータグラム向けの TLS です。 WebRTC では UDP が主に利用されるため DTLS が採用されています。 ただし MediaChannel と DataChannel では DTLS の利用方法が異なります。 - `RFC 6347 - Datagram Transport Layer Security Version 1.2 `_ DTLS 1.2 ======== Chrome は M83 で DTLS 1.0 を無効にする予定でした。 また Firefox は 2020 年 3 月までに DTLS 1.0 を無効にしたいとの方向性です。 ただ、現状はまだ DTLS 1.0 が有効のままで、今後どうなっていくかは以下の issue を追いかけるべきです。 `10261 - Drop DTLS 1.0, TLS 1.0, TLS 1.1 Support From WebRTC in M82 - webrtc `_ SRTP/SRTCP over DTLS over UDP ============================= MediaChannel では DTLS 自体では暗号化されておらず、DTLS を利用してやり取りをした MasterSecret を利用して SRTP/SRTCP が利用されています。 `RFC 5764 - Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP) `_ SCTP over DTLS over UDP ======================= DataChannel では DTLS を利用して暗号化しています。UDP の上に DTLS があり、その上で SCTP を利用しています。 - `RFC 8261 - Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets `_ TLS と DTLS の違い ================== レコードとハンドシェイクメッセージの形式が異なります。そのため TLS とは互換性はありません。 レコードにはシーケンス番号とエポック時間が入ります。 ハンドシェイクメッセージにはシーケンス番号とフラグメントのオフセット値が入ります。 よくある DTLS に対する勘違い ============================ DTLS を利用しているため over UDP だとしても再送や輻輳などの事を考慮しなくても良いと思い込んでいる人がいます。残念ながらそれは違います。 DTLS が担保してくれる再送や輻輳部分はあくまで DTLS のハンドシェイク部分のみで、実際にアプリケーションデータ部分は何もしてくれません。