梁艷輝 李明瑋 龍俊安 駱特拉


關鍵詞 深度學習 驗證碼識別 網(wǎng)絡安全
1概述
深度學習作為當今最流行的科學研究趨勢之一,為計算機視覺和機器學習帶來了革命性的進步,非常適用于字符型驗證碼的識別[1] 。傳統(tǒng)的圖像處理和機器學習算法對使用者的要求較高,且由于圖片的變化類型較多,處理方法不能通用,甚至會花費很長的時間。與傳統(tǒng)的人工特征設計相比,使用卷積神經(jīng)網(wǎng)絡,只需要進行簡單的圖像預處理,就可以實現(xiàn)大部分靜態(tài)字符型驗證碼的識別,不僅識別率較高、通用性強,而且最大程度降低了驗證碼識別的難度。本項目利用TensorFlow2.x 來構建一個卷積神經(jīng)網(wǎng)絡模型,用于更快速、更精確地識別字符型驗證碼。
2技術及理論基礎
2.1Captcha
該項目使用由Python 所提供的Captcha 庫中的方法來生成驗證碼數(shù)據(jù)集以及訓練集。由該庫所生成的驗證碼圖片字符包含26 個英文字母(區(qū)分大小寫)和10 個數(shù)字,并隨機取出4 個經(jīng)過扭曲后的字符進行排列組合。同時,在這些圖片中加入了噪點和干擾線,圖片的顏色隨機生成(圖1)。
2.2基于TensorFlow2.x 的卷積神經(jīng)網(wǎng)絡
該項目基于Tensorflow2 的框架來進行神經(jīng)網(wǎng)絡的搭建。與Tensorflow1 相比,Tensorflow2 的變化可謂是翻天覆地。TensorFlow2.0 在1.x 的基礎上進行了重新設計,針對提高使用者的開發(fā)效率,對API 做了精簡,刪除了冗余的API 并使之更加一致。不過,這也導致了Tensorflow2.x 與Tensorflow1.x 的兼容性較差。而該項目采用Tensorflow2 正是因為Tensorflow2 更加簡潔、靈活,同時操作更加簡便,很多在Tensorflow1 中需要手動調(diào)試的代碼在Tensorflow2 中通過調(diào)用API即可實現(xiàn)。
2.3卷積神經(jīng)網(wǎng)絡
與傳統(tǒng)神經(jīng)網(wǎng)絡相比, 卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network, CNN)從二維升級到了三維,但仍舊是一種多層的神經(jīng)網(wǎng)絡。CNN 被廣泛應用于計算機視覺領域,是目前圖像領域中最好的特征提取方法,大大提高了數(shù)據(jù)分類的精度。
3技術實現(xiàn)及模型分析
該項目的實現(xiàn)過程大致分為數(shù)據(jù)集和訓練集的獲取、數(shù)據(jù)集和訓練集的預處理、卷積神經(jīng)網(wǎng)絡的搭建以及網(wǎng)頁識別平臺的搭建。
3.1數(shù)據(jù)集的獲取
上文提到本項目使用Python 所提供的Captcha庫來獲取數(shù)據(jù)集,利用Captcha 庫能夠對驗證圖片的大小、顏色、內(nèi)容進行調(diào)整,并且能夠在圖片上添加干擾線和噪點,以獲得質(zhì)量更高的驗證碼圖片[2] 。
3.2數(shù)據(jù)預處理
驗證碼圖片不能直接作為模型的輸入數(shù)據(jù)來使用,因為大量的干擾線和彩色較多的圖片會嚴重降低模型學習的效率。所以我們需要對驗證碼圖片進行一系列的預處理操作。
圖像預處理流程為:RGB→灰度圖→規(guī)范化數(shù)據(jù)。首先,將圖像進行灰度化處理,此時需要利用Y′=0.299R(Red)+0.587G(Green)+0.114B(Blue)公式來對灰度圖進行轉換;其次,經(jīng)過灰度化處理之后,同時需要將灰度圖數(shù)據(jù)進行規(guī)范化;最后,使用獨熱編碼(One?Hot Code)來處理數(shù)據(jù)中的每一個字符。One?Hot Code 編碼的優(yōu)點是可以解決類別型數(shù)據(jù)的離散值問題。
3.3卷積神經(jīng)網(wǎng)絡模型搭建以及訓練
卷積神經(jīng)網(wǎng)絡的結構主要可以分為特征提取和全連接。在特征提取中,需要進行卷積、池化以及激活函數(shù)(該項目采用ReLU 函數(shù)),它們分別對應網(wǎng)絡模型中的conv 層、Pool 層和ReLU activation fuction層。
本項目的網(wǎng)絡模型包含三層卷積層、Dropout 層、softmax 層與全連接層。將4 個全連接層分為10 類,分別對應4 個字符,并將它們拼接在一起,以輸出結果。
在每層卷積層后,選用ReLU 函數(shù)作為激活函數(shù),ReLU 函數(shù)能起到緩解過擬合矛盾的效果。ReLU 函數(shù)會使一部分神經(jīng)元的輸出為0,以此使網(wǎng)絡具有稀疏性特征,并且減少了參數(shù)的相互依存關系。完成模型搭建后,利用該模型讀取處理好的驗證碼數(shù)據(jù)并完成訓練,然后保存完成訓練的模型。
4識別結果分析
對結果進行分析可發(fā)現(xiàn),識別率達到99%以上,這離不開足夠的數(shù)據(jù)集和最佳損失函數(shù)的支持。在選擇損失函數(shù)時,我們引入了四種不同的損失函數(shù)進行對比測試,結果顯示模型的識別準確率較高(圖2)。
從結果可以看出,Binary CE 的效果最佳,識別率最高,所以本項目選擇binary_crossentropy 作為LOSS函數(shù)。
5驗證碼對維護網(wǎng)絡安全的思考
通過上述分析結果可以看出,在深度學習識別較為成熟的時代,傳統(tǒng)且簡單的驗證碼已經(jīng)不能完全防范“機器人的惡意攻擊”。因此,我們需要對新時代的驗證碼安全提出新的防護方案。下文將介紹幾種提升驗證碼安全性的解決方案。
5.1更復雜的驗證碼
對于主流的深度學習模型而言,系統(tǒng)并不能將嚴重扭曲且復雜的圖片做到點對點的精確識別,即當字母處于扭曲狀態(tài)時,系統(tǒng)并不能做到充分的“理解”。軟件尚不能夠輕易識別圖片,對正常人而言識別難度也較高,反復輸入錯誤致使用戶對此類驗證碼的使用十分反感。因此,此方案雖然能夠提升驗證碼的安全性,但并不是最有效的解決方案。
5.2新式驗證碼
5.2.1圖像驗證碼
此類驗證碼通過用戶匹配九宮格內(nèi)出現(xiàn)的物品與要求的提示詞來進行身份驗證, 它由Google 發(fā)明并進行推廣。該類型驗證碼是當前國外網(wǎng)站使用頻率較高的驗證碼系統(tǒng)之一,其成功率較高,深受用戶喜愛。在深度學習流行的時代,數(shù)據(jù)集作為一種稀缺資源,各深度學習公司對其十分看重。Google 巧妙地將驗證碼識別和數(shù)據(jù)集收集相結合,通過高準確率的判斷為圖片生成標簽,從而進一步提升了深度學習的研發(fā)能力。然而,部分圖片與復雜模糊的驗證碼情況類似,并不能讓人準確地進行識別,同時容錯率較低,少點或者點錯圖片則一直不能通過驗證,這是后續(xù)需要優(yōu)化之處。
5.2.2點擊式驗證碼
此類驗證碼通過用戶點擊按鈕自動進行智能驗證。其常見于調(diào)研問卷網(wǎng)站,如問卷星、問卷網(wǎng)等。其作用是防止用戶對所發(fā)放的試卷進行惡意操作。在網(wǎng)站壓力較小時,僅需點擊該類型驗證碼便可以通過智能驗證;在網(wǎng)站壓力較大時,則需要用戶滑動滑塊才可以完成驗證。當超過同IP 連入閾值時,會出現(xiàn)驗證失敗的情況,需要用戶重新點擊或者更換IP才能夠完成驗證[3] 。
6總結