Awal Mula TLS
Dulu mayoritas trafik di internet tidak dienkripsi. Oleh sebab itu, si perantara jaringan seperti ISP (Internet Service Provider) bisa dengan bebas melihat isi data yang dikirim melalui jaringannya.
Tak hanya melihat isi data, ISP juga dapat memanipulasi isi data tersebut sebelum diteruskan ke tujuan. Praktik seperti ini sangat umum dilakukan sebelum era TLS/SSL digunakan secara masif.
Misalnya, di Indonesia sendiri, pemerintah menggunakan metode ini untuk mengalihkan ke halaman internet positif apabila mengakses situs yang disensor. Telkom Indonesia juga pernah menggunakan metode ini untuk menyisipkan iklan secara paksa ke seluruh situs web yang tidak menggunakan HTTPS.
Alasan utama TLS diciptakan untuk mengamankan pengiriman data di internet agar data yang dikirim tidak bisa dilihat dan dimanipulasi oleh si perantara. Jadi dengan adanya TLS ini, praktik seperti di atas sudah tidak bisa dilakukan lagi.
Keuntungan kita sebagai pengguna internet dengan adanya teknologi seperti ini adalah privasi berinternet menjadi lebih terjamin dan aman dari aktor yang berkepentingan jahat.
DNS over HTTPS/TLS
Kueri DNS biasa itu tidak dienkripsi. Oleh karena itu, si perantara dapat melihat dan memanipulasi isi kueri tersebut sebelum diteruskan ke tujuan. Jadi, ketika kamu membuka situs web, si perantara bisa tahu situs yang kamu tuju dari kueri DNS.
Dampak dari tidak dienkripsinya kueri DNS bisa digunakan untuk penyensoran (Internet Positif) dan peretasan dengan cara merespons kueri dengan IP yang tidak benar sehingga pengguna malah dibawa ke IP si peretas ketika membuka situs web seperti situs Internet Banking.
Dibuatlah DNS over HTTPS/TLS untuk mengatasi masalah-masalah seperti di atas agar kueri DNS bebas dari intervensi si perantara dengan cara mengenkripsi kueri tersebut dengan TLS.
Server Name Indication
Meskipun kueri tidak dapat diintervensi, TLS masih mengekspos informasi situs web yang diakses dari ekstensi TLS SNI (server name indication), oleh sebab itu, perantara masih dapat melihat situs yang diakses.
Dengan tereksposnya informasi situs yang diakses tentu tidak bagus untuk privasi. Bahkan dapat digunakan untuk kepentingan penyensoran.
Alasan dibutuhkan SNI agar satu alamat IP bisa digunakan oleh beberapa situs web. SNI pada TLS dibutuhkan sebagai penanda agar server dapat mengirimkan situs web yang klien minta sesuai dengan SNI (situs web) yang dikirim oleh klien.
Ekstensi Encrypted Client Hello (ECH)
Upaya menyembunyikan situs yang diakses dari perantara terus dilakukan, awal mulanya dari DNS over HTTPS/TLS dan sekarang ada Encrypted Client Hello.
Sesuai dengan namanya, Encrypted Client Hello, ekstensi TLS ini berusaha untuk menyembunyikan SNI agar tidak dapat dilihat oleh si perantara.
ClientHello terdiri atas SNI, ekstensi, key share, ALPN, dll. ClientHello ini diperlukan agar dapat berkomunikasi secara aman dengan TLS.
ClientHello pada Encrypted Client Hello dibagi menjadi ClientHelloInner dan ClientHelloOuter.
- ClientHelloInner berisi hal yang sensitif seperti SNI Inner, ekstensi, key share, ALPN, dll kemudian dienkripsi dengan public key yang key-nya didapat dari DNS Record HTTPS.
- ClientHelloOuter berisi informasi tidak sensitif seperti SNI Outer, ekstensi, key share, ALPN, dll.
SNI Inner merupakan situs web asli yang diakses sedangkan SNI Outer merupakan SNI publik yang dapat dilihat oleh si perantara. Tujuan adanya ClientHelloOuter untuk mencegah protocol ossification.
Browser terbaru saat ini sudah mendukung ECH, dan aktif secara otomatis, cara mengetes apakah ECH sudah aktif di browser, bukalah https://ipsaya.id/cdn-cgi/trace.
Apabila ada sni=plaintext
direspons tersebut artinya belum menggunakan ECH sedangkan apabila ada sni=encrypted
artinya sudah menggunakan ECH.
ECH harus dikombinasikan dengan DNS yang terenkripsi seperti dengan DNS over HTTPS/TLS atau yang lebih baru lagi DNS over QUIC. Apabila menggunakan DNS yang tidak terenkripsi si perantara dapat melihat kueri yang bertujuan untuk mengambil ECHConfig (public key, sni outer, dll) dari DNS Record HTTPS.