盛超逸,易 平
(上海交通大學,上海 200240)
互聯網發展之初是為了將不同的服務提供給大多數用戶。服務提供商的目的是想讓目標用戶能夠定位這些資源的位置并且合理訪問它們[1]。而自動化腳本和惡意程序對這些資源的訪問,使得資源被浪費,同時降低了系統性能,造成合法用戶的請求難以得到響應[2]。完全自動化區分計算機和人的公共圖靈測試(Completely Automated Public Turing Test to Tell Computers and Humans Apart,CAPTCHA)即驗證碼的出現,給互聯網安全構建了一道保護屏障[3-4]。它通過引入一個對人類來說較為簡單但對于機器卻非常困難的測試,可以在提供服務之前將惡意程序和自動化腳本排除在外。一個好的驗證碼方案應該具有這樣的特點:人類通過測試的成功率在90%以上,但是計算機程序只有小于1%的成功率[5]。
主流的驗證碼方案可分為基于文本的驗證碼方案、基于語音的驗證碼方案和基于圖片的驗證碼方案[6]。文本驗證碼通常由大小寫英文字母和阿拉伯數字組成,且會在組合的基礎上對其進行復雜的形變、旋轉或者添加噪聲等方式來增加機器識別的難度。但是,很多針對文本驗證碼的攻擊也被提出,威脅了現有文本驗證碼的安全性。早期簡單文本驗證碼如谷歌、雅虎和微軟等公司部署的驗證碼方案已經被攻破[7-8]。于是,研究者把視線投向圖像驗證碼。他們認為,人類識別和描述圖像的過程非常自然,但對機器而言卻是一項很復雜的任務[9]。谷歌reCAPTCHA[10]就是這樣一種典型的圖像驗證碼,如圖1所示。它通過給出一個關鍵詞wine和一張示例圖片,讓用戶從9個候選圖片中選出所有與示例相似的圖片。然而,隨著深度學習的發展,神經網絡在圖像分類等領域的準確率已經接近甚至超越人類的水平[11-12]。通過神經網絡對候選圖片進行圖像分類,再選出標簽為wine的圖片,可以輕易攻破reCAPTCHA方案。如圖2所示,深度驗證碼(DeepCAPTCHA)是在reCAPTCHA的基礎上,利用對抗樣本(Adversarial Example)會使神經網絡分類出錯的特性,通過在主圖片昆蟲中添加對抗噪聲,使得深度學習模型分類錯誤[13-14],從而無法在12個備選圖片中選擇正確的圖片。然而,DeepCAPTCHA方案卻沒有考慮基于圖像相似性搜索來獲取圖像標簽的可能,通過對主圖片進行圖像相似度搜索來獲得其標簽,再比較它與備選圖片的標簽之間的語義相似程度,即可以攻破DeepCAPTCHA。

圖1 谷歌reCAPTCHA驗證碼挑戰

圖2 DeepCAPTCHA挑戰
容易被神經網絡獲取標簽和直接比對標簽的語義相似性方法破解,是傳統圖像驗證碼存在的固有安全問題。為了解決圖像驗證碼的這一安全問題,本文提出了一種新的基于知識圖譜的邏輯驗證碼算法。它通過增加邏輯推理的環節來對圖像驗證碼進行防御。不同于傳統的圖像和文本的驗證碼算法的工作流程,如圖3所示。它添加了利用人類的智能可以進行聯想和推理的環節,而這些是機器和深度神經網絡無法做到的。它側重基于邏輯事實的推理并同時兼顧語義標簽和文本信息的保護。本文提出的邏輯驗證碼基于常識知識圖譜ConceptNet,通過選取其中的一條常識知識生成驗證碼。用戶則需要根據驗證碼中給出的多個詞組描述進行邏輯推理,并在添加了對抗噪聲的候選圖片中選擇與推理結果最貼近的圖片,如圖4所示。

圖3 傳統圖像驗證碼工作流程

