タイピングテストは、スコアの裏にある打鍵ログを確認することで不正を検出します。当サイトでは、すべての結果を打鍵ログから再計算し、ハッシュを照合し、ログの構造とタイミングを調べます。そして時間制のテストで130 WPMを超え、しかもタイミングにも不自然な点がある結果は、再テストに合格するまで公開ランキングに載せません。タイミングのチェックで捕まるのは雑なボットです。丁寧に作られたボットには、再テストでもう一度すべてをやり直させます。
最初にタイミングのチェックをすり抜けたボットは、私たち自身のものでした。
私たちのエンドツーエンドテスト用のヘルパーは、40ミリ秒の固定間隔でキーを押していました。テストスクリプトとはそういうものだからです。サーバーは結果を再計算し、ハッシュを確認したうえで、その実行を疑わしいと判定しました。打鍵間隔のばらつきがゼロ、ロールオーバーもゼロ、キーを押している時間もすべて同じだったからです。私たちは単語ごとのランダムな揺らぎと、ときどき入る80〜300ミリ秒の「考える」間を加えて、ようやく自分たちのテストスイートで人間らしく見える結果を送れるようになりました。そのオプションはhumanLikeという名前で、いまもコードに残っています。
チェックは、すり抜けようとしないものには効きますが、すり抜けようとするものは通ってしまいます。そのため、設計の上では再テストに本当の重みを置いています。
ステップ1:すべてを再計算する
あなたのブラウザはWPMを送ってきません。送られてくるのは、打鍵ログ(keydown、keyup、input、compositionのすべてのイベントを、単調増加するperformance.now()の時計でタイムスタンプを付けたもの)、ブラウザが計算した指標、そして正規化した結果のSHA-256ハッシュです。
サーバーは同じ指標のコードをログに対して実行し、結果を比較します。いずれかの数値が0.01より大きく違えば、その結果はmetrics_mismatchとして却下されます。ハッシュが一致しなければhash_mismatchとして却下されます。クライアントを信用するサイトで最もよくある不正、つまりWPMの欄を書き換えるブラウザ拡張機能は、ここで失敗します。画面上の数字もデータベースの数字も同じ関数で計算されていて、だからこそ当サイトの指標の解説ページは、計算例が小数点以下2桁まで再現できると約束できるのです。
なぜサーバー側でテストの時間を計らないのか。そうすると、スコアにネットワークの影響が含まれてしまうからです。すべての打鍵が、回線によって変わる分だけ少しずつ遅れて届き、遅い回線を使う速いタイピストは、本当は持っている速度を失うことになります。ログを使えば、正確さはクライアントの時計から、正直さはサーバーでの再計算から得られます。
ステップ2:ログは筋が通っているか
タイミングを分析する前に、送られてきたデータの形を単純にチェックします。
- テストは15秒以上、または10語以上でなければなりません。それより短い実行はばらつきが大きすぎて順位を付けられず、水増しも最も簡単です。
- 結果は、テストが終わりうる時刻、つまり開始時刻にテスト自体の長さを足した時刻より前には届きません。開始から20秒後に届いた60秒テストの結果は、実際には行われていません。
- イベントの数は、入力された文字数と見合っていなければなりません。
- デスクトップでは、すべてのinputイベントが、keydownから50ミリ秒以内に続いていなければなりません。これで、貼り付けたテキスト、スクリプトで発生させたinputイベント、そして物理的なキーなしに文字を送り込むほとんどの打鍵注入ツールを捕まえられます。インプットメソッド(IMEの変換入力)による入力はこのルールの対象外で、スマートフォンの結果は公開ランキングに載りません。
- 開始や終了がない、あるいはタイムスタンプが単調増加していないログは不正な形式として、その場で却下されます。
どれも巧妙なものではありませんが、これで大部分を取り除けます。
ステップ3:打鍵のタイミングから何がわかるか
ここは意図的にすべてを公開していない部分です。特徴量の一覧は公開していますが、しきい値と重みは公開していません。公開したしきい値は標的になります。「標準偏差がNミリ秒未満ならフラグを立てる」と書けば、次のバージョンのスクリプトはどれもN+1を足してくるでしょう。私たちが採点に使う特徴量は次のとおりです。
キー間隔の平均と、そのばらつき。人間のタイピングは不規則です。168,960人のタイピストを対象としたDhakalらの2018年の研究では、キー間隔の平均は約239ミリ秒、標準偏差は約112ミリ秒でした。固定間隔で打つスクリプトにはばらつきがほとんどありません。打鍵に基づくCAPTCHAを調べた2025年のarXivの研究でも、50ミリ秒の固定遅延で打つテスト用ボットにまさにそれが見られました。これが最も強いシグナルで、私たちのヘルパーが引っかかったのもこれです。
40ミリ秒未満の間隔の割合。40ミリ秒の間隔を保ち続けると1分間に1,500文字、1語5文字として300 WPMになります。ロールオーバーでキーが重なったとき、指はそれほど短い間隔を単発で生むことがあるので、短い間隔が1つあっても何の意味もありません。間隔の大部分がそれほど短いログは、タイピングではありません。
キーを押している時間。本物の指では数十ミリ秒のばらつきがあります。合成されたイベントは、ツールがkeydownとkeyupを続けざまに発生させるため、押している時間がすべて同じか、ほぼゼロであることがよくあります。
ロールオーバー率。前のキーが上がる前に次のキーが押される頻度です。Dhakalが測ったロールオーバー率の平均は25%で、速いタイピストの多くは打鍵の40〜70%でロールオーバーし、キーの重なりは平均30ミリ秒でした。遅いタイピストはほとんどロールオーバーしないので、ロールオーバーのない速い結果は目立ちます。ボットがキーを重ねることはめったにありません。
最も長い間、1秒ごとの速度の揺れ、そして1秒を超える間隔の割合。人はためらうもので、スクリプトはそれを真似るよう指示されなければなりません。
スコアリングモデルはこれらを組み合わせ、結果を疑わしいとしてフラグを立てることがあります。130 WPM未満では、フラグそれ自体で何かが却下されることはありません。あなたの結果があなたから隠されることはなく、これらのチェックが決めるのは、それがランキングに載るかどうかだけです。
タイピングテストの不正はタイミングのチェックをすり抜けられるか?
丁寧に作られた不正なら、すり抜けられます。2026年1月のDavid ConderyによるarXivの論文は、人間が打ったテキストとAIが生成したテキストを見分けるための、打鍵タイミングに基づく検出器をテストしました。完全に自動化された注入は完璧に見分けられましたが、人間のタイミングを使った攻撃(人がAIのテキストを打ち直す、あるいはプログラムが人間のタイピングデータから遅延をサンプリングする)は、5つの分類器すべてを99.8%以上の確率ですり抜けました。この論文はタイピングテストではなく著者の判定に関するものですが、教訓は当てはまります。ステップ3で捕まえられるのは雑なものだけで、それ以外はほとんど捕まえられません。
私たち自身のテスト用ヘルパーも、小さな規模で同じことを示しています。ランダムな揺らぎと少しの間を加えただけで、明らかな合成から、ありえそうなものに変わりました。
ですからステップ3はふるいです。判定を下すのはステップ4です。
ステップ4:確認用の再テスト
時間制のテストで130 WPMを超え、しかもタイミングにも不自然な点がある結果は、あなたには表示されて保存もされますが、確認用の再テストに合格するまで公開ランキングには載りません。再テストは新しい30秒テストで、申告した速度の75%以上を出す必要があります。一度きりのまぐれや借り物のログは、2回目を乗り切れません。
なぜ130 WPMなのか。Dhakalのデータの平均51.56 WPMのおよそ2.5倍で、ほとんどのタイピストをはるかに超えています。そして本当にそれだけ速く打てる人なら、2回目もできます。不自然なタイミングを伴う突然の速い結果は、借り物のログやスクリプトが生む形そのものです。それが正直な結果なら、テスト1回分の追加は小さな代償です。
再テストは普通の文章で行う普通のタイピングテストで、ゆがめた画像や奇妙な記号の並んだページではありません。読みにくいテキストは誰でも遅くしますが、最も遅くなるのは、再テストで疑いを晴らすべき正直で速いタイピストです。正直で速いタイピストが落ちてしまう確認なら、ないほうがましです。普通の文章を使うことで、チェックは公平にもなります。再テストのログ自体も、ほかのすべての結果と同じタイミングのチェックを通ります。
送信回数の制限とアカウントの制限
送信には回数の制限があります。ログインしているユーザーごとに1分間に30回、IPアドレスごとに60回です。チェックに何度も引っかかるアカウントはシャドウバン、つまりランキングから人知れず非表示にされます。24時間以内に重大な不正対策のイベントが3回あると、自動的にそうなります。時間枠の中でイベントを数えることで、一度おかしな結果が出ただけでアカウントを失うことはなく、失敗を繰り返すスクリプトはすぐに止まります。
全期間のランキングには、そのアカウントで合計30分間タイピングしていることも必要なので、完璧な1回を出しただけの新しいアカウントが上位に立つことはできません。
うっかりフラグが立つケース
フラグが立った結果のほとんどは不正ではありません。正直に打っていてもチェックに引っかかるのは、次のような場合です。
スマートフォンの自動修正。置き換えは、複数の文字を変更する1つのinputイベントとして届きます。当サイトではこれを1回の打鍵として数え、フラグを立て、却下はせずに注記を付けて公開ランキングから外します。
テキストの貼り付け。貼り付けはブロックされ、貼り付けが試みられた結果はランキングから除外されます。
タブの切り替え。テスト中にフォーカスが2秒以上ページから離れると、中断されたものとして扱われます。保存されて表示はされますが、順位は付きません。
一時停止。単語テストや引用文テストで5秒を超える間があると、その結果は一時停止したものとして扱われます。扱いは同じです。
IMEの変換入力。日本語、韓国語、中国語の入力は変換(composition)イベントとして届くので、これらではkeydownのルールを適用しません。それでも何かがおかしく見えるなら、それはバグなので、ログを送っていただけると助かります。
オフラインでの結果。終了から10分以上経ってから同期された結果は、時計を検証できないため、順位なしで履歴に残ります。
本当に速いこと。130 WPMを超えると再テストに出会います。おそらく、調子の良い最初の日に。
異議申し立ての方法
除外された結果にはすべて、その理由が履歴に表示されます。ある結果や制限について私たちの判断が間違っていると思う場合は、アカウントに登録したメールアドレスから、不正対策のページにある異議申し立て用のアドレスにメールを送ってください。結果のリンク、またはテストの日時を添えてください。担当者が打鍵のリプレイを見て、数日以内に返信します。異議申し立てが自動のモデルだけで判断されることはありません。
いま私たちは、チェックをすり抜ける方法を公開してしまったのでしょうか。一部はそうです。特徴量の一覧は、もともと挙動から推測できるものでした。しきい値は非公開のままです。大事なのは再テストで、それに合格する方法はタイピングすることです。
よくある質問
タイピングテストはどうやってボットを検出する?
良いテストは打鍵ログを読みます。すべての文字の裏にキーを押した記録があるか、キー間隔がどれだけばらついているか、キーがどう押され、どう重なっているかです。スクリプトは規則的すぎる傾向があります。丁寧なボットは人間を真似できるので、当サイトでは再テストを加えています。
ボットはタイピングテストの不正対策をすり抜けられる?
丁寧に作られたボットなら、タイミングのチェックはすり抜けられます。打鍵タイミングに基づく検出器についての研究では、偽造した人間らしいタイミングがほぼ毎回すり抜けていました。だから当サイトは速い結果を再テストまで保留にしています。ボットは、同じチェックを通る2つ目のログで、もう一度合格しなければなりません。
タイピングテストの結果に順位が付かなかったのはなぜ?
よくあるのは、15秒未満または10語未満のテスト、5秒を超える一時停止、タブの切り替え、あるいは再テスト待ちの130 WPM超の結果です。理由は履歴に表示されます。