DTLS

最終更新日:

2020-07-25

DTLS とは

DTLS とはデータグラム向けの TLS です。 WebRTC では UDP が主に利用されるため DTLS が採用されています。 ただし MediaChannel と DataChannel では DTLS の利用方法が異なります。

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 を利用しています。

TLS と DTLS の違い

レコードとハンドシェイクメッセージの形式が異なります。そのため TLS とは互換性はありません。

レコードにはシーケンス番号とエポック時間が入ります。

ハンドシェイクメッセージにはシーケンス番号とフラグメントのオフセット値が入ります。

よくある DTLS に対する勘違い

DTLS を利用しているため over UDP だとしても再送や輻輳などの事を考慮しなくても良いと思い込んでいる人がいます。残念ながらそれは違います。

DTLS が担保してくれる再送や輻輳部分はあくまで DTLS のハンドシェイク部分のみで、実際にアプリケーションデータ部分は何もしてくれません。