圖4 邏輯驗證碼工作流程
其中,添加根據人類所具有的常識知識設計的邏輯推理環節,能夠使得在分類與回歸兩大問題上大有作為的人工神經網絡黯然失色。通過研究用戶的使用發現,邏輯驗證碼算法具有很高的可用性和安全性。實驗表明,邏輯驗證碼的操作簡單、耗時短且準確率高。對于4個提示詞和6張候選圖的組合,參與者可以在5 s以內完成驗證碼測試,并且通過率高達95%。對于暴力破解的方法,如果候選圖中有兩張符合答案的圖片,沒有決策依據的機器進行暴力破解只有1/15的成功概率。即使神經網絡能夠對候選圖片進行正確分類并獲取其標簽,通過比較與給出的描述詞組的語義相似度來進行攻擊,也只能達到4.5%的通過率。
本文結構如下:第1節介紹文本和圖像驗證碼的相關研究工作;第2節主要介紹邏輯驗證碼的方案;第3節進行了一些實驗探究驗證碼設計的關鍵問題——圖像數量、提示詞選擇以及分析其安全性;第4節總結和展望未來驗證碼安全的思路與方向。
驗證碼最早誕生于20世紀中期,是由英國數學家阿蘭·圖靈制定的用于區分機器反應和人的反應。如今,人們在訪問網站、登錄郵箱等情況下都會先完成一個驗證碼測試,才能繼續進行后續操作。為了區分正常訪問的用戶和惡意的計算機程序,驗證碼在今天已經衍生出多種多樣的形式。最主要的3種形式是文本驗證碼、語音驗證碼和圖片驗證碼,保護著人們信息的安全和網站資源的安全。然而,在人工智能飛速發展的今天,這些驗證碼也面臨著各種各樣的攻擊,其安全性問題不容忽視。
基于文本的驗證碼容易設計與實現。它從字典中隨機選取字母和數字進行扭曲組合,用戶識別并提交這個組合。在這個詞組的組合上,可以使用網格、添加噪聲以及更改顏色等方式來對驗證碼文本進行失真操作。由于光學字符識別(Optical Character Recognition,OCR)和圖像處理算法的進步[15-16],基于文本的驗證碼已經不能保證其驗證的有效性。Kumar指出,衡量文本驗證碼的魯棒性應該是從CAPTCHA圖像分割字符的困難程度判斷,而不是識別每個字符是什么,因為強大的深度學習網絡如卷積神經網絡(Convolutional Neural Networks,CNN)可直接識別旋轉或扭曲的字符。在此基礎上,Guixin Ye等人提出了基于生成式對抗網絡(Generative Adversarial Network,GAN)來破解文本驗證碼[17],包括微軟、維基百科、eBay和谷歌等50個網站中正在使用的11個驗證碼方案,且能夠做到在使用桌面GPU的情況下以0.05 s的速度完成一個驗證碼測試。音頻驗證碼的出現給視力障礙人士提供了一種新的選擇,通過文本語音合成器形成一段包含字母數字組合的音頻,通過聽寫給出正確的答案。隨著AI技術在自然語言處理領域的發展,音頻驗證碼也容易被攻破。
基于圖像的驗證碼利用了人類對圖像內容的認知水平。Elson等人提出了Asirra,要求用戶從一組12張包含貓和狗的圖片中選取貓的圖片,數據集來源于Petfinder.com。目前最廣泛使用的是谷歌提供的reCAPTCHA,包含多個版本,其中圖像reCAPTCHA是讓用戶來識別具有相似內容的圖片,每個問題包含1個提示關鍵詞、1個樣例圖像和9個候選圖。在深度學習未使用GPU進行加速前,機器識別圖像的內容是一件很難完成的事情,需要很強的計算能力。隨著GPU架構升級和并行處理性能的增強[18],深度學習進入了飛速發展應用的時代,神經網絡層數不斷加深,Resnet的出現使得訓練一個具有幾百層結構的網絡模型成為可能。卷積神經網絡通過輸入層、隱藏層和輸出層不斷提取圖像中的特征,引入激活函數使得網絡具有非線性性質,利用反向傳播算法對網絡權重參數進行不斷更新優化,使得最終的分類結果更為準確。
深度學習的發展給圖像驗證碼的安全性提出了全新要求,而對抗樣本的出現則為Margarita Osadchy等人設計出深度驗證碼(DeepCAPTCHA)提供了契機。他們通過引入不可變對抗噪聲對圖像進行加工使之成為對抗樣本,使得圖像能夠抵抗諸如去噪等移除圖片中對抗噪聲的嘗試,使得圖像驗證碼對深度學習模型有一定的抵抗能力且有較高的安全性。但是,盡管對抗樣本具有一定的遷移性,經過對抗訓練的神經網絡仍可以識別對抗樣本,且隨著網絡模型結構的改變和在不同數據集上進行訓練,生成好的對抗樣本也可能失去欺騙效果,會導致深度驗證碼在未來不斷更新時的代價變高。同時,它要求生成驗證碼的圖片集無限大(bottomless)且盡量未公開,用完即丟棄,會提高驗證碼的生成成本。
本文提出的驗證碼并不需要圖片集無限大,也無需使用后丟棄。用戶獲取提示詞所給的部分信息,憑借自己的生活經驗和常識等進行合理推斷,并在候選圖像中選擇與自己所想內容符合的圖片作為最終的答案即可。
本文的目標是設計一種基于知識圖譜的邏輯驗證碼方案。驗證碼設計的整體過程包括隨機選取實體、選擇與實體相關的常識描述、生成驗證碼文本、從圖庫中選擇候選圖片、生成對抗樣本和生成一組邏輯驗證碼挑戰等。方案設計流程如圖5所示。

