WebサイトにIDとパスワードを入力するとき、ときどき「私はロボットではありません」にチェックを求められることがあります。
僕はロボットではないので、当然チェックを入れて認証を進めるわけですが……。でもちょっと待ってください。なぜクリックひとつで、人間かロボットかを判断できるんでしょう。
これはきっと、人間ではないなんらかの不正アクセスを防ぐ仕組みのはず。でもチェックを入れるくらい、プログラムを作ってなんやかんやすれば、シュッとできるのでは?
「私はロボットではありません」は、どんな仕組みで人間とロボットを判別しているのか。もっといい方法はないのか。これまでの歴史的経緯も含め、情報セキュリティ大学院大学の大久保隆夫教授に聞きました。
気づかないうちに「人間かロボットか」を判定されている!?
ということで本日は、「私はロボットではありません」の仕組みが知りたくて参りました。Webサイトでログインするときに出てくるあれは、いったいどういう仕組みで認証されているのでしょうか?
仕組みの説明の前に、念のために申し上げておくと、あれは「認証」ではありませんよ。
認証じゃない……?
認証というのは、Webサイト側が「これからログインする人が本人かどうか」を確かめることです。ですので、厳密にいうと「認証している」のはIDやパスワードですね。
「私はロボットではありません」は、あくまで「相手が人間かロボットか」を判断するものであって、本人かどうか認めるものではないんです。
情報セキュリティ大学院大学教授。1991年東京工業大学にて、物理情報工学専攻修了。株式会社富士通研究所での勤務を経て、2014年より現職。博士(情報学)。趣味は映画鑑賞、フットサル(プレイ)、サッカー(観戦)、ピアノ。
世の中に期待すること: PPAP(パスワード付きZipファイル、パスワード別送、暗号化プロトコル)をやめるくらいにセキュリティリテラシーが向上すること。
確かに。「このチェックボックスを押せるのはあの人しかいない!」なんてことないですもんね。「認証をサポートするシステム」といったところでしょうか。
Webサイトはbot(悪意があるプログラム)によってさまざまな攻撃にさらされます。自動的に大量のユーザ登録をしたり、不正なログインを繰り返したりする。そこでWebサイト側に「この操作はbotによるものなのか、人間によるものなのか」を判別する仕組みが必要になりました。
その仕組みの総称を「CAPTCHA(キャプチャ)」と呼び、そのうちGoogleが提供しているサービスが「reCAPTCHA(リキャプチャ)」です。「私はロボットではありません」は、このreCAPTCHAによるものですね。
あれはGoogleが提供しているものだったんですね。
他にも、写真が何枚か出てきてその中から自動車などの画像を選ばせるタイプも見たことがあるでしょう? あれもreCAPTCHAで提供されている機能ですよ。
ありますね! 「信号を選んでください」とか。あの “写真クイズ“、たまに難しすぎて間違えるんですよね……。
わかります(笑) でも最近、写真クイズを見ることが少なくなったと思いませんか?
言われてみれば……。
これは、reCAPTCHAのバージョンが新しくなったからです。写真クイズはひとつ前のバージョンのもので、もっというと「私はロボットではありません」も最新バージョンの機能ではありません。
え、じゃあ最新バージョンは、人間にどんな操作をさせるんですか?
なにもさせません。機械学習を使って、ページ内での行動からbotか人間かを自動的に判断するようになっています。
そうなんですか!?
▲ reCAPTCHAのバージョンとその変遷。v1では歪ませた文字を読ませていたが、既に提供は終了している
「私はロボットではありません」のチェックボックスが実装されたreCAPTCHA v2では、チェックボックスが設置されたそのページに訪れたときからbotか人間かの判断が始まっています。
reCAPTCHAが現在使われているブラウザや、ユーザーがマウスをクリックした回数、スクロールの動きなどを総合して、「これは人間によるものだ」という手がかりを得ているんです。
それはつまり……「私はロボットではありません」にチェックを入れたときには、既に人間かロボットかわかっているってことですか!?
そういうことになります。
我々は気づかぬうちに人間かロボットか試されていたのか……。
reCAPTCHA v2では、「もしかしたら人間ではないかもしれないな」と判断したとき、さらに写真クイズを出題するようになっていました。「本当に人間だよね?」という念押しですね。
最新バージョンのreCAPTCHA v3では、この念押しもないんですね。そして利用されるほど学習し精度が高まる……と。「どうせ人間でしょ?」「もう画像で確かめなくてもわかるし」って感じですね。自信がみなぎっている。
ただ気をつけたいのは、CAPTCHAはbotにとって最初のハードルでしかないことです。疑わしい存在は避けてくれますが、セキュリティに完璧はありません。あくまで「魔除け」だと思って、攻撃された場合の対処を整えておくことが重要です。
セキュリティはいたちごっこ。AI発展によって攻撃手段も多彩に
人間かbotか判断する仕組みといえば、もっと前だとぐにゃ~って歪んだ文字を読ませるのもありましたよね。
そうですね。あれもCAPTCHAの一種で、OCR(※)で読み取られないよう、文字を歪ませたり、背景を汚したりして、「機械には読めないけど人間には読める文字」を意図的に作ったものです。
※ 光学文字認識のこと。活字や手書き文字の画像を読み取り、コンピューターが利用できる文字コードに変換するソフトウェアで、スキャンした書類の文面を検索できるのは、OCRが変換してくれたおかげ
あの「ぐにゃ〜」も歪みすぎて読めないときがありますよね……。
かつては各システム会社が独自に「bot避け」を作っていたんですよ。でも中にはセキュリティの精度に不安がある「なんちゃってCAPTCHA」もあって、botの侵入を許してしまうこともありました。逆にbotに読み取らせまいと頑張るあまり、人間にも読み取れないものもあったり(笑)
そこにGoogleがreCAPTCHAの提供を始めた。無償だし、独自で作るより安全だろうということで、業界に広まったという経緯があります。
でも今、reCAPTCHAは「ぐにゃ~」の文字を提供していないんですね。reCAPTCHA v1は提供を終了していますし。
機械学習やAIが発達して、歪んだ文字も読み取れるようになってきたんです。クラウドサービスが安価になったり、AIの開発ノウハウが共有されたりして、以前よりAI開発のハードルが下がっていることも要因としてあります。
悪者もAI開発がしやすくなっちゃった、と。
reCAPTCHA v2も攻撃の対象になり、ハッカーコミュニティでは「破った」という報告も出ていますね。
あぁ、AIなら画像認識でクルマを選ぶなんて楽勝なんでしょうね……。
と、思うでしょう? それが、画像じゃないところから破られてしまったんですよ。
写真パズルは目の不自由な方には操作ができないため、音声による認識手段も用意されているんですね。流れてきた音声を聞いて、その内容をテキスト入力するという仕組みなんですが、これを音声認識で破る人が出てきてしまった。
音声認識って、スマホの音声入力で使われているアレですか。
そうです。音声を解析してテキストにできてしまったと。
なるほど……。確かに最近は音声入力の精度も上がってきましたしね。それこそGoogleドキュメントだって音声入力ができるし……。こうなると本当にキリが無いですね。
なかには突拍子もない方法で破りにくるハッカーもいますから。以前見たものでは、パズルを解くタイプの認証を無関係な人にやらせるというのもありました。
無関係な人に!?
フィッシング詐欺の仕組みで、無関係な第三者たちに攻撃者が認証パズルをばらまくんです。その中の誰かが、そうとは知らずにパズルを解いてしまうと、その結果が攻撃者に送信される。人間が解いた結果ですから、安心して認証を突破できると。
セキュリティの突破を「外注」する仕組みまで……。
新しいシステムを作っても、すぐに破ろうとする人が出てくるんですよ。まさにセキュリティはいたちごっこですね。
認証の仕組みは3パターン。人はパスワードから逃れられない……?
reCAPTCHA v3は機械学習で人間かbotかを判断するということでしたけど、こうなると「悪い機械学習」で人間っぽい振る舞いを学習させて突破するかもしれないじゃないですか。ひょっとして時間の問題なのでは……?
そもそも、この先もずっと認証のサポートをCAPTCHAで頑張るのか……というと疑問がありますね。CAPTCHAを磨き上げるのではなく、認証自体でまた別の技術が必要なのかもしれません。
認証サポートではなく、認証システムの方で全く新しい認証システムを開発すると?
とはいえ、認証の仕組みは大きく分けて3種類しかないんです。ひとつは「知識による認証」。その人しか知り得ない情報で認証する。パスワードが代表例ですね。
「母の旧姓」とか「中学のときの部活」とかも……?
厳密には本人以外も知りうる情報ですが、それも認証を補強する存在として使われていますね。2つめは「生体情報による認証」。指紋認証や顔認証はスマホでも広く使われるようになりました。かつては虹彩認証や静脈認証というのもありましたが、こちらは設備が大掛かりすぎたのか他の仕組みほど浸透していない。
最後はIDカードなどによる「持ち物による認証」です。オフィスに入るときに社員証をタッチするのもこの一種ですね。今のセキュリティは、だいたいこの3つを組み合わせたものになっています。たとえば二段階認証は、パスワード(知識)で認証したあと、スマホ(持ち物)でもう一度認証しますよね。
CAPTCHAは「人かbotか」を見分ける技術でしたけど、このうち生体認証であれば、確実に「人」だと判断できそうですね。
今のところそれで大丈夫そうですが……。もし将来、顔の情報がデータとして盗まれることがあったら、不正に利用されることも考えられます。パスワードは破られたら更新することができますが、顔は更新することができませんし……。
やろうと思えばできなくはないですけど……。そんなに簡単なことではないですからね。
そうなると、今のところ最後は「知識による認証」、パスワードに頼るしかないんです。マスクをしたままの顔認証(生体)が失敗すると、結局パスコード(知識)を求められますよね。IDカードもなくしたらそれまで。セキュリティ業界はパスワードから逃れられない、と言っていいでしょう。
でもパスワードだって完璧じゃないですよ。簡単なものは破られるし、複雑すぎるものは忘れるし、使い回したらいけないし……。
おっしゃる通りです。最近は「パスワードに使いそうなフレーズ(※)」のリストも出回っていますから。
※ パスワードマネージャーソフトを提供している NordPassの調査によると、「123456」「picture1」「password」等が使用頻度の特に高いパスワードとのこと。似たような文字列に見覚えのある人は、こっそりパスワードの更新を推奨。
ひとつのアカウントに対して何回もパスワードを間違えるとロックがかかりますが、いろんなアカウントに「パスワードに使いそうなフレーズ」を1回ずつ試せば、誰かのアカウントで認証が通ってしまう可能性がある。少し前にあった「ドコモ口座」(※)の不正アクセスも、こうした総当たり攻撃(リバースブルートフォース攻撃 ※)によるものだったと言われています。
※ 2020年9月に発生した、NTTドコモによる決済サービスを利用した銀行口座の不正引き出し事件。ドコモ口座からだけではなく、同口座と紐付けた別金融機関の口座が第三者の手によって勝手にドコモ口座と紐付けられ、不正引き出しを行われる被害が多発した。
※ 単一のIDに対してさまざまなパスワードを試しアカウント突破を狙う「ブルートフォース攻撃」に対して、同じパスワードをさまざまなIDに当てはめる手法。
パスワードは完璧じゃないけど、パスワードから逃れられない……。こうなったら「第4の認証」を発明するしかないでしょうね……。
どういうものになるんでしょう……。もし第4の方法を見つけたらご連絡ください(笑)
AIから疑われる「自分」は、本当に人間なのか?
「自分はロボットではありません」について聞いていたら、結局自分はどうやって「自分は人間だ」と証明すればいいのか、わからなくなってきました。
パスワードのような「自分にしか知らない知識」も、なんらかの手段で漏れたり突破できたりする。歪んだ文字を読むのも、指定された画像を選ぶのも、AIができてしまう。そのうち、立ち振る舞いまでもコピーされてしまうかもしれない……。
「AIが人間の仕事を奪う」と言われて久しいですが、そもそも「AIが人間の存在自体を奪う」ことだってあるのかもしれません。
……というか、そもそも「私はロボットではありません」をチェックする自分は、本当にロボットではないのでしょうか。
意識の上では人間だけど、実際はロボットだったら? だからたまに歪んだ文字も読めないし、信号を選ぶのも間違えるのでは? 「信号を選ぶ」画面が出る時点で、AIに「本当に人間なの?」と疑われているのでは……?
▲ reCAPTCHAから、「お前もロボットなんだろう?」と言われているのかもしれない……
「この記事を書いたのは人間である」と信じてもらえることを願ってやみません。
(文=井上マサキ/図版=藤田倫央/編集=ノオト)