Jak testy psaní odhalují podvádění? Jak kontrolujeme ten náš

Testy psaní odhalují podvádění kontrolou záznamu úhozů, který stojí za každým výsledkem. Náš test každý výsledek přepočítá z jeho záznamu úhozů, ověří hash, otestuje strukturu a časování záznamu a každý časovaný výsledek nad 130 WPM, jehož časování navíc vypadá neobvykle, drží mimo veřejné žebříčky, dokud neprojdeš opakovaným testem. Kontroly časování chytí nedbalé boty; opakovaný test donutí pečlivého bota udělat všechno znovu.

První bot, který naše kontroly časování porazil, byl náš vlastní.

Náš pomocník pro end-to-end testy mačkal klávesy v pevném intervalu 40 ms, protože přesně to testovací skript dělá. Server výsledek přepočítal, potvrdil hash a běh vyhodnotil jako podezřelý: nulový rozptyl mezi úhozy, nulový rollover, stejné doby držení. Museli jsme přidat náhodné kolísání u každého slova a občasné „přemýšlecí“ pauzy 80 až 300 ms, než naše vlastní testovací sada dokázala odeslat výsledek, který vypadal lidsky. Ta volba je v kódu pořád, s označením humanLike.

Kontroly fungují proti všemu, co se nesnaží, a všechno, co se snaží, je může projít, takže skutečnou váhu klade návrh na opakovaný test.

Krok první: přepočítat všechno

Tvůj prohlížeč nám neposílá WPM. Posílá záznam úhozů (každou událost keydown, keyup, input a composition s časovou značkou z monotónních hodin performance.now()), metriky, které spočítal, a hash SHA-256 kanonického výsledku.

Server na záznamu spustí stejný kód pro výpočet metrik a porovná výsledky. Pokud se kterékoli číslo liší o víc než 0,01, výsledek se zamítne jako metrics_mismatch. Pokud hash nesedí, zamítne se jako hash_mismatch. Rozšíření prohlížeče, které upraví pole WPM, nejběžnější podvod na webech, které klientovi věří, tady neprojde. Stejné funkce vytvářejí číslo na tvé obrazovce i v databázi, a proto může naše stránka o metrikách slíbit, že se její počítaný příklad zopakuje na dvě desetinná místa.

Proč neměřit čas testu na serveru? Pak by tvůj výsledek zahrnoval i síť. Každý úhoz by k nám dorazil trochu pozdě, o hodnotu, která se mění podle tvého připojení, a rychlý písař na pomalé lince by přišel o rychlost, kterou opravdu měl. Záznam nám dává hodiny klienta kvůli přesnosti a přepočet na serveru kvůli poctivosti.

Krok druhý: dává záznam smysl?

Před jakoukoli analýzou časování přicházejí jednoduché kontroly tvaru odeslaných dat:

  • Test musí trvat alespoň 15 sekund nebo 10 slov. Kratší běhy jsou na hodnocení příliš zašuměné a nejsnáz se nafukují.
  • Výsledek nemůže dorazit dřív, než mohl test skončit: jeho začátek plus jeho vlastní délka. Šedesátisekundový výsledek, který dorazí dvacet sekund po začátku, se nestal.
  • Počet událostí musí odpovídat napsaným znakům.
  • Na počítači musí každá událost input následovat po keydown do 50 ms. To zachytí vložený text, skriptované události input a většinu nástrojů na vkládání úhozů, které vytvářejí text bez fyzické klávesy. Psaní přes editor vstupní metody (IME composition) je výjimkou a výsledky z telefonu se do veřejných žebříčků nepočítají.
  • Záznam bez začátku, bez konce nebo s nemonotónními časovými značkami je poškozený a zamítne se rovnou.

Nic z toho není chytré, ale odstraní to většinu objemu.

Krok třetí: co může prozradit časování úhozů?

Tohle je část, kterou záměrně nedokumentujeme celou: seznam vlastností je veřejný, prahy a váhy ne. Zveřejněný práh je terč. Kdybychom řekli „označuje se směrodatná odchylka pod N milisekund“, další verze každého skriptu by přidala N plus jedna. Vlastnosti, které hodnotíme:

