こんにちは、フルスタックエンジニアのryuです。
今回の記事では、基本情報技術者試験の過去問を使いながら、CAPTCHAとは何か、何のために使われるのかを解説します。
CAPTCHAというと、
「ぐにゃぐにゃした文字を入力するもの」 「私はロボットではありません、にチェックを入れるもの」
というイメージを持っている方も多いと思います。
ただ、CAPTCHAの本質は表示方法ではありません。
Webサイトへアクセスしているのが人間なのか、自動化されたプログラムなのかを判別するための仕組みです。
基本情報技術者試験では、CAPTCHAだけでなく、暗号、パケットキャプチャ、CRYPTRECなどの用語が同じ選択肢に並ぶことがあります。
この記事では、まず過去問を解き、そのあとにCAPTCHAの目的、どんな場面で使われるのか、ブルートフォース攻撃との関係、CAPTCHAだけでは十分でない理由まで順番に解説します。
CAPTCHAの目的はどれか¶
今回はこちらの問題です。
CAPTCHAの目的はどれか。
ア:Webサイトなどにおいて,コンピュータではなく人間がアクセスしていることを確認する。 イ:公開鍵暗号と共通鍵暗号を組み合わせて,メッセージを効率よく暗号化する。 ウ:通信回線を流れるパケットをキャプチャして,パケットの内容の表示や解析,集計を行う。 エ:電子政府推奨暗号の安全性を評価し,暗号技術の適切な実装法,運用法を調査,検討する。 出典:平成31年春期 問36
答えは、アです。
CAPTCHAは、Webサイトなどを操作しているのが人間なのか、自動化されたプログラムなのかを判別するために利用されます。
まずはCAPTCHAの基本から見ていきましょう。
CAPTCHAとは?¶
CAPTCHAとは、人間による操作と、自動化されたプログラムによる操作を区別するための仕組みです。
Webサービスでは、攻撃者がプログラムを使って大量のアクセスや入力を自動化することがあります。
例えば、
自動プログラム
↓
ログインを大量に試す
↓
アカウント作成を大量に行う
↓
フォームへ大量投稿する
といった操作です。
CAPTCHAを利用すると、その操作が人間によるものか、自動化されたボットによるものかを判別するための確認を追加できます。

