深度探讨验证码发展史,账户中心安全科普文
12306圖片驗證碼吐槽風波將驗證碼推到風口浪尖,各種吐槽及惡搞接連而至,讓之前一直無處不在但是又默默無聞的驗證碼風光了一回,面對普通用戶的抱怨和謾罵,作為產品人員的我們,是不是應該多一些理性思考呢。
本文將三個方面來與大家分享驗證碼及周邊知識,均是本人五年賬戶中心工作(三年技術、兩年產品經驗)的心得總結得出,希望對產品狗及運營同行有一些幫助和啟發。
- 驗證碼功能簡述
- 驗證碼發展史
- 對運營的影響
驗證碼功能簡述
(常見驗證碼一覽)
全自動區分計算機和人類的公開圖靈測試(英語:Completely Automated Public Turing test to tell Computers andHumans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序。
沒聽懂維基百科的解釋?更通俗一點的說法,驗證碼是防止計算機程序通過大批量惡意請求來對網站進行資源消耗。
為什么這么說呢,我們縱觀互聯網發展史,驗證碼誕生初期,正是web 2.0方興未艾之時。web 2.0打開了用戶入口,但是卻也給機器程序開了一個通道。惡意程序批量請求注冊垃圾帳號、暴力登錄進行密碼破解、大批量論壇廣告發帖、搶券(12306的購票)、刷投票排名……如果沒有驗證碼,這些都是可以很簡單的做到。有人要說通過IP限制等手段,相信我,這一塊除了驗證碼是最好的防御手段,目前來說沒有其他更恰當的防御方式。
但是隨著互聯網技術發展,尤其現在大家開口談及的云計算、機器學習、數據挖掘、OCR識別等技術,為了提高驗證碼對機器人的防御難度,驗證碼是做的越來越復雜,而人也相應的更加難識別了。接下來我們先從驗證碼發展史談起,看看它們都經歷了什么。
驗證碼發展史
驗證碼的發展,是隨著互聯網技術相應的提升的,尤其是近些年來,包括Google在內的一些互聯網公司對此方面所做的努力。
根據維基百科的定義,“在CAPTCHA測試中,作為服務器的計算機會自動生成一個問題由用戶來解答。”,這是早期的一問一答的模式,我們可以成為問答驗證。另一類也是最近興起的方式,根據用戶的頁面行為來進行判斷,我們尚將之稱為為行為式(human behavior analysis?)。
問答驗證
驗證碼發展初期,基本上是很工整的字符,因為那個時段沒有OCR,沒有機器學習,沒有神經網絡,聽起來是一個很淳樸的年代有沒有。驗證碼也不需要設計多復雜。但是隨著Google及一些技術大牛開源OCR識別庫(https://github.com/tesseract-ocr),驗證碼識別門檻一下子就變低了,調用這些公開的庫,一些基本的驗證碼識別率能達到85%以上,這些識別工作不超過10行代碼。
(從圖中圖片命名可以看出,驗證碼被識別的準確率很高,突破95%以上)
隨后,驗證碼為了提高破解難度,則添加的一些背景干擾圖,讓字符變得扭曲。但是我們可以從上圖看出,識別這種背景雜亂-顏色干擾-字符扭曲的驗證碼,精準識別率也是很高的。
(12306的驗證碼)
(某網站的登錄界面的文字-圖片驗證碼)
好了,我們來看看12306的驗證碼是什么道理?從本質上說,這種驗證碼和前面的扭曲驗證碼道理是一樣的,也是問題-答案式的樣式。我們先看看破解難度,首先是要識別中文字符,其次是識別圖片。中文如果不加干擾的話,是很容易識別的,這種加了干擾后,對人和機器都有一定的難度。圖片識別目前沒有比較成熟和像OCR開源一樣的公用接口,但是很不幸的是,這種12306式的圖片可以用哈希算法進行匹配,當然這有一定的難度也費時費力。不過圖片驗證以后肯定不是主流,生命周期也會很短,因為……Google正在籌劃它的圖像識別接口,Google Cloud Vision API……這項技術源于Google圖片的大數據標簽,建立的深度神經系統學習網絡。為什么Google以前也用過12306一樣的圖片驗證碼現在卻把這項技術公開,因為它們有了更有效的驗證碼,我們后面再講。
行為驗證
Google在今年年初提出human behavior analysis的概念,率先去掉了傳統的驗證碼,用戶只需要點擊一下,就可以進行人機判別,如果被認為是機器人,那么會進行另一套復雜的驗證系統。是不是很酷炫……體驗地址:https://bitbucket.org/account/signup/?目前因為眾所周知的原因,國內并不能使用Google接口。
令人驚奇的是,國內居然也有做行為驗證的,最早我自己在一論壇發帖時用到過,當時沒怎么在意,后來居然發現一好友的公司也用上了。后來就這個事情交流過,好友表示之前每次驗證碼都被破解遭遇暴力注冊,對運營人員造成很大干擾,技術只能頻繁換驗證碼,越換越復雜,但對惡意程序并沒有什么用……后來直接調用了這個號稱行為驗證的接口,部署后確實對破解者有很明顯的阻礙作用,比字符驗證碼靠譜很多,而且用戶體驗也確實不錯。我自己也去研究了下,目前使用這個驗證碼網站也挺多的,我現在先部署在公司內一些小模塊試試穩定性和安全性,等有自己的結果再和大家分享。可以去新浪博客評論區體驗一下:http://blog.sina.com.cn/s/blog_71ad0be10102wa7y.html?tj=1
運營和產品能做什么?
?12306被噴其實已經說明了驗證碼和網站的內在關系,用老掉牙的話講,驗證碼是一把雙刃劍,它既保障安全,但是又對用戶有阻礙,有些用戶看到驗證碼頭都大了,直接關閉頁面走人。但是如果不加驗證碼,被競爭對手和搗蛋分子,分分鐘刷成狗,使得成個運營體系耗費精力去維護、刪除這些沒意義的垃圾數據,嚴重的會導致運營體系崩壞、密碼被盜,甚至原本給正常用戶的獎勵也被這些垃圾用戶撈走。那么,運營或者產品人員該怎么辦呢?
第一,同程序員溝通,定制合適的安全防御策略。防御策略首先就是驗證碼模塊,建議選取合適的驗證碼(勇于嘗鮮的可以試試上面說的那個極驗驗證),既能保障安全性,也不對用戶體驗造成損害,畢竟市場同志在外面辛苦做推廣,結果用戶來了卻因為驗證碼流失,這也挺冤的。除了驗證碼外,還可以做一些輔助性的工作,比如對IP進行閾值限制(這個要謹慎,如果用戶群體大,很容易造成大規模的誤封)、
第二,設計合理的運營獎勵體系。這一點尤為重要,特別是涉及積分、送券、返現的網站,如果沒有合理的運營體系,會對驗證碼的要求十分高。不過運營設計的沒有吸引力,很難吸引新用戶來,這也是個矛盾的地方。
今天先寫到這里吧。
總結
以上是生活随笔為你收集整理的深度探讨验证码发展史,账户中心安全科普文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内外交互体验很好的十款验证码
- 下一篇: 「会会」产品体验报告