Minh vừa qua vụ tài khoản bị đăng nhập lạ, giờ lại nghĩ ra chuyện khác: tin nhắn gửi cho bạn phải đi qua bao nhiêu trạm lạ trên đường — lỡ ai đó ở giữa đọc trộm được thì sao?
Thứ Sáu, giờ ra chơi
Từ hôm đổi mật khẩu và bật xác thực hai lớp theo lời thầy Huy dặn, mình thấy yên tâm hẳn. Không còn ai đoán trúng "cửa nhà" mình được nữa.
Nhưng giờ ra chơi hôm nay, đang ngồi cùng Bống ở ghế đá sân trường, mình chợt nghĩ ra một chuyện khác. Mình gõ tin nhắn cho Bống, bấm gửi, và một giây sau nó hiện lên trên điện thoại của Bống. Nhanh đến mức mình chưa từng thắc mắc: tin nhắn đó đã đi những đâu trong một giây ngắn ngủi ấy?
Mình hỏi Bống: "Nếu có ai đó chặn được tin nhắn tớ gửi cho cậu ngay giữa đường, họ đọc được nội dung không nhỉ?"
Bống ngớ người: "Ơ... tin nhắn nó đi đường nào để tới máy tớ vậy? Tớ tưởng nó bay thẳng một mạch."
Câu hỏi đó làm mình khựng lại. Thật ra mình cũng chưa bao giờ nghĩ tới. Giờ ra chơi hết, hai đứa quyết định lát nữa ghé phòng Tin hỏi thầy Huy cho ra nhẽ.
Thứ Sáu, phòng Tin
Thầy Huy nghe xong, cầm phấn vẽ ngay lên bảng một hàng ô vuông nối tiếp nhau. "Tin nhắn của em không đi thẳng một đường từ điện thoại em sang điện thoại Bống đâu," thầy nói. "Nó nhảy qua rất nhiều trạm trung gian."
Thầy chỉ vào từng ô: router ở nhà em, trạm phát sóng gần đó, một vài máy chủ của nhà mạng, rồi mới tới router nhà Bống, cuối cùng mới đến điện thoại Bống. Có khi tới cả chục trạm chỉ trong một giây.
Rồi thầy hỏi ngược lại cả hai đứa: "Nếu một trong những trạm trung gian đó lại do người xấu điều khiển thì sao? Họ có mở gói tin ra đọc trộm được không?"
Vẫn thứ Sáu
Mình thử tự trả lời câu hỏi của thầy. Nếu tin nhắn viết y nguyên chữ thường — kiểu gõ gì thì gửi đi đúng y hệt vậy — thì bất kỳ trạm nào trong chuỗi đó cũng đọc được nội dung y hệt như Bống đọc.
Không cần hack gì cao siêu cả. Chỉ cần đứng đúng chỗ giữa đường, cầm đúng gói tin trong tay một giây, là đọc được hết — kể cả những dòng riêng tư nhất.
Thầy Huy gật đầu: "Đúng vậy. Và tin nhắn hai đứa gửi qua lại, đâu chỉ đi qua một trạm — nó qua cả chục trạm trước khi tới nơi. Càng nhiều trạm, càng nhiều cơ hội cho một người xấu chen vào."
Mình bắt đầu thấy lo thật sự. Vậy làm sao để, dù ai đó đứng đúng chỗ và nhìn thấy được gói tin đi qua tay mình, họ vẫn không đọc hiểu được nội dung bên trong?
Ghi lại khoảnh khắc à-ra-vậy
Thầy Huy cười: "Câu trả lời không phải là tìm một đường đi bí mật khác đâu. Đường đi vẫn y nguyên — vẫn qua đúng từng trạm đó, không trốn được trạm nào cả."
"Cái mình làm là: trước khi gửi đi, biến nội dung thật thành một mớ ký tự lộn xộn vô nghĩa. Ai chặn được gói tin giữa đường cũng chỉ thấy đống ký tự đó thôi — nhìn vào chẳng hiểu gì cả."
À ra vậy! Không cần trốn khỏi ánh mắt ai cả — chỉ cần khiến thứ họ nhìn thấy trở thành vô dụng với họ.
Ghi lại tên gọi
Chuyện biến nội dung thật thành một mớ ký tự vô nghĩa như vậy, trong máy tính gọi là MÃ HÓA (encryption) — biến đổi dữ liệu thành một dạng không đọc được, trừ khi có đúng khóa giải mã.
Chiều ngược lại — biến mớ ký tự vô nghĩa đó trở lại thành nội dung đọc được — gọi là GIẢI MÃ (decryption).
Bống hỏi ngay: "Vậy cái 'khóa' này có phải là một chiếc chìa khóa thật, làm bằng kim loại không?"
Câu hỏi đó, thầy Huy để dành trả lời ở chặng sau.
Ghi lại cho nhớ — bản chất
Đây là chỗ thầy Huy nhấn mạnh nhất, dặn mình phải ghi lại cho kỹ: mã hóa không phải là giấu bức thư đi chỗ khác.
Bức thư — hay đúng hơn là gói dữ liệu — vẫn đi đúng con đường bình thường, qua đúng từng trạm trung gian y hệt như chặng 2 mình vừa học. Không có đường đi bí mật nào cả.
Chỉ có nội dung của nó bị biến đổi theo một quy tắc toán học — quy tắc này đảo ngược lại được (tức giải mã được), nhưng chỉ với đúng khóa tương ứng.
Giống: lá thư vẫn được đưa thư đi qua đúng những người đưa thư bình thường, không lẩn trốn ai cả.
Không giống: phong bì thư bình thường, ai bóc ra cũng đọc được chữ bên trong. Còn "phong bì" của mã hóa thì dù bóc ra đọc trọn vẹn từng chữ, không có khóa đúng thì vẫn chỉ là một chuỗi ký tự vô nghĩa, không dùng được vào việc gì.
Vậy nếu ai đó chặn được toàn bộ gói tin đã mã hóa của mình — không thiếu một chữ nào — thì họ có đọc được nội dung không?
Thầy cho một ví dụ dễ hình dung
Thầy Huy nói trước: "Cái thầy sắp cho hai em xem đơn giản hoá rất nhiều so với mã hóa thật — chỉ để hình dung ý tưởng cốt lõi thôi. Mã hóa thật dùng toán học phức tạp hơn thế này rất nhiều."
Rồi thầy viết một quy tắc: thay mỗi chữ cái bằng chữ cái đứng sau nó ba vị trí trong bảng chữ cái. A→D, B→E, C→F, cứ thế tiếp tục, hết Z thì quay lại A.
Bống thử ngay: viết "BONG", dịch ba vị trí ra "ERQJ", đưa cho mình đọc. Mình không biết quy tắc nên nhìn mãi chẳng hiểu gì — đến khi Bống bật mí "lùi lại ba chữ đi", mình dịch ngược lại mới ra đúng tên bạn ấy.
Vậy nếu ai đó không hề biết quy tắc "dịch bao nhiêu vị trí", họ có cách nào đoán mò ra được nội dung không — hay phải thử hết 25 khả năng dịch mới ra?
Nếu không có nó thì sao
Mình hỏi thầy Huy một câu khác: "Nếu không ai mã hóa gì hết, chuyện gì sẽ xảy ra?"
Thầy trả lời gọn: "Mọi dữ liệu gửi qua mạng — mật khẩu, tin nhắn, số tài khoản ngân hàng — sẽ ở dạng đọc được ngay lập tức với bất kỳ ai chặn được đường truyền. Không cần giải mã gì cả, cứ đọc thẳng."
Mình sực nhớ tới bài về mật khẩu tuần trước. Dù mật khẩu có dài, có lạ, có khó đoán tới đâu — nếu gửi đi mà không mã hóa, ai đứng đúng chỗ giữa đường cũng đọc được nó y nguyên, như đọc một dòng chữ in.
Vậy mật khẩu mạnh và mã hóa dữ liệu trên đường đi — hai thứ này có thay thế được cho nhau không, hay cần cả hai mới thật sự an toàn?
Để ý lại mới thấy nó ở khắp nơi
Về nhà, mình để ý lại thanh địa chỉ trên trình duyệt — hoá ra vẫn có một biểu tượng ổ khóa nhỏ nằm cạnh địa chỉ web mà mình chưa từng để ý kỹ.
Thầy Huy còn nói thêm: nhiều ứng dụng nhắn tin quảng cáo "mã hóa đầu cuối" (end-to-end encryption) — nghĩa là chỉ người gửi và người nhận thật sự mới đọc được nội dung, không ai ở giữa đọc được, kể cả chính công ty làm ra ứng dụng đó.
Gõ một câu ngắn, không dấu (kiểu "XIN CHAO"), rồi thử dịch ba vị trí như thầy Huy chỉ.
Gõ câu rồi bấm "Mã hóa" xem thử nhé.
Mã hóa xong thì bấm nút này để giải mã ngược lại.
Bấm vào đáp án em nghĩ là đúng.
1. Nếu ai đó chặn được đúng toàn bộ gói tin đã mã hóa giữa đường, họ đọc được nội dung ngay không?
2. Biểu tượng ổ khóa nhỏ cạnh địa chỉ web (https) báo hiệu điều gì?
3. Ứng dụng nhắn tin quảng cáo "mã hóa đầu cuối" nghĩa là gì?
Câu hỏi của em sẽ hiện ở đây, chỉ nằm trên máy của em thôi.
Cuộn nốt xuống dưới nhé — sắp xong trang này rồi!
Thứ Bảy
Nhắn lại cho Bống cả buổi tối, mình tóm câu chuyện thành một câu ngắn nhất có thể — để lỡ quên hết mọi thứ, chỉ cần nhớ đúng một câu này thôi:
Thiết kế một ứng dụng nhắn tin cho học sinh cấp 2 dùng, em có bắt buộc mã hóa mọi tin nhắn trên đường truyền không? Nếu chỉ mã hóa được một phần vì máy quá chậm, em sẽ ưu tiên mã hóa loại tin nhắn nào trước?
Bống nhắn lại một câu làm mình bất ngờ: "Vậy từ giờ tớ nhìn cái ổ khóa nhỏ cạnh web khác hẳn rồi đấy." Đúng là nhìn một chi tiết quen mắt bằng con mắt mới — hoá ra nó luôn ở đó, chỉ là trước giờ mình chưa từng hỏi tại sao.