昔からよく知られているのは、画像に表示された文字を読み取らせる形式です。
ただし、現在のCAPTCHAやボット対策は、必ずしも「読みにくい文字を入力させる」ものだけではありません。
利用者の操作やリスクを評価し、必要な場合だけ追加の確認を行う仕組みもあります。
そのため試験では、見た目ではなく、
CAPTCHA=人間と自動化されたプログラムを区別するための仕組み
と覚えておくのがおすすめです。
なぜCAPTCHAが必要なの?¶
Webサービスでは、人間が1回ずつ操作するのとは比べものにならない速度で、プログラムから大量のリクエストを送ることができます。
例えば、問い合わせフォームへ自動投稿するプログラムなら、
1回投稿
↓
2回投稿
↓
3回投稿
↓
短時間に数千回投稿
といったことも可能です。
こうした自動化された操作をそのまま受け付けると、
- スパム投稿
- 不正なアカウント作成
- 大量のログイン試行
- チケットや商品の自動取得
- レビューや投票の不正操作
- Webサービスへの負荷増大
などにつながる可能性があります。
CAPTCHAは、このようなボットによる自動操作を抑えるための一つの防御層として利用されます。
CAPTCHAはブルートフォース攻撃対策になる?¶
元記事では、
「CAPTCHAを使えばブルートフォース攻撃をブロックできる」
と説明していました。
方向性としては近いのですが、少し言い切りすぎです。
ブルートフォース攻撃では、同じアカウントなどに対して大量のパスワード候補を自動的に試します。
password001 → 失敗
password002 → 失敗
password003 → 失敗
...
ログイン画面にCAPTCHAを追加すれば、この自動化を難しくする効果は期待できます。
しかし、
CAPTCHAを導入しただけでブルートフォース攻撃を完全に防げるわけではありません。
ログイン機能では、
- 試行回数の制御
- レート制限
- 不審なログインの検知
- 多要素認証
- 強固な認証方式
- ログ監視
などを組み合わせることが重要です。
CAPTCHAは「自動化された操作を判別・抑制するための一つの対策」と考えましょう。
あわせて読みたい:ブルートフォース攻撃に該当するものはどれか
CAPTCHAはどうやって人間とボットを見分けるの?¶
CAPTCHAにはさまざまな方式があります。
文字や画像を使った問題¶
昔からある方式です。
例えば、
画像に表示された文字を入力する
あるいは、
「信号機が写っている画像を選んでください」
といった問題を利用します。
人間には判断しやすく、自動プログラムには難しい課題を使って区別しようとする考え方です。
チェックボックスなどを使う方式¶
「私はロボットではありません」のようなチェックを利用する方式もあります。
ただし、単純にチェックボックスを押したかどうかだけで判断しているとは限りません。
利用状況など複数の情報からリスクを判定し、疑わしい場合に追加の確認を行う仕組みもあります。
リスクを評価する方式¶
近年のボット対策では、利用者へ毎回問題を出すのではなく、アクセスの状況や行動などからリスクを評価する方式もあります。
つまり、
アクセス
↓
リスクを評価
↓
通常の利用者と判断 → そのまま処理
↓
疑わしい → 追加確認・制限
という考え方です。
基本情報技術者試験で細かな製品仕様を覚える必要はありません。
人間による操作か、自動化された操作かを判別する
という目的を理解できていれば十分です。
選択肢イはハイブリッド暗号方式¶
イはこちらです。
公開鍵暗号と共通鍵暗号を組み合わせて,メッセージを効率よく暗号化する。
これは、公開鍵暗号と共通鍵暗号の特徴を組み合わせるハイブリッド暗号方式に関する説明です。
共通鍵暗号は大量のデータを高速に暗号化しやすく、公開鍵暗号は鍵共有や認証などに利用されます。
CAPTCHAとは関係ありません。
あわせて読みたい:共通鍵暗号方式の特徴はどれか
選択肢ウはパケットキャプチャ¶
ウはこちらです。
通信回線を流れるパケットをキャプチャして,パケットの内容の表示や解析,集計を行う。
これはパケットキャプチャの説明です。
ネットワーク上を流れる通信データを取得し、
送信元IPアドレス
宛先IPアドレス
ポート番号
プロトコル
通信内容
などを確認します。
ネットワーク障害の調査やセキュリティ調査などで利用されます。
「CAPTCHA」と「キャプチャ」は日本語表記が似ていますが、全く別のものなので注意しましょう。
選択肢エはCRYPTREC¶
エはこちらです。
電子政府推奨暗号の安全性を評価し,暗号技術の適切な実装法,運用法を調査,検討する。
これはCRYPTRECに関する説明です。
CRYPTRECは、暗号技術の安全性評価などに関係する取り組みです。
CAPTCHAのようにWebサイトで人間とボットを見分ける仕組みではありません。
CAPTCHAで覚えておきたいのは「自動化対策」¶
今回の選択肢を整理すると次のようになります。
| 用語 | 主な目的 |
|---|---|
| CAPTCHA | 人間と自動化されたプログラムを区別する |
| ハイブリッド暗号 | 暗号方式を組み合わせて安全・効率的に通信する |
| パケットキャプチャ | ネットワーク通信を取得・解析する |
| CRYPTREC | 暗号技術の安全性などを評価する |
CAPTCHAは、
暗号化する
通信を解析する
仕組みではありません。
Web上の操作が人間によるものか、ボットによるものかを判断する
ための仕組みです。
CAPTCHAだけに頼らない¶
セキュリティでは、一つの対策だけで全てを防ごうとするのは危険です。
例えばログイン画面なら、
CAPTCHA
+
レート制限
+
多要素認証
+
不審なログイン検知
+
ログ監視
のように複数の対策を組み合わせます。
問い合わせフォームでも、
CAPTCHA
+
送信回数の制限
+
不審な投稿の検知
などを組み合わせることができます。
このように複数の防御を重ねる考え方は、科目Bのセキュリティ問題を考えるときにも大切です。
科目Bでは「何を防ぎたいのか」から考える¶
今回の問題はCAPTCHAの目的を直接聞く問題です。
一方、科目Bではシステムの状況を読んで、
「この対策は何のために入れているのか」
を考えることがあります。
例えば、
新規会員登録画面
↓
同一端末から短時間に大量の登録
↓
ボットによる自動登録が疑われる
という状況なら、
「自動化された操作を抑える仕組みが必要」
と考えられます。
そこでCAPTCHAなどのボット対策が候補になります。
重要なのは、
CAPTCHAという言葉を知っていること ではなく、 どのリスクに対する対策なのかを判断できること
です。
Giji Academyで科目Bのセキュリティを実践的に学ぶ¶
科目Bのセキュリティ問題では、用語を単独で暗記するだけでは解きづらい問題があります。
例えば、
ログイン画面
↓
大量の認証試行
↓
どの対策を追加する?
という問題なら、CAPTCHAだけでなく、多要素認証やログ監視、試行回数の制御なども含めて考える必要があります。
Giji Academyでは、基本情報技術者試験の科目Bに関連するセキュリティ問題を、ネットワークやサーバーの基礎から段階的に学習できます。
擬似言語だけではなく、
- 認証
- Webサービス
- マルウェア
- 攻撃手法
- ログ
- セキュリティ対策
などを、実際の状況と結びつけながら学べるようにしています。
「CAPTCHA=人間か確認する、までは分かるけど、科目Bの文章問題になると対策を選べない」という方は、何を防ぎたいのかから考える練習をしてみてください。
登録不要で無料体験できます。
過去問解説まとめ¶
今回の記事では、CAPTCHAについて解説しました。
答えは、アの「Webサイトなどにおいて,コンピュータではなく人間がアクセスしていることを確認する」です。
CAPTCHAで覚えておきたいポイントは次のとおりです。
- 人間による操作と自動プログラムによる操作を区別する
- スパム投稿や自動登録などのボット対策に利用される
- ログインへの自動攻撃を難しくする防御層にもなる
- CAPTCHAだけで不正ログインを完全に防げるわけではない
- 現在のボット対策は、文字入力だけでなくリスク評価なども使われる
- 認証では多要素認証やレート制限などと組み合わせることが重要
基本情報技術者試験では、見た目ではなく、
CAPTCHA=人間と自動化されたプログラムを区別するための仕組み
と理解しておきましょう。
Giji Academyでは、擬似言語に加えて、科目Bに関連するセキュリティ問題も実践的に学習できます。
Giji Academy|科目Bの擬似言語・セキュリティを学ぶ
基本情報技術者試験の過去問解説はこちらから確認できます。
基本情報技術者試験の参考書¶
元記事で紹介していた過去問題集は旧試験制度向けです。画像・リンクはそのまま残しますが、現在受験する場合は科目A・科目Bに対応した最新教材を利用することをおすすめします。







