はじめに
― 人間とボットを分ける最後の関門 ―
ログイン、会員登録、問い合わせフォーム。
これらはすべて 攻撃者にとって“おいしい入口” です。
- ブルートフォース
- アカウント乗っ取り
- スパム投稿
- リソース枯渇(DoS)
そこで登場するのが CAPTCHA です。
CAPTCHAの定義
CAPTCHA とは:
人間には簡単だが、プログラム(ボット)には困難な課題を解かせることで、人間であることを判定する仕組み
正式名称は
Completely Automated Public Turing test to tell Computers and Humans Apart
名前からして強気です。
CAPTCHAは「認証」ではない
ここ、かなり重要です。
| 項目 | CAPTCHA | 認証 |
|---|---|---|
| 目的 | 人間かどうか | 誰か |
| 保証 | しない | する |
| 位置づけ | 防御補助 | 中核 |
👉 CAPTCHAは
「本人確認」ではなく「自動化排除」
なぜCAPTCHAが必要か
防げる攻撃
- パスワード総当たり
- クレデンシャルスタッフィング
- ボットによる大量登録
- スパム投稿
防げないもの
- 人間が操作する攻撃
- CAPTCHA解決代行
- AI画像認識(年々強化)
👉 万能ではないが、ないと一気に荒れる
CAPTCHAの主な種類
1. 文字認識型(古典)
- 歪んだ文字を読む
- OCR対策が目的
❌ UXが悪い
❌ AIに弱くなった
2. 画像選択型
- 「信号機を選べ」
- 文脈理解を要求
代表例:reCAPTCHA
3. チェックボックス型
- 「私はロボットではありません」
- 裏で挙動分析
👉 実は一番CAPTCHAっぽくない
4. 非表示型(スコア型)
- ユーザー操作なし
- 行動・環境・履歴から判定
UX最強
透明すぎて存在を忘れる
CAPTCHAの内部で見られているもの
表では簡単、裏ではガチ。
- マウス移動の揺らぎ
- クリックのタイミング
- ブラウザ指紋
- Cookie履歴
- IPレピュテーション
👉 「解答」より「振る舞い」
CAPTCHAの限界(現実)
1. AIが普通に解く
- 画像認識
- 文字認識
- 音声認識
👉 CAPTCHAは 人類 vs AI の軍拡競争
2. 人力解決サービス
- 数円〜数十円/回
- 攻撃者から見れば安い
3. UX破壊
- アクセシビリティ問題
- 高齢者・障害者に不利
現代における正しい位置づけ
CAPTCHAは 単体では弱い。
だから今はこう使われます:
CAPTCHA
×
リスクベース判定
×
レート制限
×
MFA
最後のブレーキ
SSO・認証との関係
- CAPTCHAは 認証の前段
- SSOやOIDCの代替ではない
- 怪しいときだけ出すのが正解
例:
- 普段:SSOで即ログイン
- 怪しい:CAPTCHA → MFA
よくある誤解
| 誤解 | 実際 |
|---|---|
| CAPTCHAがあれば安全 | ❌ |
| 難しくすれば強い | ❌ |
| 自作すれば安上がり | ❌ |
| 全員に出すべき | ❌ |
まとめ
- CAPTCHAは ボット排除装置
- 認証・本人確認ではない
- 単体では弱い
- 枯れた実装 + 条件付き表示 が正解
CAPTCHAは
「信用しないための仕組み」
ではなく
「疑うための仕組み」