03月16日上午,12306網(wǎng)站更新了自己的驗(yàn)證碼形式,將原有的驗(yàn)證碼從英文字符變換到8張小圖片,用戶必須根據(jù)問題提示來點(diǎn)擊選中正確的圖片,然后才能預(yù)定車票。緊接著,各路媒體開始發(fā)稿,《12306官網(wǎng)放大招:啟用圖片驗(yàn)證碼所有搶票軟件將失效》《12306官網(wǎng)推出全新圖片驗(yàn)證碼搶票軟件將失效》等新聞層出不窮。作為一個(gè)程序員,看到這樣的標(biāo)題,十分困惑這些媒體是怎么用上帝視角這么直接斷定搶票軟件將全部失效的,可以想象一大波刷票公司正準(zhǔn)備捋起袖子干活就直接聽到12306宣布自己勝利了。當(dāng)然,我們反對一切的黃牛黨,本文只是談?wù)勻?yàn)證碼技術(shù)。
重技術(shù)的驗(yàn)證碼是一場拉鋸戰(zhàn)
當(dāng)我們談?wù)擈?yàn)證碼時(shí),不免地提到兩個(gè)人。第一個(gè)是計(jì)算機(jī)科學(xué)之父、人工智能之父艾倫.圖靈,圖靈對整個(gè)計(jì)算機(jī)科學(xué)的貢獻(xiàn)和意義在此就不用展開,之前所以提到他,是因?yàn)樗岢龅摹皥D靈測試”,這一理論第一次提到將電腦和人區(qū)分開。第二個(gè)必須提到的是卡內(nèi)基梅隆大學(xué)的路易斯·馮·安,他在2002年第一次將扭曲的文字用于區(qū)別人和計(jì)算機(jī),就是我們現(xiàn)在普遍見到的英文字符驗(yàn)證碼,后來他將驗(yàn)證碼公司Re-CAPTCHA賣給了google。
現(xiàn)在12306同樣也用了扭曲的英文字符,但是卻抵擋不住黃牛黨和刷屏軟件機(jī)器識別,是因?yàn)樵谶@近十年計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,OCR(Optical Character Recognition,光學(xué)字符識別)等技術(shù)發(fā)展的已經(jīng)十分成熟,識別扭曲英文字符并非難事,根據(jù)現(xiàn)有實(shí)驗(yàn)報(bào)告統(tǒng)計(jì)及真實(shí)調(diào)查,普通的驗(yàn)證碼的破解率基本在75%以上。說到這里我們看看百度和騰訊是怎么解決的。
騰訊將驗(yàn)證碼圖片背景直接貼上真實(shí)圖片做干擾,而且顏色采取的近似值。
被稱為百度神獸的九宮格漢字驗(yàn)證碼,利用中文的博大精深,在防刷上有較大的提升,但是對人的用戶體驗(yàn)上就略差了。
12306的驗(yàn)證碼出發(fā)點(diǎn)是安全?用戶體驗(yàn)?
那么,我們來談?wù)?2306的圖片驗(yàn)證碼到底是個(gè)什么鬼。12306所采用的圖片式驗(yàn)證碼的驗(yàn)證形式,并不是什么首創(chuàng),早在一些游戲網(wǎng)站上也采用過這樣的驗(yàn)證形式,請看下圖。
這把人都能嚇懵的驗(yàn)證碼還真出現(xiàn)過,而且很不幸的是,上了一陣子之后就被破解了。
現(xiàn)在12306推出的圖片驗(yàn)證碼,首先從用戶體驗(yàn)上來講,并沒有比之前的文字驗(yàn)證碼好用多少。雖然用戶不再依靠鍵盤輸入,但是面對小且密集的8張圖片,選出“所有”正確的圖片,那必須把所有圖片仔細(xì)看一遍,這一過程帶來的不確認(rèn)型其實(shí)是同用戶分辨G和9和心里過程是一樣的。不信你瞅瞅下面哪些是郵票?重要的是這一過程中帶來很大的不確認(rèn)性,心理負(fù)擔(dān)略重。
用戶體驗(yàn)這個(gè)標(biāo)準(zhǔn),不好衡量,我們再來談?wù)劙踩浴囊婚_始變成圖片驗(yàn)證形式,事情就不會像今天新聞標(biāo)題說的那樣,“刷票軟件將全部失效“(我本著好奇的態(tài)度,搜了一下相關(guān)新聞,基本上從2012年起,每次12306更換比較明顯的驗(yàn)證碼,媒體都是這樣報(bào)道的),為什么呢?前面我們講到成熟的OCR技術(shù)導(dǎo)致英文字符驗(yàn)證碼很難起作用,事實(shí)上,圖像識別的發(fā)展也是趨于成熟。所以,12306的圖片驗(yàn)證碼被迅速破解也不是什么難事,反而將門檻降低。
下面的具體破解舉例引用知乎用戶王貓貓?jiān)趩栴}“如何評價(jià) 12306 的最新版驗(yàn)證碼?”下的回答。
(此圖來自知乎用戶王貓貓的回答)
直接將圖片處理后丟入google、百度的識圖接口,返回的數(shù)值讓人驚訝(第二張圖居然能精準(zhǔn)識別到是沙縣小吃?)。后來根據(jù)王同學(xué)提供的代碼,我進(jìn)行了下一步的處理工作,再次利用第三方軟件識別中文字符,然后將字符與圖片字符進(jìn)行匹配,之后選擇圖片。整個(gè)測試圖片大概200張(只是模擬了登錄,沒有去刷掉一整車票),通過率在85%左右。所以,僅僅是技術(shù)愛好者動用一些公用接口就輕松能識別圖片類容,而且一旦識別后,還可以將這張出現(xiàn)過的圖片存庫,再次出現(xiàn)就更加快速準(zhǔn)確的定位了。暫且不談圖像識別和機(jī)器學(xué)習(xí)這樣高大上的破解方法了。
圖片驗(yàn)證碼之所以不安全,是因?yàn)槟壳暗膱D片識別技術(shù)也是相當(dāng)?shù)某墒臁?2306這些圖片如果是人工標(biāo)記,無疑是將自己擺到一個(gè)愚公移山的悲壯位置;如果是機(jī)器識別,也一樣是可以被識別內(nèi)容,即用圖片內(nèi)容的識別作為驗(yàn)證核心將毫無意義。
從12306這次更新來看,12306的驗(yàn)證思路,還是在玩已經(jīng)過時(shí)的技術(shù),對驗(yàn)證的視野和理解并不是很透徹,才會落到上線不到一天就被破解的尷尬局面。當(dāng)然,12306有面對黃牛的進(jìn)行創(chuàng)新的勇氣是可嘉的,但是方向走錯了,進(jìn)行購票流程上的全面優(yōu)化才能讓問題得到最終的解決,將賭注放在驗(yàn)證碼身上,目前看來不太現(xiàn)實(shí)。
走在前面的依然是Google
那么,驗(yàn)證安全的終極奧義是什么呢?我們可以回顧一下去年的關(guān)于google的No-CAPTCHA(No-Capthcha是Re-Capthcha的子項(xiàng)目)的文章,google提出了一個(gè)概念叫human behavior analysis,大意是將用戶的行為做為判斷人與計(jì)算機(jī)的準(zhǔn)則。這個(gè)理念提出的意義在于,不再依靠圖靈測試即單一的答案來判斷人機(jī),而是通過用戶一系列的上網(wǎng)行為來確定訪問者是人,還是機(jī)器。但是從google目前的前端代碼層和具體流程來看,目前只是試探性的的發(fā)展,如果這個(gè)理念能夠?qū)嶋H操作并完善,那么驗(yàn)證碼的安全性將提高的一個(gè)史無前例的高水平,至少破解門檻不會低到僅僅調(diào)用一下公共接口就瞬間破解。