Bộ tạo TOTP
Mỗi khi Google Authenticator hay Authy hiển thị một mã sáu chữ số thay đổi sau mỗi 30 giây, đó chính là TOTP: một giá trị HMAC được tính từ khóa bí mật dùng chung và thời gian Unix hiện tại, đã được chuẩn hóa trong RFC 6238. Bộ tạo này tính ra đúng các mã đó từ bất kỳ khóa bí mật Base32 nào, rất tiện để gỡ lỗi một tích hợp xác thực hai yếu tố (2FA) mới, tìm hiểu vì sao một dịch vụ từ chối mã của bạn, hoặc quan sát thuật toán phản ứng thế nào với các tham số khác nhau. Hãy chỉ dùng khóa thử nghiệm: mã được tính trên máy chủ của chúng tôi, nên các khóa bí mật thật đang bảo vệ tài khoản của bạn phải nằm trong ứng dụng xác thực, không phải trên bất kỳ trang web nào.
Bộ tạo TOTP này hoạt động như thế nào
-
1
Dán khóa bí mật Base32
Gồm chữ cái A-Z và chữ số 2-7, đúng định dạng bên trong mã QR otpauth://. Khoảng trắng và chữ thường không sao; ký tự khác sẽ bị báo là Base32 không hợp lệ.
-
2
Chọn thuật toán băm
Hầu hết mọi dịch vụ dùng SHA-1; chỉ chuyển sang SHA-256 hoặc SHA-512 khi dịch vụ yêu cầu rõ ràng.
-
3
Đặt số chữ số và chu kỳ
Chọn 6, 7 hoặc 8 chữ số và cửa sổ 30 hoặc 60 giây. Tổ hợp tiêu chuẩn là 6 chữ số mỗi 30 giây.
-
4
Đọc mã hiện tại
Mã được làm mới mỗi giây, và bộ đếm ngược cho biết cửa sổ hiện tại còn lại bao nhiêu giây.
-
5
So sánh URI otpauth
Công cụ hiển thị URI otpauth:// tương ứng với các tham số của bạn, để bạn đối chiếu với nội dung mà mã QR thiết lập của dịch vụ mã hóa.
Giải thích thuật toán một cách đơn giản
TOTP là HOTP (mật khẩu dùng một lần dựa trên HMAC, RFC 4226) trong đó bộ đếm được thay bằng thời gian Unix hiện tại chia cho bước thời gian (thường là 30 giây):
counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits
Thiết bị của bạn và máy chủ thực hiện cùng một phép tính trên cùng một khóa bí mật và cùng một đồng hồ, nên cả hai cho ra cùng một mã mà mã đó chưa bao giờ phải truyền đi đâu cả. Mã 6 chữ số đơn giản là HMAC đã cắt gọn lấy phần dư theo 10^6. Không có phép màu, chỉ là băm.
Các tham số thường gặp
| Dịch vụ | Thuật toán | Chữ số | Chu kỳ |
|---|---|---|---|
| Hầu hết website và ứng dụng | SHA-1 | 6 | 30 giây |
| GitHub | SHA-1 | 6 | 30 giây |
| Cloudflare | SHA-1 | 6 | 30 giây |
| Tài khoản Microsoft | SHA-1 | 6 | 30 giây |
| Một số ngân hàng và VPN doanh nghiệp | SHA-256 hoặc SHA-512 | 8 | 60 giây |
Nếu một dịch vụ từ chối mã của bạn, hãy kiểm tra số chữ số và chu kỳ trước, rồi mới đến thuật toán. Cũng cần lưu ý rằng một số ứng dụng xác thực âm thầm bỏ qua các tham số không mặc định (Google Authenticator trước đây coi mọi thứ là SHA-1, 6 chữ số, 30 giây), vì vậy hãy luôn thử với đúng ứng dụng mà người dùng của bạn sẽ dùng.
Cất giữ khóa bí mật an toàn
- Không bao giờ gửi khóa bí mật 2FA qua email hay tin nhắn. Một khi đã nằm trong hộp thư, nó sẽ tồn tại vô thời hạn trong nhật ký và bản sao lưu của nhà cung cấp.
- Đăng ký bằng cách quét mã QR. Mã QR chứa một URI
otpauth://totp/...gói khóa bí mật, thuật toán, số chữ số và chu kỳ vào một khối duy nhất, không thể hiểu nhầm. - Sao lưu ngay lúc đăng ký. Lưu mã khôi phục, hoặc chính khóa bí mật, vào trình quản lý mật khẩu; mất điện thoại mà không có chúng là bạn bị khóa ngoài tài khoản.
- Mỗi dịch vụ một khóa riêng. Dịch vụ nào cũng phát hành khóa bí mật riêng khi thiết lập; nếu một khóa bị lộ, hãy đăng ký lại 2FA ở đó để khóa cũ hết hiệu lực.
Lệch thời gian
TOTP chỉ hoạt động khi hai đồng hồ khớp nhau. Trang này tính mã bằng đồng hồ của máy chủ, nên nếu mã ở đây khác với ứng dụng xác thực trên điện thoại, nghi phạm đầu tiên là đồng hồ của thiết bị. Đa số hệ thống kiểm tra chấp nhận lệch một cửa sổ về mỗi phía (30 đến 60 giây); vượt quá mức đó, hãy đồng bộ đồng hồ thiết bị qua NTP trước khi đổ lỗi cho khóa bí mật.
Chỉ dùng khóa thử nghiệm tại đây
Công cụ này tính mã trên máy chủ của chúng tôi: khóa bí mật bạn nhập được truyền qua HTTPS ở mỗi lần cập nhật, và cũng xuất hiện trong URL của trang khi bạn di chuyển giữa các bước của công cụ. Điều đó hoàn toàn ổn cho phát triển, demo và gỡ lỗi với các khóa dùng xong bỏ. Nhưng đây không phải chỗ cho khóa bí mật thật đang bảo vệ email hay tài khoản ngân hàng của bạn; những khóa đó phải nằm trong ứng dụng xác thực chuyên dụng trên điện thoại. Nếu bạn đã lỡ dán một khóa thật ra ngoài ứng dụng xác thực, hãy đăng ký lại 2FA ở dịch vụ đó để thay khóa.
Câu hỏi thường gặp
Hãy coi trang này là công cụ dành cho lập trình và kiểm thử, không phải két sắt. Mã được tính ở phía máy chủ, nên khóa bí mật đi đến máy chủ của chúng tôi qua HTTPS và có thể xuất hiện trong URL của trang giữa các bước. Cứ thoải mái dùng khóa demo hoặc khóa phát triển; tuyệt đối không dán khóa thật của tài khoản mà bạn coi trọng. Nếu đã lỡ dán, hãy đăng ký lại 2FA ở dịch vụ đó để thay khóa.
Kiểm tra tham số trước: thuật toán, số chữ số và chu kỳ phải trùng khớp hoàn toàn với những gì dịch vụ đã cấp. Sau đó kiểm tra đồng hồ: trang này dùng đồng hồ máy chủ, nên nếu lệch thì thường là do thiết bị còn lại. Cuối cùng, nhớ rằng một số ứng dụng bỏ qua tham số không mặc định; ví dụ kinh điển là Google Authenticator.
Chỉ Base32: chữ cái từ A đến Z và chữ số từ 2 đến 7, có thể kèm ký tự đệm =. Khoảng trắng được loại bỏ và chữ thường được chuyển đổi tự động. Khóa dạng hex hoặc byte thô phải được chuyển sang Base32 trước, nếu không công cụ sẽ báo khóa Base32 không hợp lệ.
Bạn sẽ bị khóa ngoài 2FA của tài khoản đó. Hãy dùng quy trình khôi phục của dịch vụ (mã khôi phục, xác minh danh tính, phương án SMS dự phòng). Khi thiết lập, luôn cất mã khôi phục hoặc mã QR ban đầu ở nơi an toàn.
Có. Hãy tạo một khóa bí mật ngẫu nhiên ở phía máy chủ, tối thiểu 128 bit (RFC 4226 khuyến nghị 160), hiển thị nó đúng một lần dưới dạng mã QR, rồi xác thực mã người dùng gửi lên bằng cách tính cùng một HMAC, thường chấp nhận lệch một cửa sổ về mỗi phía. Thư viện trưởng thành có cho mọi nền tảng: pyotp (Python), otplib (JavaScript), rotp (Ruby).
Công cụ liên quan
Mật mã số sang chữ
Chuyển số thành chữ cái và ngược lại bằng mật mã A=1, B=2 (A1Z26) cho câu đố, đố mẹo và manh mối escape room.
Bộ tạo mã API ngẫu nhiên
Tạo khóa API 8–128 ký tự trên máy chủ ở dạng hex, base64url hoặc chữ và số, hoặc tạo UUIDv4.
Bộ mã hóa mật mã Polybius
Mã hóa chữ cái Latinh thành tọa độ Polybius hoặc giải mã các cặp cách nhau bằng lưới I/J cố định 5×5.
Trình tạo Hash SHA512
Tạo hash SHA-512 của mọi văn bản dưới dạng chuỗi thập lục phân 128 ký tự chữ thường. Miễn phí và nhanh, lý tưởng cho tổng kiểm tra và kiểm tra toàn vẹn dữ liệu.
Bộ tạo giá trị hash SHA1
Tạo các giá trị hash SHA-1 (gồm 40 ký tự thập lục phân) từ bất kỳ văn bản đầu vào nào. Có ích cho các giá trị kiểm tra tính toàn vẹn cũ, ID đối tượng Git và các kiểm tra tính toàn vẹn không liên quan đến bảo mật.
Bộ tạo mã SHA256
Tạo các giá trị hash SHA-256 từ bất kỳ văn bản nào. Kết quả là chuỗi thập lục phân 64 ký tự – sử dụng cùng một thuật toán như trong địa chỉ Bitcoin, chứng chỉ TLS và chữ ký JWT.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- TOTPジェネレーター [JA]
- TOTP-generator [NL]
- Generador TOTP [ES]
- Gerador TOTP [PT]
- Generator TOTP [ID]
- TOTP-Generator [DE]
- TOTP-generator [SV]
- مولد TOTP [AR]
- Generator TOTP [PL]
- TOTP 생성기 [KO]
- ตัวสร้าง TOTP [TH]
- Générateur TOTP [FR]
- TOTP Generator [EN]
- Generatore TOTP [IT]
- Генератор TOTP [RU]
- TOTP Üretici [TR]
- TOTP 生成器 [ZH]