TOTP là gì? Xác thực hai lớp bảo vệ tài khoản an toàn hơn SMS

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.

Giao diện OATHAuth trên Firefox hiển thị mã OTP dựa trên thời gian, mỗi mã chỉ dùng được một lần trong 30 giâ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:

  1. 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.
  2. Giá trị T được chuyển thành 8 byte theo thứ tự big-endian.
  3. Á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.
  4. 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.
  5. 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.

Mã OTP gồm sáu chữ số do ứng dụng TOTP Authenticator sinh ra, kèm thanh thời gian đếm ngược đặt trên mã

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.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Ẩn dữ liệu nhạy cảm trong commit Git: Công cụ và quy trình đúng

Ẩn dữ liệu nhạy cảm trong commit Git là một trong những sai lầm phổ biến nhất của lập trình viên: đẩy API key, mật khẩu hoặc token lên kho…

Xem thêm

HAProxy là gì: Cân bằng tải và reverse proxy cho hệ thống

HAProxy là gì: Cân bằng tải và reverse proxy cho hệ thống HAProxy là phần mềm cân bằng tải và reverse proxy mã nguồn mở chạy ở tầng TCP và…

Xem thêm
Man hinh tmux voi nhieu khung chia va cua so

tmux là gì: Quản lý phiên terminal cho lập trình viên

tmux là gì? tmux là trình quản lý phiên terminal mã nguồn mở, cho phép bạn tạo nhiều cửa sổ và khung chia nhỏ trong cùng một terminal, đồng thời…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất