Hệ thống xác thực thách thức - phản hồi (challenge-response) dùng HMAC-SHA256 hoạt động như sau: với khoá bí mật K (hex) và một chuỗi thách thức c (chuỗi ASCII không chứa khoảng trắng) do máy chủ gửi cho client, phản hồi đúng là
r=HMAC-SHA256(K,c)
biểu diễn dưới dạng chuỗi hex (không phân biệt hoa/thường khi so sánh).
Máy chủ theo dõi số lần phản hồi sai liên tiếp (bộ đếm lỗi): mỗi lần client phản hồi sai, bộ đếm tăng thêm 1; mỗi lần phản hồi đúng, bộ đếm được đặt lại về 0. Ngay khi bộ đếm đạt tới 3, tài khoản bị khoá vĩnh viễn — từ thời điểm đó trở đi, mọi lượt thử tiếp theo đều bị từ chối ngay lập tức (không kiểm tra phản hồi nữa), bất kể phản hồi gửi lên đúng hay sai.
Cho khoá K và danh sách m lượt thử theo đúng thứ tự thời gian (mỗi lượt gồm một thách thức ci và phản hồi ri mà client gửi lên), hãy in ra kết quả của từng lượt:
OK nếu phản hồi đúng và tài khoản chưa bị khoá tại thời điểm đó.FAIL nếu phản hồi sai và tài khoản chưa bị khoá tại thời điểm đó (kể cả nếu lượt sai này chính là lượt khiến tài khoản bị khoá).LOCKED nếu tài khoản đã bị khoá từ trước lượt thử này.Gồm 2+m dòng:
c_i r_i — thách thức (chuỗi không chứa khoảng trắng) và phản hồi hex mà client gửi.m dòng, mỗi dòng là kết quả (OK, FAIL hoặc LOCKED) của lượt thử tương ứng theo đúng thứ tự. Nếu m=0 thì không in gì.
Ví dụ:
Đầu vào:
deadbeef
4
ch1 0000000000000000000000000000000000000000000000000000000000000000
ch2 0000000000000000000000000000000000000000000000000000000000000000
ch3 41024a3a3b8c65b34db48a44b6c1dc36bf5b260c15a058c9c11076b2c4d45bdf
ch4 0000000000000000000000000000000000000000000000000000000000000000
Đầu ra:
FAIL
FAIL
OK
FAIL
Đầu vào:
deadbeef
3
ch1 df9f74efb8205b3fb33cca761b820397e96eedeac1884457047142f9c53e698a
ch2 ec3eff3dc6291b6a4380bb295f1c4fbfed110cca887c0da6fe878538684bba54
ch3 41024a3a3b8c65b34db48a44b6c1dc36bf5b260c15a058c9c11076b2c4d45bdf
Đầu ra:
OK
OK
OK
Đang tải editor...