音声と映像の遠隔でのリアルタイム共有にWebRTC を採用すべきかどうか
ライセンス
Creative Commons — 表示 - 非営利 - 改変禁止 4.0 国際 — CC BY-NC-ND 4.0
著者
- 商用 WebRTC SFU 開発者
- WebRTC プロトコルスタック実装者
- End to End Encryption プロトコルスタック実装者
前提
- WebRTC はプロトコル名ではない
- WebRTC で採用されているプロトコルをここでは WebRTC としている
結論
WebRTC を採用すべき
- 独自プロトコルは採用は検証コストが高いためおすすめできない
- WebTransport はまだまだ策定中のため体力がない限り 2021 年時点では採用すべきではない
独自プロトコルを採用するべきかどうか
そもそも独自プロトコルはプロトコルが非公開なことが多いです。また SDK などもソースコードが非公開のことが多いです。
つまりプロトコルでもベンダーロックされ、SDK でもサーバでも、ハードウェアでもベンダーロックされるのをよしとするかどうかというのが判断基準になります。ベンダーロックされることでの恩恵もあると思います。
なにより独自プロトコルだから安全というのは大きな誤解です。
最近、高級車がハッキングされて海外では億単位の窃盗被害が出ていますが、これが実は独自プロトコルの脆弱性を突いたものだと言われています。自動車のキーレスエントリーを作っているエンジニアは「独自プロトコルだから大丈夫」とたかをくくったのかもしれませんが、独自プロトコルの解析は、実はさほど難しくありません。また解析できないほど複雑なプロトコルを作ったら、それはそれで脆弱性の発生源になってしまいます。
安全なプロトコルを設計するのは、実はとても難しく、欧米のITトップ企業はこのために、情報科学でドクターをとった研究者を何人も抱えています。例えば TLS (SSLの最新版) の脆弱性を発見できる研究者は貴重です。TLS そのものが電子商取引の礎であり、その安全性が数百万人の顧客のプライバシや財産の安全に直結するのはもちろんのことですが、それ以上に、自社で設計するプロトコルに脆弱性がないか徹底的に検査してくれる、というメリットがあります。
独自プロトコルだから安全、独自プロトコルだからオープンなプロトコルより高速なんて話をたまにみたりしますが、それを実現することができるのは本当に体力があり、莫大なリソースをつぎ込める企業でない限り難しいです。
実際 Google や Microsoft や Facebook や Amazon などが WebRTC を採用しています。E2EE で有名な Signal や Telegram もWebRTC を採用しています。
オープンなプロトコルは多くの専門家が多くの時間をかけ検証しているものです。それを採用しないという理由はありません。
もし独自プロトコルの製品を採用したいのであれば、しっかりと WebRTC と比較検証を行う事をおすすめします。
蛇足
- AES 系の暗号化のスピードは AES-NI 以上早くすること基本的にはできません
- デコーダー/エンコーダのスピードは HWA 以上早くすることはできません
- 通信速度は UDP だろうが TCP だろうが同じです
- 帯域推定や再送制御や FEC などを独自に行い WebRTC よりも性能が高いものを実現するのは Google よりもコストをかけている必要があります
- もし独自プロトコル、独自暗号だから安全という記載を見つけたら、セキュリティ専門家の安全調査やレビューを受けていないと考えて間違いありません
- セキュリティ専門家であれば独自プロトコルは安全ではないということを理解しているはずです
なぜ WebRTC なのか
WebRTC は多くの企業が採用し、実績を出してきています。「独自」をアピールしている企業以外はすべて WebRTC を採用してることがほとんどです。
それほど Chrome / Edge というブラウザ上で動作するというおは大きい仕組みです。さらにハードウェアへの組み込みとしても AWS は WebRTC を選択しました。
実際ハードウェアに WebRTC 組み込まれていることも増えてきています。
オープンなプロトコルが採用されて、規格自体もオープンになっている WebRTC を採用するというのが、現時点での最適解です。
WebTransport はどうなのか
新しい技術に興味ある方は WebTransport でいいじゃないかと思うかもしれません。ただ WebTransport と WebRTC は現在比較できる段階にありません。
音声や映像を共有するには帯域推定、再送制御、FEC などなど様々な仕組みが策定されていません。これらを独自で策定するには独自プロトコルと同様、相当な体力が必要になります。
今後 5 年は WebRTC を利用していって問題ありません。もちろん WebTransport が成熟すれば置き換えていけばよいと思いますが、成熟には相当な時間がかかると思います。1-2 年で置き換わっていく話ではありません。
それ以外のオープンなプロトコル
現時点では WebRTC の劣化版か同等のものになることがほとんどです。ブラウザで利用できる WebRTC を採用したほうがよいと思います。