王奇志,方 莉
(安慶職業技術學院電子信息系,安徽 安慶 246005)
基于混合字符串加密的動態口令研究
王奇志,方 莉
(安慶職業技術學院電子信息系,安徽 安慶 246005)
未經加密處理的敏感信息在數據傳輸過程中很容易被截獲破解,如果直接加密敏感信息,仍然不能避免攻擊者使用偽造數據包方式的攻擊。提出對包含敏感信息的隨機混合字符串進行加密保護的改進方案,從而有效保護敏感信息在傳輸過程中的安全。該方案只需通過簡單編程即可實現,能夠為Web應用中敏感信息的傳輸保護提供參考。
動態口令;網絡嗅探;MD5;隨機混合字符串
目前,我國絕大多數中小企業建立了網站并接入Internet,許多企業在獲得信息的同時,將企業的敏感數據提供給有訪問權限的用戶訪問,這種授權訪問一般基于口令認證。由于Internet上普遍采用超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)作為Web服務器與本地瀏覽器之間的傳輸協議,而該協議采用數據明文傳送方式,這給諸如登錄賬號和密碼之類的敏感數據帶來極大的安全隱患[1]。針對使用HTTP協議明文傳輸敏感信息帶來的安全問題,目前采取了如下解決方案:①采用安全的超文本傳輸協議協議(Hyper Text Transfer Protocol Secure,HTTPS)來保證敏感信息在傳輸過程中的安全。由于經HTTPS協議傳送的數據都需要經過二進制加密處理,而這種加密解密處理針對網站上所有頁面,因此必然會帶來服務器計算和網絡傳輸往返上的巨大開銷[2]。②敏感數據首先經過MD5加密算法[3]處理,然后在Internet通過HTTP協議傳輸,但是這種保護作用也十分有限[4]。為此,筆者進行了基于混合字符串加密的動態口令研究。
混合字符串加密的動態口令方案的設計思想可以描述為如下過程:
1)服務端在每個客戶首次連接時分配一個唯一動態附加隨機字符串S,字符串在服務端必須有一定的存活時間。
2)該字符串同時被保存在客戶端登錄頁面的F2字段中。
3)客戶端用戶填寫密碼等敏感信息單擊提交按鈕后,通過JavaScript編程完成如下的處理步驟:①取得用戶填寫的敏感字段F1(如口令)的值S1;②取得動態隨機字符串字段F2的值S2;③將S1與S2按一定的規律混合得到字符串S3;④清除字段F1的值和字段F2的值;⑤使用MD5加密算法加密S3得到加密摘要M1;⑥向服務器提交加密摘要M1。
4)在Internet上傳輸的數據包中包含的是加密摘要M1。
5)服務端接收到客戶端提交的加密摘要M1后,按以下的流程完成驗證:①根據用戶名(未加密)從數據庫取得的對應口令P1;②將P1與動態附加隨機字符串S按相同的規律混合得到字符串P2;③使用MD5加密算法加密P2得到加密摘要M2;④比較M1與M1是否相等,若相等則表示驗證通過,否則表示驗證未通過;⑤如果驗證通過則刪除S,如果驗證沒有通過則重新生成S并跳轉到登錄頁面。
2.1在客戶端和服務端都要有MD5加密模塊
在客戶端對用戶敏感數據(如密碼)加密處理,可以采用由Johnson用JAVASCRIPT編寫的一個MD5加密函數庫MD5.JS;在服務端進行MD5加密處理,應根據開發動態網站后臺編程語言的不同選用合適的MD5加密模塊。
2.2在服務端需要一個隨機字符串生成函數
附加字符串必須由服務端負責生成,因而要在服務端設計一個隨機字符串生成函數,且該隨機字符串生成函數有較高的運行效率。
2.3附加字符串應在服務端和客戶端保持同步性
每個連接用戶都有唯一的一個附件隨機字符串,該字符串在服務端生成并保存,同時還應通過一定方法將該字符串發送到客戶端。以下是采用ASP.NET作為服務端編程語言時保證附加字符串在服務端和客戶端同步性的處理方法。
1)后臺代碼 在后臺代碼(login.aspx.cs)中作如下處理:
……
protected void Page_Load(object sender,EventArgs e)
{
if (!Page.IsPostBack || Session[“addStr”]==null)
{ //通過調用MyClass.getRandomizer()方法獲得一個附加字符串保存的Session中
Session[“addStr”] = MyClass.getRandomizer(6,true,false,true,true);
{
{
……
2)頁面代碼 在頁面代碼(login.aspx)中作如下處理:
……
在以上代碼中,通過“<%=Session[“addStr”]%>”的方式將服務端的生成字符串傳遞到客戶端。
2.4確保客戶端提交的表單只包含加密信息
考慮到合法用戶提交的數據包有可能被入侵者截獲,因而合法用戶通過鍵盤輸入的敏感字段應在提交前刪除,從而確保網絡上傳輸的敏感信息均經過加密處理。下面是處理的關鍵代碼:
……
var UserPassword=document.getElementById(“txtPassword”).value + document.getElementById“txtAddString”).value;

……
當1個合法用戶首次訪問登錄頁面時,服務器隨機生成的字符串是“16HKhx”,則客戶端MD5加密的對象是“wqz12316HKhx”,假設此時有入侵者通過抓包工具IPTOOL獲得了合法用戶提交的數據包(見圖1)。在圖1中黑色方框內有“UID=wqz&PWD=2605b9cc3b00330587068a44d1a80b6f”這樣的敏感數據,由此可以推測出被攻擊用戶的賬號是“wqz”,與密碼相關的敏感信息是“2605b9cc3b00330587068a44d1a80b6f”,它其實是混合字符串“wqz12316HKhx”進行MD5加密處理后的一個32位的摘要,入侵者拿到該摘要后面臨2種選擇,其一是將“2605b9cc3b00330587068a44d1a80b6f”提交到“http://www.cmd5.com”類似的網站進行暴力破解,但這種成功率幾乎為零,因為該字符串(wqz12316HKhx)含有較多的字符數(超過6個字符就很難被暴力破解);其二是偽造包含了“UID=wqz&PWD=2605b9cc3b00330587068a44d1a80b6f”敏感信息的數據包直接提交到服務器。由于服務器對每個用戶的首次連接時生成的附加隨機字符串都不一樣,入侵用戶連接服務器時獲得的附加字符串可能是“w4tg”,此時能在服務器通過驗證的是“wqz123w4tg”這個字符串的MD5加密的32位摘要“926f823383aa66ce449c174353a9f911”,而入侵者提交非法截獲的摘要“2605b9cc3b00330587068a44d1a80b6f”不能通過驗證,因此入侵者很難通過上述方式完成最終的入侵。

圖1 敏感數據抓包截圖
訪問中小企業網站時,其身份認證通常是通過HTTP協議傳輸賬號和密碼,若賬號和密碼之類的敏感信息不作加密處理,則在傳輸過程中很容易被入侵者截獲數據包而泄漏敏感信息。雖然采用MD5加密算法處理敏感信息在一定程度上可以防止敏感信息泄漏,但不能防御入侵者采取偽造數據包的方式進行入侵。針對上述情況,采取加密敏感信息和一個隨機字符串組成的混合字符串的改進方案,該方案只需通過簡單編程即可實現,從而有效解決一般Web應用中身份驗證時的敏感信息泄漏問題。
[1]于杰,朱有忠.簡單實用的網絡嗅探器的設計與實現[J].吉林大學學報(信息科學版),2010,28(4):423-427.
[2]夏陽,陸余良.基于網絡攻擊的安全防范策略[J].安徽大學學報(自然科學版),2002,26(2):57-61.
[3]吳維元,肖柳林,李榮輝.Web服務數據傳輸通道的安全性分析[J].網絡安全技術與應用,2008(2):85-86,70.
[4]田新廣,段洣毅,程學旗,等.基于shell命令和多重行為模式挖掘的用戶偽裝攻擊檢測[J].計算機學報,2010,33(4):697-705.
[5]王康進.基于AJAX的輕量級Web客戶端開發平臺研究與實現[D].濟南:濟南大學,2007.
[編輯] 李啟棟
10.3969/j.issn.1673-1409(N).2012.06.039
TP393.08
A
1673-1409(2012)06-N117-03