Kuidas trükkimistestid pettust tuvastavad? Nii kontrollime oma testi

Trükkimistestid tuvastavad pettust iga tulemuse taga oleva klahvilogi kontrollimisega. Meie test arvutab iga tulemuse selle klahvilogist uuesti, kontrollib räsi, testib logi ülesehitust ja ajastust ning hoiab iga ajastatud tulemuse üle 130 WPM, mille ajastus tundub ka ebatavaline, avalikest edetabelitest eemal, kuni oled läbinud kordustesti. Ajastuse kontrollid püüavad kinni hooletud robotid; kordustest sunnib hoolikat robotit kõike uuesti tegema.

Esimene robot, mis meie ajastuse kontrollidest mööda pääses, oli meie oma.

Meie otspunktist otspunktini testide abiline vajutas klahve kindla 40 ms vahega, sest nii testiskript teebki. Server arvutas tulemuse uuesti, kinnitas räsi ja hindas jooksu kahtlaseks: null kõikumist klahvivajutuste vahel, null ülekatet, identsed hoidmisajad. Pidime lisama juhusliku sõnapõhise värina ja aeg-ajalt 80 kuni 300 ms „mõtlemispause“, enne kui meie enda testikomplekt suutis postitada inimese moodi tulemuse. See valik on koodis endiselt olemas, nimega humanLike.

Kontrollid töötavad kõige vastu, mis ei pinguta, ja kõik, mis pingutab, võib neist läbi pääseda, nii et ülesehitus paneb tegeliku raskuse kordustestile.

Esimene samm: arvuta kõik uuesti

Su brauser ei saada meile WPM-i. See saadab klahvilogi (iga keydown-, keyup-, input- ja composition-sündmuse, ajatempliga monotoonsest performance.now() kellast), enda arvutatud näitajad ja kanoonilise tulemuse SHA-256 räsi.

Server jooksutab logi peal sama näitajate koodi ja võrdleb. Kui mõni number erineb rohkem kui 0,01 võrra, lükatakse tulemus tagasi kui metrics_mismatch. Kui räsi ei klapi, lükatakse see tagasi kui hash_mismatch. Brauserilaiendus, mis muudab WPM-i välja, mis on kõige levinum pettus saitidel, kus klienti usaldatakse, kukub siin läbi. Samad funktsioonid annavad numbri nii su ekraanil kui ka andmebaasis, mistõttu saab meie näitajate leht lubada, et selle näidisarvutus kordub kahe kümnendkohani.

Miks mitte mõõta testi aega serveris? Siis sisaldaks su tulemus võrku. Iga klahvivajutus jõuaks meieni veidi hiljem, sõltuvalt su ühendusest erineva võrra, ja aeglasel liinil olev kiire trükkija kaotaks kiirust, mis tal tegelikult oli. Logi annab meile täpsuse jaoks kliendi kella ja aususe jaoks serveri ülearvutuse.

Teine samm: kas logi on mõistlik?

Enne igasugust ajastuse analüüsi tehakse lihtsad kontrollid saadetise kuju kohta:

  • Test peab kestma vähemalt 15 sekundit või 10 sõna. Lühemad jooksud on järjestamiseks liiga mürarikkad ja kõige lihtsamini paisutatavad.
  • Tulemus ei saa saabuda enne, kui test oleks saanud lõppeda: selle algus pluss selle enda pikkus. 60-sekundiline tulemus, mis saabub kakskümmend sekundit pärast algust, ei toimunud.
  • Sündmuste arv peab sobima trükitud märkidega.
  • Lauaarvutis peab iga input-sündmus järgnema keydown-sündmusele 50 ms jooksul. See püüab kinni kleebitud teksti, skriptitud input-sündmused ja enamiku klahvivajutuste süstimise tööriistu, mis saadavad teksti ilma füüsilise klahvita. Sisestusmeetodi redaktori (IME composition) kaudu trükkimine on erand ja telefonitulemused jäävad avalikest edetabelitest välja.
  • Logi, millel pole algust, lõppu või millel on mittemonotoonsed ajatemplid, on vigane ja lükatakse kohe tagasi.

Miski sellest pole nutikas, kuid see eemaldab suurema osa mahust.

Kolmas samm: mida klahvivajutuste ajastus paljastada võib?

See on osa, mida me meelega täielikult ei dokumenteeri: tunnuste loetelu on avalik, piirväärtused ja kaalud mitte. Avaldatud piirväärtus on sihtmärk. Kui ütleksime „standardhälve alla N millisekundi märgitakse“, lisaks iga skripti järgmine versioon N pluss üks. Tunnused, mida hindame:

