MƯỜI CHẶNG · NHẬT KÝ

Mã hóa — bức thư chỉ ai có chìa mới đọc được

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?

chữ bí ẩn chữ trên cuộn giấy này chỉ ai có đúng chìa mới đọc được
CHẶNG 1

Thứ Sáu, giờ ra chơi

Nỗi lo mới, ngay khi vừa yên tâm

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ẽ.

"cậu rảnh không?" máy Minh máy Bống chỉ mất khoảng một giây
Nhanh đến mức Minh chưa từng thắc mắc: trong một giây đó, tin nhắn đã đi qua những đâu?
CHẶNG 2

Thứ Sáu, phòng Tin

Tin nhắn không bay thẳng một mạch

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.

Minh router ? trạm router Bống nhỡ trạm này là người xấu?
Mỗi vòng tròn nhỏ là một "trạm" cầm gói tin trong tay một lúc rồi mới chuyền tiếp — trước khi tin nhắn tới được Bống.

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?"

CHẶNG 3

Vẫn thứ Sáu

Càng nhiều người cầm qua tay

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?

trạm "gặp ở cổng sau giờ học nhé" đọc được ngay — không cần đoán gì cả chữ thường — ai cầm cũng đọc được
Nếu tin nhắn đi nguyên văn, bất kỳ trạm nào cầm qua tay cũng đọc được y hệt như Bống đọc.
CHẶNG 4

Ghi lại khoảnh khắc à-ra-vậy

Không giấu đường đi — giấu ý nghĩa

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ả."

"CHIỀU NAY HỌC NHÓM NHÉ" nội dung thật FKLHX QDB KRF QKRP QKH đã mã hóa — gửi đi ? trạm lạ chỉ thấy chữ vô nghĩa Bống có đúng "chìa" → giải mã lại "CHIỀU NAY HỌC NHÓM NHÉ"
Trạm nghi vấn vẫn cầm được đúng gói tin trong tay — nhưng thứ nó thấy chỉ là chữ vô nghĩa. Chỉ Bống mới có "chìa" để đọc lại đượ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ọ.

CHẶNG 5

Ghi lại tên gọi

Tên gọi: mã hóa

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.

chữ đọc được mã hóa Q8&zP1# giải mã chữ đọc được chiều giải mã chỉ đi được nếu có đúng khóa
Mã hóa và giải mã là hai chiều ngược nhau — chiều giải mã cần đúng khóa mới đi được.
CHẶNG 6

Ghi lại cho nhớ — bản chất

Không phải giấu bức thư — mà làm nó vô nghĩa

Đâ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 và không giống một phong bì thư

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ì.

"gặp ở cổng sau" phong bì thường bóc ra là đọc được ngay Q8&zP1#!m phong bì đã mã hóa bóc ra vẫn chỉ thấy chữ vô nghĩa
Cả hai phong bì đều bóc ra được — chỉ một cái, bóc xong vẫn chẳng đọc hiểu 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?

CHẶNG 7

Thầy cho một ví dụ dễ hình dung

Thử một quy tắc đơn giản nhất có thể

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.

MP IL NQ HK "MINH" dịch 3 vị trí → "PLQK"
Ai không biết quy tắc "dịch ba vị trí" nhìn "PLQK" chỉ thấy chữ vô nghĩa. Ai biết quy tắc thì dịch ngược lại (lùi ba vị trí) là đọc được ngay.

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?

CHẶNG 8

Nếu không có nó thì sao

Nếu chẳng ai mã hóa gì cả

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.

KHÔNG MÃ HÓA Ai chặn được đường truyền
đọc được ngay, không cần khóa gì cả.
CÓ MÃ HÓA Ai chặn được đường truyền
chỉ thấy chữ vô nghĩa, không có khóa là chịu.
Kx7!vQ2m gửi trần trụi — đọc được ngay R9$mZ4&p đã mã hóa — chặn cũng vô dụng mật khẩu mạnh, nhưng không mã hóa mật khẩu mạnh + có mã hóa
Mật khẩu khó đoán vẫn có thể bị đọc trộm giữa đường nếu không mã hóa — hai lớp bảo vệ này cần đi cùng nhau.

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?

CHẶNG 9

Để ý lại mới thấy nó ở khắp nơi

Cái ổ khóa nhỏ cạnh địa chỉ web

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ỹ.

https://truong-anh-duong.vn chữ "s" trong https + ổ khóa = kết nối đã được mã hóa
Không có nghĩa là trang web đó "an toàn tuyệt đối" — chỉ có nghĩa là đường truyền giữa em và trang đó đã được mã hóa.

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 đó.

Tự tay mã hóa một câu

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.

Tự kiểm tra: hiểu đúng chưa?

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!

CHẶNG 10

Thứ Bảy

Câu 30 giây mình sẽ nhớ

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:

Mã hóa không giấu bức thư đi —
nó khiến bức thư vô nghĩa
với bất kỳ ai không có chìa.

Nếu em là kỹ sư…

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.