圖5 邏輯驗證碼設計流程
總體算法設計從隨機選取實體開始,預先建立好包含8個大類的實體名稱庫。它包含諸多類別如動物、植物、食品、自然、交通工具、衣物服飾、電子產品和生活物品等,每個大類中包含多個細分實體。生成一組驗證碼挑戰時,會從實體名稱庫隨機挑選一個實體A作為本次驗證碼的答案所屬類別,以及一定數量的不相關的實體集合B作為干擾項。然后,通過查詢常識知識庫ConceptNet中有關實體A的常識性描述,選擇一定數量的描述即提示詞組,利用golang CAPTCHA的API接口生成文本形式的驗證碼。同時,需要在構建的圖片庫中隨機選擇一張實體A的圖片和數張不相關實體集合B的圖片構成所有的候選圖片。為了欺騙神經網絡分類器使之無法獲得圖片的正確標簽,還需要對這些圖片添加對抗噪聲以生成對抗樣本。將生成好的文本驗證碼和添加了對抗噪聲的圖片組合,即可形成一次完整的邏輯驗證碼挑戰。
驗證碼系統基于Vue框架進行搭建。以一個由4個提示詞組和6張候選圖組成的驗證碼挑戰為例,如圖4所示,首先選擇鳥這個實體作為本次驗證碼挑戰的答案,查詢ConceptNet獲取4個關于鳥bird的常識性描述——羽毛(feathers)、可以扇動翅膀(spread the wings)、唱歌(can sing)和在樹枝上棲息(land on a branch),利用API接口生成了圖6最右側一列展示的文本驗證碼。在實體名稱庫中,隨機選擇5個與鳥不相關的實體——貓、鬧鐘、汽車、金魚和蘋果,同時在圖庫中選擇實體所對應的圖片,利用Resnet網絡對這些圖片添加對抗噪聲,隨機擺放好這些圖片所在的位置,使得正確答案不會出現在固定的位置,這樣就完成了一次驗證碼挑戰的生成。
用戶所要做的是要通過右側給出的幾個詞組的描述,推斷出所描述的實體是什么,從而在左側候選的圖像中選擇符合邏輯的圖片作為答案,并點擊提交即可完成測試。根據提示詞羽毛和唱歌,人可以很容易推斷出左下角內容為鳥的圖片為正確答案。這里的提示詞組選擇用英文顯示,也可以根據不同地區做相應的語言調整。此外,系統添加了超時機制,一旦超過預定的判斷時間,會刷新驗證碼內容,以提升邏輯驗證碼的安全性。

