Giải thích mã QR TOTP 2FA
Phân tích kỹ thuật chuyên sâu về định dạng URI otpauth://, bí mật base32 và toán học TOTP theo RFC 6238.
TOTP là gì
TOTP (Time-based One-Time Password, RFC 6238) là thuật toán đứng sau Google Authenticator, Authy, 1Password, Bitwarden và mọi ứng dụng xác thực khác. Nó tạo ra mã 6 chữ số thay đổi mỗi 30 giây dựa trên bí mật chung và thời gian Unix hiện tại.
URI otpauth
otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30Lược đồ URI là otpauth://, loại là totp (tùy chọn khác là hotp, dựa trên bộ đếm), tiếp theo là nhãn, rồi các tham số truy vấn. Các ứng dụng xác thực phân tích URI này và thêm vào kho của người dùng bằng một lần quét.
Nhãn
Định dạng tùy chọn: Issuer:account@example.com. Tiền tố Issuer trùng lặp với tham số truy vấn issuer, nhưng hầu hết các ứng dụng đều nhận cả hai.
Bí mật
Chuỗi byte được mã hóa base32 (A-Z và 2-7, không có padding). Khuyến nghị ít nhất 128 bit, hầu hết máy chủ dùng 160 bit (32 ký tự base32). Không bao giờ mã hóa URL bí mật; để nguyên dạng base32 thô.
Thuật toán, chữ số, chu kỳ
algorithm: SHA1 (mặc định, được hỗ trợ rộng rãi), SHA256 hoặc SHA512. digits: 6 (mặc định) hoặc 8. period: 30 giây (mặc định) hoặc 60. Giữ nguyên giá trị mặc định trừ khi có lý do cụ thể, một số ứng dụng xác thực không triển khai các tùy chọn không mặc định.
Cách tính mã
Tại mỗi khoảng 30 giây, ứng dụng xác thực thực hiện: HMAC-SHA1(secret, floor(unix_time / 30)), lấy 4 bit cuối của HMAC làm độ lệch động, đọc 4 byte bắt đầu từ độ lệch đó, che 31 bit, rồi chia lấy dư cho 106 để thu được mã 6 chữ số.
Tạo bằng Abundera QR
Mở trình tạo TOTP, điền nhà phát hành (tên thương hiệu của bạn), tài khoản (email hoặc tên người dùng) và bí mật base32. Các giá trị mặc định cho thuật toán/chữ số/chu kỳ đúng với hầu hết mọi máy chủ. Tải PNG xuống và gửi qua email hoặc SMS cho người dùng, hoặc nhúng vào quy trình đăng ký của bạn.
Lưu ý về quyền riêng tư
Bí mật TOTP của bạn là thông tin xác thực dùng chung giữa máy chủ và người dùng. Abundera QR không bao giờ nhìn thấy nó. Tất cả quá trình mã hóa diễn ra trong trình duyệt. Đọc chính sách bảo mật đầy đủ.