Hvordan avslører skrivetester juks? Slik sjekker vi våre

Skrivetester avslører juks ved å sjekke tastetrykkloggen bak hvert resultat. Vår regner ut hvert resultat på nytt fra tastetrykkloggen, sjekker en hash, tester loggens struktur og timing, og holder ethvert tidsbestemt resultat over 130 WPM der også timingen ser uvanlig ut, utenfor de offentlige listene til du består en ny test. Timingkontrollene fanger slurvete boter; den nye testen tvinger en omhyggelig bot til å gjøre alt på nytt.

Den første boten som slo timingkontrollene våre, var vår egen.

Hjelperen i ende-til-ende-testene våre trykket taster med et fast intervall på 40 ms, fordi det er det et testskript gjør. Serveren regnet ut resultatet på nytt, bekreftet hashen og vurderte kjøringen som mistenkelig: null variasjon mellom tastetrykk, null rollover, identiske holdetider. Vi måtte legge til tilfeldig variasjon per ord og sporadiske «tenkepauser» på 80 til 300 ms før vår egen testpakke kunne levere et resultat som så menneskelig ut. Valget finnes fortsatt i koden, merket humanLike.

Kontrollene virker mot alt som ikke prøver, og alt som prøver, kan komme gjennom dem, så oppsettet legger den egentlige vekten på en ny test.

Steg én: regn ut alt på nytt

Nettleseren din sender oss ikke et WPM-tall. Den sender tastetrykkloggen (hver keydown-, keyup-, input- og composition-hendelse, tidsstemplet med den monotone klokken performance.now()), måltallene den regnet ut, og en SHA-256-hash av det kanoniske resultatet.

Serveren kjører den samme målekoden på loggen og sammenligner. Avviker et tall med mer enn 0,01, avvises resultatet som metrics_mismatch. Stemmer ikke hashen, avvises det som hash_mismatch. En nettleserutvidelse som redigerer WPM-feltet, det vanligste juksetrikset på sider som stoler på klienten, stopper her. De samme funksjonene lager tallet på skjermen din og i databasen, og det er derfor siden om måltall kan love at det utregnede eksempelet gir samme svar med to desimaler.

Hvorfor ikke ta tiden på testen på serveren? Da ville resultatet ditt tatt med nettverket. Hvert tastetrykk ville nådd oss litt for sent, med en forsinkelse som varierer med tilkoblingen din, og en rask skriver på en treg linje ville mistet fart vedkommende faktisk hadde. Loggen gir oss klientens klokke for nøyaktighetens skyld og serverens nye utregning for ærlighetens skyld.

Steg to: gir loggen mening?

Før noen tidsanalyse kommer enkle kontroller av formen på innsendingen:

  • Testen må vare minst 15 sekunder eller 10 ord. Kortere kjøringer er for ustabile til å rangeres og de enkleste å blåse opp.
  • Et resultat kan ikke komme før testen kunne vært ferdig: starten pluss testens egen lengde. Et resultat på 60 sekunder som kommer tjue sekunder etter at det startet, har ikke skjedd.
  • Antall hendelser må passe med antall tegn som ble skrevet.
  • På datamaskin må hver input-hendelse følge en keydown innen 50 ms. Dette fanger innlimt tekst, skriptede input-hendelser og de fleste verktøy som injiserer tastetrykk, som sender tekst uten en fysisk tast. Skriving gjennom en inndatametode (IME-komposisjon) er unntatt, og mobilresultater holdes utenfor de offentlige listene.
  • En logg uten start, uten slutt eller med tidsstempler som ikke er monotone, er misdannet og avvises med en gang.

Ingenting av dette er smart, men det fjerner det meste av mengden.

Steg tre: hva kan timingen i tastetrykkene avsløre?

Dette er delen vi bevisst ikke dokumenterer fullt ut: listen over egenskaper er offentlig, grenseverdiene og vektene er det ikke. En publisert grenseverdi er en blink. Hvis vi sa «et standardavvik under N millisekunder blir flagget», ville neste versjon av hvert skript legge til N pluss én. Egenskapene vi vurderer:

Snittavstanden mellom taster og hvor mye den varierer. Menneskelig skriving er ujevn. I studien til Dhakal og kolleger fra 2018 av 168 960 skrivere var snittintervallet mellom taster omtrent 239 ms med et standardavvik på omtrent 112 ms. Et skript som skriver med fast intervall, har nesten ingen variasjon; en arXiv-studie fra 2025 av en tastetrykkbasert CAPTCHA så nettopp det hos testboten sin, som skrev med en fast forsinkelse på 50 ms. Dette er det sterkeste signalet vårt, og det hjelperen vår gikk i.

Andelen avstander under 40 ms. En avstand på 40 ms, holdt over tid, er 1 500 tegn i minuttet, eller 300 WPM med fem tegn per ord. Fingre lager enkeltavstander så korte når de overlapper taster under rollover, så én kort avstand betyr ingenting. En logg der en stor andel av avstandene er så korte, er ikke skriving.

Holdetider for tastene. Ekte fingre varierer med titalls millisekunder; syntetiske hendelser har ofte identiske holdetider eller nesten null, fordi verktøyet sender keydown og keyup rett etter hverandre.

Rollover-andel. Hvor ofte neste tast går ned før den forrige kommer opp. Dhakal målte en gjennomsnittlig rollover-andel på 25 %, der de fleste raske skrivere hadde rollover på 40 til 70 % av tastetrykkene, og tastene overlappet med 30 ms i snitt. Trege skrivere bruker nesten ingen, så et raskt resultat uten rollover skiller seg ut. Boter overlapper sjelden taster.

Lengste pause, svingninger i farten fra sekund til sekund, og andelen avstander over ett sekund. Folk nøler på måter et skript må få beskjed om å etterligne.

En vurderingsmodell kombinerer disse og kan flagge et resultat som mistenkelig. Under 130 WPM avviser et flagg ingenting på egen hånd. Resultatet ditt skjules aldri for deg; disse kontrollene avgjør bare om det blir rangert.

Kan juks på skrivetester komme seg forbi timingkontroller?

Ja, hvis jukset er laget med omhu. En arXiv-artikkel fra januar 2026 av David Condrey testet detektorer basert på tastetrykktiming som skulle skille tekst skrevet av mennesker fra KI-generert tekst. De skilte ut helautomatisert injeksjon perfekt, men angrep med menneskelig timing (en person som skriver KI-tekst inn på nytt, eller et program som trekker forsinkelser fra data om menneskelig skriving) slapp unna alle fem klassifiseringsmodellene i minst 99,8 % av tilfellene. Artikkelen handler om å avsløre forfatterskap, ikke om skrivetester, men lærdommen gjelder også her: steg tre fanger de slurvete og ikke stort mer.

Vår egen testhjelper viser det samme i liten skala: tilfeldig variasjon og noen pauser flyttet den fra åpenbart syntetisk til troverdig.

Så steg tre er et filter. Dommen kommer fra steg fire.

Steg fire: den nye bekreftelsestesten

Er et tidsbestemt resultat over 130 WPM og timingen også ser uvanlig ut, ser du det, og det lagres, men det holdes utenfor de offentlige listene til du består en ny bekreftelsestest. Det er en ny test på 30 sekunder, og du må nå minst 75 % av farten du oppga. Et enkeltstående lykketreff eller en lånt logg overlever ikke en ny runde.

Hvorfor 130 WPM? Det er omtrent to og en halv gang snittet på 51,56 WPM i Dhakals data, langt over de fleste skrivere, og alle som virkelig skriver så raskt, klarer det to ganger. Et plutselig raskt resultat med rar timing er formen en lånt logg eller et skript gir, og er det ærlig, er én ekstra test en liten pris.

