Bài kiểm tra gõ phím phát hiện gian lận thế nào? Cách chúng tôi kiểm tra

Bài kiểm tra gõ phím phát hiện gian lận bằng cách kiểm tra nhật ký gõ phím đằng sau mỗi điểm số. Trang của chúng tôi tính lại mọi kết quả từ nhật ký gõ phím, kiểm tra mã băm, kiểm tra cấu trúc và nhịp thời gian của nhật ký, và giữ lại khỏi bảng xếp hạng công khai mọi kết quả tính giờ trên 130 WPM có nhịp gõ trông bất thường, cho đến khi bạn vượt qua một bài kiểm tra lại. Kiểm tra nhịp gõ bắt được những bot cẩu thả; bài kiểm tra lại buộc một bot cẩn thận phải làm lại tất cả từ đầu.

Con bot đầu tiên vượt qua được các bước kiểm tra nhịp gõ của chúng tôi lại là bot của chính chúng tôi.

Hàm hỗ trợ kiểm thử end-to-end của chúng tôi nhấn phím với khoảng cách cố định 40 ms, vì đó là việc một script kiểm thử vẫn làm. Máy chủ tính lại kết quả, xác nhận mã băm, và chấm lượt gõ đó là đáng ngờ: độ biến thiên giữa các lần gõ phím bằng không, rollover bằng không, thời gian giữ phím y hệt nhau. Chúng tôi phải thêm độ dao động ngẫu nhiên cho từng từ và thỉnh thoảng có những quãng dừng "suy nghĩ" 80 đến 300 ms thì bộ kiểm thử của chính mình mới gửi được một kết quả trông giống người thật. Tùy chọn đó vẫn còn trong mã nguồn, mang tên humanLike.

Các bước kiểm tra hiệu quả với bất cứ thứ gì không cố tình vượt qua, còn thứ gì cố tình thì có thể vượt qua, nên thiết kế đặt sức nặng thực sự vào bài kiểm tra lại.

Bước một: tính lại mọi thứ

Trình duyệt của bạn không gửi cho chúng tôi một con số WPM. Nó gửi nhật ký gõ phím (mọi sự kiện keydown, keyup, input và composition, có dấu thời gian theo đồng hồ đơn điệu performance.now()), các chỉ số nó đã tính, và một mã băm SHA-256 của kết quả ở dạng chuẩn hóa.

Máy chủ chạy cùng đoạn mã tính chỉ số trên nhật ký đó và so sánh. Nếu bất kỳ con số nào lệch quá 0,01, kết quả bị từ chối với lý do metrics_mismatch. Nếu mã băm không khớp, kết quả bị từ chối với lý do hash_mismatch. Một tiện ích trình duyệt sửa ô WPM, kiểu gian lận phổ biến nhất trên những trang tin tưởng phía máy khách, sẽ thất bại ở đây. Cùng những hàm đó tạo ra con số trên màn hình của bạn và trong cơ sở dữ liệu, đó là lý do trang chỉ số của chúng tôi có thể cam kết ví dụ minh họa ở đó cho ra đúng kết quả đến hai chữ số thập phân.

Sao không tính giờ bài kiểm tra trên máy chủ? Khi đó điểm của bạn sẽ bao gồm cả mạng. Mỗi lần gõ phím sẽ đến chỗ chúng tôi trễ một chút, với mức trễ thay đổi theo kết nối của bạn, và một người gõ nhanh trên đường truyền chậm sẽ mất đi tốc độ mà họ thực sự có. Nhật ký cho chúng tôi đồng hồ của máy khách để đảm bảo chính xác và phép tính lại trên máy chủ để đảm bảo trung thực.

Bước hai: nhật ký có hợp lý không?