Průměrná mezera mezi klávesami a to, jak moc kolísá. Lidské psaní je nepravidelné. Ve studii Dhakala a kolegů z roku 2018 se 168 960 pisateli byl průměrný interval mezi klávesami asi 239 ms se směrodatnou odchylkou asi 112 ms. Skript, který píše v pevném intervalu, nemá skoro žádné kolísání; studie CAPTCHA založené na úhozech zveřejněná na arXivu v roce 2025 viděla přesně tohle u svého testovacího bota, který psal s pevným zpožděním 50 ms. To je náš nejsilnější signál a právě o ten zakopl náš pomocník.

Podíl mezer pod 40 ms. Mezera 40 ms, pokud se udrží, znamená 1 500 znaků za minutu, tedy 300 WPM při pěti znacích na slovo. Prsty jednotlivé takhle krátké mezery opravdu vytvářejí, když se při rolloveru klávesy překrývají, takže jedna krátká mezera nic neznamená. Záznam, ve kterém je takhle krátká velká část mezer, není psaní.

Doby držení kláves. Skutečné prsty se liší o desítky milisekund; syntetické události mají často stejné nebo téměř nulové doby držení, protože nástroj vyšle keydown a keyup hned po sobě.

Podíl rolloveru. Jak často jde další klávesa dolů dřív, než se předchozí vrátí nahoru. Dhakal naměřil průměrný podíl rolloveru 25 %, přičemž většina rychlých písařů použila rollover u 40 až 70 % stisků a klávesy se překrývaly v průměru o 30 ms. Pomalí písaři ho nepoužívají skoro vůbec, takže rychlý výsledek bez rolloveru vyčnívá. Boti klávesy překrývají zřídka.

Nejdelší pauza, výkyvy rychlosti ze sekundy na sekundu a podíl mezer delších než jedna sekunda. Lidé váhají způsoby, které musí skript dostat výslovně nařízené, aby je napodobil.

Model hodnocení tyto vlastnosti kombinuje a může výsledek označit jako podezřelý. Pod 130 WPM samotné označení nic nezamítne. Tvůj výsledek se před tebou nikdy neskrývá; tyto kontroly rozhodují jen o tom, jestli se zařadí do pořadí.

Dokáže podvádění v testu psaní projít kontrolami časování?

Ano, pokud je podvod postavený pečlivě. Článek Davida Condreyho na arXivu z ledna 2026 testoval detektory založené na časování úhozů, které mají odlišit text napsaný člověkem od textu vytvořeného AI. Plně automatizované vkládání odlišily dokonale, ale útoky s lidským časováním (člověk přepisující text od AI nebo program vzorkující zpoždění z dat lidského psaní) unikly všem pěti klasifikátorům v alespoň 99,8 % případů. Článek se týká zjišťování autorství, ne testů psaní, ale ponaučení platí i tady: krok třetí chytí nedbalé a skoro nic jiného.

Náš vlastní testovací pomocník ukazuje totéž v malém: náhodné kolísání a pár pauz ho posunulo ze zjevně syntetického na uvěřitelný.

Krok třetí je tedy filtr. Verdikt přichází z kroku čtvrtého.

Krok čtvrtý: ověřovací opakovaný test

Pokud je časovaný výsledek nad 130 WPM a jeho časování navíc vypadá neobvykle, uvidíš ho a uloží se, ale zůstane mimo veřejné žebříčky, dokud neprojdeš ověřovacím opakovaným testem. To je nový třicetisekundový test a musíš v něm dosáhnout alespoň 75 % rychlosti, kterou jsi vykázal(a). Jednorázová náhoda nebo vypůjčený záznam druhý běh nepřežije.

Proč 130 WPM? Je to asi dva a půl násobek průměru 51,56 WPM v Dhakalových datech, hodně nad většinou písařů, a kdo opravdu píše tak rychle, zvládne to dvakrát. Náhlý rychlý výsledek s podivným časováním má přesně ten tvar, jaký vytváří vypůjčený záznam nebo skript, a pokud je poctivý, jeden test navíc je malá cena.

