Com detecten les trampes els tests de mecanografia? Com revisem els nostres

Els tests de mecanografia detecten les trampes revisant el registre de pulsacions que hi ha darrere de cada puntuació. El nostre recalcula cada resultat a partir del seu registre de pulsacions, en comprova el hash, analitza l'estructura i el ritme del registre, i deixa fora de les classificacions públiques qualsevol resultat cronometrat de més de 130 WPM amb un ritme que també sembli inusual, fins que superis una segona prova. Els controls de ritme enxampen els bots descurats; la segona prova obliga un bot curós a tornar-ho a fer tot.

El primer bot que va superar els nostres controls de ritme era nostre.

L'ajudant de les nostres proves de punta a punta premia tecles a un interval fix de 40 ms, perquè és el que fa un script de proves. El servidor va recalcular el resultat, va confirmar el hash i va puntuar la tirada com a sospitosa: variància zero entre pulsacions, rollover zero, temps de pulsació idèntics. Vam haver d'afegir una variació aleatòria per paraula i, de tant en tant, pauses «per pensar» de 80 a 300 ms perquè la nostra pròpia bateria de proves pogués enviar un resultat d'aspecte humà. L'opció encara és al codi, amb l'etiqueta humanLike.

Els controls funcionen contra qualsevol cosa que no ho intenti, i qualsevol cosa que ho intenti els pot superar, així que el disseny posa el pes de debò en una segona prova.

Primer pas: recalcular-ho tot

El teu navegador no ens envia cap xifra de WPM. Ens envia el registre de pulsacions (cada esdeveniment keydown, keyup, input i de composició, amb la marca de temps del rellotge monòton performance.now()), les mètriques que ha calculat i un hash SHA-256 del resultat canònic.

El servidor executa el mateix codi de mètriques sobre el registre i compara. Si algun número difereix en més de 0,01, el resultat es rebutja com a metrics_mismatch. Si el hash no coincideix, es rebutja com a hash_mismatch. Una extensió del navegador que edita el camp de WPM, la trampa més habitual als llocs que es refien del client, falla aquí. Les mateixes funcions produeixen el número de la teva pantalla i el de la base de dades, i per això la nostra pàgina de mètriques pot prometre que el seu exemple resolt es reprodueix fins a dos decimals.

Per què no cronometrem el test al servidor? Perquè aleshores la teva puntuació inclouria la xarxa. Cada pulsació ens arribaria una mica tard, per una quantitat que varia amb la connexió, i un mecanògraf ràpid amb una línia lenta perdria una velocitat que tenia de debò. El registre ens dona el rellotge del client per a la precisió i el recàlcul del servidor per a l'honestedat.

Segon pas: el registre té sentit?

Abans de qualsevol anàlisi de ritme, controls senzills sobre la forma de l'enviament:

  • El test ha de durar com a mínim 15 segons o 10 paraules. Les tirades més curtes tenen massa soroll per classificar-les i són les més fàcils d'inflar.
  • Un resultat no pot arribar abans que el test hagi pogut acabar: l'inici més la seva pròpia durada. Un resultat de 60 segons que arriba vint segons després de començar no ha passat.
  • El nombre d'esdeveniments ha de quadrar amb els caràcters escrits.
  • A l'ordinador, cada esdeveniment input ha de seguir un keydown en menys de 50 ms. Això enxampa el text enganxat, els esdeveniments input generats per scripts i la majoria d'eines d'injecció de pulsacions, que envien text sense cap tecla física. Escriure amb un editor de mètodes d'entrada (composició IME) n'està exempt, i els resultats amb mòbil queden fora de les classificacions públiques.
  • Un registre sense inici, sense final o amb marques de temps que no són monòtones està mal format i es rebutja directament.

Res d'això és enginyós, però elimina la major part del volum.

Tercer pas: què pot revelar el ritme de les pulsacions?

Aquesta és la part que deliberadament no documentem del tot: la llista de característiques és pública; els llindars i els pesos, no. Un llindar publicat és un objectiu. Si diguéssim «es marca una desviació estàndard de menys de N mil·lisegons», la versió següent de tots els scripts hi afegiria N més un. Les característiques que puntuem:

L'interval mitjà entre tecles i quant varia. L'escriptura humana és irregular. A l'estudi de Dhakal i els seus col·legues del 2018 amb 168.960 mecanògrafs, l'interval mitjà entre tecles era d'uns 239 ms amb una desviació estàndard d'uns 112 ms. Un script que escriu a un interval fix gairebé no té variació; un estudi d'arXiv del 2025 sobre un CAPTCHA basat en pulsacions va veure exactament això en el seu bot de prova, que escrivia amb un retard fix de 50 ms. Aquest és el nostre senyal més fort, i el que va fer saltar el nostre ajudant.

La proporció d'intervals de menys de 40 ms. Un interval de 40 ms mantingut són 1.500 caràcters per minut, o 300 WPM a cinc caràcters per paraula. Els dits sí que produeixen intervals aïllats tan curts quan encavalquen tecles amb el rollover, així que un interval curt no vol dir res. Un registre on una gran part dels intervals són tan curts no és escriptura.

Els temps de pulsació de les tecles. Els dits de debò varien desenes de mil·lisegons; els esdeveniments sintètics sovint tenen temps de pulsació idèntics o gairebé nuls, perquè l'eina envia el keydown i el keyup un darrere l'altre.

La proporció de rollover. Amb quina freqüència la tecla següent baixa abans que l'anterior pugi. Dhakal va mesurar una proporció mitjana de rollover del 25%, amb la majoria de mecanògrafs ràpids encavalcant tecles en el 40 al 70% de les pulsacions, i tecles superposades 30 ms de mitjana. Els mecanògrafs lents gairebé no en fan, així que un resultat ràpid sense rollover crida l'atenció. Els bots rarament encavalquen tecles.

La pausa més llarga, les oscil·lacions de velocitat d'un segon a l'altre i la proporció d'intervals de més d'un segon. Les persones dubten de maneres que a un script se li han de dir que imiti.

Un model de puntuació combina tot això i pot marcar un resultat com a sospitós. Per sota de 130 WPM, una marca no rebutja res per si sola. El teu resultat no se t'amaga mai; aquests controls només decideixen si entra a la classificació.

Les trampes en un test de mecanografia poden superar els controls de ritme?

Sí, si la trampa està feta amb cura. Un article d'arXiv de gener de 2026 de David Condrey va posar a prova detectors basats en el ritme de les pulsacions pensats per distingir el text escrit per persones del generat amb IA. Separaven perfectament la injecció totalment automatitzada, però els atacs amb ritme humà (una persona que torna a escriure un text d'IA, o un programa que pren els retards de dades d'escriptura humana) van esquivar els cinc classificadors en un 99,8% dels casos o més. L'article tracta de la detecció d'autoria, no de tests de mecanografia, però la lliçó s'hi aplica: el tercer pas enxampa els descurats i poca cosa més.

El nostre propi ajudant de proves ho demostra a petita escala: una variació aleatòria i unes quantes pauses el van fer passar de clarament sintètic a versemblant.

Així que el tercer pas és un filtre. El veredicte surt del quart.

Quart pas: la segona prova de verificació

Si un resultat cronometrat supera els 130 WPM i el seu ritme també sembla inusual, el veus i es desa, però queda fora de les classificacions públiques fins que superis una segona prova de verificació. És un test nou de 30 segons, i has d'arribar com a mínim al 75% de la velocitat que has declarat. Una casualitat puntual o un registre manllevat no sobreviuen a una segona tirada.

Per què 130 WPM? És unes dues vegades i mitja la mitjana de 51,56 WPM de les dades de Dhakal, molt per sobre de la majoria de mecanògrafs, i qui escriu realment tan ràpid ho pot fer dues vegades. Un resultat ràpid i sobtat amb un ritme estrany és la forma que produeix un registre manllevat o un script, i si és honest, una prova més és un preu petit.

