Kirjoitustestit tunnistavat huijaamisen tarkistamalla jokaisen tuloksen takana olevan näppäinlokin. Meidän testimme laskee jokaisen tuloksen uudelleen sen näppäinlokista, tarkistaa tiivisteen, testaa lokin rakenteen ja ajoituksen ja pitää jokaisen ajastetun yli 130 WPM:n tuloksen, jonka ajoitus näyttää lisäksi epätavalliselta, poissa julkisilta tulostauluilta, kunnes läpäiset uusintatestin. Ajoitustarkistukset nappaavat huolimattomat botit; uusintatesti pakottaa huolellisenkin tekemään kaiken uudelleen.
Ensimmäinen botti, joka läpäisi ajoitustarkistuksemme, oli oma.
Päästä päähän -testiemme apuohjelma painoi näppäimiä tasaisin 40 ms:n välein, koska niin testiskripti tekee. Palvelin laski tuloksen uudelleen, vahvisti tiivisteen ja pisteytti suorituksen epäilyttäväksi: nolla vaihtelua näppäilyjen välillä, nolla rolloveria, identtiset pitoajat. Meidän oli lisättävä satunnaista sanakohtaista värinää ja satunnaisia 80–300 ms:n "miettimistaukoja", ennen kuin oma testisarjamme pystyi lähettämään ihmisen näköisen tuloksen. Asetus on yhä koodissa nimellä humanLike.
Tarkistukset tehoavat kaikkeen, mikä ei yritä, ja kaikki, mikä yrittää, voi läpäistä ne, joten rakenne panee todellisen painon uusintatestille.
Ensimmäinen vaihe: laske kaikki uudelleen
Selaimesi ei lähetä meille WPM-lukua. Se lähettää näppäinlokin (jokaisen keydown-, keyup-, input- ja composition-tapahtuman aikaleimattuna monotonisella performance.now()-kellolla), laskemansa mittarit ja kanonisen tuloksen SHA-256-tiivisteen.
Palvelin ajaa saman mittarikoodin lokille ja vertaa. Jos jokin luku eroaa yli 0,01, tulos hylätään syyllä metrics_mismatch. Jos tiiviste ei täsmää, se hylätään syyllä hash_mismatch. WPM-kenttää muokkaava selainlaajennus, yleisin huijauskeino sivustoilla, jotka luottavat asiakkaaseen, kaatuu tähän. Samat funktiot tuottavat luvun näytöllesi ja tietokantaan, ja siksi mittarisivumme voi luvata, että sen laskuesimerkki toistuu kahden desimaalin tarkkuudella.
Miksi testiä ei ajasteta palvelimella? Silloin tulokseesi sisältyisi verkko. Jokainen näppäily saapuisi meille hieman myöhässä, yhteydestäsi riippuvan määrän verran, ja hitaalla linjalla oleva nopea kirjoittaja menettäisi nopeutta, joka hänellä oikeasti oli. Loki antaa meille asiakkaan kellon tarkkuutta varten ja palvelimen uudelleenlaskennan rehellisyyttä varten.
Toinen vaihe: onko lokissa järkeä?
Ennen ajoitusanalyysia lähetyksen muodolle tehdään yksinkertaiset tarkistukset:
- Testin on kestettävä vähintään 15 sekuntia tai 10 sanaa. Lyhyemmät suoritukset ovat liian kohinaisia sijoitettaviksi ja helpoimpia paisuttaa.
- Tulos ei voi saapua ennen kuin testi on voinut päättyä: sen alku plus sen oma kesto. 60 sekunnin tulos, joka saapuu kaksikymmentä sekuntia alkamisensa jälkeen, ei tapahtunut.
- Tapahtumien määrän on sovittava kirjoitettuihin merkkeihin.
- Tietokoneella jokaisen input-tapahtuman on seurattava keydown-tapahtumaa 50 ms:n sisällä. Tämä nappaa liitetyn tekstin, skriptatut input-tapahtumat ja useimmat näppäilyjä syöttävät työkalut, jotka laukaisevat tekstiä ilman fyysistä näppäintä. Syöttömenetelmäeditorin kautta kirjoittaminen (IME-koostaminen) on vapautettu, eikä puhelintuloksia sijoiteta julkisille tulostauluille.
- Loki, josta puuttuu alku tai loppu tai jonka aikaleimat eivät ole monotonisia, on virheellinen ja hylätään suoraan.
Mikään tästä ei ole nokkelaa, mutta se poistaa suurimman osan määrästä.
Kolmas vaihe: mitä näppäilyjen ajoitus voi paljastaa?
Tätä osaa emme tarkoituksella dokumentoi kokonaan: piirteiden luettelo on julkinen, raja-arvot ja painot eivät. Julkaistu raja-arvo on maalitaulu. Jos sanoisimme "alle N millisekunnin keskihajonta merkitään", jokaisen skriptin seuraava versio lisäisi N plus yksi. Pisteyttämämme piirteet:
Näppäilyjen keskimääräinen väli ja sen vaihtelu. Ihmisen kirjoitus on epäsäännöllistä. Dhakalin ja kollegoiden vuoden 2018 tutkimuksessa, joka kattoi 168 960 kirjoittajaa, näppäilyjen keskimääräinen väli oli noin 239 ms ja keskihajonta noin 112 ms. Tasaisin välein kirjoittavassa skriptissä vaihtelua ei ole juuri lainkaan; vuoden 2025 arXiv-tutkimus näppäilyihin perustuvasta CAPTCHAsta havaitsi juuri tämän testibotissaan, joka kirjoitti kiinteällä 50 ms:n viiveellä. Tämä on vahvin signaalimme, ja juuri siihen apuohjelmamme kompastui.
Alle 40 ms:n välien osuus. Yllä pidetty 40 ms:n väli on 1 500 merkkiä minuutissa eli 300 WPM viiden merkin sanoilla. Sormet tuottavat yksittäisiä noin lyhyitä välejä, kun ne painavat näppäimiä päällekkäin rolloverin aikana, joten yksi lyhyt väli ei merkitse mitään. Loki, jossa suuri osa väleistä on noin lyhyitä, ei ole kirjoittamista.
Näppäinten pitoajat. Oikeat sormet vaihtelevat kymmenillä millisekunneilla; synteettisillä tapahtumilla on usein identtiset tai lähes nollan pitoajat, koska työkalu laukaisee keydownin ja keyupin heti peräkkäin.
Rolloverin osuus. Kuinka usein seuraava näppäin painuu alas ennen kuin edellinen nousee. Dhakal mittasi rolloverin keskimääräiseksi osuudeksi 25 %; useimmat nopeat kirjoittajat tekivät rolloverin 40–70 %:ssa painalluksista, ja näppäimet olivat päällekkäin keskimäärin 30 ms. Hitaat kirjoittajat eivät käytä sitä juuri lainkaan, joten nopea tulos ilman rolloveria erottuu. Botit painavat näppäimiä harvoin päällekkäin.
Pisin tauko, sekunnista toiseen tapahtuvat nopeuden heilahtelut ja yli sekunnin välien osuus. Ihmiset epäröivät tavoilla, joita skriptin on erikseen käskettävä jäljitellä.
Pisteytysmalli yhdistää nämä ja voi merkitä tuloksen epäilyttäväksi. Alle 130 WPM:n tuloksissa merkintä ei yksinään hylkää mitään. Tulostasi ei koskaan piiloteta sinulta; nämä tarkistukset ratkaisevat vain, sijoitetaanko se listalle.
Voiko kirjoitustestin huijaus ohittaa ajoitustarkistukset?
Voi, jos huijaus on rakennettu huolella. David Condreyn tammikuussa 2026 julkaisema arXiv-artikkeli testasi näppäilyjen ajoitukseen perustuvia tunnistimia, joiden oli tarkoitus erottaa ihmisen kirjoittama teksti tekoälyn tuottamasta. Ne erottivat täysin automatisoidun syötön täydellisesti, mutta hyökkäykset, joissa oli ihmisen ajoitus (ihminen kirjoittamassa tekoälyn tekstiä uudelleen tai ohjelma, joka poimi viiveet ihmisten kirjoitusaineistosta), välttivät kaikki viisi luokittelijaa vähintään 99,8 %:n osuudella. Artikkeli käsittelee tekijyyden tunnistamista eikä kirjoitustestejä, mutta opetus pätee: kolmas vaihe nappaa huolimattomat eikä juuri muuta.
Oma testiapuohjelmamme osoittaa saman pienessä mittakaavassa: satunnainen värinä ja muutama tauko siirsivät sen ilmeisen synteettisestä uskottavaksi.
Kolmas vaihe on siis suodatin. Tuomion antaa neljäs vaihe.
Neljäs vaihe: vahvistava uusintatesti
Jos ajastettu tulos on yli 130 WPM ja sen ajoitus näyttää lisäksi epätavalliselta, näet sen ja se tallennetaan, mutta se pysyy poissa julkisilta tulostauluilta, kunnes läpäiset vahvistavan uusintatestin. Se on uusi 30 sekunnin testi, ja sinun on yllettävä vähintään 75 %:iin ilmoittamastasi nopeudesta. Kertaluonteinen sattuma tai lainattu loki ei selviä toisesta suorituksesta.
Miksi 130 WPM? Se on noin kaksi ja puoli kertaa Dhakalin aineiston 51,56 WPM:n keskiarvo, reilusti useimpien kirjoittajien yläpuolella, ja joka oikeasti kirjoittaa noin nopeasti, pystyy siihen kahdesti. Äkillinen nopea tulos oudolla ajoituksella on juuri sen muotoinen, mitä lainattu loki tai skripti tuottaa, ja jos se on rehellinen, yksi lisätesti on pieni hinta.
Uusintatesti on tavallinen kirjoitustesti tavallisella tekstillä, ei vääristelty kuva tai sivullinen outoja symboleita. Vaikealukuinen teksti hidastaa kaikkia, ja eniten se hidastaa juuri niitä rehellisiä nopeita kirjoittajia, joiden vapauttamiseksi uusintatesti on olemassa. Vahvistus, jossa rehelliset nopeat kirjoittajat epäonnistuvat, on huonompi kuin ei mitään. Tavallinen teksti tekee tarkistuksesta myös reilun: uusintatestin oma loki käy läpi samat ajoitustarkistukset kuin mikä tahansa muu tulos.
Lähetysrajat ja estot
Lähetyksiä rajoitetaan: kolmekymmentä minuutissa sisäänkirjautunutta käyttäjää kohden, kuusikymmentä IP-osoitetta kohden. Tili, joka laukaisee tarkistukset yhä uudelleen, saa varjoeston (shadow ban) eli piilotetaan hiljaisesti tauluilta, ja kolme vakavaa huijauksenestotapahtumaa 24 tunnin sisällä laukaisee sen automaattisesti. Kun tapahtumat lasketaan aikaikkunan sisällä, yksi outo tulos ei koskaan maksa sinulle tiliä, kun taas yhä uudelleen epäonnistuva skripti pysähtyy nopeasti.
Kaikkien aikojen tulostaulut edellyttävät lisäksi tililtä 30 minuuttia kirjoittamista, joten uusi tili yhdellä täydellisellä suorituksella ei pääse niiden kärkeen.
Mikä voi saada merkinnän vahingossa
Useimmat merkityt tulokset eivät ole huijausta. Rehelliset tavat laukaista tarkistus:
Automaattinen korjaus puhelimessa. Korvaus saapuu yhtenä input-tapahtumana, joka muuttaa useita merkkejä. Laskemme sen yhdeksi näppäilyksi, merkitsemme sen ja pidämme tuloksen poissa julkisilta tulostauluilta huomautuksen kera, emme hylkää sitä.
Liitetty teksti. Liittäminen on estetty, ja tulos, jossa sitä yritettiin, jätetään tauluilta pois.
Välilehden vaihtaminen. Jos kohdistus poistuu sivulta testin aikana yli kahdeksi sekunniksi, testi merkitään keskeytetyksi; se tallennetaan ja näytetään mutta ei sijoiteta listalle.
Tauot. Yli viiden sekunnin väli sana- tai lainaustestissä merkitsee tuloksen tauotetuksi. Sama käsittely.
IME-koostaminen. Japanin, korean ja kiinan syöte saapuu composition-tapahtumina, joten ohitamme niiden kohdalla keydown-säännön. Jos jokin näyttää silti väärältä, kyse on bugista, ja haluaisimme nähdä lokin.
Ilman verkkoa tehdyt tulokset. Tulos, joka synkronoidaan yli kymmenen minuuttia päättymisensä jälkeen, jää historiaasi sijoittamattomana, koska emme voi validoida sen kelloa.
Aito nopeus. Yli 130 WPM:n nopeudessa kohtaat uusintatestin, luultavasti ensimmäisenä hyvänä päivänäsi.
Miten valitat
Jokainen poissulkeminen näyttää syynsä historiassasi. Jos olet sitä mieltä, että olemme väärässä tuloksen tai rajoituksen suhteen, lähetä sähköpostia huijauksenestosivumme valitusosoitteeseen tilisi sähköpostiosoitteesta ja liitä mukaan tuloksen linkki tai testin päivämäärä ja kellonaika. Ihminen katsoo näppäilyjen uusinnan ja vastaa muutamassa päivässä. Valituksia ei koskaan ratkaise automaattinen malli yksin.
Julkaisimmeko juuri ohjeet tarkistusten läpäisemiseen? Osittain. Piirteiden luettelo on aina ollut pääteltävissä toiminnasta, ja raja-arvot pysyvät salaisina. Uusintatesti on se osa, jolla on merkitystä, ja tapa läpäistä se on kirjoittaa.
Usein kysytyt kysymykset
Miten kirjoitustestit tunnistavat botit?
Hyvät testit lukevat näppäinlokin: onko jokaisen merkin takana näppäimen painallus, kuinka paljon näppäilyjen välit vaihtelevat ja miten näppäimiä pidetään pohjassa ja painetaan päällekkäin. Skriptit ovat yleensä liian säännöllisiä; huolelliset botit voivat jäljitellä ihmisiä, ja siksi lisäämme uusintatestin.
Voiko botti läpäistä kirjoitustestin huijauksenestotarkistukset?
Huolellinen botti voi läpäistä ajoitustarkistukset: näppäilyjen ajoitukseen perustuvia tunnistimia koskeva tutkimus havaitsi, että väärennetty ihmismäinen ajoitus vältti ne lähes joka kerta. Siksi pidätämme nopeat tulokset uusintatestiä varten, joka botin on läpäistävä uudelleen toisella lokilla, jonka on selvitettävä samat tarkistukset.
Miksi kirjoitustestin tulostani ei sijoitettu listalle?
Yleensä syynä on alle 15 sekunnin tai 10 sanan testi, yli viiden sekunnin tauko, välilehden vaihto tai yli 130 WPM:n tulos, joka odottaa uusintatestiään. Historiasi näyttää syyn.