Chuyển đến nội dung
Novaz AuthenticatorNHẬN

Mã 2FA hoạt động như thế nào? Giải thích về TOTP

Bởi nhóm Novaz · Cập nhật 29 tháng 10, 2026
Các bước trong Novaz được kiểm tra trên phiên bản 1.0.5

Bản dịch từ hướng dẫn tiếng Anh. Trên trang web của dịch vụ, nút và menu có thể mang tên hơi khác trong ngôn ngữ của bạn.

Trong trang này
  1. Thành phần 1: khóa cài đặt
  2. Thành phần 2: thời gian, được đếm theo bước
  3. Kết hợp chúng thành một mã
  4. Vì sao trang web chấp nhận mã
  5. Các thông số mà dịch vụ có thể thay đổi
  6. TOTP và HOTP
  7. Những gì TOTP không chống được
  8. Trong Authenticator App - Novaz

Ứng dụng xác thực và trang web mỗi bên đều tính ra cùng một con số 6 chữ số từ hai thứ mà cả hai cùng có: một khóa bí mật đã được chia sẻ một lần, và thời gian hiện tại. Khi bạn đăng nhập, không có gì được gửi qua lại giữa hai bên. Đó là lý do mã vẫn hoạt động khi không có sóng, và vì sao mã đổi mỗi 30 giây. Phương pháp này gọi là TOTP (time-based one-time password, mật khẩu dùng một lần theo thời gian), và là một tiêu chuẩn mở (RFC 6238).

Thành phần 1: khóa cài đặt

Khi bạn bật 2FA, trang web tạo ra một bí mật ngẫu nhiên và hiển thị cho bạn dưới dạng mã QR, kèm một bản dạng chữ gọi là khóa cài đặt. Ứng dụng của bạn lưu lại khóa này. Từ đó trở đi, trang web và ứng dụng của bạn cùng có một khóa giống nhau, và không ai khác được phép có.

Mã QR chỉ là một liên kết theo định dạng chuẩn, otpauth://totp/…, chứa khóa, tên dịch vụ, tên tài khoản của bạn và có thể kèm các thông số mô tả bên dưới. Công cụ giải mã QR 2FA của chúng tôi cho bạn thấy bên trong một mã QR có gì.

Thành phần 2: thời gian, được đếm theo bước

Cả hai bên lấy thời gian hiện tại tính bằng số giây kể từ ngày 1 tháng 1 năm 1970 (thời gian Unix) rồi chia cho 30, bỏ phần dư. Kết quả là một số nguyên tăng thêm một sau mỗi 30 giây. RFC 6238 gọi số này là T và khuyến nghị "a default time-step size of 30 seconds" (bước thời gian mặc định là 30 giây).

Kết hợp chúng thành một mã

Ứng dụng đưa khóa và T qua HMAC, một hàm mật mã học, thường dùng SHA-1. Sau đó nó rút gọn kết quả thành một con số ngắn, theo phương pháp được định nghĩa trong tiêu chuẩn HOTP (RFC 4226, mục 5.3):

  1. 4 bit cuối của kết quả HMAC chọn ra một vị trí trong đó.
  2. Ứng dụng lấy 31 bit bắt đầu từ vị trí đó, dưới dạng một số.
  3. Ứng dụng giữ lại 6 chữ số cuối của số đó. Một số dịch vụ dùng 8 chữ số.

Đổi khóa hoặc bước thời gian là bạn có một mã hoàn toàn khác. Không thể suy ngược từ mã ra khóa.

Try it: a live TOTP code

Calculated in your browser from an example key. Don't paste a real setup key here.

Current code

…

Previous: …

Next: …

Unix time
…
Time step T = ⌊time ÷ 30⌋
…
Seconds left
…

Vì sao trang web chấp nhận mã

Trang web thực hiện đúng phép tính đó với bản sao khóa của họ và đồng hồ của chính họ. Nếu hai con số khớp nhau, bạn đăng nhập được. Có hai chi tiết giúp việc này chạy được trong thực tế:

  • Một chút dung sai cho độ trễ. Mã bạn nhập vào cuối một bước có thể đến nơi ở bước tiếp theo. RFC 6238 khuyến nghị "at most one time step is allowed as the network delay" (cho phép tối đa một bước thời gian cho độ trễ mạng), nên nhiều trang web cũng chấp nhận mã liền trước mã hiện tại.
  • Mỗi mã chỉ dùng được một lần. Tiêu chuẩn quy định máy chủ "MUST NOT accept the second attempt" (KHÔNG ĐƯỢC chấp nhận lần thử thứ hai) với một mã đã được chấp nhận. Hướng dẫn của NIST tại Mỹ cũng nói vậy: bên xác minh "SHALL accept a given OTP only once while it is valid" (CHỈ ĐƯỢC chấp nhận một OTP một lần trong thời gian nó còn hiệu lực) (NIST SP 800-63B-4).

Đó cũng là lý do đồng hồ sai làm mã không dùng được. Nếu iPhone của bạn lệch một phút, nó đang tính mã cho một bước thời gian khác với bước của trang web. Xem Mã xác thực không hoạt động?

Các thông số mà dịch vụ có thể thay đổi

Các tiêu chuẩn cho phép một số biến thể, và mã QR có thể mang theo chúng:

Thông số Giá trị thường dùng Cũng được phép
Hàm băm SHA-1 SHA-256, SHA-512 (RFC 6238, mục 1.2)
Số chữ số 6 7 hoặc 8 (RFC 4226, mục 5.3)
Chu kỳ 30 giây Các độ dài khác

Nếu một dịch vụ dùng thông số khác thường, hãy thêm tài khoản bằng cách quét mã QR thay vì gõ khóa, để ứng dụng nhận được cả thông số.

TOTP và HOTP

HOTP, tiêu chuẩn cũ hơn, dùng một bộ đếm tăng lên mỗi lần bạn yêu cầu mã, thay vì dùng thời gian. TOTP chính là HOTP với bước thời gian làm bộ đếm: "TOTP = HOTP(K, T)". Ngày nay hầu hết các trang web dùng TOTP.

Những gì TOTP không chống được

Vì bạn tự nhập mã, một trang đăng nhập giả đủ thuyết phục có thể hỏi mã và dùng nó ngay lập tức. NIST nói rõ: "OTP authentication is not phishing-resistant" (xác thực bằng OTP không chống được lừa đảo giả mạo). Mã khóa và khóa bảo mật thì chống được. Xem thêm trong Ứng dụng xác thực hay SMS.

Trong Authenticator App - Novaz

Novaz tạo mã TOTP tiêu chuẩn ngay trên iPhone của bạn:

  • Từ mã QR: SHA-1, SHA-256 hoặc SHA-512; 6 đến 8 chữ số; chu kỳ từ 1 đến 300 giây.
  • Từ khóa nhập bằng tay: luôn là 6 chữ số, 30 giây và SHA-1.

Novaz không tạo mã HOTP. Ứng dụng cũng kiểm tra đồng hồ iPhone và cảnh báo bạn khi đồng hồ lệch từ 15 giây trở lên.