Trước mọi phân tích về nhịp gõ là những bước kiểm tra đơn giản về hình dạng của bài nộp:

  • Bài kiểm tra phải kéo dài ít nhất 15 giây hoặc 10 từ. Những lượt ngắn hơn quá nhiễu để xếp hạng và dễ thổi phồng nhất.
  • Một kết quả không thể đến trước khi bài kiểm tra có thể kết thúc: thời điểm bắt đầu cộng với độ dài của chính nó. Một kết quả 60 giây đến nơi hai mươi giây sau khi bắt đầu là chuyện không thể xảy ra.
  • Số sự kiện phải khớp với số ký tự đã gõ.
  • Trên máy tính, mọi sự kiện input phải theo sau một sự kiện keydown trong vòng 50 ms. Điều này bắt được văn bản dán vào, sự kiện input do script tạo ra và hầu hết công cụ chèn phím, vốn đưa văn bản vào mà không có phím vật lý nào. Việc gõ qua bộ gõ IME (IME composition) được miễn, và kết quả trên điện thoại không xuất hiện trên bảng xếp hạng công khai.
  • Một nhật ký không có điểm bắt đầu, không có điểm kết thúc hoặc có dấu thời gian không đơn điệu là nhật ký hỏng và bị từ chối ngay.

Không có gì trong số này tinh vi cả, nhưng nó loại bỏ phần lớn số lượng.

Bước ba: nhịp gõ phím có thể tiết lộ điều gì?

Đây là phần chúng tôi cố ý không công bố đầy đủ: danh sách đặc trưng thì công khai, còn ngưỡng và trọng số thì không. Một ngưỡng được công bố là một mục tiêu. Nếu chúng tôi nói "độ lệch chuẩn dưới N mili giây sẽ bị gắn cờ", phiên bản tiếp theo của mọi script sẽ dùng N cộng một. Các đặc trưng chúng tôi chấm điểm:

Khoảng cách trung bình giữa các phím và mức độ dao động của nó. Con người gõ phím không đều. Trong nghiên cứu năm 2018 của Dhakal và cộng sự trên 168.960 người gõ, khoảng cách trung bình giữa hai phím là khoảng 239 ms với độ lệch chuẩn khoảng 112 ms. Một script gõ với khoảng cách cố định gần như không có dao động; một nghiên cứu năm 2025 trên arXiv về CAPTCHA dựa trên nhịp gõ phím đã thấy đúng điều đó ở bot thử nghiệm của họ, vốn gõ với độ trễ cố định 50 ms. Đây là tín hiệu mạnh nhất của chúng tôi, và cũng là tín hiệu mà hàm hỗ trợ của chúng tôi đã vấp phải.

Tỷ lệ khoảng cách dưới 40 ms. Một khoảng cách 40 ms, duy trì liên tục, là 1.500 ký tự mỗi phút, tức 300 WPM nếu tính năm ký tự mỗi từ. Ngón tay vẫn tạo ra những khoảng cách ngắn như vậy khi nhấn chồng phím trong lúc rollover, nên một khoảng cách ngắn chẳng nói lên điều gì. Một nhật ký mà phần lớn khoảng cách đều ngắn như thế thì không phải là gõ phím.

Thời gian giữ phím. Ngón tay thật dao động hàng chục mili giây; sự kiện tổng hợp thường có thời gian giữ phím y hệt nhau hoặc gần bằng không, vì công cụ phát keydown và keyup liền nhau.

Tỷ lệ rollover. Tần suất phím tiếp theo được nhấn xuống trước khi phím trước được nhả ra. Dhakal đo được tỷ lệ rollover trung bình 25%, với phần lớn người gõ nhanh có rollover ở 40 đến 70% số lần nhấn phím, và các phím chồng nhau trung bình 30 ms. Người gõ chậm gần như không dùng rollover, nên một kết quả nhanh mà không có rollover sẽ nổi bật. Bot hiếm khi nhấn chồng phím.

Quãng dừng dài nhất, độ dao động tốc độ từ giây này sang giây khác, và tỷ lệ khoảng cách trên một giây. Con người ngập ngừng theo những cách mà một script phải được dặn mới bắt chước được.

Một mô hình chấm điểm kết hợp các đặc trưng này và có thể gắn cờ một kết quả là đáng ngờ. Dưới 130 WPM, một lá cờ tự nó không từ chối điều gì. Kết quả của bạn không bao giờ bị ẩn khỏi chính bạn; các bước kiểm tra này chỉ quyết định nó có được xếp hạng hay không.

Gian lận bài kiểm tra gõ phím có qua mặt được kiểm tra nhịp gõ không?