圖6 邏輯驗證碼挑戰
邏輯驗證碼的設計有令人耳目一新的特點。這是第一次通過設計邏輯推理的過程來區分人與機器,并且結合了圖像與文本驗證碼的特性,同時提示詞內容可以根據不同國家地區的語言進行調整。常識具有一般性,是能為大部分人群所熟知和接受的知識。因此,通過獲取與實體相關的常識,并以一種類似你說我猜的游戲方式進行呈現,受到了參與測試用戶的一致好評。他們認為,邏輯驗證碼非常有趣,且能夠快速準確地完成驗證碼測試。
利用神經網絡解決一些圖像分類和數據回歸的問題,并且提升模型的準確性和魯棒性,一直是人工智能研究的熱點。然而,利用已有知識和信息進行邏輯推理的能力是人類所特有的,對于目前的人工智能技術來說是一件較為困難的事情。現有的圖像驗證碼防御設計多針對神經網絡的分類能力,意圖欺騙它使之分類錯誤。邏輯驗證碼利用常識進行邏輯推理過程的設計。所謂常識,即對不同區域、不同年齡層次、不同職業的人群來說都要具有普適性。因此,選擇合適的常識在邏輯驗證碼設計的過程中尤為重要,而蘊含相關知識的知識圖譜(Knowledge Graph)是一種較好的來源。
傳統的知識圖譜的構建以三元組的方式存儲。三元組由實體、實體關系和實體構成。常見的以相關領域知識和語言學為基礎的知識圖譜有Wikidata、YAGO以及NELL等[19]。知識圖譜常以可視化的具有指向性的圖(Graph)的形式展現,實體與實體之間以相互的關系作為鏈接的媒介。以具有上下位關系的知識圖譜為例,一個實體會不斷連接延伸它的上位詞直至沒有上位詞為止,會使圖的結構非常龐大復雜,且實體只與其直系的上位詞之間的關聯度較好。如果從中隨機抽取不同實體,在圖的結構中難以伸展至同一個交點,導致出現歧義性的可能較大;提示詞組選擇好后,攻擊者一旦知曉所使用的知識圖譜,則可以輕易從單一的依賴關系中找到答案。領域類知識圖譜GoodsKG則是基于京東商城的1 300種商品的上下級概念進行構建的,包含了10萬品牌和65萬種品牌的銷售關系。然而,由于領域知識的限制,它并不適合用來作為具有一般性的常識。對于男性來說,他們可能不會熟悉化妝品和女性服飾的品牌,而對于女性來說一些品牌則是常識。即便是女性,對于多種多樣的化妝品和服飾品牌,她們的知識儲備也僅在知名品牌中。這種情況在其他商品中也非常常見,因此將會限制驗證碼生成的有效數目。
常識知識圖譜ConceptNet是一個大規模的包含數百萬個節點和關系的知識圖譜,如圖7所示。其中,實體的介紹主要包含是什么、被用于做什么、組成和具有的特征等,且三元組之間邊的權重也可以通過數值化的形式展現。本文利用ConceptNet作為知識載體,通過選擇合適的常識實體和與之有著一定關聯權重的描述生成邏輯驗證碼,同時限制描述詞組的數量和文本驗證碼生成的方式,以防止基于圖網絡結構對所選常識實體的回溯定位。

圖7 ConceptNet有關dog的常識描述
Christian Szegedy等人發現,在圖像數據集中故意添加細微的干擾所形成的輸入樣本,將會導致模型以一個較高的置信度給出一個錯誤的分類輸出,這樣的圖像樣本被稱作是對抗樣本。GoodFellow的文獻[20]指出,深度神經網絡在高維空間中的線性特性已經足以產生這種攻擊行為,并提出了一種更高效生成對抗樣本的方法叫做快遞梯度符號算法(Fast Gradient Sign Method,FGSM)。圖8利用FGSM方法對熊貓圖片產生對抗噪聲,使得神經網絡以99.3%的置信度認為這是一只長臂猿。這種方法基于目前神經網絡,為了提高訓練效率,所使用的激活函數在局部都過于線性。通過添加與訓練好的參數向量方向一致的微小擾動,就可以對神經網絡最終激活層的計算產生巨大干擾,從而愚弄神經網絡訓練出來的模型。