Den nye testen er en helt vanlig skrivetest, med vanlig tekst, ikke et forvrengt bilde eller en side med rare symboler. Tekst som er vanskelig å lese, gjør alle tregere, og de som blir mest forsinket, er nettopp de ærlige raske skriverne den nye testen finnes for å klarere. En bekreftelse som ærlige raske skrivere ikke består, er verre enn ingen. Vanlig tekst gjør også kontrollen rettferdig: loggen fra den nye testen går gjennom de samme timingkontrollene som ethvert annet resultat.

Grenser for innsendinger og utestengning

Innsendinger er begrenset: tretti i minuttet per innlogget bruker, seksti per IP-adresse. En konto som stadig går i kontrollene, blir skyggeutestengt (shadow ban), det vil si stille skjult fra listene, og tre alvorlige hendelser i juksekontrollen innen 24 timer utløser det automatisk. Når vi teller hendelser innenfor et tidsvindu, koster ett rart resultat deg aldri kontoen, mens et skript som feiler gang på gang, stoppes raskt.

Topplistene for all tid krever også 30 minutter skriving på kontoen, så en ny konto med én perfekt kjøring kan ikke toppe dem.

Det som får deg flagget ved et uhell

De fleste flaggede resultater er ikke juks. De ærlige måtene å gå i en kontroll på:

Autokorrektur på mobil. En erstatning kommer som én input-hendelse som endrer flere tegn. Vi teller den som ett tastetrykk, flagger den og holder resultatet utenfor de offentlige listene med en merknad, ikke en avvisning.

Innlimt tekst. Innliming er blokkert, og et resultat der det ble forsøkt, holdes utenfor listene.

Bytte av fane. Forlater fokuset siden i mer enn to sekunder under en test, merkes den som avbrutt; den lagres og vises, men rangeres ikke.

Pauser. Et opphold på over fem sekunder i en ord- eller sitattest merker resultatet som satt på pause. Samme behandling.

IME-komposisjon. Japansk, koreansk og kinesisk inndata kommer gjennom composition-hendelser, så vi hopper over keydown-regelen for dem. Ser noe fortsatt feil ut, er det en feil hos oss, og vi vil gjerne ha loggen.

Resultater uten nett. Et resultat som synkroniseres mer enn ti minutter etter at det ble fullført, blir liggende urangert i historikken din, fordi vi ikke kan bekrefte klokken.

Å være virkelig rask. Over 130 WPM møter du den nye testen, sannsynligvis på din første gode dag.

Slik klager du

Hver utelukkelse viser grunnen i historikken din. Mener du at vi tar feil om et resultat eller en begrensning, så send e-post til klageadressen på siden om juksekontroll fra adressen på kontoen din, med lenken til resultatet eller dato og klokkeslett for testen. Et menneske ser gjennom avspillingen av tastetrykkene og svarer innen noen dager. Klager avgjøres aldri av den automatiske modellen alene.

Har vi nettopp publisert en oppskrift på hvordan du kommer gjennom kontrollene? Delvis. Listen over egenskaper har hele tiden kunnet utledes fra oppførselen, og grenseverdiene forblir hemmelige. Den nye testen er delen som betyr noe, og måten å bestå den på er å skrive.

Ofte stilte spørsmål

Hvordan avslører skrivetester boter?

De gode leser tastetrykkloggen: om hvert tegn har et tastetrykk bak seg, hvor mye avstandene mellom tastene varierer, og hvordan tastene holdes og overlapper. Skript er gjerne for regelmessige; omhyggelige boter kan etterligne mennesker, og det er derfor vi legger til en ny test.

Kan en bot komme gjennom juksekontrollen på en skrivetest?

En omhyggelig bot kan komme gjennom timingkontroller: forskning på detektorer basert på tastetrykktiming fant at forfalsket menneskelignende timing slapp unna nesten hver gang. Det er derfor vi holder raske resultater tilbake til en ny test, som en bot må bestå på nytt med en ny logg som klarer de samme kontrollene.

Hvorfor ble ikke resultatet mitt på skrivetesten rangert?

Som regel en test under 15 sekunder eller 10 ord, en pause på over fem sekunder, et fanebytte eller et resultat over 130 WPM som venter på sin nye test. Historikken din viser grunnen.

Kilder