Cloudflare

Encrypted SNIでプライバシーを保護
ーコラムー
2020年7月15日号



以前に別の記事でDoH(DNS over HTTPS)を紹介しましたが、DNSの通信を秘匿化しても接続先情報が平文で流れている箇所が他にもあります。 SSL/TLSの拡張仕様であるSNI(Server Name Indication)により定義されたServer Nameヘッダです。


SSL/TLSにおいてもバーチャルホストを実現するために設けられた仕組みなのですが、SSL/TLSでは暗号通信に先立ってクライアント/サーバ間で行うハンドシェイクにおいて、Client Helloというメッセージ内に、接続先サービスのFQDNが含まれています。 DNSの通信を暗号化してもServer Nameヘッダが平文のままだと秘匿化が不完全です。 以下はServer Nameヘッダが見えている様子をパケットキャプチャデータで確認した様子です。


Encrypted SNIを使うにはクライアント・サーバの双方共に対応されたものである必要がありますが、今回はクライアント側の対応方法を紹介します。 FireFoxは既にベータ的に提供されています。設定方法は以下の通りです(設定前にバージョンを最新にしてください)。 そこで登場したのがEncrypted SNIです(まだRFC化はされていません)。 Encrypted SNIではServer Nameヘッダが暗号化され、閲覧サイトの特定がさらに困難になります。 TLS1.3ではサーバ証明書のやり取りも暗号化されますので、証明書のCommon Nameも第三者は見られなくなります。

アドレスバーにabout:configと入力し、Advancedな設定画面を開き、以下の3つの設定をします。
network.trr.bootstrapAddress=1.1.1.1
network.trr.mode=2
network.security.esni.enabled=true




https://www.cloudflare.com/ssl/encrypted-sni/ へアクセスして「Check My Browser」をクリックします。


Encrypted SNIのところが緑色のチェックマークになっていればOKです。




以下はEncrypted SNIに対応しているwww.cloudflare.comへアクセスした時のパケットキャプチャデータを確認した結果です。Server Nameヘッダが暗号化され、www.cloudflare.comが見えない状態になっていることが確認できました。




注意点として、Encrypted SNIにてServer Nameヘッダを暗号化する際に使用する鍵はDNSプロトコルで取得するため、FQDNが見られたり偽装された応答を返されたりすることを防ぐため、DoHも併用しなくてはなりません。

次回はサーバ側の実装について触れたいと思います。






角田貴寛

 執筆者:角田 貴寛

三井情報株式会社
ソリューション技術本部 次世代基盤第二技術部 第一技術室
CISSP、CEH
現在、セキュリティ関連調査研究・教育業務に従事