
TOTP (Time-based One-Time Password) là thuật toán sinh mật khẩu dùng một lần dựa trên thời gian hiện tại, được chuẩn hoá thành RFC 6238 của IETF. Đây là xương sống của phần lớn hệ thống xác thực hai lớp (2FA) mà chúng ta dùng hằng ngày, từ Google, GitHub cho tới các sàn giao dịch tiền mã hoá. Bài viết này giải thích cơ chế hoạt động, vì sao nó an toàn hơn SMS OTP, và cách tự thiết lập một trình sinh mã TOTP đáng tin cậy.

TOTP hoạt động như thế nào
Khác biệt cốt lõi giữa TOTP và mật khẩu tĩnh nằm ở chỗ: thay vì lưu một chuỗi ký tự bất biến trên server, hệ thống chia sẻ một khoá bí mật (secret key) giữa máy chủ và thiết bị của bạn. Khi cần đăng nhập, cả hai bên độc lập tính ra cùng một dãy số ngẫu nhiên, rồi so sánh với nhau.
Quy trình cụ thể diễn ra như sau:
- Từ chuỗi khoá bí mật dạng Base32, ứng dụng tính một giá trị bước thời gian
T = floor((thời gian hiện tại - thời điểm mốc) / 30). Chu kỳ chuẩn là 30 giây. - Giá trị
Tđược chuyển thành 8 byte theo thứ tự big-endian. - Áp dụng HMAC-SHA1 với khoá bí mật làm tham số, dữ liệu đầu vào là 8 byte vừa rồi, tạo ra một chuỗi băm 20 byte.
- Cắt 4 byte cuối thành một số 32 bit, rồi lấy phần dư khi chia cho 108 để có một con số từ 0 đến 99.999.999.
- Thêm số 0 ở đầu cho tới 8 chữ số, rồi cắt lấy 6 chữ số cuối cùng — đây chính là mã OTP bạn nhìn thấy trong ứng dụng.
Điểm mấu chốt: máy chủ chỉ cần tính lại mã trong khoảng thời gian hiện tại và so sánh, chứ không cần tra cứu cơ sở dữ liệu. Nhờ vậy quá trình xác thực gần như tức thời, và dù máy chủ bị tấn công thì khoá bí mật vẫn được bảo vệ bởi lớp băm một chiều.

TOTP khác HOTP ở chỗ nào
TOTP là bản mở rộng của HOTP (HMAC-based One-Time Password) chuẩn RFC 4226. Sự khác biệt nằm ở nguồn tạo tính duy nhất: HOTP đếm số lần sự kiện, còn TOTP đếm thời gian. Đây là bảng so sánh nhanh:
| Tiêu chí | HOTP | TOTP |
|---|---|---|
| Nguồn tạo mã | Bộ đếm sự kiện | Thời gian hiện tại |
| Chu kỳ đổi mã | Mỗi lần sự kiện | 30 giây mặc định |
| Rủi ro lệch máy chủ | Cần đồng bộ bộ đếm | Chấp nhận sai số thời gian |
| Ứng dụng tiêu biểu | HOTP token vật lý | Google Authenticator, Aegis |
| Chuẩn tài liệu | RFC 4226 | RFC 6238 |
Vì mã đổi theo thời gian, TOTP chịu sai số đồng hồ. Chuẩn khuyến nghị cho phép kiểm tra một cửa sổ lệch (window) trước và sau khoảng thời gian hiện tại — thường là một bước mỗi bên, tức ±30 giây. Bù lại, bạn phải chấp nhận rằng nếu ai đó chụp màn hình mã OTP, mã đó vẫn dùng được trong vài giây.
Tại sao TOTP an toàn hơn SMS OTP
Trước đây, xác thực hai lớp qua tin nhắn SMS là lựa chọn mặc định. Ngày nay nhiều chuyên gia khuyến nghị chuyển sang TOTP hoặc khóa bảo mật (security key) vì những lý do cụ thể:
- Trung gian SMS-SSO có thể bị tấn công — kẻ tấn công có thể yêu cầu chuyển tiếp tin nhắn của bạn sang một số điện thoại khác mà không cần biết mật khẩu.
- SIM swap — thủ đoạn chuyển đổi SIM thường khiến tin nhắn xác thực đến số của kẻ tấn công.
- Phí và độ trễ — tin nhắn quốc tế có thể mất hàng giây đến hàng phút, trong khi mã TOTP xuất hiện tức thì và hoạt động offline.
- Không phụ thuộc sóng di động — ứng dụng TOTP chỉ cần đồng hồ hệ thống, vẫn sinh mã khi bạn ở trong máy băng thang hoặc ngoài trời không có sóng.
Tất nhiên, TOTP cũng có điểm yếu: nếu thiết bị bị chiếm đoạt hoặc malware đọc được màn hình, kẻ tấn công vẫn lấy được mã. Vì vậy bước bảo mật thứ hai thường nên ghép với một mật khẩu mạnh và khóa bảo mật phần cứng.
Cách tự thiết lập TOTP an toàn
Dù bạn là người dùng cuối hay lập trình viên, có vài thực hành đáng lưu lại:
- Lưu mã QR kích hoạt vào nơi an toàn. Nếu mất thiết bị mà không có bản sao lưu secret, bạn sẽ phải xác minh danh tính lại từ đầu.
- Lưu mã dự phòng (recovery codes) ở dạng in ra giấy, cất riêng, không chụp ảnh vào album chung.
- Đặt mã PIN ứng dụng nếu ứng dụng hỗ trợ, để kẻ trộm điện thoại không mở được danh sách tài khoản.
- Chọn ứng dụng mã nguồn mở và hoạt động offline như Aegis hoặc FreeOTP, tránh phụ thuộc một nhà cung cấp duy nhất.
- Với vai trò lập trình viên tích hợp đăng nhập, hãy dùng thư viện xác thực uy tín thay vì tự viết lại thuật toán HMAC. Bạn có thể tham khảo RFC 6238 để hiểu chi tiết từng bước.
Tóm lại, TOTP là sự cân bằng hợp lý giữa bảo mật và tiện lợi: chỉ cần một chiếc điện thoại đã có sẵn, bạn có lớp bảo vệ thứ hai chống lại việc mật khẩu bị lộ. Nếu tài khoản quan trọng như ví tiền mã hoá hay tài khoản quản trị, hãy nâng lên khóa bảo mật phần cứng — đó là bước xác thực thứ ba, không dựa vào bất kỳ thứ gì có thể sao chép.
