裘鍇
(江西現(xiàn)代職業(yè)技術(shù)學(xué)院,江西 南昌330095)
在人機(jī)交互系統(tǒng)中,為了分別人類訪問(wèn)系統(tǒng)還是惡意的計(jì)算機(jī)主動(dòng)攻擊,人機(jī)交互證明機(jī)制(Human Interaction Proof)是一種常用的方式。驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試)的縮寫,它是一種非常重要和具有代表性的人機(jī)信息交互技術(shù)認(rèn)證管理機(jī)制。從本質(zhì)上講,CAPTCHA 是利用編程算法區(qū)別是計(jì)算機(jī)還是人類的操作,這個(gè)過(guò)程由人類很容易實(shí)現(xiàn),但是由計(jì)算機(jī)實(shí)現(xiàn)就不同意通過(guò)測(cè)試,這意味著CAPTCHA 需要能夠生成自身不容易通過(guò)的測(cè)試。一般地說(shuō),我們理解的認(rèn)證碼是包含一行數(shù)字或其他文字信息的圖片。一些干擾像素被添加到圖片中,這些元素會(huì)在用戶瀏覽網(wǎng)頁(yè)時(shí)出現(xiàn)。最終用戶進(jìn)行識(shí)別后,將額外的代碼信息與用戶的名字和密碼一起收集到網(wǎng)絡(luò)表單系統(tǒng)中進(jìn)行驗(yàn)證,有效地使用網(wǎng)站的部分服務(wù)功能?,F(xiàn)如今驗(yàn)證碼在網(wǎng)絡(luò)系統(tǒng)中被廣泛,為各種服務(wù)提供安全保護(hù)。例如:網(wǎng)站事物用戶登錄、提交表單時(shí)的輸入,需要根據(jù)網(wǎng)站提示的驗(yàn)證碼信息,輸入一連串隨機(jī)的數(shù)字或字符信息,才能夠完成用戶登錄,并使用網(wǎng)站的特定功能,驗(yàn)證碼是目前比較流行的網(wǎng)站的安全機(jī)制,例如金融機(jī)構(gòu)、門戶網(wǎng)站等。驗(yàn)證碼的主要目的是提高B/S 結(jié)構(gòu)的web 系統(tǒng)的安全性,首先可以避免大量惡意記錄。網(wǎng)站論壇的灌水、應(yīng)答和垃圾信息發(fā)表等。其次,可以避免暴力破譯密碼。也就是說(shuō),用無(wú)限枚舉的方法嘗試用戶的名字或密碼。因此算法會(huì)將中列出的可能字符進(jìn)行排列和組合。默認(rèn)數(shù)據(jù)字典將以非??斓乃俣群投鄠€(gè)規(guī)則進(jìn)行嘗試建立了。接下來(lái),它有效地防止了網(wǎng)站的惡性攻擊,經(jīng)常受到合法客戶的惡意攻擊。攻擊者利用了惡意代碼搭載的合法網(wǎng)站瀏覽者。當(dāng)以合法用戶身份進(jìn)入時(shí),他們盜取用戶的密碼,或者啟動(dòng)電腦到代理服務(wù)器進(jìn)行其他攻擊。各類驗(yàn)證碼實(shí)現(xiàn)方案各有特點(diǎn),將驗(yàn)證碼簡(jiǎn)要地分為文字、圖片和聲音驗(yàn)證碼三大類別:文本驗(yàn)證碼(Text-based CAPTCHAs):它通常由字母、數(shù)字或字符組成,這些字符經(jīng)過(guò)進(jìn)一步的處理,如扭曲、重疊、添加干擾線或者添加干擾背景,使得惡意攻擊軟件很難識(shí)別它們,但是人類用戶仍然能夠有效快速地識(shí)別。圖形驗(yàn)證碼(Image-based CAPTCHAs):由圖片構(gòu)成的驗(yàn)證碼,用戶需要解決基于圖片識(shí)別的認(rèn)證任務(wù),更具體些是識(shí)別圖片中的物體或含義。聲音驗(yàn)證碼(Sound-based CAPTCHAs):由音頻組成的驗(yàn)證碼,通常要求用戶解決基于音頻的識(shí)別任務(wù)。
驗(yàn)證碼技術(shù)經(jīng)歷了三個(gè)發(fā)展階段:早期是使用數(shù)字形式顯示在網(wǎng)頁(yè)上,惡意者可以很容易地通過(guò)復(fù)制粘貼來(lái)輸入(或者直接使用軟件來(lái)獲取);接著出現(xiàn)了規(guī)則數(shù)字圖片,也就是直接用網(wǎng)頁(yè)產(chǎn)生數(shù)字圖片,不能被復(fù)制粘貼,但是惡意者可以使用OCR 功能的軟件來(lái)自動(dòng)判斷圖片上的數(shù)字;現(xiàn)在一般使用對(duì)圖片顯示的數(shù)字或文字進(jìn)行特殊處理,增加其他雜色,來(lái)干擾OCR 軟件的讀取。
黑客一般不會(huì)妨礙合法用戶的正常使用,黑客進(jìn)行攻擊流程如下:
1.3.1 惡意攻擊者向Web 服務(wù)器發(fā)送http 請(qǐng)求。
1.3.2 網(wǎng)絡(luò)服務(wù)器的認(rèn)證需要URL 的安全等級(jí)。如果需要驗(yàn)證,服務(wù)器返回的用戶認(rèn)證和驗(yàn)證碼的形式給攻擊者,并到會(huì)話代碼信息。
1.3.3 攻擊者可以偽造表單內(nèi)容提取驗(yàn)證碼,識(shí)別驗(yàn)證碼應(yīng)用程序?qū)@得的驗(yàn)證碼結(jié)果和偽造的表單一起自動(dòng)發(fā)送給Web服務(wù)器。
1.3.4 網(wǎng)絡(luò)服務(wù)器可以驗(yàn)證表單內(nèi)容的合理性,比較合法性,對(duì)驗(yàn)證碼識(shí)別的驗(yàn)證結(jié)果和會(huì)話管理信息中的數(shù)據(jù)進(jìn)行分析和比較。這時(shí)有兩種可能性。a.提交的信息是合法的,驗(yàn)證碼與會(huì)話中的信息一致。相應(yīng)請(qǐng)求并返回請(qǐng)求的URL。b.如果驗(yàn)證的數(shù)據(jù)信息與系統(tǒng)中的信息不一致,則會(huì)給出錯(cuò)誤消息,會(huì)話管理信息無(wú)法啟動(dòng),重新創(chuàng)建驗(yàn)證碼并要求重新申請(qǐng)?jiān)俅芜M(jìn)行驗(yàn)證。
在生成圖形驗(yàn)證碼時(shí)主要應(yīng)用兩個(gè)方面的技術(shù):一方面是隨機(jī)數(shù)的生成,另一方面就是將生成的隨機(jī)數(shù)轉(zhuǎn)化成圖片格式進(jìn)行輸出。現(xiàn)在大部分的圖像認(rèn)證碼都是由背景圖像生成的,背景圖是由多個(gè)字構(gòu)成的字符串。根據(jù)算法生成的,它可以添加隨機(jī)點(diǎn)或隨機(jī)線段來(lái)干擾噪聲。
2.2.1 環(huán)境的準(zhǔn)備
本實(shí)驗(yàn)使用Python 3 以及Python 提供的相關(guān)庫(kù)來(lái)實(shí)現(xiàn)生產(chǎn)圖形驗(yàn)證碼的生成,在對(duì)實(shí)現(xiàn)過(guò)程做簡(jiǎn)要說(shuō)明。Python 提供了一些庫(kù)來(lái)實(shí)現(xiàn)圖形驗(yàn)證碼的生成與識(shí)別。在實(shí)現(xiàn)圖形驗(yàn)證碼時(shí)主要用到的庫(kù)有:Python 中pillow是圖像處理庫(kù),它為文件格式提供了普遍支持,強(qiáng)大的圖像處理功能,包括圖像存儲(chǔ)、圖像顯示、圖像格式轉(zhuǎn)換和基本圖像處理操作。numpy 是Python 用于科學(xué)技術(shù)計(jì)算的基礎(chǔ)包,提供了一個(gè)多維信息數(shù)據(jù)的研究對(duì)象,包括幾個(gè)派生對(duì)象。他的主要功能是使用幾個(gè)API 進(jìn)行快速排列改善工作。這包括學(xué)生數(shù)學(xué)、邏輯、運(yùn)算形式、排序、選擇、輸入信號(hào)輸出、轉(zhuǎn)換葉分散動(dòng)作等,可以進(jìn)行線性對(duì)數(shù)運(yùn)算,根據(jù)基本情況統(tǒng)計(jì)分析和機(jī)器進(jìn)行模擬。opencv 是一個(gè)強(qiáng)大的圖像處理和計(jì)算機(jī)視覺(jué)庫(kù)。matplotlib 是Python 中的2D 繪圖庫(kù),通過(guò)平臺(tái)打造出硬拷貝形式和交互環(huán)境,具有基本質(zhì)量的出版物圖形。cappcha 是自動(dòng)區(qū)分電腦和人類的圖像測(cè)試,區(qū)分使用者和電腦的計(jì)算機(jī)程序。common_util 包括日期、正則、倒計(jì)時(shí)、時(shí)間軸等工具類。在使用Python 編寫圖形驗(yàn)證碼功能實(shí)現(xiàn)前,測(cè)試并保證Python 3 的環(huán)境已經(jīng)安裝成功。并將程序代碼中所需要的庫(kù)文件安裝,測(cè)試并保證庫(kù)文件成功,并在程序中引入庫(kù)。
2.2.2 功能實(shí)現(xiàn)的簡(jiǎn)要分析
本實(shí)驗(yàn)生成的圖像識(shí)別碼中的字符是由數(shù)字組成,圖形識(shí)別碼的長(zhǎng)度為4 個(gè)字符。生成圖形識(shí)別碼的步驟:隨機(jī)產(chǎn)生數(shù)字組合成驗(yàn)證碼,并將驗(yàn)證碼加以圖片格式輸出。
定義相關(guān)函數(shù)
#(1)導(dǎo)入相關(guān)的庫(kù)文件
#(2)隨機(jī)生產(chǎn)一個(gè)(0~9)之間的整數(shù)
#(3)設(shè)置顏色的RGB 值隨機(jī)生成字體顏色
生成圖形驗(yàn)證碼(沒(méi)有做處理)的原始圖
#(2)設(shè)置圖片中數(shù)字的字體
#(3)將生成的4 個(gè)驗(yàn)證碼放入圖像中
#(4)對(duì)每個(gè)字符進(jìn)行高斯模糊,生成圖片
#(5)將圖片輸出,圖片名稱用系統(tǒng)當(dāng)前時(shí)間表示,圖片在項(xiàng)目的image 文件夾中
#(6)查看圖形驗(yàn)證碼的效果
2.2.3 改進(jìn)嘗試
上面方式產(chǎn)生的驗(yàn)證碼,惡意者可以使用OCR 功能的軟件來(lái)自動(dòng)判斷圖片上的數(shù)字。試圖對(duì)圖形驗(yàn)證碼算法進(jìn)一步修改,增加惡意者判斷圖片上數(shù)字的難度。
適當(dāng)?shù)恼{(diào)整高斯模糊的效果
修改下面代碼中radius 的值
Slavin和Johnson等人對(duì)合作學(xué)習(xí)的影響進(jìn)行了元分析。其中Johnson等人給出了最詳細(xì)的闡述,還列出了達(dá)到高效合作學(xué)習(xí)所需的具體方法。最有效的方法是在“Learning Together&Alone”文中強(qiáng)調(diào)的“合作,競(jìng)爭(zhēng)性和個(gè)性化學(xué)習(xí)的有機(jī)結(jié)合。”D.W.Johnson和R.T.Johnson還對(duì)這一特殊的合作學(xué)習(xí)方式進(jìn)行了細(xì)致的元分析。
分別設(shè)置radius 的值,進(jìn)行高斯模糊后效果的比較,分別設(shè)置radius 的值為0(沒(méi)有進(jìn)行模糊)、0.5、2。不同的radius 值,圖片的模糊程度不同,圖形驗(yàn)證碼的效果也不相同。
建議:不要設(shè)置太高的radius 值,否則人類也很難識(shí)別。
下面的修改是基于radius=0.5 時(shí)生成的圖片。
為圖片添加背景色
# 定義隨機(jī)背景色的函數(shù)
# 在生成驗(yàn)證碼過(guò)程修改代碼,設(shè)置大圖時(shí)設(shè)置圖片的背景色
加了背景之后驗(yàn)證碼的生成效果
為圖片進(jìn)行旋轉(zhuǎn)扭曲
# 定義圖片旋轉(zhuǎn)函數(shù)
# 在生成驗(yàn)證碼過(guò)程修改代碼,添加旋轉(zhuǎn)效果
加了旋轉(zhuǎn)扭曲后圖形驗(yàn)證碼的效果
圖形驗(yàn)證碼生成算法并不復(fù)雜。主要包括生成要現(xiàn)實(shí)的字符信息,并加上適當(dāng)?shù)母蓴_原始,并以圖片的形式,顯示和展現(xiàn)。本文中所產(chǎn)生的圖形驗(yàn)證碼只針對(duì)的是數(shù)字字符,在生成過(guò)程中可以包含數(shù)字、字母等字符,甚至可以自己定義圖形驗(yàn)證碼所包含的字符,甚至可以是中文字符。對(duì)圖形驗(yàn)證碼生成過(guò)程中只是簡(jiǎn)單的設(shè)置了隨機(jī)字體顏色、隨機(jī)背景顏色,對(duì)圖形驗(yàn)證碼添加了模糊效果,并對(duì)圖形驗(yàn)證碼中的每個(gè)字符隨機(jī)經(jīng)行了角度的旋轉(zhuǎn)。