ECH là gì? Mã hoá tên trang trong gói HTTPS đầu tiên
ECH (Encrypted ClientHello) giấu tên trang khỏi bộ lọc DPI. Cách ECH hoạt động, vì sao chưa phổ biến, và ECH kết hợp với tách gói của GreenTunnel ra sao.
Trong bài DPI và SNI, chúng ta đã thấy tên trang nằm ở dạng chữ rõ ngay trong gói HTTPS đầu tiên, và bộ lọc của nhà mạng chỉ cần đọc tên này để chặn. GreenTunnel xử lý bằng cách cắt gói đó thành nhiều mảnh. Nhưng còn một cách khác, triệt để hơn: mã hoá luôn cái tên. Đó là việc của ECH. Bài này giải thích ECH là gì, vì sao nó chưa có ở khắp nơi, và nó liên quan thế nào tới GreenTunnel.
Vấn đề: tên trang vẫn lộ dù đã có HTTPS
HTTPS mã hoá nội dung trang, mật khẩu và cookie. Tuy vậy, trước khi mã hoá bắt đầu, trình duyệt phải gửi gói ClientHello để chào máy chủ. Trong gói này có trường SNI ghi tên miền bạn muốn mở, ví dụ example.com. Một địa chỉ IP thường phục vụ hàng nghìn trang, nên máy chủ cần tên này để chọn đúng chứng chỉ.
Vì SNI không được mã hoá, bất kỳ ai đứng giữa đường truyền đều đọc được: nhà mạng, quản trị Wi-Fi công cộng, hay thiết bị DPI. Họ không biết bạn đọc gì trên trang, nhưng biết bạn vào trang nào. Đây vừa là chỗ hở về quyền riêng tư, vừa là “tay nắm” để chặn trang.
ECH hoạt động thế nào
ECH chia gói ClientHello làm hai lớp. Lớp ngoài mang một tên chung, gọi là public name, do nhà cung cấp hosting đặt cho rất nhiều trang dùng chung. Lớp trong mang tên trang thật và các thông số bắt tay khác, được mã hoá bằng khoá công khai của nhà cung cấp. Chỉ máy chủ của nhà cung cấp có khoá riêng để mở lớp trong.
- Lấy khoá qua DNS. Khi tra tên miền, trình duyệt hỏi thêm bản ghi loại HTTPS (còn gọi là SVCB, loại 65). Với trang hỗ trợ ECH, bản ghi này chứa cấu hình ECH, trong đó có khoá công khai và tên chung.
- Tạo ClientHello hai lớp. Tên thật được đặt vào lớp trong và mã hoá. Lớp ngoài chỉ ghi tên chung.
- Bộ lọc nhìn vào. DPI đọc SNI ở lớp ngoài và chỉ thấy tên chung. Rất nhiều trang khác nhau dùng cùng tên này, nên bộ lọc không biết bạn đang mở trang nào.
- Máy chủ giải mã. Nhà cung cấp mở lớp trong, đọc tên thật và hoàn tất bắt tay như bình thường. Chứng chỉ của trang vẫn được trình duyệt kiểm tra đầy đủ.
Nếu khoá đã cũ hoặc máy chủ từ chối, giao thức có cơ chế gửi lại cấu hình mới để trình duyệt thử lại. Người dùng thường không thấy gì khác biệt.
Ai đang hỗ trợ ECH
Phía trình duyệt
Chrome và Firefox đã bật ECH mặc định từ năm 2023, và các trình duyệt dựa trên Chromium như Edge cũng hỗ trợ. Firefox dùng ECH khi bật DNS qua HTTPS. Chrome dùng ECH khi lấy được bản ghi HTTPS của trang. Mức hỗ trợ ở các trình duyệt khác, và trong từng ứng dụng di động, mỗi nơi một khác. Nhiều ứng dụng tự xử lý kết nối riêng và chưa dùng ECH.
Phía trang web
ECH cần máy chủ có khoá riêng và công bố cấu hình qua DNS. Việc này dễ nhất với các nhà cung cấp lớn phục vụ rất nhiều trang sau một hạ tầng chung. Một số CDN lớn, ví dụ Cloudflare, đã bật ECH cho các trang họ phục vụ. Trang tự vận hành máy chủ riêng thì phải tự triển khai, và phần lớn chưa làm.
Vì sao ECH chưa có ở khắp nơi
- Cần cả hai phía. Trình duyệt hỗ trợ mà trang không bật thì tên vẫn lộ, và ngược lại.
- Phụ thuộc DNS. Khoá ECH đi qua DNS. Nếu DNS không mã hoá, nhà mạng có thể xoá bản ghi HTTPS hoặc trả lời giả, và trình duyệt sẽ không biết trang có ECH.
- Tên chung chỉ hiệu quả khi đông người dùng. ECH giấu bạn trong đám đông các trang dùng chung một tên. Một trang tự host với tên chung của riêng nó thì giấu được rất ít.
- Mạng vẫn có thể chặn ECH. Một bộ lọc có thể chặn tên chung, chặn bản ghi HTTPS, hay chặn mọi kết nối trông giống ECH. Khi đó trình duyệt thường quay về kết nối không có ECH, hoặc kết nối thất bại. ECH không phải lời hứa chắc chắn vào được trang.
- Thiết bị doanh nghiệp. Một số tường lửa công ty cần đọc SNI để lọc, nên có trình duyệt cho phép quản trị viên tắt ECH.
ECH và GreenTunnel: bổ sung cho nhau
DNS mã hoá giữ cho ECH chạy được
Khi bạn bật GreenTunnel, mọi truy vấn DNS trên máy đi qua DNS mã hoá tới máy chủ bạn chọn. GreenTunnel giữ nguyên bản ghi HTTPS trong câu trả lời, không lọc bỏ. Nhờ vậy nhà mạng không thể xoá khoá ECH giữa đường, và trình duyệt có đủ thông tin để dùng ECH với trang hỗ trợ.
Tách gói lo phần còn lại
Với trang chưa có ECH, tên trang vẫn ở dạng chữ rõ. Lúc này kỹ thuật tách TLS record của GreenTunnel cắt gói đầu tiên để bộ lọc không đọc trọn tên. Với chế độ “Mọi trang”, GreenTunnel tách nhẹ mọi kết nối HTTPS, kể cả kết nối có ECH. Việc này vô hại, vì máy chủ vẫn ghép các mảnh lại đúng chuẩn.
Nói ngắn gọn: ECH là giải pháp lâu dài ở tầng giao thức, còn tách gói là cách dùng ngay hôm nay cho mọi trang. Bạn không cần chọn một trong hai.
Bạn có thể làm gì
- Dùng trình duyệt cập nhật mới. Bản mới của Chrome, Edge và Firefox đều hỗ trợ ECH.
- Giữ DNS mã hoá. Bật GreenTunnel là đủ, vì DNS mã hoá luôn chạy khi VPN bật. Nếu dùng Firefox riêng lẻ, hãy bật DNS qua HTTPS trong cài đặt của Firefox.
- Kiểm tra ECH có đang chạy không. Mở trang
https://crypto.cloudflare.com/cdn-cgi/tracevà tìm dòngsni=. Giá trịencryptednghĩa là ECH đã được dùng với trang đó, cònplaintextnghĩa là chưa. - Đừng coi ECH là chìa khoá vạn năng. Nếu một trang vẫn không vào được, hãy dùng Kiểm tra URL để biết nhà mạng đang chặn kiểu gì.
- Chặn QUIC khi cần. Trình duyệt cũng có thể dùng ECH với HTTP/3, nhưng GreenTunnel mặc định chặn QUIC để kết nối quay về TCP, nơi tách gói hoạt động. Xem bài về QUIC.
Câu hỏi thường gặp
ECH có giống ESNI không?
ESNI là phiên bản thử nghiệm cũ, chỉ mã hoá riêng trường SNI. ECH thay thế ESNI và mã hoá cả phần lớn gói ClientHello, nên kín hơn và khó nhận diện hơn.
Có ECH rồi thì còn cần GreenTunnel không?
Có. Nhiều trang chưa bật ECH, và ECH cần DNS sạch để lấy khoá. GreenTunnel lo DNS mã hoá cho mọi ứng dụng, tách gói cho trang chưa có ECH, và còn có danh sách chặn, Requester, Kiểm tra URL.
GreenTunnel có đọc được tên trang bên trong ECH không?
Không. GreenTunnel không giải mã HTTPS và không có khoá của nhà cung cấp. Nó chỉ thấy những gì đi qua máy bạn: lớp ngoài của gói tin và các tên miền mà chính máy bạn tra qua DNS. Mọi thứ ở lại trên máy, chúng tôi không thu thập nội dung, tên miền hay lưu lượng.
Vì sao trang kiểm tra báo plaintext dù tôi dùng Chrome mới?
Có thể trình duyệt chưa lấy được bản ghi HTTPS, ví dụ do DNS của nhà mạng lọc mất, hoặc mạng bạn đang chặn ECH. Hãy bật GreenTunnel rồi tải lại trang. Nếu vẫn là plaintext, mạng hoặc trình duyệt của bạn chưa dùng được ECH, và tách gói vẫn là lớp bảo vệ còn lại.