圖8 在GoogleNet上用FGSM生成對抗樣本
在已知模型參數條件下,通過求出模型對圖片輸入的導數,用符號函數得到具體的梯度方向并乘以步長,可以利用式(1)產生對抗噪聲:

式中,sign()是符號函數,J是訓練模型的損失函數,θ是模型的權重,x代表輸入圖像,y代表圖像對應的真實標簽,ε是噪聲系數,η是疊加在x上的噪聲。
本文用于生成驗證碼的圖片是經過精心挑選和設計的,所有原始圖片都來自于www.pexels.com,需要保證實體主體部分清晰明了,以減少對人的歧義性。按照實體在Wordnet中的種屬關系,選擇了8大類常見實體,并為每類實體建立對應圖集,同時會不斷替換其中的圖片,以保證每次生成的驗證碼所使用的圖片不相同,進而防止通過搜集相關圖片數據進行分類訓練,同時對每張圖片使用迭代FGSM方法生成對抗樣本,從而使得神經網絡分類器難以獲取其真實的語義標簽。對于候選圖片中除去答案圖片的剩下其他圖片的選擇,利用Wordnet的路徑相似度進行分析,從而使得在圖片集里隨機選擇時有較好的類間區分度,減少同類或者有著相近描述的實體,降低人的出錯概率。
根據一條常識,在ConceptNet中確定好用于描述該常識的文本內容,對其進行文本驗證碼的生成,以防止攻擊者直接獲取對應的文本信息。利用golang CAPTCHA,可以無需依賴第三方圖形庫生成驗證碼,同時可以對文本的字體、多種顏色組合、驗證碼顯示大小、文字模式、文字數量和干擾強度進行自定義設置。圖9展示了各種自定義設置下對提示詞產生的文本驗證碼,原文為can sing、eat meat和round。

圖9 提示詞文本驗證碼
本文的驗證碼通過在100類常見實體中進行一次常識知識的生成,利用ConceptNet所提供的信息進行提示文本選擇,同時利用自動化工具獲取pexels.com上的圖片來不斷擴充每類實體的代表圖片。對于圖片的對抗樣本的生成,采用目前最主流的深度學習框架——Pytorch進行神經網絡Resnet50的搭建。采用兩塊Nvidia 1080顯卡進行分類和產生對抗樣本,使用圖像分類領域著名的數據集ILSVRC-2012的驗證集,共50 000張圖像,包含1 000類對象每類各50張。采用預訓練好的Resnet50對ILSVRC-2012的圖片進行分類,可以達到88.1%的準確率。
對于驗證碼中的候選圖片,設置不同的噪聲系數ε來衡量噪聲對用戶識別速度和準確度的影響。在L∞范數條件下共設置4組不同噪聲系數,即ε為0.01、0.05、0.1和0.2。圖10列舉了原圖和在不同噪聲系數下生成的對抗樣本。可以發現,當噪聲系數大于0.05時,人眼已經可以看到明顯的噪點,但是并不影響人的判斷結果。
在具有6張候選圖和4行提示詞的驗證碼設置下,噪聲系數對人的識別速度和正確率影響如表1所示。可以發現,噪聲系數變大會在一定程度上影響人的正確率,也會增加完成一次驗證碼測試的時間,但都處于可接受范圍。因此,權衡生成對抗樣本的代價和識別結果,選擇噪聲系數為0.05較為合適。

圖10 原圖和生成的對抗樣本

表1 噪聲系數與正確率與平均用時
在設計邏輯驗證碼的過程中,一個較為關鍵的問題是如何設置候選圖片的數量和提示詞的數量。人們希望候選圖像更豐富,同時能夠使人在進行驗證碼測試時有更高的正確通過率,且所需的反應思考時間更少。為了確定最合適的數量組合,邏輯驗證碼的測試通過線上和線下進行。主要測試群體為上海交大的學生,覆蓋不同專業和大一至研三不同年級的同學。統一設置圖片大小為320×180,表2表示在噪聲系數0.05的條件下,不同的圖片數量和提示詞數量的組合下人的正確率和平均用時。

