新時代的驗證碼?
驗證碼技術是一場戰爭
談論驗證碼時,不免地提到兩個人。第一個是電影模仿遊戲中的電腦科學之父、人工智慧之父 艾倫.圖靈(Alan Mathison Turing),圖靈提出的「圖靈測試」,這一理論第一次提到將電腦和人區分開。第二個必須提到的是卡內基梅隆大學的路易斯•馮•安(Luis von Ahn),他在 2002 年將扭曲的文字用於人機識別,就是我們現在普遍見到的英文字元驗證碼,後來他將驗證碼公司 Re-CAPTCHA 賣給了 Google。
國鐵 12306 以前也用了扭曲的英文字元,但是卻抵擋不住黃牛黨和刷屏軟體機器識別,因為在資訊科學的發展,OCR (光學字元辨識) 等技術發展的已經十分成熟,根據現有實驗報告統計及真實調查,普通的驗證碼的破解率基本在75%以上。
說到這裡,我們看看百度和騰訊是怎麼解決的。
騰訊將驗證碼圖片背景直接貼上真實圖片做干擾,而且顏色採取的近似值。
被稱為百度神獸的九宮格漢字驗證碼,利用中文的博大精深,在防刷上有較大的提升,但是對人的用戶體驗上就略差了。而且對於一些國外用戶來說,增加了輸入的困難。
12306的驗證碼出發點是?
12306 所採用的圖片式驗證碼的驗證形式,並不是什麼首創,中國一些遊戲網站也採用過這樣的驗證形式,而且上了一陣子之後就被破解了。從使用者體驗上來講,並沒有比之前的文字驗證輸入碼好用多少,雖然使用者不再依靠鍵盤輸入,但是面對小且密集的 8 張圖片,選出所有「正確的圖片」,那必須把所有圖片仔細看一遍,這一過程帶來的不確認型,其實跟使用者分辨 G 和 9 的心理過程是一樣的。不信把本文開頭的圖片看一遍,需要幾秒才能認出哪些是鱷魚? 重要的是這一過程中帶來很大的不確認性,心理負擔略重。
甚至有內地的中國網友吐槽:
今天我嘗試登錄 12306,說「點擊以下所有的生蠔」,我愣了一下,生蠔是神馬,我這輩子都沒有吃過。感覺生活常識不夠,連火車票都沒法買了。
用戶體驗這個標準,不好衡量,我們再來談談安全性。事實上,圖像識別的發展也是趨於成熟。所以,12306 的圖片驗證碼被破解也不是什麼難事,反而將門檻降低。網上出現了機器破解的原型方案,透過百度和 Google “以圖搜圖”的API,將圖片轉換成了符合圖意的文本關鍵字。這樣一來,只要檢查關鍵字中有沒有符合問題中字元的就 OK。
而且一旦識別後,還可以將這張出現過的圖片存庫,再次出現就更加快速準確的定位了。暫且不談圖像識別和機器學習這樣高大上的破解方法了。
從 12306 這次更新來看,有面對黃牛的進行創新的勇氣是可嘉的,但是方向走錯了,進行購票流程上的全面優化才能讓得到最終的解決,將賭注放在驗證碼身上,看來只是治標不治本。
走在前面的依然是 Google
Re-CAPTCHA 在 2009 年被 Google 收購後,在其作為驗證碼本職工作之外,承擔了數位化 Google Books 和 Google News 檔案計畫的部分任務。到了近兩年,有很多使用 Re-CAPTCHA 服務的網站上,驗證碼的內容發生了變化:一半仍然是扭曲的單詞,而另一半則是一張帶有門牌號碼的照片。這其實是 Google 對於 reCAPTCHA 的一項新用途。
這些帶有數字的照片來自于 Google 街景,多數是街景車所拍攝到的門牌和街道地址,也包括街道名稱、甚至交通標誌等。由於從街景裡提取如街道位址和交通標誌等資料,向地圖裡添加商店位址和位置等有用資訊是件極為龐大而繁瑣的工作。因此 Re-CAPTCHA 的識別能力對解決這個問題可以起到很大的幫助。
那麼,驗證安全的終極奧義是什麼呢? 我們可以回顧一下 2014 年關於 Google 的 No-CAPTCHA (No-Capthcha 是 Re-Capthcha 的子專案) 的文章,Google 提出了一個概念叫 human behavior analysis,大意是將用戶的行為做為判斷人與電腦的準則。
這個理念提出的意義在於,不再依靠測試即單一的答案來判斷人機,而是通過用戶一系列的上網行為來確定訪問者是人,還是機器。但是從 google 目前的前端代碼層和具體流程來看,目前只是試探性的的發展,如果這個理念能夠實際操作並完善,那麼驗證碼的安全性將提高的一個史無前例的高水準,至少破解門檻不會低到僅僅調用一下 API 就瞬間破解。
No-CAPTCHA 除了理論上的安全性,還有使用者體驗的提升,現在行動裝置盛行,但是在小小的螢幕上辨識扭曲的圖片,或是輸入英數符號混和的驗證碼文字,步驟越多就容易造成使用者流失。但使用 No-CAPTCHA ,使用者不再需要依靠鍵盤輸入,也不需要耗費眼力辨識圖片與文字,只需要點擊「我不是機器人」旁的核取方塊,系統通過通過驗證之後,會回傳給程式通知放行。若驗證失敗,才會跳出傳統 Re-CAPTCHA 的圖片語音辨識與文字輸入框。
如果要在網站上使用 No-CAPTCHA ,每一個網站都要向 Google 申請 API KEY,並填寫此網站的所有域名,才能正常使用。視覺上而言,操作介面所佔的區域也稍大,至少得要 300px * 75px 的空間,空間的利用度不如自行編寫的的純英數驗證碼系統,而且只有單色系,無法配合網站畫面的整體感做一些視覺上的調整。
No-CAPTCHA 是否真的完美呢? 會不會被破解呢? 讓我們拭目以待。
可以打廣告的驗證碼
顧名思義,就是廣告性質的驗證碼。目的就是讓使用者在輸入驗證碼的同時,必須閱讀廣告,然後輸入廣告中的內容。雖然這種形式的廣告不可能做成鋪天蓋地,但是效果極佳,不會被用戶無視,也不會額外佔用網頁空間。一些使用者可能會使用 Adblock 之類阻擋廣告的擴充套件,但驗證碼廣告卻成為網友不得不看的絕佳廣告管道。有別於彈跳廣告或內文橫幅等傳統網路廣告干擾使用者的做法,驗證碼廣告可以降低網路廣告帶來的負面影響。
但不論是 12306 的圖像式驗證碼,或是圖像式驗證碼廣告,都會面臨一個問題:「圖片並非無限的」,一旦將出現過的圖片經由某種方式整理後存進資料庫,下次再遇到時,就能提高機器的破解率。於是後來又有在圖像中隨機產生顏色等各種機制,進一步提升了安全性。
目前如果要了解驗證碼廣告的服務,國外有從2009年就推出此構想的 AdCaptcher ,還有近期比較活躍的 DoubleRecall,台灣有 Riyu,中國有百度驗證碼推廣。如果有興趣在網站使用驗證碼廣告,或是有意投放廣告的業主,可以參考看看。
現在則又出現「影片驗證碼廣告」,就是將視頻驗證碼和廣告驗證碼結合。使用者必須播放廣告影片,並將影片中出現的文字輸入驗證碼欄位中,以下舉中國的印象碼的產品作為範例。
目前這種影片驗證碼難以普及的問題,主要在於其技術難度和所需的硬體支援。1.影片的生成與壓縮。2.驗證碼與影片的結合。3.影片的儲存與分發。這些問題要消耗很大的時間和網路資源,所以不是用業餘時間和小規模資源所能完成的。
對於網站經營者而言,放置網站必備的驗證碼系統,還可以賺取廣告費,也是一項收入,只怕系統機制不全,所出現的廣告的調性與網站不符合,甚至常常出現競爭對手的廣告。但這無異是一個有趣的網路廣告商業模式,甚至可用於一些媒體業者的網站上。
是否該將網站防弊的重責大任放在第三方的驗證碼系統?
使用第三方的驗證碼服務,最主要考慮的問題就是服務商的穩定度,一旦服務商故障、維修,驗證碼出不來,將導致網站的註冊、登入、訂票、留言、購物等功能無法使用。或是服務商的品質不佳,或是無法應付大量的流量,導致網站驗證碼圖片很慢出現或是出不來,這都會影響消費者的體驗。在 2011 年間,台灣有一個叫歡樂驗證碼的廣告驗證碼服務,在中文維基百科的驗證碼條目中留有資料,但今日也不知下落。
還有另一個問題點,例如 No-CAPTCHA 需要在頁面內嵌入 Google 的 JS 檔案,但是一些網站弱點掃描的程式,會將這些外連的檔案視為弱點並條列出來,於是工程師就得寫報告向不懂資訊的高層解釋,或是將驗證碼機制修改為在地端的程式。而且 Google 在中國基本上是被 GFW 和諧掉的,可能導致中國的使用者無法正常使用網站功能。
參考資料:
http://www.bnext.com.tw/article/view/id/22105
http://www.yixieshi.com/pd/20691.html
http://www.yixieshi.com/it/20684.html
http://wiki.mbalib.com/zh-tw/%E9%AA%8C%E8%AF%81%E7%A0%81%E5%B9%BF%E5%91%8A
http://www.baike.com/wiki/%E5%B9%BF%E5%91%8A%E9%AA%8C%E8%AF%81%E7%A0%81
http://chuansong.me/n/1095485