驗(yàn)證碼的前世今生(今生篇)
看完《驗(yàn)證碼的前世今生(前世篇)》也許第一感覺(jué)就是Winter is coming,互聯(lián)網(wǎng)的人機(jī)對(duì)抗到了最黑暗的時(shí)刻。柳暗花明又一村,最黑暗的時(shí)刻也是光明即將來(lái)臨的時(shí)刻——在傳統(tǒng)驗(yàn)證碼的末日新的反向圖靈測(cè)試機(jī)制浴火重生。
0×1 驗(yàn)證碼的劃代標(biāo)準(zhǔn)
在介紹新的反向圖靈測(cè)試機(jī)制前,首先我們對(duì)驗(yàn)證碼進(jìn)行劃代對(duì)比。通過(guò)驗(yàn)證碼的劃代對(duì)比我們能更清楚新型驗(yàn)證碼的特性。
驗(yàn)證碼劃代的標(biāo)準(zhǔn)是人機(jī)識(shí)別過(guò)程中基于對(duì)人類(lèi)知識(shí)的應(yīng)用。
第一代:標(biāo)準(zhǔn)驗(yàn)證碼
這一代驗(yàn)證碼是即是我們常見(jiàn)的圖形驗(yàn)證碼、語(yǔ)音驗(yàn)證碼,基于機(jī)器難以處理復(fù)雜的計(jì)算機(jī)視覺(jué)及語(yǔ)音識(shí)別問(wèn)題,而人類(lèi)卻可以輕松的識(shí)別來(lái)區(qū)分人類(lèi)及機(jī)器。這一代驗(yàn)證碼初步利用了人類(lèi)知識(shí)容易解答,而計(jì)算機(jī)難以解答的機(jī)制進(jìn)行人機(jī)判斷。
第二代:創(chuàng)新驗(yàn)證碼
第二代驗(yàn)證碼是基于第一代驗(yàn)證碼的核心思想(通過(guò)人類(lèi)知識(shí)可以解答,而計(jì)算機(jī)難以解答的問(wèn)題進(jìn)行人機(jī)判斷)而產(chǎn)生的創(chuàng)新的交互優(yōu)化型驗(yàn)證碼。第二代驗(yàn)證碼基于第一代驗(yàn)證碼的核心原理--“人機(jī)之間知識(shí)的差異”,拓展出大量創(chuàng)新型驗(yàn)證碼。
如12306的驗(yàn)證碼也是對(duì)于傳統(tǒng)驗(yàn)證碼的一種創(chuàng)新:
第三代:無(wú)知識(shí)型驗(yàn)證碼
第三代驗(yàn)證碼最大的特點(diǎn)是不再基于知識(shí)進(jìn)行人機(jī)判斷,而是基于人類(lèi)固有的生物特征以及操作的環(huán)境信息綜合決策,來(lái)判斷是人類(lèi)還是機(jī)器。無(wú)知識(shí)型驗(yàn)證碼最大特點(diǎn)即無(wú)需人類(lèi)思考,從而不會(huì)打斷用戶(hù)操作,進(jìn)而提供更好的用戶(hù)體驗(yàn)。
如Google的新版ReCaptcha:
阿里巴巴的滑動(dòng)驗(yàn)證:
0×2 無(wú)知識(shí)型驗(yàn)證碼的原理
Step 1:在Web前端周期性的對(duì)Javascript代碼進(jìn)行混淆和并更新加密算法,將不可信的Web前端打造成可信的客戶(hù)端。在用戶(hù)進(jìn)行滑動(dòng)操作時(shí),基于可信的客戶(hù)端采集用戶(hù)操作的行為信息以及環(huán)境信息,將其加密后提交給后端的風(fēng)控引擎;
Web前端因?yàn)榇a都是明文形式的腳本語(yǔ)言,服務(wù)端想要從客戶(hù)端獲取可信的數(shù)據(jù)一直面臨“源碼面前,了無(wú)秘密”的困擾。給一個(gè)前端工程師充足的時(shí)間,似乎Web前端真的是了無(wú)秘密,如下圖:
而隨著攻防對(duì)抗的持續(xù),安全的補(bǔ)鍋匠們總能找到猥瑣的方法來(lái)進(jìn)行防御。Web前端雖然沒(méi)有客戶(hù)端防止逆向和調(diào)試的安全強(qiáng)度,但是卻具備客戶(hù)端所不具有的hotpatch能力。
參考Map-Reduce的原理,單臺(tái)機(jī)器性能不行,把任務(wù)分派到多臺(tái)機(jī)器并發(fā)執(zhí)行。如果單份Javascript混淆的強(qiáng)度不可行,那么周期性的對(duì)Javascript代碼自動(dòng)混淆。即便攻擊者能夠短時(shí)間的對(duì)Web前端進(jìn)行逆向,但逆向出來(lái)的功能短期之后就會(huì)在服務(wù)端失效,那么也能極大的消耗攻擊者的成本。
更可怕的是喪心病狂的Google基于Javascript完全的實(shí)現(xiàn)一套虛擬機(jī),核心代碼使用字節(jié)碼實(shí)現(xiàn)。周期性的對(duì)字節(jié)碼格式更新逆向的成本成幾何級(jí)數(shù)遞增。
如果代碼邏輯不更新,僅僅重復(fù)的混淆原有邏輯,那么仍然沒(méi)有意義。而對(duì)于一個(gè)Web的驗(yàn)證碼應(yīng)用,核心功能只有兩部分:
1、事件采集模塊,采集用戶(hù)的行為信息,此部分邏輯簡(jiǎn)單,也無(wú)法自動(dòng)化更新代碼邏輯;2、行為數(shù)據(jù)加密模塊,該部分的核心是加密算法,似乎代碼邏輯自動(dòng)化更新變化有足夠空間。
為了保障前端的可信,需要對(duì)加密算法進(jìn)行自動(dòng)化更新,必須要有一個(gè)巨大的對(duì)稱(chēng)加密算法可選集合才能保證代碼的自動(dòng)化更新。而所有對(duì)稱(chēng)加密算法都基于Feistel分組密碼結(jié)構(gòu),基于Feistel分組密碼結(jié)構(gòu)可以派生出無(wú)數(shù)的對(duì)稱(chēng)加密算法,從而可以派生出無(wú)數(shù)的的對(duì)稱(chēng)加密算法。
如下圖,F(xiàn)estel分組結(jié)構(gòu)的可逆性不要求加密的核心函數(shù)F可逆,故可以自動(dòng)的生成任意的F函數(shù)進(jìn)而派生出無(wú)數(shù)對(duì)稱(chēng)加密算法。
基于自動(dòng)化的代碼更新及混淆機(jī)制從而保障整個(gè)Web代碼對(duì)抗逆向分析和調(diào)試的強(qiáng)度,進(jìn)而將不可信的Web前端打造成可信的端。
Step 2:后續(xù)風(fēng)控引擎會(huì)基于用戶(hù)操作的行為特征、用戶(hù)環(huán)境信息、用戶(hù)對(duì)應(yīng)的設(shè)備指紋及其設(shè)備信譽(yù)綜合進(jìn)行決策,判斷是否需要對(duì)該次操作進(jìn)行二次判斷或者是直接阻斷。
0×3 無(wú)知識(shí)型驗(yàn)證碼的優(yōu)點(diǎn)
無(wú)知識(shí)型驗(yàn)證碼有三大核心優(yōu)點(diǎn),分別是用戶(hù)體驗(yàn),風(fēng)險(xiǎn)識(shí)別,風(fēng)險(xiǎn)攔截。
用戶(hù)體驗(yàn):
無(wú)知識(shí)型驗(yàn)證碼針對(duì)大多數(shù)的用戶(hù)能夠無(wú)需思考,直接通過(guò)。不存在業(yè)務(wù)和流程的打斷,體驗(yàn)流暢,對(duì)用戶(hù)體驗(yàn)的提升毋庸質(zhì)疑。
風(fēng)險(xiǎn)識(shí)別:
因?yàn)殡S著機(jī)器學(xué)習(xí)的發(fā)展讓機(jī)器掌握人類(lèi)具有的知識(shí)也不再是難點(diǎn),無(wú)知識(shí)型驗(yàn)證碼不再基于知識(shí)來(lái)挑戰(zhàn)機(jī)器,而是基于人類(lèi)的固有行為特征以及操作的環(huán)境信息綜合進(jìn)行風(fēng)控決策,攻擊者難以批量的模擬出可以欺騙風(fēng)控引擎的正常人類(lèi)的的操作。
風(fēng)險(xiǎn)攔截:
普通的驗(yàn)證碼基于知識(shí)對(duì)機(jī)器發(fā)起挑戰(zhàn),無(wú)法做到對(duì)機(jī)器進(jìn)行阻斷。因?yàn)橹R(shí)的挑戰(zhàn)還需要兼顧人類(lèi)的體驗(yàn),機(jī)器通過(guò)的概率只能做到無(wú)限的降低而無(wú)法消除。而無(wú)知識(shí)型驗(yàn)證碼基于后端的風(fēng)控決策,可以對(duì)不同風(fēng)險(xiǎn)的操作提出更高難度的驗(yàn)證碼乃至阻斷,有更大空間對(duì)風(fēng)險(xiǎn)進(jìn)行消除和攔截。
0×4 總結(jié)
目前阿里聚安全提供的滑動(dòng)驗(yàn)證產(chǎn)品,目前對(duì)外提供免費(fèi)試用,歡迎申請(qǐng)免費(fèi)試用
最后,希望新型的驗(yàn)證碼能夠建設(shè)更簡(jiǎn)單和安全的互聯(lián)網(wǎng): )