表2 噪聲系數0.05,不同組合下的正確率與平均用時
可以得出,當提示詞數量不變時,圖片數量越大,平均完成測試的時間越長,但對正確率的影響不大。究其原因,在于不同圖片之間的相似度小,區分度好。當提示詞增多時,正確率會逐漸提高,因為詞組描述的內容的重疊區域變小,易于用戶選擇更合適的圖片。用戶的平均用時在圖片數一定的前提下沒有增加太多,一方面是由于第一行信息沒有給人帶來直接的推斷,因此識別多行內容會增加一定的時間,另一方面是由于用戶不一定會按照順序從第一行讀起,中間的某行吸引到用戶的注意且具有足夠的信息量供用戶推斷,那么無需看其他提示詞即可進行選擇。
根據現有的實驗可以發現,圖片和提示詞的數量、內容的選擇等,都會影響驗證碼的可用性和安全性。因此,下面將從暴力嘗試、基于獲取語義標簽進行相似度匹配和可能存在的其他攻擊3個方面進行分析。
對于沒有決策機制的隨機猜測,是最簡單的攻擊方法。實驗結果表明,對于6張候選圖的驗證碼,其隨機猜測成功的概率與實際通過率一致均為1/6,這是在答案圖片數僅有一個的條件下得到的。如若答案設置為2個,即滿足常識性描述的圖片數為2個時,則可以將隨機猜測的成功率降低至1/15。當候選圖片數為12張時,則可以大大降低成功率,但也會以犧牲人的識別準確性和時間為代價,其正確率為70.3%,平均用時7.5 s。
由于在候選圖片中添加了對抗噪聲,使得神經網絡難以正確獲取每張圖片的語義標簽,且邏輯驗證碼的設計也保證了其低重復性,降低了攻擊者通過收集數據進行訓練和回溯的可能。即便可以用其他方法獲取到標簽的方式,如經過對抗訓練和圖像相似度搜索獲取圖片語義標簽和提示詞的文本信息,再利用Wordnet比較語義標簽與文本信息之間的相似度和關聯性的攻擊方式。在6×4且只有一個正確答案的驗證碼設置下,它的破解率為17%,略高于隨機猜測。而對于有兩個答案的情況下,它的破解率僅為4.5%。這是因為Wordnet中的相似度是比較兩個實體在路徑上的距離,而文本信息中描述的內容往往不直接與實體同類,所以即便能夠正確分類對抗樣本和文本驗證碼,邏輯驗證碼也是較為安全的,且超時機制的加入增加了另一道保障。
對于未來可能存在的基于知識圖譜的攻擊,在攻擊者不知道驗證碼系統所使用的知識圖譜的情況下,它不能通過建立拓撲結構進行查詢。即使攻擊者知道了所使用的知識圖譜,文本驗證碼對文本的變形也會使得獲取節點變得困難,同時可以對文本進行同義轉化和句子補全等,使得攻擊者無法直接在知識圖譜中查詢到這些文本內容信息。當然,較為安全的方式仍是建立屬于自己的知識圖譜,雖然會是一個工程量較大的事情,但是非常必要。
本文提出了一種新的基于知識圖譜的邏輯驗證碼方案,要求用戶根據變形后的提示文本進行推理,并在添加了對抗噪聲的候選圖中選擇最符合的答案。實驗結果表明,邏輯驗證碼在可用性和趣味性上都有著不錯的表現,用戶可以在較短的時間內準確完成測試。本文也對邏輯驗證碼的安全性進行了分析,確保了驗證碼設計的安全。以前的工作主要聚焦于識別任務區分人與機器,通過字符變化和產生對抗樣本雖然是較為有效的方式,但是安全性在人工智能技術的發展下受到了挑戰。邏輯驗證碼的出現能夠提升驗證碼安全,并為防御提供新的角度和思路。