Opakovaný test je obyčejný test psaní s obyčejným textem, ne zkreslený obrázek nebo stránka podivných symbolů. Špatně čitelný text zpomalí každého a nejvíc zpomalí právě poctivé rychlé písaře, které má opakovaný test očistit. Ověření, kterým poctiví rychlí písaři neprojdou, je horší než žádné. Obyčejný text také dělá kontrolu férovou: vlastní záznam opakovaného testu prochází stejnými kontrolami časování jako jakýkoli jiný výsledek.

Limity a zákazy

Odesílání má omezenou frekvenci: třicet za minutu na přihlášeného uživatele, šedesát na IP adresu. Účet, který opakovaně naráží na kontroly, dostane shadow ban, tedy je potichu skrytý v žebříčcích, a tři závažné události proti podvádění během 24 hodin ho spustí automaticky. Počítání událostí v časovém okně znamená, že jeden podivný výsledek tě nikdy nepřipraví o účet, kdežto skript, který selhává znovu a znovu, se rychle zastaví.

Celkové žebříčky navíc vyžadují 30 minut psaní na účtu, takže čerstvý účet s jedním dokonalým během se na jejich vrchol nedostane.

Za co tě kontroly označí omylem

Většina označených výsledků není podvádění. Poctivé způsoby, jak narazit na kontrolu:

Automatické opravy na telefonu. Náhrada dorazí jako jedna událost input, která změní několik znaků. Počítáme ji jako jeden stisk klávesy, označíme ji a výsledek držíme mimo veřejné žebříčky s poznámkou, ne se zamítnutím.

Vložený text. Vkládání je zablokované a výsledek, u kterého se o něj někdo pokusil, je vyřazen ze žebříčků.

Přepínání karet. Pokud fokus během testu opustí stránku na víc než dvě sekundy, test se označí jako přerušený; uloží se a zobrazí, ale nezařadí se do pořadí.

Pauzy. Mezera delší než pět sekund v testu na slova nebo citát označí výsledek jako pozastavený. Stejné zacházení.

IME composition. Japonský, korejský a čínský vstup přichází přes události composition, takže pro něj pravidlo o keydown přeskakujeme. Pokud i tak něco vypadá špatně, je to chyba a záznam bychom rádi viděli.

Výsledky offline. Výsledek synchronizovaný víc než deset minut po svém skončení zůstane v tvé historii nezařazený, protože nedokážeme ověřit jeho hodiny.

Opravdová rychlost. Nad 130 WPM tě čeká opakovaný test, nejspíš hned v tvůj první dobrý den.

Jak se odvolat

Každé vyřazení ukazuje v tvé historii svůj důvod. Pokud si myslíš, že se u výsledku nebo omezení mýlíme, napiš na adresu pro odvolání uvedenou na naší stránce o ochraně proti podvádění z adresy, kterou máš u účtu, a přilož odkaz na výsledek nebo datum a čas testu. Člověk si přehraje záznam úhozů a odpoví do několika dnů. O odvoláních nikdy nerozhoduje jen automatický model.

Nezveřejnili jsme právě návod, jak kontrolami projít? Zčásti. Seznam vlastností se dal z chování vždycky odvodit a prahy zůstávají soukromé. Podstatnou částí je opakovaný test a způsob, jak ho projít, je psát.

Často kladené otázky

Jak testy psaní odhalují boty?

Ty dobré čtou záznam úhozů: jestli za každým znakem stojí stisk klávesy, jak moc kolísají mezery mezi klávesami a jak se klávesy drží a překrývají. Skripty bývají příliš pravidelné; pečliví boti umějí napodobit lidi, a proto přidáváme opakovaný test.

Dokáže bot projít ochranou proti podvádění v testu psaní?

Pečlivý bot projde kontrolami časování: výzkum detektorů založených na časování úhozů zjistil, že padělané lidsky vypadající časování jim uniklo téměř pokaždé. Proto rychlé výsledky držíme kvůli opakovanému testu, kterým musí bot projít znovu, s druhým záznamem, který splní stejné kontroly.

Proč se můj výsledek testu psaní nezařadil do pořadí?

Obvykle jde o test kratší než 15 sekund nebo 10 slov, pauzu delší než pět sekund, přepnutí karty nebo výsledek nad 130 WPM, který čeká na opakovaný test. Důvod najdeš ve své historii.

Zdroje