TOTP & HOTP
TOTP (mật khẩu một lần dựa trên thời gian, RFC 6238) và HOTP (mật khẩu một lần dựa trên HMAC, RFC 4226) là hai RFC mà mọi QR đăng ký 2FA đều triển khai. Scheme URI otpauth:// được mã hóa là tiêu chuẩn thực tế của Google Authenticator, hoạt động với mọi ứng dụng xác thực lớn.
Đặc tả TOTP:RFC 6238 (dựa trên thời gian, 2011).
Đặc tả HOTP:RFC 4226 (dựa trên bộ đếm, 2005).
URI scheme:Google Authenticator Key URI Format, định dạng mà mọi ứng dụng xác thực đồng thuận.
Đặc tả HOTP:RFC 4226 (dựa trên bộ đếm, 2005).
URI scheme:Google Authenticator Key URI Format, định dạng mà mọi ứng dụng xác thực đồng thuận.
Tổng quan
QR đăng ký 2FA là URL theo scheme otpauth:// mang bí mật được chia sẻ cùng metadata nhận dạng. Định dạng:
otpauth://TYPE/LABEL?secret=SECRET&issuer=ISSUER&algorithm=ALG&digits=N&period=SEC- TYPE,
totp(dựa trên thời gian) hoặchotp(dựa trên bộ đếm). - LABEL,
Issuer:Account, URL-encoded. Ví dụ:GitHub:alice@example.com. - secret, khóa chia sẻ, mã hóa Base32 (bảng chữ cái RFC 4648 §6: A-Z, 2-7).
- issuer, tên dịch vụ hiển thị trong ứng dụng xác thực. Trùng lặp với label nhưng cải thiện UX cho các ứng dụng không phân tích label.
- algorithm,
SHA1(mặc định),SHA256hoặcSHA512. Mọi ứng dụng xác thực hỗ trợ SHA1; ít hơn hỗ trợ SHA256/SHA512. - digits,
6(mặc định) hoặc8. Hầu hết ứng dụng người tiêu dùng kỳ vọng 6 chữ số. - period, chỉ TOTP.
30(mặc định) hoặc60giây. HOTP dùng tham sốcounterthay thế.
Test vector chuẩn
| Trường hợp | Đầu vào | URI otpauth:// kỳ vọng |
|---|---|---|
| TOTP, tối giản (SHA1, 6 chữ số, 30 giây) | issuer=GitHub | otpauth://totp/GitHub:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub |
| TOTP, SHA256, 8 chữ số | issuer=Corp | otpauth://totp/Corp:bob?secret=JBSWY3DPEHPK3PXP&issuer=Corp&algorithm=SHA256&digits=8 |
| HOTP, counter=0 | issuer=YubiKey | otpauth://hotp/YubiKey:carol?secret=JBSWY3DPEHPK3PXP&issuer=YubiKey&counter=0 |
| TOTP, khóa tham chiếu RFC 6238 | issuer=Example | Khóa test chuẩn RFC (12345678901234567890). Tạo TOTP 94287082 tại T=59 giây. |
Trình xác thực bí mật Base32 trực tiếp
Các ứng dụng xác thực từ chối bí mật chứa bất kỳ ký tự nào ngoài bảng chữ cái Base32 (A-Z, 2-7). Dưới đây là cùng trình xác thực mà Abundera chạy inline trong bộ tạo TOTP, chạy trên trình duyệt.
Nhập bí mật để xác thực.
Những điểm dễ sai
- Base32 không phải Base64. Base64 dùng A-Z, a-z, 0-9, +, /. Nếu bí mật có chữ thường hoặc các chữ số 0, 1, 8, 9 thì đó là chuỗi Base64 và sẽ bị mọi ứng dụng xác thực tuân thủ từ chối.
- Độ dài bí mật. RFC 4226 §4 khuyến nghị ít nhất 128 bit (26 ký tự Base32) cho HOTP và 160 bit (32 ký tự) cho TOTP. Bí mật dưới 80 bit (16 ký tự) hợp lệ về mặt kỹ thuật nhưng bị gắn cờ yếu.
- Hỗ trợ thuật toán khác nhau. Google Authenticator bỏ qua tham số
algorithmvà luôn dùng SHA1. Để SHA256/SHA512 thực sự có hiệu lực, người dùng phải dùng 1Password, Authy, Bitwarden hoặc Microsoft Authenticator. - Hỗ trợ số chữ số khác nhau. Hầu hết ứng dụng xác thực bỏ qua
digits=8và cắt về 6 một cách lặng lẽ. Nếu OTP 8 chữ số quan trọng, hãy kiểm tra ứng dụng xác thực mục tiêu trước khi triển khai. - Mã hóa URL cho label. Các ký tự đặc biệt trong issuer hoặc tài khoản (
:,@, khoảng trắng) phải được percent-encode trong label, nếu không các ứng dụng xác thực cũ hơn sẽ bỏ label hoàn toàn. Abundera xử lý tự động. - Không bao giờ tái sử dụng bí mật. Mỗi tài khoản cần một bí mật ngẫu nhiên mật mã mới. Tái sử dụng bí mật qua các dịch vụ nghĩa là một lần bị xâm phạm, tất cả đều thất bại.
- Lưu trữ quan trọng hơn QR. QR là bootstrap một lần. Ứng dụng xác thực lưu bí mật sau lần quét đầu tiên. Nếu bí mật đó sau này được xuất dưới dạng văn bản thuần (một số ứng dụng làm vậy), một lần rò rỉ đĩa là mất toàn bộ 2FA.
Tương thích ứng dụng xác thực
| Ứng dụng | TOTP SHA1 | TOTP SHA256/512 | HOTP | 8 chữ số | Ghi chú |
|---|---|---|---|---|---|
| Google Authenticator | Có | Bỏ qua | Có | Bỏ qua | Chuẩn mực thực tế. Luôn là mục tiêu đầu tiên. |
| 1Password | Có | Có | Có | Có | Hỗ trợ RFC đầy đủ. |
| Authy | Có | Có | Không | Có | Bỏ HOTP trong phiên bản mới. |
| Bitwarden | Có | Có | Có | Có | Hỗ trợ RFC đầy đủ. |
| Microsoft Authenticator | Có | Có | Có | Có | Hỗ trợ RFC đầy đủ. |
| YubiKey Authenticator | Có | Có | Có | Có | HOTP là chế độ chuẩn của YubiKey OATH. |
| Duo Mobile | Có | Bỏ qua | Không | Bỏ qua | Dùng luồng push riêng; TOTP chỉ là fallback. |
Xem thêm
- /totp-2fa-qr-code/, bộ tạo TOTP với trình xác thực Base32 tích hợp.
- /hotp-qr-code/, biến thể HOTP dựa trên bộ đếm.
- /standards/, quay lại mục lục tiêu chuẩn.