Klahvide keskmine vahe ja kui palju see kõigub. Inimese trükkimine on ebaühtlane. Dhakali ja kolleegide 2018. aasta uuringus 168 960 trükkijaga oli klahvivajutuste keskmine vahe umbes 239 ms ja standardhälve umbes 112 ms. Kindla vahega trükkival skriptil pole peaaegu mingit kõikumist; 2025. aasta arXivi uuring klahvivajutustel põhineva CAPTCHA kohta nägi just seda oma testrobotis, mis trükkis kindla 50 ms viivitusega. See on meie tugevaim signaal ja just sellele komistas meie abiline.

Alla 40 ms vahede osakaal. Püsiv 40 ms vahe on 1 500 märki minutis ehk viie märgi kohta sõnas 300 WPM. Sõrmed teevad küll üksikuid nii lühikesi vahesid, kui klahvid ülekatte ajal kattuvad, nii et üks lühike vahe ei tähenda midagi. Logi, kus suur osa vahedest on nii lühikesed, ei ole trükkimine.

Klahvide hoidmisajad. Päris sõrmed kõiguvad kümnete millisekundite võrra; sünteetilistel sündmustel on sageli identsed või peaaegu nullilised hoidmisajad, sest tööriist saadab keydown- ja keyup-sündmuse vahetult üksteise järel.

Ülekatte osakaal. Kui sageli läheb järgmine klahv alla enne, kui eelmine üles tuleb. Dhakal mõõtis keskmiseks ülekatte osakaaluks 25%, kusjuures enamik kiireid trükkijaid kattis üle 40 kuni 70% klahvivajutustest ja klahvid kattusid keskmiselt 30 ms. Aeglased trükkijad ei kasuta seda peaaegu üldse, nii et kiire tulemus ilma ülekatteta torkab silma. Robotid kattuvad klahvidega harva.

Pikim paus, kiiruse kõikumised sekundist sekundisse ja üle ühe sekundi pikkuste vahede osakaal. Inimesed kõhklevad viisil, mida skriptile tuleb jäljendama õpetada.

Hindamismudel kombineerib need ja võib tulemuse kahtlaseks märkida. Alla 130 WPM ei lükka märge üksi midagi tagasi. Su tulemust ei peideta sinu eest kunagi; need kontrollid otsustavad ainult, kas see läheb edetabelisse.

Kas trükkimistesti pettus saab ajastuse kontrollidest mööda?

Jah, kui pettus on hoolikalt ehitatud. David Condrey 2026. aasta jaanuari arXivi artikkel testis klahvivajutuste ajastuse detektoreid, mis on mõeldud inimese trükitud teksti eristamiseks tehisintellekti loodud tekstist. Need eristasid täielikult automatiseeritud süstimise veatult, kuid inimliku ajastusega rünnakud (inimene trükib tehisintellekti teksti ümber või programm võtab viivitused inimeste trükkimisandmetest) pääsesid kõigist viiest klassifikaatorist mööda vähemalt 99,8% juhtudest. Artikkel käsitleb autorsuse tuvastamist, mitte trükkimiskiiruse teste, kuid õppetund kandub üle: kolmas samm püüab kinni hooletud ja mitte palju muud.

Meie enda testiabiline näitab sama väikeses mastaabis: juhuslik värin ja mõned pausid viisid selle ilmselgelt sünteetilisest usutavani.

Seega on kolmas samm filter. Otsus tuleb neljandast sammust.

Neljas samm: kinnitav kordustest

Kui ajastatud tulemus on üle 130 WPM ja selle ajastus tundub ka ebatavaline, näed seda ja see salvestatakse, kuid see jääb avalikest edetabelitest eemale, kuni oled läbinud kinnitava kordustesti. See on uus 30-sekundiline test ja pead jõudma vähemalt 75%-ni väidetud kiirusest. Ühekordne juhus või laenatud logi teist jooksu üle ei ela.

Miks 130 WPM? See on umbes kaks ja pool korda Dhakali andmete 51,56 WPM-i keskmine, tublisti üle enamiku trükkijate, ja igaüks, kes tõesti nii kiiresti trükib, suudab seda teha kaks korda. Äkiline kiire tulemus veidra ajastusega on just see kuju, mille annab laenatud logi või skript, ja kui see on aus, on üks lisatest väike hind.

Kordustest on tavaline trükkimiskiiruse test tavalise tekstiga, mitte moonutatud pilt või lehekülg veidraid sümboleid. Raskesti loetav tekst aeglustab kõiki ja kõige rohkem aeglustab see just ausaid kiireid trükkijaid, kelle kinnitamiseks kordustest olemas on. Kinnitus, mille ausad kiired trükkijad läbi kukuvad, on hullem kui kinnituse puudumine. Tavaline tekst teeb kontrolli ka õiglaseks: kordustesti enda logi läbib samad ajastuse kontrollid nagu iga teine tulemus.