Có, nếu trò gian lận được xây dựng cẩn thận. Một bài báo trên arXiv vào tháng 1 năm 2026 của David Condrey đã thử nghiệm các bộ phát hiện dựa trên nhịp gõ phím nhằm phân biệt văn bản do người gõ với văn bản do AI tạo ra. Chúng phân biệt hoàn hảo việc chèn phím hoàn toàn tự động, nhưng các cuộc tấn công có nhịp gõ của con người (một người gõ lại văn bản AI, hoặc một chương trình lấy mẫu độ trễ từ dữ liệu gõ phím của người thật) đã qua mặt cả năm bộ phân loại với tỷ lệ ít nhất 99,8%. Bài báo nói về phát hiện tác giả, không phải bài kiểm tra gõ phím, nhưng bài học vẫn áp dụng được: bước ba bắt được kẻ cẩu thả và chẳng bắt được gì nhiều hơn.

Hàm hỗ trợ kiểm thử của chính chúng tôi cho thấy điều tương tự ở quy mô nhỏ: độ dao động ngẫu nhiên và vài quãng dừng đã đưa nó từ rõ ràng là giả sang trông hợp lý.

Vậy nên bước ba là một bộ lọc. Phán quyết đến từ bước bốn.

Bước bốn: bài kiểm tra lại để xác minh

Nếu một kết quả tính giờ trên 130 WPM và nhịp gõ của nó cũng trông bất thường, bạn vẫn thấy nó và nó vẫn được lưu, nhưng nó nằm ngoài bảng xếp hạng công khai cho đến khi bạn vượt qua một bài kiểm tra lại để xác minh. Đó là một bài kiểm tra 30 giây mới, và bạn cần đạt ít nhất 75% tốc độ của kết quả cần xác minh. Một lần ăn may hay một nhật ký mượn của người khác sẽ không trụ được qua lượt thứ hai.

Vì sao là 130 WPM? Con số đó gấp khoảng hai lần rưỡi mức trung bình 51,56 WPM trong dữ liệu của Dhakal, vượt xa hầu hết người gõ, và ai thực sự gõ nhanh đến vậy đều có thể làm lại lần thứ hai. Một kết quả nhanh đột ngột với nhịp gõ kỳ lạ là hình dạng mà một nhật ký mượn hoặc một script tạo ra, và nếu nó trung thực, thêm một bài kiểm tra là cái giá nhỏ.

Bài kiểm tra lại là một bài kiểm tra gõ phím bình thường, với văn bản bình thường, không phải một hình ảnh bị bóp méo hay một trang đầy ký hiệu lạ. Văn bản khó đọc làm mọi người chậm đi, và người bị chậm nhiều nhất lại chính là những người gõ nhanh trung thực mà bài kiểm tra lại muốn minh oan. Một bước xác minh khiến người gõ nhanh trung thực thất bại còn tệ hơn không có. Văn bản bình thường cũng khiến bước kiểm tra công bằng: nhật ký của chính bài kiểm tra lại đi qua cùng các bước kiểm tra nhịp gõ như mọi kết quả khác.

Giới hạn tần suất và cấm tài khoản

Bài nộp bị giới hạn tần suất: ba mươi bài mỗi phút cho mỗi người dùng đã đăng nhập, sáu mươi bài cho mỗi địa chỉ IP. Một tài khoản liên tục vấp các bước kiểm tra sẽ bị cấm ngầm (shadow ban), tức là lặng lẽ bị ẩn khỏi bảng xếp hạng, và ba sự kiện chống gian lận nghiêm trọng trong 24 giờ sẽ tự động kích hoạt điều đó. Việc đếm sự kiện trong một khung thời gian nghĩa là một kết quả lạ không bao giờ khiến bạn mất tài khoản, trong khi một script thất bại hết lần này đến lần khác sẽ bị chặn nhanh chóng.

Bảng xếp hạng mọi thời đại cũng yêu cầu tài khoản đã gõ phím 30 phút, nên một tài khoản mới với một lượt hoàn hảo không thể đứng đầu.

Điều gì khiến bạn vô tình bị gắn cờ

