裘鍇
(江西現代職業技術學院,江西 南昌330095)
在人機交互系統中,為了分別人類訪問系統還是惡意的計算機主動攻擊,人機交互證明機制(Human Interaction Proof)是一種常用的方式。驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,它是一種非常重要和具有代表性的人機信息交互技術認證管理機制。從本質上講,CAPTCHA 是利用編程算法區別是計算機還是人類的操作,這個過程由人類很容易實現,但是由計算機實現就不同意通過測試,這意味著CAPTCHA 需要能夠生成自身不容易通過的測試。一般地說,我們理解的認證碼是包含一行數字或其他文字信息的圖片。一些干擾像素被添加到圖片中,這些元素會在用戶瀏覽網頁時出現。最終用戶進行識別后,將額外的代碼信息與用戶的名字和密碼一起收集到網絡表單系統中進行驗證,有效地使用網站的部分服務功能。現如今驗證碼在網絡系統中被廣泛,為各種服務提供安全保護。例如:網站事物用戶登錄、提交表單時的輸入,需要根據網站提示的驗證碼信息,輸入一連串隨機的數字或字符信息,才能夠完成用戶登錄,并使用網站的特定功能,驗證碼是目前比較流行的網站的安全機制,例如金融機構、門戶網站等。驗證碼的主要目的是提高B/S 結構的web 系統的安全性,首先可以避免大量惡意記錄。網站論壇的灌水、應答和垃圾信息發表等。其次,可以避免暴力破譯密碼。也就是說,用無限枚舉的方法嘗試用戶的名字或密碼。因此算法會將中列出的可能字符進行排列和組合。默認數據字典將以非??斓乃俣群投鄠€規則進行嘗試建立了。接下來,它有效地防止了網站的惡性攻擊,經常受到合法客戶的惡意攻擊。攻擊者利用了惡意代碼搭載的合法網站瀏覽者。當以合法用戶身份進入時,他們盜取用戶的密碼,或者啟動電腦到代理服務器進行其他攻擊。各類驗證碼實現方案各有特點,將驗證碼簡要地分為文字、圖片和聲音驗證碼三大類別:文本驗證碼(Text-based CAPTCHAs):它通常由字母、數字或字符組成,這些字符經過進一步的處理,如扭曲、重疊、添加干擾線或者添加干擾背景,使得惡意攻擊軟件很難識別它們,但是人類用戶仍然能夠有效快速地識別。圖形驗證碼(Image-based CAPTCHAs):由圖片構成的驗證碼,用戶需要解決基于圖片識別的認證任務,更具體些是識別圖片中的物體或含義。聲音驗證碼(Sound-based CAPTCHAs):由音頻組成的驗證碼,通常要求用戶解決基于音頻的識別任務。
驗證碼技術經歷了三個發展階段:早期是使用數字形式顯示在網頁上,惡意者可以很容易地通過復制粘貼來輸入(或者直接使用軟件來獲取);接著出現了規則數字圖片,也就是直接用網頁產生數字圖片,不能被復制粘貼,但是惡意者可以使用OCR 功能的軟件來自動判斷圖片上的數字;現在一般使用對圖片顯示的數字或文字進行特殊處理,增加其他雜色,來干擾OCR 軟件的讀取。
黑客一般不會妨礙合法用戶的正常使用,黑客進行攻擊流程如下:
1.3.1 惡意攻擊者向Web 服務器發送http 請求。
1.3.2 網絡服務器的認證需要URL 的安全等級。如果需要驗證,服務器返回的用戶認證和驗證碼的形式給攻擊者,并到會話代碼信息。
1.3.3 攻擊者可以偽造表單內容提取驗證碼,識別驗證碼應用程序將獲得的驗證碼結果和偽造的表單一起自動發送給Web服務器。
1.3.4 網絡服務器可以驗證表單內容的合理性,比較合法性,對驗證碼識別的驗證結果和會話管理信息中的數據進行分析和比較。這時有兩種可能性。a.提交的信息是合法的,驗證碼與會話中的信息一致。相應請求并返回請求的URL。b.如果驗證的數據信息與系統中的信息不一致,則會給出錯誤消息,會話管理信息無法啟動,重新創建驗證碼并要求重新申請再次進行驗證。