Sageduspiirangud ja keelud

Saadetistel on sageduspiirang: kolmkümmend minutis sisseloginud kasutaja kohta, kuuskümmend IP-aadressi kohta. Konto, mis kontrollidele pidevalt vahele jääb, saab varjukeelu ehk peidetakse vaikselt edetabelitest, ja kolm tõsist pettusevastast sündmust 24 tunni jooksul käivitavad selle automaatselt. Sündmuste loendamine ajaakna sees tähendab, et üks veider tulemus ei maksa sulle kunagi kontot, samas kui ikka ja jälle läbi kukkuv skript peatub kiiresti.

Kõigi aegade edetabelid nõuavad ka 30 minutit trükkimist kontol, nii et uus konto ühe täiusliku jooksuga ei saa nende tippu tõusta.

Mis sind kogemata märgituks teeb

Enamik märgitud tulemusi pole pettus. Ausad viisid kontrolli vahele jääda:

Automaatkorrektuur telefonis. Asendus saabub ühe input-sündmusena, mis muudab mitut märki. Loeme selle üheks klahvivajutuseks, märgime selle ja hoiame tulemuse avalikest edetabelitest eemal koos märkusega, mitte tagasilükkamisega.

Kleebitud tekst. Kleepimine on blokeeritud ja tulemus, kus seda prooviti, jäetakse edetabelitest välja.

Vahelehtede vahetamine. Kui fookus lahkub testi ajal lehelt rohkem kui kaheks sekundiks, märgitakse test katkestatuks; see salvestatakse ja seda näidatakse, kuid edetabelisse see ei lähe.

Pausid. Üle viie sekundi pikkune vahe sõna- või tsitaaditestis märgib tulemuse peatatuks. Sama kohtlemine.

IME composition. Jaapani, korea ja hiina keele sisestus saabub composition-sündmuste kaudu, nii et jätame nende puhul keydown-reegli vahele. Kui midagi tundub ikkagi valesti, on see viga ja tahaksime logi näha.

Võrguühenduseta tulemused. Tulemus, mis sünkroonitakse rohkem kui kümme minutit pärast lõppu, jääb su ajalukku ilma edetabelikohata, sest me ei saa selle kella kontrollida.

Tõeliselt kiire olemine. Üle 130 WPM kohtad kordustesti, tõenäoliselt oma esimesel heal päeval.

Kuidas edasi kaevata

Iga väljajätmise põhjus on su ajaloos näha. Kui arvad, et eksime mõne tulemuse või piirangu osas, saada e-kiri meie pettusevastase kaitse lehel olevale edasikaebuste aadressile oma kontoga seotud aadressilt, lisades tulemuse lingi või testi kuupäeva ja kellaaja. Inimene vaatab klahvivajutuste taasesituse üle ja vastab mõne päeva jooksul. Edasikaebuste üle ei otsusta kunagi ainult automaatne mudel.

Kas me just avaldasime juhendi kontrollidest läbipääsemiseks? Osaliselt. Tunnuste loetelu oli käitumise põhjal alati avastatav ja piirväärtused jäävad salajaseks. Kordustest on see osa, mis loeb, ja selle läbimise viis on trükkida.

Korduma kippuvad küsimused

Kuidas trükkimistestid roboteid tuvastavad?

Head testid loevad klahvilogi: kas iga märgi taga on klahvivajutus, kui palju klahvide vahed kõiguvad ning kuidas klahve hoitakse ja kattuvalt vajutatakse. Skriptid kipuvad olema liiga korrapärased; hoolikad robotid suudavad inimesi jäljendada, mistõttu lisame kordustesti.

Kas robot võib trükkimistesti pettusevastasest kaitsest läbi pääseda?

Hoolikas robot võib ajastuse kontrollidest läbi pääseda: klahvivajutuste ajastuse detektorite uuring leidis, et võltsitud inimlik ajastus pääses neist mööda peaaegu iga kord. Seepärast hoiame kiireid tulemusi kordustesti jaoks kinni, mille robot peab uuesti läbima teise logiga, mis läbib samad kontrollid.

Miks mu trükkimistesti tulemus edetabelisse ei läinud?

Tavaliselt on põhjus alla 15 sekundi või 10 sõna pikkune test, üle viie sekundi pikkune paus, vahelehe vahetus või üle 130 WPM tulemus, mis ootab oma kordustesti. Su ajalugu näitab põhjust.

Allikad