本文來自於騰訊bugly開發者社區,未經做者贊成,請勿轉載,原文地址:http://dev.qq.com/topic/581301b146dfb1456904df8d前端
Dev Club 是一個交流移動開發技術,結交朋友,擴展人脈的社羣,成員都是通過審覈的移動開發工程師。每週都會舉行嘉賓分享,話題討論等活動。安全
本期,咱們邀請了 騰訊 TEG 安全平臺部的張彥玲、陳秋瀅、華珊珊三位嘉賓,爲你們分享《騰訊驗證碼的十二年》。服務器
內容簡介:
驗證碼的誕生就是用來對抗自動機,但隨着OCR技術的發展,騰訊驗證碼怎麼發展讓它可以有效持續對抗自動機。微信
如下爲本期分享實錄:網絡
你們好,我是張彥玲,來自騰訊TEG安全平臺部,如今負責驗證碼研發工做。今天還有咱們兩位同事:陳秋瀅和華珊珊,你們有什麼驗證碼產品和將來的問題也能夠和兩位同窗一塊兒探討。架構
如今先由珊珊給你們分享騰訊驗證碼的十二年。app
固然,鵝廠也經歷過沒有驗證碼的時代。這就得從十二年前那股瘋狂的「掛太陽」熱潮提及。若是是QQ老用戶,那你必定記得那些年咱們掛過的星星、月亮和太陽。伴隨着這股熱潮,網絡上開始出現一種特殊服務——代掛QQ,也就是代掛團伙爲有須要的用戶長時間登陸QQ以提高等級,這就須要用戶把賬號密碼給到他們。機器學習
然而,這種黑產服務致使大量密碼遭到泄漏,壞人手裏掌握的密碼資源嘩啦啦多了起來,開始不斷嘗試盜號以獲利。所以,QQ賬號開始頻繁遭到壞人自動化程序的暴力破解。工具
面對來勢洶洶的敵人,鵝廠急需新的對抗手法來攔住壞人瘋狂進攻的步伐!因而,正如你們所見,QQ登陸場景中的驗證碼應運而生,並有效打斷了壞人自動機暴破的瘋狂節奏。從那時起,驗證碼正式登上咱們的歷史舞臺。學習
同窗們應該還記得,在2008年以前,凡是在網頁上登陸QQ都得輸入驗證碼。沒錯,當時的策略是「一視同仁」,給全員下發驗證碼。通過一段時間的摸索,團隊開始意識到一個問題:驗證碼只是一種手段,不是目的。設立驗證碼這道防線的初衷,是爲了攔住「壞人」,而不是攔住「全部人」。
舉個例子,你在一處別墅開了個盛大的公衆派對。爲了防止不懷好意的人趁機混進來,你請了保安在門口進行安檢。但是,有沒有必要對全部來客都進行安檢呢?若是是認識多年的好友,或是常來你家串門的鄰居呢?若是你全都同等對待,友誼的小船確定說翻就翻。
所以,安全平臺部聯合即通登陸團隊,開始嘗試對那些明顯是正經常使用戶的行爲免去下發驗證碼。也就是經過安全大數據的能力,自動區分機器與正經常使用戶,向機器下發驗證碼攔截,對好人則免驗證碼直接登陸,以此提高用戶體驗。在騰訊,咱們把這項平衡安全和體驗的策略工做稱之爲「免驗」。
如圖,對可疑行爲下發驗證碼。
在下發「免驗」策略初期,只能免掉10%的驗證碼。隨着數據積累和能力的提升,時至今日免驗比例已達到90%以上,大大免去了正經常使用戶辨別驗證碼的苦惱。直到如今,免驗策略還在持續優化。
當大部分的好人都不會遇到驗證碼時,另外一頭,給壞人下發驗證碼的戰場還在繼續。進入2010年後,隨着微博和團購的橫空出世和快速發展,黑產從業者的可圖之利增多,互聯網黑產市場不斷擴張。做爲絕大多數互聯網業務的第一道安全防線,驗證碼的戰場正式進入了一段破解與抗破解的持久博弈。
如圖,這是早期的密碼暴力破解軟件。
在很長一段時間內,爲了不被壞人的自動化程序識別,業界廣泛把驗證碼設計得愈來愈複雜。長久下來,就造成了機器人和用戶都看不懂的尷尬局面。
顯然,把驗證碼「複雜化」這條道路走不通,那怎麼辦?在長期研究壞人的做惡模式及利益鏈條後,咱們發現壞人在破解驗證碼時存在一大死穴——時間。從一套新的驗證碼出現,到壞人成功破解,再集成到自動化軟件流入黑市,整個過程須要一個週期。那麼,若是咱們更新驗證碼的速度快於壞人的工做週期,問題不就迎刃而解了?
作個假設,第一天,網站上了驗證碼A,這套驗證碼簡單樸實、清晰可辨,簡直就是那麼多反人類驗證碼中的一股清流!壞人一瞅,這不是在藐視個人智商嗎?因而廢寢忘食連日研究,很快在第三天時就研究出了破解方案。正當壞人得意洋洋準備投入使用時,卻不知在次日時網站已換上了驗證碼B。這裏面的制勝點就一個字,快!
基於這種對抗理念,在2011年7月,「魔術師」驗證碼誕生了。如同魔術師快得讓人看不清的手法,魔術師驗證碼採用了高頻的切換策略,使對抗造成了「敵方未破我先變」的局面。果真,敵人自動機大軍的步伐被成功遏制,鎩羽而歸。
如圖,原有驗證碼 vs 魔術師驗證碼
如同超級英雄電影裏一波又一波打不盡的反派同樣,爲了巨大的潛在利潤,敵人永遠不會消停。在「魔術師」換來了近一年的風平浪靜後,咱們遭遇了有史以來最爲瘋狂的一波進攻。
因爲魔術師的字體庫在現網已跑了一年,再加上圖像識別技術的發展,壞人幾乎已遍歷研究。之前,只要驗證碼的字體一切換,破解率立馬就會刷刷地往下掉。而如今,破解率僅小掉一下立刻又反彈了。換字體策略已失效!曾經立下無數汗馬功勞的魔術師驗證碼,現在成了一道馬其諾防線。
敵人已經兵臨城下,怎麼辦?通過研究咱們發現,任何一種自動機,對驗證碼的識別率都不可能達到100%,有驗證成功的圖片,確定也有驗證失敗的圖片。作個假設,某種自動機的破解率是10%,也就是指在100張圖片裏,有90張沒法識別。那麼咱們把這90張圖片收集起來,每次都給它下發這些圖片,10%的破解率會瞬間掉到0%。由於此時,自動機已陷入了繞不開的死結。
根據這個思路,2013年元旦前,「猜你喜歡」驗證碼誕生了。「猜你喜歡」經過分析自動機行爲特徵,自動尋找、收集自動機的弱點,反覆攻敵之弱。這能夠說是對自動化破解的「致命一擊」。
如圖,原有驗證碼 vs 猜你喜歡驗證碼
在體驗上,「猜你喜歡」擺脫了對圖片複雜性的依賴,作到了「高清無碼」,正經常使用戶的識別率提升到了90%以上。在安全性上,防破解效果立竿見影,據團隊監測,氣急敗壞的敵人連最後的IM登陸驗證碼都不來嘗試破解了。「猜你喜歡」驗證碼以其強大的殺傷力,終於又換來了暫時的息戰。
前面咱們介紹的都是對抗自動機,然而隨着驗證碼對抗戰場愈加激烈,黑產也推出驗證碼的殺手鐗--打碼平臺,利用廉價的人工智能, 從設計原理上突破驗證碼。驗證碼(CAPTCHA)的英文全稱就是全自動區分計算機和人類的圖靈測試,對方是人,驗證碼就失效了。
如圖,打碼平臺的原理。
而讓這個狀況更糟糕的是打碼和深度學習結合,打碼平臺和使用打碼平臺的開發者給自動機破解程序提供樣本,經過神經網絡學習,破解程序能夠很快作到很是高的破解率。
正如外國學者Elie Bursztein等人所編著的論文(The End is Nigh: Generic Solving of Text-based CAPTCHAs),字符驗證碼終結將至。
字符輸入是咱們最熟悉最常遇到的驗證碼,然而在打碼平臺和深度學習的結合下,字符驗證碼最終將會退出舞臺。
如圖,12306識圖驗證碼 vs 知乎倒立驗證碼
如上圖,Google的nocaptcha vs 極驗、阿里滑動驗證碼
鵝廠從2013年開始嘗試新型驗證碼,2013年的識圖驗證碼。和12306驗證碼很像,當時的圖片是設計師畫的,最終由於圖片資源難以知足自動機對抗要求的海量數量需求而暫時沒推廣。還有2014年初版拼圖驗證碼嘗試。
新時代驗證碼須要更大的舞臺和更快的反應:摒棄了過去多年對字符的依賴,它能夠快速支持和推廣新型交互驗證碼。另外,用戶在完成操做同時,前端會收集用戶行爲數據,經過機器學習,爲線上策略輸出更準確有效的策略。
如圖,幾種新型驗證碼。
在上世紀五十年代,人工智能之父阿蘭•圖靈設計出了圖靈測試。在約半個世紀後,圖靈測試的理念被作成最簡單粗暴的形式——驗證碼,滲透到人們互聯網生活的方方面面。然而,驗證碼是一個時代的產物,是一種治標不治本的速效手段。戰術和戰略的改變,纔是終極解決方法。
能夠預想,終有一天驗證碼會退出互聯網的歷史舞臺。但現階段,因爲鉅額潛在利潤的驅動,不法之徒一定不會放棄對驗證碼的虎視眈眈。不管是過去、如今,亦或是不遠的未來,這都註定是一場沒有硝煙的血戰。將來,咱們拭目以待。
好的,今天的分享就到這裏。很是謝謝你們。也歡迎同窗們一塊兒來探討。
最後打個廣告:新一代驗證碼依賴前端收集數據,咱們很是須要前端大牛加入咱們團隊,有意向的同窗能夠請發簡歷到我郵箱:80000768@qq.com。
Q1:字符驗證碼爲何很差,不適應時代了?聽了大家這麼說,我也在想字符驗證碼是否是要換
隨着OCR的發展,字符驗證碼對抗很是艱難。字符驗證碼的舞臺過小,繼續發展下去,會出現自動機容易破解而人很難經過的情況。不過騰訊有不少業務還在用字符驗證碼,字符驗證碼徹底退出舞臺還須要一段時間,咱們也在向業務推廣新型驗證碼。
Q2:不明白那個滑動驗證碼有什麼不同的地方,感受自動化破解應該很容易,不像其餘的,須要語意識別
從字符驗證碼到多樣化驗證碼的轉變,最主要的變化,實際上是驗證碼再也不單純的依賴圖像去對抗,而是加入了更多元化更全面的元素,好比用戶行爲識別、後臺策略對抗等,只依賴圖像緣由不夠,但圖像加上大數據和AI的強力支撐是能夠對抗壞人的。也是由於這樣,用戶反而能用上體驗更好的驗證碼
Q3:拼圖驗證碼的拼圖塊是怎麼生成的?又是怎麼校驗的呢?
從圖庫拉取一張圖片,隨機在圖片摳取一張小拼圖塊。服務器生成時會記錄小接圖塊的位置。用戶在將小拼圖塊拖動到目標位置時,提交座標給服務器進行答案校驗。
Q4:就上面提到的各類驗證碼來說,如今哪一種驗證碼的效果最好呢?
不一樣產品面臨的戰場不同,比較難下定論說哪種驗證碼效果最好。各大公司的安全團隊在驗證碼方面也下了不少功夫,但從目前壞人的手段和技術來看,你們拼的更多的是後臺策略,而不是單純的驗證碼自己了。適合本身的纔是最好的。
Q5:模擬用戶操做爲何打碼平臺沒法破解呢?本質上應該也是識別圖片信息並上傳相應的數據吧?
首先,新驗證碼也有打碼,好比像下圖這種打碼軟件,因此只靠圖像沒辦法對抗碼工。這種軟件提交的答案也有其特徵,座標答案由碼工標註,惡意程序合成行爲數據,新驗證碼對這種狀況是能夠區分的。
Q6:如今日益的發展下.指紋驗證的頻率也愈來愈高.有沒有對這方面的考慮?
指紋驗證本質是身份驗證,驗證碼是對抗自動機,不過隨着移動設備指紋的普及,用指紋作身份驗證,免去驗證碼是有可能的。
Q7:如今常常Q羣裏喊着坐家就能賺錢的那種軟件,好像就是把驗證碼下發出去,讓社會閒散人員幫你識別,這種怎麼破?
對於人工打碼,5的問題有提到一些解決思路。但仍是基於如今打碼平臺,若是打碼平臺升級,確實這裏的識別很是困難,你們有什麼好的思路也能夠發郵箱給我:80000768@qq.com
Q8:是否是能夠根據用戶職業和身份來給用戶出些相關專業的常識做爲驗證碼?或者是有哪些用戶認識的QQ好友讓他選擇也行啊?
這個方法是可行的,實際上facebook也有采用這個方式來對用戶進行驗證。這個手段來對抗碼工是一種比較好的方式,但他的侷限性也很明顯,使用門檻比較高,一來是有可能泄漏用戶隱私信息,二來他使用場景頗有限,在註冊、活動、拉新等沒有用戶信息的場景沒法派上用場
Q9:用戶要記住使用密碼和要識別驗證碼,感受都屬於反人類設計,驗證碼將來什麼狀況下可能退出歷史?
驗證碼的用戶體驗須要不斷地優化完善,但其實驗證碼的設立很大程度上是爲了對抗高頻的暴力破解,阻擋壞人的自動機進攻的步伐。因此在現階段仍是很是必要的。驗證碼完全退出歷史舞臺,預計還須要比較長的一段時間。
Q10:未來有沒有可能用到語音驗證?
關於語音驗證碼,你們用微信也知道,語音識別技術很成熟,識別率已經很高了,所以用來作驗證碼效果也不見得會好
Q11:手機端app驗證碼大多都比較簡單,爲何pc端的特別複雜?
這個其實有歷史緣由在裏頭。在前些年,4G沒普及,上網速度慢,驗證碼的圖片不可能作得太大,會影響頁面打開速度;並且那個時候也沒不少大屏手機,屏幕小,留給驗證碼發揮的地方也小。從那個時候就延續下來了。但如今其實不少手機驗證碼都和PC一致了
Q12:大量用戶去請求驗證碼,怎麼肯定每一個人驗證碼對應的就是相應的用戶?
驗證碼的架構設計之初,已是按照億萬級訪問的場景來設計的,能支撐起大量用戶訪問的
Q13:前端會收集用戶行爲數據,經過機器學習,爲線上策略輸出更準確有效的策略。 一樣的道理,能夠經過機器學習模擬用戶的行爲軌跡從而來破解滑動拼圖驗證碼. 這個怎麼破?
這個問題問得十分漂亮。目前驗證碼主要的戰場和矛盾點也是這個,隨着機器學習的不斷髮展,咱們遇到的挑戰也愈來愈多,但即便這樣,咱們仍是會不斷朝這個方向努力,不斷嘗試和跟壞人鬥智鬥勇。
Q14:怎麼評價阿里雲的這種驗證碼,基於當前登陸帳號的歷史數據提問,微信好像也有采用這種形式,好比選擇好友。
基於當前登陸賬號的歷史數據提問,跟上面的一個問題相似的,這種更可能是身份驗證,用在登陸場景比較合適,但其餘場景,好比註冊,就沒法發揮用途。另外,用戶我的信息是有限的,通過屢次嘗試不斷比對和過濾,也能得到正確答案。在無登陸態下暴露用戶信息也是很一個很大的隱患,所以鵝廠在這類驗證碼上的應用比較慎重,並無大規模的用
更多精彩內容歡迎關注bugly的微信公衆帳號:
騰訊 Bugly是一款專爲移動開發者打造的質量監控工具,幫助開發者快速,便捷的定位線上應用崩潰的狀況以及解決方案。智能合併功能幫助開發同窗把天天上報的數千條 Crash 根據根因合併分類,每日日報會列出影響用戶數最多的崩潰,精準定位功能幫助開發同窗定位到出問題的代碼行,實時上報能夠在發佈後快速的瞭解應用的質量狀況,適配最新的 iOS, Android 官方操做系統,鵝廠的工程師都在使用,快來加入咱們吧!