Ngân hàng Nhà nước Việt Nam đã siết chặt quy định về xác thực giao dịch trực tuyến, yêu cầu ngân hàng và ví điện tử áp dụng xác thực hai yếu tố cho các giao dịch vượt một ngưỡng nhất định. Nhiều năm liền, phần lớn dựa vào OTP qua SMS, nhưng gian lận đánh tráo SIM ngày càng phổ biến đã thúc đẩy các ứng dụng chuyển sang mã kiểu TOTP tạo ngay trên thiết bị, nơi bí mật không bao giờ đi qua mạng của nhà mạng.
Một bí mật chung cộng với thời gian
Trong quá trình thiết lập, máy chủ và ứng dụng xác thực trao đổi một khóa bí mật chung duy nhất (chính xác đó là những gì được mã hóa trong mã QR). Sau đó, cả hai bên độc lập tính một HMAC từ bí mật đó và thời gian unix hiện tại, được làm tròn theo khoảng 30 giây — đi đến cùng một mã mà không cần giao tiếp với nhau.
Vì sao điều này hoạt động không cần internet
Vì mã được tính cục bộ từ bí mật và đồng hồ hệ thống của thiết bị, ứng dụng xác thực không cần kết nối mạng để tạo mã. Yêu cầu duy nhất là đồng hồ của máy chủ và điện thoại phải đồng bộ trong một khoảng sai lệch nhỏ cho phép (thường là ±30–60 giây).
Vì sao mã thay đổi mỗi 30 giây
Khoảng thời gian ngắn giới hạn cửa sổ mà một mã bị chặn vẫn còn hợp lệ, giảm nguy cơ nó bị kẻ tấn công tái sử dụng. Máy chủ thường chấp nhận khoảng hiện tại cộng với một khoảng trước đó để bù cho độ trễ mạng nhỏ khi nhập mã.
Vì sao cần điều này
- Hiểu cơ chế xác thực hai yếu tố khi thiết lập hoặc khắc phục sự cố với ứng dụng xác thực.
- Kiểm thử việc triển khai TOTP của riêng bạn khi phát triển một hệ thống xác thực.
- Tạo mã cho việc kiểm thử tự động mà không cần nhập thủ công từ điện thoại.
TOTP không bảo vệ được điều gì
TOTP bảo vệ tốt trước việc đánh cắp mật khẩu tách biệt khỏi mã, nhưng không chống được lừa đảo thời gian thực: nếu nạn nhân nhập cả mật khẩu lẫn mã TOTP hiện tại trên một trang giả mạo, kẻ tấn công có thể lập tức sử dụng cả hai giá trị đó trên trang thật trong khi mã vẫn còn hiệu lực. Chỉ có khóa bảo mật phần cứng theo chuẩn FIDO2/WebAuthn, được gắn chặt về mặt mật mã học với một tên miền cụ thể, mới chống được kiểu tấn công này.