最近,12306驗證碼已然成為了眾人熱議的話題,又一次把春運買票難推向了輿論的風口浪尖。其實,只要觀察下網(wǎng)友吐槽的驗證碼,很多是無中生有的圖片,是個別網(wǎng)友故意丑化鐵路形象的行為,仔細想想就能識破。但說實話,12306驗證碼的辨認度確實是比較難。在這緊張的搶票節(jié)奏里,還要忍受驗證碼對智商的考驗,生活也真是不容易。
看到網(wǎng)站上的奇葩驗證碼,網(wǎng)友們紛紛獻計獻策,我個人覺得難度最大的應(yīng)該是下面這種了:
然而,吐槽歸吐槽,在這小小的驗證碼背后,其實有著許多有趣的故事,屏幕上的方寸之間,其實有著智力上的激烈交鋒。在驗證碼不斷發(fā)展的背后,是一場場來勢洶洶的技術(shù)變革,而這場變革,我們每個入都身在其中。
區(qū)分人與機器的驗證碼
想必大家一定見過類似右邊的驗證碼圖案。而熟悉的驗證碼技術(shù)背后,隱藏的是這樣一個很深奧的問題:如何區(qū)分真人和機器?——即如何證明坐在電腦前的是一個活人而不是一段程序呢?
在這個問題上,一種解決方案是“圖靈測試”,即“人類向計算機提問”。而驗證碼恰好相反,是“機器提問人類解答”,因而驗證碼也被認為是“反圖靈測試”。
2008年,路易斯·馮·安等人提出了“全自動區(qū)分計算機和人類的公開圖靈測試”,即CAPTCHA。
這個短語,正是驗證碼的名字。
而這就引發(fā)了一個新的問題:機器向人類提出的問題,能讓機器人解答嗎?如果機器人能夠識別驗證碼,那不是意味著這個驗證碼不再能夠驗證“人類”和“機器”了?
從這以后,各種各樣的驗證碼和驗證碼破解層出不窮,程序員們的創(chuàng)意和才智在這方寸之間得到了盡情發(fā)揮。而我們,也終于有幸體驗到了買火車票之艱難。
程序員們智力的角逐
早期的驗證碼可能只是一串簡單的ASOⅡ字符,比如黑客們用“|-|3|-|-()”“)-(3££0”代表“HELLO”。這個后來發(fā)展成了火星文(leetspeak),0(/口\)0。
后來驗證碼變成了圖片顯示字符串或者數(shù)字的形式,這也是我們最常見的驗證碼。
早期的驗證碼采用扭曲字符和梯度背景,然而好景不長,這樣的驗證碼很快就被破解了:由于圖片中字符與背景顏色之間差異較大,于是程序員們可以利用算法將圖片中的每一個像素點的值提取出來,然后判斷哪些是背景部分,哪些是字符部分。這樣將字符與背景分離。
接著,將分離出來的字符與“訓練庫”(也就是存有這些字符的資料庫)里的字符進行最終識別。而且由于英文只有26個字母,而阿拉伯數(shù)字只有10個,這樣的驗證碼識別難度也大大降低。
如果一切順利,根據(jù)上面的流程計算機能很容易地識別驗證碼,并不需要人。這樣驗證碼,也就被破解了。
于是,喜聞樂見的是我們迎來了中文驗證碼,龐大的中文字符庫保證了驗證碼識別的難度(還混用了拼音)。而不會中文的外國人則開始逆向思考驗證碼識別技術(shù)并進行有針對性的對抗。他們把各個字母粘連起來,這增加了算法上分隔每一個字符的難度。并且每次采用不同的字體也能增加模式匹配的難度。
而到了12306這個程度,考驗的就不單純是圖案識別了,還有某些抽象思維的能力——比如我得知道“紫砂壺”到底是個啥,或者至少知道它長啥樣,我才能選到正確的驗證碼圖案。這,也就是我們俗稱的“智商”……
然而,這樣的圖片驗證碼也并不是一勞永逸的,有人展示了用網(wǎng)絡(luò)上的識圖算法來機器識別12306圖片驗證碼的一種思路。原理大概是這樣的:首先將驗證碼的圖片分割成一個個單獨的圖片,然后將這些圖片上傳到機器識圖的網(wǎng)站上,網(wǎng)站會返回左邊的答案。
接著,只需要讓機器識別出驗證碼的“問題”,也就是需要點擊的圖片是什么“東西”——在這個例子里是“紫砂壺”——最后讓計算機一一匹配就可以了。
并且他認為12306的這一方法其實并不靠譜,存在三個問題:
1.圖片過于復(fù)雜、混淆過多、條件太詭異時會擋住大部分正常用戶;
2.容易被枚舉,題庫太弱,不如字符組合可能性多;
3.破解門檻不一定高于字符型CAPTCHA。
對于這個分析,我“舉雙手雙腳”贊成。我買不到票不是智商低,而是因為我們屬于被擋住的“大部分正常用戶”,嗯,一定是這樣的。
然后現(xiàn)在,鐵路總局已經(jīng)表示,12306網(wǎng)站將調(diào)整圖形驗證碼中圖片的清晰度和分辨率,而且可能剔除根據(jù)后臺統(tǒng)計出來大家反映最多的和錯誤率較高的圖片驗證碼……
驗證碼還能干啥?
驗證碼也并非都是那么奇葩,它也可以用來做一些非常有意義的事情。
例如:卡耐基梅隆大學的路易斯·馮·安等人(對,就是前面提到的造出OAPTOHA這個短語的人)設(shè)計了一個名叫reOAPTOHA的系統(tǒng),對古籍進行數(shù)字化。
reQAPTQHA將OOR(光學字符識別)軟件無法識別的文字掃描圖傳給世界各大網(wǎng)站,用以替換原來的驗證碼圖片;那些網(wǎng)站的用戶在正確識別出這些文字之后,其答案便會被傳回卡耐基梅隆大學。
PeCAPTCHA在2009年被Google收購,而Google將這一技術(shù)發(fā)揚光大,不僅用來識別古籍,還用來識別Google街景的街道地址。所以,有一段時間,你會發(fā)現(xiàn)google的驗證碼變成了某個門牌或者路標:
驗證碼的未來
“反人類”的驗證碼,從始至終對抗的就不是人類,而是有著龐大計算能力卻在模式識別、抽象思維上很弱的計算機。
然而,隨著人工智能技術(shù)的進步,計算機在模式識別上也越來越強大,驗證碼也不得不走上越來越“扭曲”“復(fù)雜”“反人類”的不歸路。驗證碼難度的提升,本質(zhì)上體現(xiàn)了人工智能技術(shù)的進步。
而目前,無論我們多么吐槽12306的驗證碼,但至少,我們還能夠通過它證明我們是真人,而不是機器。這在某種程度上說明了人類在智能上的優(yōu)越性,至少現(xiàn)在,我們還是比機器智能優(yōu)越(或許有一部分小伙伴沒法證明)。
目前,Google的算法在扭曲文本類驗證碼的識別率已經(jīng)達到了99%,也就是說,這類驗證碼已經(jīng)不能作為區(qū)分人類和機器的指標了,而總有一天,12306的驗證碼也會被破解,到那時,為了區(qū)分機器和人類,程序員們又該設(shè)計出什么樣的驗證碼呢?
驗證碼的一生,可以說正是人工智能技術(shù)不斷進步的一生。而正因為機器越來越聰明,所以人類將不得不面對更多的挑戰(zhàn)?;蛟S有一天,人類的造物終將超越人類自己,人工智能終將超越人類,到那一天,驗證碼或許不復(fù)存在了,而人類又該何去何從呢?
(責任編輯:曹偉 責任校對:司明婧)