Testovi tipkanja otkrivaju varanje provjerom zapisa pritisaka tipki iza svakog rezultata. Naš svaki rezultat ponovno izračunava iz zapisa pritisaka tipki, provjerava hash, ispituje strukturu i ritam zapisa te svaki mjereni rezultat iznad 130 WPM čiji ritam uz to izgleda neobično drži izvan javnih ljestvica dok ne prođeš ponovni test. Provjere ritma hvataju nemarne botove; ponovni test tjera pažljivog bota da sve odradi još jednom.
Prvi bot koji je nadmudrio naše provjere ritma bio je naš.
Naš pomoćnik za end-to-end testove pritiskao je tipke u stalnom razmaku od 40 ms, jer tako radi testna skripta. Poslužitelj je ponovno izračunao rezultat, potvrdio hash i ocijenio prolaz kao sumnjiv: nula varijacije između pritisaka, nula preklapanja, identična vremena držanja. Morali smo dodati nasumično odstupanje po riječi i povremene stanke „razmišljanja” od 80 do 300 ms prije nego što je naš vlastiti skup testova mogao predati rezultat koji izgleda ljudski. Ta je opcija još uvijek u kodu, pod nazivom humanLike.
Provjere djeluju protiv svega što se ne trudi, a sve što se trudi može ih proći, pa dizajn pravu težinu stavlja na ponovni test.
Prvi korak: sve ponovno izračunati
Tvoj nam preglednik ne šalje WPM. Šalje zapis pritisaka tipki (svaki događaj keydown, keyup, input i composition, s vremenskom oznakom monotonog sata performance.now()), metrike koje je izračunao i SHA-256 hash kanonskog rezultata.
Poslužitelj na zapisu pokreće isti kod za metrike i uspoređuje. Ako se ijedan broj razlikuje za više od 0,01, rezultat se odbacuje kao metrics_mismatch. Ako se hash ne poklapa, odbacuje se kao hash_mismatch. Proširenje preglednika koje mijenja polje WPM, najčešći oblik varanja na stranicama koje vjeruju klijentu, ovdje pada. Iste funkcije stvaraju broj na tvom zaslonu i u bazi podataka, zato naša stranica o metrikama može obećati da se njezin izračunati primjer reproducira na dvije decimale.
Zašto ne mjeriti vrijeme testa na poslužitelju? Tada bi tvoj rezultat uključivao i mrežu. Svaki bi pritisak tipke do nas stigao malo kasnije, za iznos koji ovisi o tvojoj vezi, a brzi tipkač na sporoj liniji izgubio bi brzinu koju je doista imao. Zapis nam daje klijentov sat za preciznost i ponovni izračun na poslužitelju za poštenje.
Drugi korak: ima li zapis smisla?
Prije bilo kakve analize ritma, jednostavne provjere oblika predanog rezultata:
- Test mora trajati najmanje 15 sekundi ili 10 riječi. Kraći prolazi previše su nepouzdani za rangiranje i najlakše ih je napuhati.
- Rezultat ne može stići prije nego što je test mogao završiti: njegov početak plus njegovo trajanje. Rezultat od 60 sekundi koji stigne dvadeset sekundi nakon početka nije se dogodio.
- Broj događaja mora odgovarati utipkanim znakovima.
- Na stolnom računalu svaki događaj input mora uslijediti unutar 50 ms nakon događaja keydown. To hvata zalijepljeni tekst, skriptirane događaje input i većinu alata za ubacivanje pritisaka tipki, koji šalju tekst bez fizičke tipke. Tipkanje kroz uređivač načina unosa (IME composition) izuzeto je, a rezultati s mobitela ne ulaze na javne ljestvice.
- Zapis bez početka, bez kraja ili s vremenskim oznakama koje nisu monotone neispravan je i odmah se odbacuje.
Ništa od toga nije pametno, ali uklanja većinu količine.
Treći korak: što može otkriti ritam pritisaka tipki?
Ovo je dio koji namjerno ne dokumentiramo do kraja: popis značajki je javan, granice i težine nisu. Objavljena granica postaje meta. Kad bismo rekli „označava se standardna devijacija ispod N milisekundi”, sljedeća inačica svake skripte dodala bi N plus jedan. Značajke koje ocjenjujemo:
Prosječan razmak između tipki i koliko varira. Ljudsko je tipkanje nepravilno. U istraživanju Dhakala i suradnika iz 2018. na 168.960 tipkača prosječan razmak između tipki bio je oko 239 ms, uz standardnu devijaciju od oko 112 ms. Skripta koja tipka u stalnom razmaku gotovo da nema varijacije; istraživanje s arXiva iz 2025. o CAPTCHA-i temeljenoj na pritiscima tipki vidjelo je upravo to kod svog testnog bota, koji je tipkao sa stalnim kašnjenjem od 50 ms. To je naš najjači signal i onaj na kojem je pao naš pomoćnik.
Udio razmaka kraćih od 40 ms. Razmak od 40 ms, ako se održava, iznosi 1.500 znakova u minuti, odnosno 300 WPM uz pet znakova po riječi. Prsti doista proizvode pojedinačne razmake te duljine kad preklapaju tipke, pa jedan kratak razmak ne znači ništa. Zapis u kojem je velik udio razmaka toliko kratak nije tipkanje.
Vremena držanja tipki. Stvarni prsti variraju za desetke milisekundi; sintetički događaji često imaju identična ili gotovo nulta vremena držanja, jer alat šalje keydown i keyup jedan odmah za drugim.
Udio preklapanja. Koliko često sljedeća tipka ide dolje prije nego što se prethodna podigne. Dhakal je izmjerio prosječan udio preklapanja od 25 %, pri čemu je većina brzih tipkača preklapala 40 do 70 % pritisaka, a tipke su se u prosjeku preklapale 30 ms. Spori tipkači gotovo uopće ne preklapaju, pa brz rezultat bez preklapanja upada u oči. Botovi rijetko preklapaju tipke.
Najdulja stanka, kolebanja brzine iz sekunde u sekundu i udio razmaka duljih od jedne sekunde. Ljudi oklijevaju na načine koje skripti treba izričito narediti da ih oponaša.
Model bodovanja kombinira sve to i može rezultat označiti kao sumnjiv. Ispod 130 WPM oznaka sama po sebi ništa ne odbacuje. Tvoj rezultat nikad se ne skriva od tebe; te provjere odlučuju samo hoće li biti rangiran.
Može li varanje na testu tipkanja proći provjere ritma?
Može, ako je varka pažljivo izrađena. Rad Davida Condreyja objavljen na arXivu u siječnju 2026. testirao je detektore ritma pritisaka tipki namijenjene razlikovanju teksta koji je utipkao čovjek od teksta koji je generirala umjetna inteligencija. Potpuno automatizirano ubacivanje razlikovali su savršeno, ali napadi s ljudskim ritmom (osoba koja ponovno tipka tekst umjetne inteligencije ili program koji uzorkuje kašnjenja iz podataka o ljudskom tipkanju) izbjegli su svih pet klasifikatora u najmanje 99,8 % slučajeva. Rad se bavi otkrivanjem autorstva, a ne testovima tipkanja, ali pouka vrijedi i ovdje: treći korak hvata nemarne i ne puno više.
Naš vlastiti testni pomoćnik pokazuje isto u malom: nasumično odstupanje i nekoliko stanki pomaknuli su ga od očito sintetičkog do uvjerljivog.
Treći je korak dakle filtar. Presudu donosi četvrti korak.
Četvrti korak: ponovni test za potvrdu
Ako je mjereni rezultat iznad 130 WPM, a njegov ritam uz to izgleda neobično, vidiš ga i spremljen je, ali ostaje izvan javnih ljestvica dok ne prođeš ponovni test za potvrdu. To je novi test od 30 sekundi, a moraš doseći najmanje 75 % brzine koju si postigao. Jednokratna slučajnost ili posuđeni zapis ne prežive drugi prolaz.
Zašto 130 WPM? To je oko dva i pol puta više od prosjeka od 51,56 WPM u Dhakalovim podacima, daleko iznad većine tipkača, a tko god doista tipka tako brzo, može to učiniti dvaput. Iznenadni brzi rezultat s čudnim ritmom upravo je oblik koji stvaraju posuđeni zapis ili skripta, a ako je pošten, jedan dodatni test mala je cijena.
Ponovni test je običan test tipkanja, na običnom tekstu, a ne izobličena slika ili stranica čudnih simbola. Teško čitljiv tekst usporava sve, a najviše usporava upravo poštene brze tipkače koje ponovni test treba potvrditi. Provjera koju pošteni brzi tipkači ne prolaze gora je od nikakve. Običan tekst čini provjeru i poštenom: zapis samog ponovnog testa prolazi iste provjere ritma kao i svaki drugi rezultat.
Ograničenja učestalosti i zabrane
Predaje rezultata ograničene su: trideset u minuti po prijavljenom korisniku, šezdeset po IP adresi. Račun koji stalno pada na provjerama dobiva skrivenu zabranu (shadow ban), što znači da se tiho skriva s ljestvica, a tri ozbiljna događaja zaštite od varanja u 24 sata to pokreću automatski. Brojanje događaja unutar vremenskog okvira znači da te jedan čudan rezultat nikad ne stoji računa, dok se skripta koja pada iznova i iznova brzo zaustavi.
Sveukupne ljestvice također zahtijevaju 30 minuta tipkanja na računu, pa novi račun s jednim savršenim prolazom ne može doći na vrh.
Zbog čega te možemo slučajno označiti
Većina označenih rezultata nije varanje. Pošteni načini da padneš na nekoj provjeri:
Automatsko ispravljanje na mobitelu. Zamjena stiže kao jedan događaj input koji mijenja nekoliko znakova. Brojimo je kao jedan pritisak tipke, označimo je i rezultat držimo izvan javnih ljestvica uz napomenu, a ne odbacivanje.
Zalijepljeni tekst. Lijepljenje je blokirano, a rezultat u kojem je pokušano isključuje se s ljestvica.
Prebacivanje kartica. Ako fokus napusti stranicu na više od dvije sekunde tijekom testa, test se označava kao prekinut; sprema se i prikazuje, ali se ne rangira.
Stanke. Razmak dulji od pet sekundi u testu s riječima ili citatom označava rezultat kao pauziran. Isti postupak.
IME composition. Japanski, korejski i kineski unos stižu kroz događaje composition, pa za njih preskačemo pravilo o keydownu. Ako nešto i dalje izgleda pogrešno, to je greška u kodu i htjeli bismo vidjeti zapis.
Rezultati izvan mreže. Rezultat sinkroniziran više od deset minuta nakon završetka ostaje u tvojoj povijesti nerangiran, jer ne možemo potvrditi njegov sat.
Stvarna brzina. Iznad 130 WPM dočekat će te ponovni test, vjerojatno već na tvoj prvi dobar dan.
Kako se žaliti
Svako isključenje u tvojoj povijesti prikazuje svoj razlog. Ako misliš da smo pogriješili u vezi s rezultatom ili ograničenjem, pošalji e-poruku na adresu za žalbe s naše stranice o zaštiti od varanja s adrese povezane s tvojim računom, uz poveznicu na rezultat ili datum i vrijeme testa. Osoba pregleda reprodukciju pritisaka tipki i odgovara u roku od nekoliko dana. O žalbama nikad ne odlučuje samo automatizirani model.
Jesmo li upravo objavili upute za prolazak provjera? Djelomično. Popis značajki oduvijek se mogao otkriti iz ponašanja, a granice ostaju tajne. Ponovni test je dio koji je važan, a način da ga prođeš jest tipkati.
Česta pitanja
Kako testovi tipkanja otkrivaju botove?
Dobri čitaju zapis pritisaka tipki: stoji li iza svakog znaka pritisak tipke, koliko variraju razmaci između tipki i kako se tipke drže i preklapaju. Skripte su obično previše pravilne; pažljivi botovi mogu oponašati ljude, zato dodajemo ponovni test.
Može li bot proći zaštitu od varanja na testu tipkanja?
Pažljiv bot može proći provjere ritma: istraživanje detektora ritma pritisaka tipki pokazalo je da ih krivotvoreni ljudski ritam izbjegava gotovo svaki put. Zato brze rezultate zadržavamo do ponovnog testa, koji bot mora ponovno proći s drugim zapisom koji prolazi iste provjere.
Zašto moj rezultat testa tipkanja nije rangiran?
Najčešće zbog testa kraćeg od 15 sekundi ili 10 riječi, stanke dulje od pet sekundi, prebacivanja kartice ili rezultata iznad 130 WPM koji čeka svoj ponovni test. Tvoja povijest prikazuje razlog.