La segona prova és un test de mecanografia normal, amb text normal, no una imatge distorsionada ni una pàgina de símbols estranys. El text difícil de llegir alenteix tothom, i a qui més alenteix és precisament als mecanògrafs ràpids i honestos que la segona prova ha de validar. Una verificació que els mecanògrafs ràpids i honestos no superen és pitjor que no tenir-ne cap. El text normal també fa que el control sigui just: el registre de la mateixa segona prova passa pels mateixos controls de ritme que qualsevol altre resultat.

Límits d'enviament i bloquejos

Els enviaments tenen un límit: trenta per minut per usuari amb sessió iniciada, seixanta per adreça IP. Un compte que no para de fer saltar els controls rep un bloqueig a l'ombra (shadow ban), és a dir, s'amaga discretament de les classificacions, i tres incidents antitrampes greus en 24 hores el provoquen automàticament. Comptar incidents dins d'una finestra de temps vol dir que un resultat estrany aïllat no et costa mai el compte, mentre que un script que falla una vegada i una altra s'atura de pressa.

Les classificacions de tots els temps també exigeixen 30 minuts d'escriptura al compte, de manera que un compte nou amb una sola tirada perfecta no hi pot quedar primer.

Què et pot fer marcar sense voler

La majoria de resultats marcats no són trampes. Les maneres honestes de fer saltar un control:

La correcció automàtica del mòbil. Una substitució arriba com un sol esdeveniment input que canvia diversos caràcters. La comptem com una sola pulsació, la marquem i deixem el resultat fora de les classificacions públiques amb una nota, no amb un rebuig.

Text enganxat. Enganxar està bloquejat, i un resultat en què s'ha intentat queda exclòs de les classificacions.

Canviar de pestanya. Si el focus surt de la pàgina més de dos segons durant un test, el test es marca com a interromput; es desa i es mostra, però no es classifica.

Fer pauses. Un interval de més de cinc segons en un test de paraules o de cita marca el resultat com a en pausa. El mateix tracte.

La composició IME. L'entrada en japonès, coreà i xinès arriba amb esdeveniments de composició, així que per a aquestes llengües ens saltem la norma del keydown. Si alguna cosa encara sembla incorrecta, és un error nostre, i ens agradaria tenir el registre.

Resultats fora de línia. Un resultat sincronitzat més de deu minuts després d'acabar queda al teu historial sense classificar, perquè no en podem validar el rellotge.

Ser ràpid de debò. Per sobre de 130 WPM et trobaràs la segona prova, probablement el primer dia que t'hi vagi bé.

Com reclamar

Cada exclusió mostra el motiu al teu historial. Si creus que ens equivoquem amb un resultat o una restricció, envia un correu a l'adreça de reclamacions de la nostra pàgina antitrampes des de l'adreça del teu compte, amb l'enllaç del resultat o la data i l'hora del test. Una persona mira la repetició de les pulsacions i respon en pocs dies. Les reclamacions no les decideix mai només el model automàtic.

Acabem de publicar unes instruccions per superar els controls? En part. La llista de característiques sempre s'ha pogut deduir del comportament, i els llindars continuen sent privats. La segona prova és la part que compta, i la manera de superar-la és escriure.

Preguntes freqüents

Com detecten els bots els tests de mecanografia?

Els bons llegeixen el registre de pulsacions: si cada caràcter té una pulsació al darrere, quant varien els intervals entre tecles i com es mantenen premudes i s'encavalquen les tecles. Els scripts acostumen a ser massa regulars; els bots curosos poden imitar les persones, i per això hi afegim una segona prova.

Un bot pot superar els controls antitrampes d'un test de mecanografia?

Un de curós pot superar els controls de ritme: la recerca sobre detectors basats en el ritme de les pulsacions va trobar que un ritme humà falsificat els esquivava gairebé sempre. Per això retenim els resultats ràpids fins a una segona prova, que un bot ha de tornar a superar amb un segon registre que passi els mateixos controls.

Per què el meu resultat del test de mecanografia no s'ha classificat?

Normalment per un test de menys de 15 segons o 10 paraules, una pausa de més de cinc segons, un canvi de pestanya o un resultat de més de 130 WPM pendent de la segona prova. El teu historial mostra el motiu.

Fonts