Phần lớn kết quả bị gắn cờ không phải gian lận. Những cách trung thực để vấp phải một bước kiểm tra:

Tự động sửa lỗi trên điện thoại. Một lần thay thế đến dưới dạng một sự kiện input làm thay đổi nhiều ký tự. Chúng tôi tính nó là một lần nhấn phím, gắn cờ, và giữ kết quả ngoài bảng xếp hạng công khai kèm một ghi chú, chứ không từ chối.

Văn bản dán vào. Việc dán bị chặn, và kết quả có lần thử dán sẽ bị loại khỏi bảng xếp hạng.

Chuyển tab. Rời khỏi trang quá hai giây trong lúc làm bài sẽ đánh dấu bài kiểm tra là bị gián đoạn; nó được lưu và hiển thị nhưng không được xếp hạng.

Tạm dừng. Một quãng dừng quá năm giây trong bài kiểm tra theo từ hoặc theo trích dẫn sẽ đánh dấu kết quả là đã tạm dừng. Xử lý tương tự.

Gõ qua IME. Tiếng Nhật, tiếng Hàn và tiếng Trung được nhập qua các sự kiện composition, nên chúng tôi bỏ qua quy tắc keydown với chúng. Nếu vẫn có gì đó trông sai, đó là lỗi của chúng tôi, và chúng tôi muốn xem nhật ký.

Kết quả ngoại tuyến. Một kết quả được đồng bộ hơn mười phút sau khi hoàn thành sẽ nằm trong lịch sử của bạn mà không được xếp hạng, vì chúng tôi không thể xác thực đồng hồ của nó.

Thực sự gõ nhanh. Trên 130 WPM, bạn sẽ gặp bài kiểm tra lại, nhiều khả năng ngay vào ngày đầu tiên bạn gõ thật sung.

Cách khiếu nại

Mỗi lần loại trừ đều hiển thị lý do trong lịch sử của bạn. Nếu bạn cho rằng chúng tôi sai về một kết quả hoặc một hạn chế, hãy gửi email đến địa chỉ khiếu nại trên trang chống gian lận của chúng tôi từ địa chỉ email của tài khoản, kèm đường dẫn kết quả hoặc ngày giờ làm bài. Một người thật sẽ xem bản phát lại các lần gõ phím và trả lời trong vài ngày. Khiếu nại không bao giờ được quyết định chỉ bởi mô hình tự động.

Có phải chúng tôi vừa công bố hướng dẫn cách vượt qua các bước kiểm tra? Một phần. Danh sách đặc trưng vốn luôn có thể suy ra từ cách hệ thống phản ứng, còn ngưỡng thì vẫn giữ kín. Bài kiểm tra lại mới là phần quan trọng, và cách để vượt qua nó là gõ phím.

Câu hỏi thường gặp

Bài kiểm tra gõ phím phát hiện bot thế nào?

Những bài tốt đọc nhật ký gõ phím: liệu mọi ký tự có một lần nhấn phím đằng sau không, khoảng cách giữa các phím dao động bao nhiêu, và các phím được giữ và nhấn chồng ra sao. Script thường quá đều đặn; bot cẩn thận có thể bắt chước con người, đó là lý do chúng tôi thêm bài kiểm tra lại.

Bot có vượt qua được hệ thống chống gian lận của bài kiểm tra gõ phím không?

Bot cẩn thận có thể vượt qua các bước kiểm tra nhịp gõ: nghiên cứu về các bộ phát hiện dựa trên nhịp gõ phím cho thấy nhịp gõ giả giống người qua mặt chúng gần như mọi lần. Đó là lý do chúng tôi giữ các kết quả nhanh lại để kiểm tra lại, và bot phải vượt qua lần nữa với một nhật ký thứ hai cũng phải qua được cùng các bước kiểm tra.

Vì sao kết quả bài kiểm tra gõ phím của tôi không được xếp hạng?

Thường là do bài kiểm tra ngắn hơn 15 giây hoặc 10 từ, một quãng dừng quá năm giây, việc chuyển tab, hoặc một kết quả trên 130 WPM đang chờ bài kiểm tra lại. Lịch sử của bạn hiển thị lý do.

Nguồn