在生成圖形驗證碼時主要應用兩個方面的技術:一方面是隨機數的生成,另一方面就是將生成的隨機數轉化成圖片格式進行輸出?,F在大部分的圖像認證碼都是由背景圖像生成的,背景圖是由多個字構成的字符串。根據算法生成的,它可以添加隨機點或隨機線段來干擾噪聲。
2.2.1 環境的準備
本實驗使用Python 3 以及Python 提供的相關庫來實現生產圖形驗證碼的生成,在對實現過程做簡要說明。Python 提供了一些庫來實現圖形驗證碼的生成與識別。在實現圖形驗證碼時主要用到的庫有:Python 中pillow是圖像處理庫,它為文件格式提供了普遍支持,強大的圖像處理功能,包括圖像存儲、圖像顯示、圖像格式轉換和基本圖像處理操作。numpy 是Python 用于科學技術計算的基礎包,提供了一個多維信息數據的研究對象,包括幾個派生對象。他的主要功能是使用幾個API 進行快速排列改善工作。這包括學生數學、邏輯、運算形式、排序、選擇、輸入信號輸出、轉換葉分散動作等,可以進行線性對數運算,根據基本情況統計分析和機器進行模擬。opencv 是一個強大的圖像處理和計算機視覺庫。matplotlib 是Python 中的2D 繪圖庫,通過平臺打造出硬拷貝形式和交互環境,具有基本質量的出版物圖形。cappcha 是自動區分電腦和人類的圖像測試,區分使用者和電腦的計算機程序。common_util 包括日期、正則、倒計時、時間軸等工具類。在使用Python 編寫圖形驗證碼功能實現前,測試并保證Python 3 的環境已經安裝成功。并將程序代碼中所需要的庫文件安裝,測試并保證庫文件成功,并在程序中引入庫。
2.2.2 功能實現的簡要分析
本實驗生成的圖像識別碼中的字符是由數字組成,圖形識別碼的長度為4 個字符。生成圖形識別碼的步驟:隨機產生數字組合成驗證碼,并將驗證碼加以圖片格式輸出。
定義相關函數
#(1)導入相關的庫文件
#(2)隨機生產一個(0~9)之間的整數
#(3)設置顏色的RGB 值隨機生成字體顏色
生成圖形驗證碼(沒有做處理)的原始圖
#(2)設置圖片中數字的字體
#(3)將生成的4 個驗證碼放入圖像中
#(4)對每個字符進行高斯模糊,生成圖片

#(5)將圖片輸出,圖片名稱用系統當前時間表示,圖片在項目的image 文件夾中
#(6)查看圖形驗證碼的效果

2.2.3 改進嘗試
上面方式產生的驗證碼,惡意者可以使用OCR 功能的軟件來自動判斷圖片上的數字。試圖對圖形驗證碼算法進一步修改,增加惡意者判斷圖片上數字的難度。
適當的調整高斯模糊的效果
修改下面代碼中radius 的值
Slavin和Johnson等人對合作學習的影響進行了元分析。其中Johnson等人給出了最詳細的闡述,還列出了達到高效合作學習所需的具體方法。最有效的方法是在“Learning Together&Alone”文中強調的“合作,競爭性和個性化學習的有機結合?!盌.W.Johnson和R.T.Johnson還對這一特殊的合作學習方式進行了細致的元分析。

分別設置radius 的值,進行高斯模糊后效果的比較,分別設置radius 的值為0(沒有進行模糊)、0.5、2。不同的radius 值,圖片的模糊程度不同,圖形驗證碼的效果也不相同。

建議:不要設置太高的radius 值,否則人類也很難識別。
下面的修改是基于radius=0.5 時生成的圖片。
為圖片添加背景色
# 定義隨機背景色的函數
# 在生成驗證碼過程修改代碼,設置大圖時設置圖片的背景色
加了背景之后驗證碼的生成效果

為圖片進行旋轉扭曲
# 定義圖片旋轉函數

# 在生成驗證碼過程修改代碼,添加旋轉效果

加了旋轉扭曲后圖形驗證碼的效果

圖形驗證碼生成算法并不復雜。主要包括生成要現實的字符信息,并加上適當的干擾原始,并以圖片的形式,顯示和展現。本文中所產生的圖形驗證碼只針對的是數字字符,在生成過程中可以包含數字、字母等字符,甚至可以自己定義圖形驗證碼所包含的字符,甚至可以是中文字符。對圖形驗證碼生成過程中只是簡單的設置了隨機字體顏色、隨機背景顏色,對圖形驗證碼添加了模糊效果,并對圖形驗證碼中的每個字符隨機經行了角度的旋轉。