Công cụ này làm gì
Các ứng dụng xác thực hai yếu tố như Google Authenticator, Microsoft Authenticator và 1Password hiển thị mã sáu chữ số đổi sau mỗi 30 giây. Mỗi mã là một mật khẩu dùng một lần được tính từ khóa bí mật dùng chung: TOTP (RFC 6238) dùng thời gian, còn HOTP (RFC 4226) dùng bộ đếm. Công cụ này tính đúng các mã đó từ khóa bí mật, giúp bạn kiểm thử thiết lập 2FA, gỡ lỗi phần triển khai trên máy chủ hoặc xem một mã lẽ ra phải là gì.
Kết quả gồm mã hiện tại kèm đồng hồ đếm ngược, cùng mã trước và mã tiếp theo, vốn thường được máy chủ chấp nhận để bù sai lệch đồng hồ nhỏ.
Cách sử dụng
- Dán khóa bí mật Base32 (chữ A–Z và số 2–7; khoảng trắng và chữ hoa/thường không quan trọng) hoặc dán nguyên URI
otpauth://từ mã QR. Nhấn Ví dụ để thử. - Chọn TOTP hoặc HOTP, rồi đặt thuật toán, số chữ số và bước thời gian khớp với tài khoản. Cài đặt trong URI otpauth được ưu tiên.
- Với HOTP, nhập bộ đếm và dùng Bộ đếm +1 để xem lần lượt các mã.
- Sao chép mã hiện tại. Đồng hồ đếm ngược cho biết mã còn hiệu lực bao lâu.
Ví dụ
Khóa minh họa JBSWY3DPEHPK3PXP là dạng Base32 của các byte “Hello!” theo sau là 0xDEADBEEF. URI dưới đây, đúng như được mã hóa trong mã QR, mô tả một tài khoản dùng khóa này với cài đặt mặc định:
otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example&algorithm=SHA1&digits=6&period=30
Tại thời gian Unix 1700000000, khóa này cho mã 324 550 và cửa sổ thời gian còn 10 giây.
Mã được tính như thế nào
Khóa bí mật được giải mã từ Base32 thành byte. Với TOTP, bộ đếm là thời gian Unix tính bằng giây chia cho bước thời gian rồi làm tròn xuống. Bộ đếm được ghi thành 8 byte và ký HMAC bằng khóa bí mật. Phép cắt động chọn 4 byte từ kết quả HMAC dựa trên nửa byte cuối, rồi số được rút gọn về số chữ số yêu cầu, giữ nguyên các số 0 ở đầu.
Câu hỏi thường gặp
› Vì sao mã của tôi không khớp với mã trong ứng dụng xác thực?
Mã TOTP phụ thuộc vào đồng hồ, nên trước hết hãy kiểm tra thời gian trên thiết bị được đặt tự động. Sau đó kiểm tra thuật toán, số chữ số và bước thời gian có khớp với tài khoản không. Hầu hết dịch vụ dùng SHA-1, 6 chữ số và 30 giây, và ứng dụng xác thực bỏ qua các cài đặt khác trừ khi mã QR ghi rõ.
› TOTP và HOTP khác nhau thế nào?
TOTP (RFC 6238) dùng thời gian hiện tại chia cho bước thời gian làm bộ đếm, nên mã đổi sau mỗi 30 giây. HOTP (RFC 4226) dùng một bộ đếm tăng thêm một mỗi khi dùng một mã. Cả hai đều đưa khóa bí mật và bộ đếm qua HMAC rồi lấy 6 đến 8 chữ số cuối.
› Khóa bí mật của tôi có bị lưu hoặc gửi đi đâu không?
Không. Mã được tính trong trình duyệt bằng Web Crypto API. Khóa bí mật không được lưu, không ghi vào thanh địa chỉ và không có trong liên kết chia sẻ; liên kết chia sẻ chỉ chứa cài đặt. Dù vậy, khóa 2FA cho toàn quyền với yếu tố thứ hai, nên chỉ dán khóa của chính bạn.
› Tôi có thể dùng công cụ này khi thêm xác thực hai yếu tố vào ứng dụng của mình không?
Có. Nhấn Khóa ngẫu nhiên để tạo khóa Base32 160 bit, đưa nó vào URI otpauth:// hoặc mã QR cho người dùng, rồi so sánh mã máy chủ tạo ra với mã hiển thị ở đây. Máy chủ thường chấp nhận cả mã trước và mã tiếp theo để bù sai lệch đồng hồ.