読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Capy CAPTCHAは一瞬で突破できる

Capy CAPTCHA

早速、実証コードが(CAPY IS A VERY READABLE CAPTCHA)出たようだ。このように一瞬で突破されてしまい意味がない。

さきほどインターネットを見ていたらスパム防止用の「読みづらい画像認証」に、日本人が終止符を打った技術が斬新過ぎる!経由で、Capy - 低コストで導入も簡単な不正ログイン対策という、パズルを使った新しい新しくないCAPTCHAを知った。 コンテストに優勝するなど肯定的な反応が多いので、この記事では、このCAPTCHAのセキュリティ上の問題点について簡単に書いておこうと思う。

まず、Capy - デモにデモが乗っているので、タイプ別に問題点を示す。

パズルタイプの破り方

ジグソーパズルの空白を埋めるタイプのCAPTCHAである。話にならない。 まず、縦横が5pxごとに吸い付くようになっているので、縦横400px*300pxだと、4800通りしか答えがない。この時点で既にセキュリティ上問題である。

で、具体的な解き方であるが、二通りが考えられる。

まずは、背景の画像のバリエーションが少ないことを利用した方法。 例えば、このCAPTCHAであれば、

f:id:javascripter:20131206203035p:plain

背景画像がせいぜい10個程度しかないため、正解状態の画像を用意しておくことが可能。

f:id:javascripter:20131206203154p:plain

このような画像を用意して、元の画像とピクセルが一致しないところを抽出する。一致しないピクセルのうち、xが最小のものとyが最小のものの座標をx, yとするとx - x % 5, y - y % 5の地点が答えである。

背景画像の数が増えてきた場合、この手法では解く事が難しくなるが、その場合でも、単に背景を切り取ったタイプのジグソーパズルを解くことは簡単である。ジグソーパズルのピースのエッジを抽出し

f:id:javascripter:20131206203719p:plain

エッジ部と、それに隣接する背景の色の彩度の差の合計が、最も小さくなる場所が、正しいピース位置である。

まとめると、ジグソーパズルはコンピュータで自動的に解く事が非常に簡単なので、CAPTCHAとしてまともに機能しない。

テキストタイプの破り方

まず、元画像を見てほしい。

f:id:javascripter:20131206204030p:plain

ちょっとミスったので別の画像に対するものだが、コントラストを最大にしただけでこうなった。 このパターンの画像では、露出とコントラストを変化させるだけで文字列を100%抜き出せる。

f:id:javascripter:20131206204229p:plain

フォントをゆがめているわけでもなく、フォントのバリエーションも少ない。また、フォントサイズも固定であるように思われる。つまり、OCRを使わなくても、ピクセル一致でテキストを割り出せる。

まとめ

現時点で、Capy CAPTCHAにはセキュリティに問題がある。破るのが簡単であり、根本的にジグソーパズルという発想自体が、そもそもコンピュータから解きやすく、CAPTCHAとして成立していないように思われる。 ポイントサイトなどで既に使われはじめているようだが、キャッシュバックがあるようなサイトでこういったCAPTCHAを使うのは、危険だと思う。