Hầu như ngày nào chúng ta cũng nhập mã 2FA 6 chữ số từ các ứng dụng như Google Authenticator, nhưng không phải ai cũng hiểu vì sao nó hoạt động được ngay cả khi điện thoại không có mạng 🤔
Nhiều người lầm tưởng rằng mã này được “gửi” từ server về điện thoại giống như SMS. Thực tế hoàn toàn không phải vậy.
Hiểu lầm phổ biến: mã 2FA được gửi về điện thoại
Với SMS OTP, máy chủ phải gửi tin nhắn chứa mã xác thực về số điện thoại của bạn.
Nhưng với các ứng dụng Authenticator, không có bất kỳ mã nào được gửi đi cả.
Thay vào đó, website và ứng dụng cùng tự tính ra một con số giống hệt nhau.

Bước quan trọng nhất: Quét mã QR

Khi bạn bật 2FA và quét mã QR, điều thực sự diễn ra là:
- Website cung cấp một khóa bí mật (secret key)
- Ứng dụng Authenticator lưu khóa này
- Máy chủ cũng lưu chính khóa đó
Khóa bí mật này không bao giờ thay đổi, trừ khi bạn reset 2FA.
Cách mã 6 chữ số được tạo ra

Từ thời điểm đó trở đi, cứ mỗi 30 giây, cả hai bên sẽ cùng làm:
Mã OTP = Hàm băm (Khóa bí mật + Thời gian hiện tại)
- Thời gian được chia thành các mốc 30 giây
- Kết quả cuối cùng được rút gọn thành 6 chữ số
- Khi bạn nhập mã:
- Server tự tính mã tại thời điểm đó
- Nếu trùng khớp → xác thực thành công
Không cần Internet. Không cần gửi dữ liệu.
Vì sao không có mạng vẫn dùng được?
Bởi vì:
- Ứng dụng chỉ cần đồng hồ hệ thống
- Khóa bí mật đã lưu sẵn trong máy
- Mọi phép tính đều diễn ra offline
Chỉ cần điện thoại còn đúng giờ, mã vẫn chính xác.
Vì sao Authenticator an toàn hơn SMS?
| SMS OTP | App Authenticator |
|---|---|
| Có thể bị chặn SMS | Không có dữ liệu truyền |
| Dễ bị SIM swap | Không phụ thuộc SIM |
| Mã có thể bị đọc trộm | Mã tự sinh, hết hạn rất nhanh |
Đây là lý do vì sao các ứng dụng như Google Authenticator hay Microsoft Authenticator được khuyến nghị sử dụng thay cho SMS.
