驗證碼的發展史與未來預測
Chrome瀏覽器的用戶對於下面這個框框應該不陌生:當你勾選方框,Google會根據風險分析引擎判定瀏覽網頁的到底“是不是人”。這是一種簡潔又相對有效的人機識別方式,作用是把一些機器爬蟲篩掉。
“在網上,沒有人知道你是一條狗。”這是互聯網剛剛開始進入大眾市場的一句經典宣言,現在大數據的加持下,這個結論可能被動搖了,但是對於網頁和應用的所有者來說,他們很多時候都無法識別網絡的另一端到底是機器還是人。
21歲天才少年的創舉
最早遭遇這個問題的是雅虎。2000年,雅虎郵箱是當時的當紅炸子雞,弄潮兒人手一個,是信息收發的主流方式。一些黑產盯上了這個渠道,用機器註冊了大量的馬甲郵箱,用於發垃圾郵件、網絡詐騙。一個時年21歲的、還在CMU上學的天才少年路易斯·馮·安給雅虎設計了一套人機驗證方案,就是最初的字符驗證碼。
當時,圖像識別對於計算機是個挑戰,對人類而言卻是小菜一碟,通過這種方式,驗證碼可以輕鬆地把黑產攔截在門外。驗證碼從此變成了一種身份認證標配,被廣泛使用在各種網站上,發明者路易斯·馮·安在計算機行業聲名鵲起。
隨著OCR、計算機視覺技術的發展,計算機在圖像識別上的能力升級,單純基於字符的驗證碼被爆破了。為了給機器製造一點麻煩,安全人員採用了各種辦法去“弄髒”字符,包括字體變形、扭曲、翻轉等等。在這個過程中,路易斯·馮·安還做了一件創舉,當時有很多古書籍、舊報刊需要電子化,而很多古籍由於印刷質量、保存狀況等原因,很多內容是OCR無法識別的,路易斯·馮·安想,既然每天有很多人在電腦前識別一些電腦認不出來的字符,能不能在做人機驗證的同時順便把古籍電子化把這個工作“眾包”給網友?於是,文章開頭的reCaptcha也誕生了。
這是reCaptcha一個經典的交互界面,兩個字符中其中一個是計算機能判別的,另一個是古籍上面掃描下來的無法識別的。用戶在輸入驗證碼的同時,順便也參與了古籍電子化工作。
2009年,reCaptcha被Google收購,如文章開頭展示的一樣,Google現在很多人機認證的場景都是由reCaptcha在提供技術支持。
單純從技術攻防角度,基於字符的驗證方式早就被爆破了。無論是變形多厲害的字符,用圖像分割技術切到一定的顆粒度,採用卷積神經網絡算法也能很準確地識別出來。騰訊安全曾經協助警方破獲過一個國內的“打碼”團伙,他們用AI對驗證碼進行爆破,爆破率最高可以達到98%,剩餘2% 以用眾包的方式找人去解決。
我們網上看到的“想做兼職嗎?動動手指就能賺錢”的短信,很多時候就是黑產團伙發的招募信息。一些三四線城市空閒時間很充裕的用戶坐在電腦前手動輸入一個個驗證碼,積攢到一定數量後,從中介手裡拿到一定的報酬。據不完全統計,這個鏈條上有百萬級別的從業者。
但黑產是一個典型的講究成本收益的“生意”,好比我們隨處可見的家用大門機械鎖,其實就是有限的排列組合,只要是小偷精力無限,總有一天能試到一把鑰匙能打開。在驗證碼黑灰產也是一樣,AI計算需要高性能的計算機、人工識別需要酬勞,都需要付出成本,目前在無利可圖的網站,字符驗證碼還是一種很流行的人機驗證方式。
獨樹一幟的12306
“一輩子保持對生活和世界的新鮮感和好奇心,不斷探究身邊事物的本質,虛懷若谷,格物致知,再加上那麼一點點運氣,你就能通過12306的購票驗證了。”
這是一個關於12306的段子,看到的人都會會心一笑。
在驗證碼領域,12306絕對是獨樹一幟的存在,它有著極高的安全係數,不僅有效地攔截住了機器人、各種自動化搶票助手,也把很多真人攔截在門外。
對大多數人來說,買火車票是低頻場景,一年可能買不了幾次;加之也沒有第二個渠道可以買,12306會設置這樣的驗證碼環節,可能也是吃準了這一點。但是對於絕大多數需要顧及用戶體驗的服務提供商來說,過分複雜的驗證碼會讓用戶流失,不可取。
目前應用比較廣泛的幾種人機驗證方式,包括上文提過的字符驗證、圖像識別(例如“點擊下圖中倒立的文字”)、滑塊驗證(例如“拖動鼠標完成拼圖”)等等。
滑塊是用戶體驗比較友好、同時安全係數也相對較高的一種認證方式,因為它在圖像驗證的基礎上往前走了一步,基於採集用戶的行為數據、環境數據等等多維度來判斷用戶是人還是機器,例如人類拖動滑塊一般是先快後慢:先是快速拖到缺口附近,再在缺口附近進行精準地校驗,並停留片刻釋放;機器的活動軌跡相對而言比較規則。
在網上搜索“滑塊驗證碼”,有N個帖子是關於“如何用***破解滑塊驗證”的,很多已經被證明有60%以上的識別率,但是識別成本也會比較高。又回到一個老生常談:沒有攻不破的系統。安全人員要做的事情,就是把攻擊門檻提高,讓黑產覺得投入產出比不值得而放棄。
易用優先還是安全優先,這是安全人員吾日三省吾身的問題。像票務網站、炒鞋、電商網站,這些網站的用戶賬號體系很有價值,對黑灰產而言是“大戶人家”,這些網站在設置驗證碼的時候,安全性是首要考慮的。
騰訊雲防火牆,最近對遠程登錄的身份校驗也進行了一次功能升級,採用了賬號密碼+微信雙因子認證方式。常規情況下雙因子認證一般需要一個物理令牌,能保障安全性但是使用體驗欠佳,而藉助微信輔助身份認證,提前對運維人員的微信號進行授權,就可以通過賬號密碼+微信認證遠程登陸服務器,解決了一些移動辦公場景下服務器運維的需求。
在可見的未來,驗證碼還是一種行之有效的人機識別方式,安全人員和黑產在在驗證碼上的對抗還會持續。但我們可以稍微寬慰的是,現在市面上大部分驗證碼在實操層面上都是比較難以攻克的,一是單個驗證碼生命週期很短暫,很快會失效;第二個是驗證碼需要很強的圖片識別技術,而且有些圖片只能在前端瀏覽器、客戶端顯示出來,對於根本就沒有前端的服務器來說,用機器去跑腳本可能都看不到,也就無法解碼。
除了黑產之外,對於各種密碼、驗證碼來說,還有更大的對手,據騰訊安全雲防火牆產品負責人周荃推測,就是量子計算。業界普遍承認的一個事情,量子計算被開發出來了之後,現有的密碼體系和信任體系、網絡信任體系會全部崩潰,可能最難的密碼可能也只需要幾分鐘的時間就可以嘗試出來。但安全研究人員也認為,後量子時代正常的密碼也可以設置得非常複雜,所有的計算機也可以基於量子計算去設計一套密碼,屆時也會有相應的辦法能夠去保護安全。