陳 紅,張 雷,張海闊,湛雅倩,徐明華
(中國互聯網絡信息中心,北京 100190)
域名系統(domain name system,DNS)是互聯網中的基礎設施,在互聯網中發揮著重要的作用,負責將人們輸入的域名指向復雜難記的IP地址,即完成域名解析的任務[1,2]。在互聯網的應用中,絕大多數的互聯網應用都是通過域名訪問的,所以保證域名的數據安全,對維護中國互聯網絡的安全有著至關重要的作用。現有的域名保護系統,登錄系統后可直接添加需要保護的域名,從而達到保護域名保護網站的目的,但是,單認證的操作方式有可能被暴力破解,因而存在很大的數據風險。為了解決該問題,通過研究雙因素認證方法、TOTP算法、RSA算法,提出了基于RSA算法的域名保護系統,通過閾值控制暴力破解的風險,通過RSA算法加強雙因素認證算法的安全性。并經過大量的測試,通過對比測試數據分析得出,該系統設計與實現可以解決當前域名保護系統的安全問題,對提高域名數據安全,提高網絡安全有著重大的意義。
現有域名保護系統為單因素驗證模式,系統實現如圖1所示,用戶通過用戶名、密碼、驗證碼登錄域名保護系統后即可對域名進行保護申請、撤銷等操作,系統內部會對該域名的注冊時間、過期時間等條件進行校驗,校驗通過后,提交成功;內部審核人員使用管理員的賬號登錄該系統進行審核操作,操作成功后,該域名的保護正式生效;定時job等也由該系統一并實現。

圖1 域名保護系統現有實現
現有實現中,普通用戶和審核人員均采用同一入口進行登錄,登錄成功后即可進行權限內的所有操作。該方式存在顯而易見的安全問題,黑客可以通過盜取數據庫、暴力破解等手段獲取到用戶名、密碼,可以對域名保護數據任意操作,還可以以審核員的身份對其審核操作進行任意操作,從而威脅到整個系統服務及數據的安全。
由此可見當前系統的單因素校驗模式存在的弊端很明顯,故本文中增加了雙因素認證的方式,即用戶通過用戶名、密碼登錄后,對域名進行操作時仍需要通過二次身份認證才可進行域名保護申請等操作。
關于身份驗證,目前主要有以下幾種方式:
(1)短信驗證碼;
(2)生物特征驗證方式,例如指紋、人臉識別、虹膜等;
(3)動態口令卡,例如工商銀行的電子銀行口令卡,每次根據口令刮開對應位置的涂層獲取密碼;
(4)動態令牌,例如RSA SecurID以及QQ軟令牌等[3,4]。
對比以上幾種方式:
(1)短信驗證碼方式價格高,點擊發送短信驗證碼后,偶爾由于環境或者其它原因導致驗證碼接收不及時,且SIM卡可以克隆,容易被攔截和偽造;
(2)基于生物特征的驗證方式對設備要求比較高,價格昂貴,而申請域名保護一般在PC端操作,并不適用;
(3)動態口令卡的安全性一般,且需要隨身攜帶,不方便;
(4)動態令牌,基于硬件的動態令牌同動態口令卡一樣,存在需要隨身攜帶的不便,且成本較高。
故我們選擇軟令牌即電子口令,基于手機的電子口令有成本低、安全性高、更易用等特點[5]。本文采取OTP(one-time password algorithm)技術實現。
動態口令OTP(one-time password),即一次性密碼,是一種重要的雙因素(2FA)認證技術。其基本原理是認證雙方共享密鑰,使用該共享密鑰對某一個事件計數、或時間值、或異步挑戰數進行加密算法計算,之后比較計算值是否一致,從而進行認證[6,7]。其中HOTP(an HMAC-based one-time password algorithm)是基于事件的一次性密碼的生成算法;TOTP(time-based one-time password algorithm)是基于時間的一次性密碼的生成算法,也是HTOP算法的改進算法[8]。
現在流行的TOTP實現原理如圖2所示,對時間、密鑰以及用戶名等信息進行加密后再經過截短函數處理得到一次性動態碼,TOTP中加密算法采用雜湊算法實現。以有限長度的數據值來表達不限長度的信息,理論上講,一定會有沖撞情況發生,被破解只是時間問題。

圖2 TOTP實現原理
域名保護系統旨在將需要保護的域名進行加鎖保護,加鎖保護后,將域名設置為禁止刪除、禁止更新、禁止轉移的狀態,從而避免域名被惡意刪除、更新、轉移。
該域名保護系統的使用對象為注冊商,即域名注冊服務機構,域名所有者可向注冊服務機構申請該業務,由注冊服務機構通過該系統進行申請,為了保證數據的安全性,注冊服務機構提交申請時需要進行身份認證。根據不同用戶的不同安全需要,設有標準版域名保護和高級版域名保護,其中申請標準版域名保護時只對注冊服務機構的身份進行認證,而申請高級版域名保護時不僅需要對注冊服務機構進行身份認證,還需要對域名所有者進行身份認證,即在域名持有者確認的情況下才能進行操作。
域名保護系統的系統架構如圖3所示,包括3個服務:
(1)域名保護申請服務,包括以下幾個模塊:①權限管理模塊;②域名保護模塊,包括標準版域名保護申請、高級版域名保護申請、標準版域名保護管理、高級版域名保護管理功能。用戶通過輸入域名名稱、保護年限、動態口令后點擊提交,系統后臺會調用身份認證服務的動態碼校驗接口,檢查用戶輸入的動態碼和服務器產生的動態碼是否一致,校驗都通過后保存至數據庫的待審核表中。臨時撤銷操作將域名的保護狀態臨時取消,方便用戶進行更新或者轉移操作,操作后再恢復保護狀態。這樣既能保證域名數據的安全,又不影響其正常使用和操作;③個人口令管理模塊。
(2)身份認證服務,包括:①電子口令的管理;②APP 生成動態碼功能,包括每周定期向服務器請求新的密鑰,根據私鑰對密鑰進行解密得到真正的密鑰,通過TOTP算法計算得到動態碼;③服務器動態碼模塊,定期根據具體用戶信息等生成新的密鑰,并對密鑰進行RSA算法加密。根據不同用戶名、靜態密碼和密鑰通過TOTP算法生成動態碼。對外提供動態碼校驗的API接口服務,供域名保護模塊調用。
(3)域名保護審核服務,審核員登錄該系統后,可以對域名保護業務申請進行審核,審核通過后域名保護正式生效;定期統計功能;定期清理逾期的域名保護。

圖3 域名保護系統架構
其中,以上3個服務中每個服務又分為兩個子服務,web服務和service服務,即本系統共包含6個子服務:protect-web,protect-service,admin-web,admin-service,job-web,job-service。其中各web服務包括CSS,JSP,JS,圖片等靜態資源以及負責和外界進行交互,獲取用戶的請求,將請求封裝后提交給對應的service服務進行處理。service通過REST API 的方式對web提供相應的資源,web再將結果返回給用戶。
REST(representational state transfer)是Roy Fielding博士2000年在他的博士論文中提出來的一種軟件架構風格,可以降低開發的復雜性同時提高系統的可伸縮性[9,10]。
service服務所在的服務器只允許固定IP的服務器訪問,例如web,以及數據庫,對外進行物理隔離,這樣在物理上保證了域名保護系統服務和數據的安全性。
雖然用戶申請域名保護業務需要先登錄域名保護申請服務,但是,基于用戶名和靜態密碼的登錄驗證是很容易被劫持和破解的,為了增加域名數據的安全性,用戶申請域名保護時,增加了身份驗證邏輯。用戶申請時,除填寫需要保護的域名信息外,還需要根據申請的電子口令APP獲取動態口令,以和身份認證服務端的口令進行匹配,來對身份進行校驗。身份認證的設計,極大的保證了系統操作的安全性[11,12]。
圖4為APP端到認證服務器的交互過程。

圖4 身份認證過程
(1)用戶首次拿到域名保護申請業務資質后,安裝APP,并通過掃描二維碼的方式將用戶名、靜態密碼以及密鑰(私鑰)等數據導入APP。第一次使用APP時,根據用戶名和靜態密碼向服務器請求TOTP算法的密鑰。
(2)根據系統設置,每周定期向服務器請求最新的密鑰,服務器也會每周生成新的密鑰key,為24字節的隨機值。
(3)服務器根據用戶名和靜態密碼獲取該用戶對應的密鑰key1(key1為服務器端使用公鑰對原始密鑰key經RSA算法進行加密后的結果,key值由服務器每周定時使用偽隨機算法生成),返回給APP端。
(4)APP端使用私鑰對密鑰key1解密,獲取key。
(5)APP每隔一分鐘生成一次動態碼,根據時間戳,用戶名+靜態密碼+key,經TOTP算法處理后得到一個8位數字的動態碼。
(6)PC端拿到APP端的動態碼,發送用戶名和動態碼到服務器認證。
(7)服務器首先會根據用戶名來查看之前的錯誤驗證次數,判斷這個動態碼驗證失敗的次數是否達到預警值,或者該電子口令驗證失敗的總次數是否達到預警值,如果其中一項達到預警值則視為口令異常(可能遭遇破解攻擊),禁用該電子口令。
(8)如果均未達到預警值,將動態碼和服務器端生成的動態碼進行比對看是否匹配。如果匹配失敗將該動態碼驗證失敗次數加1,該電子口令的驗證失敗總次數+1。如果成功,失敗次數清零,返回結果。
傳統的身份驗證方法仍有可能會被暴力攻擊等破解,本文針對該風險,增加了步驟(2)~步驟(4),對TOTP算法中的密鑰經過加密后再傳輸,并定期更新,保證了密鑰的安全性,增加步驟(7)的校驗,有效阻止暴力破解。電子口令被禁止后只有導入新的用戶信息及密鑰(私鑰)方可繼續使用。
本文實現的TOTP算法流程如圖5所示:
(1)根據2.1文中得到的密鑰key1,使用APP本地的私鑰d,對key1進行解密,得到密鑰key值, key=fun(key1,d);
(2)將用戶名+靜態密碼+key組成新的字符串值key2,根據當前時間的毫秒值與初始值(可選時間,取其毫秒值)的差值,除以時間間隔一分鐘即60 000,并轉換為16進制字符作為時間值time;
(3)使用SHA-512算法,對key2和time進行加密,加密后經截短函數處理,得到最終動態碼, code=trunc(encode(username+pinPw+key,time)), 其中encode函數即為加密函數,trunc為截短函數,將加密后的串經過截短處理得到動態碼。

圖5 TOTP算法實現
TOTP算法實現中,使用的SHA-512算法屬于哈希算法(也叫雜湊算法),哈希算法是將任意長的輸入信息轉換成固定長的輸出串,即雜湊值。哈希函數為不可逆處理,所以很安全。但是理論上來講,由限制長度的哈希算法來計算沒有長度限制的輸入信息,必然會有沖撞情況,所以隨著公開時間的增長,MD5,SHA-1已經可以通過碰撞破解[13]。本文采用SHA-512算法,該算法的雜湊過程較之前者更復雜,且其雜湊值更長,并且本文對密鑰進行了RSA非對稱加密,保證了密鑰的安全性,增加了破解的難度。
RSA算法是1977年提出的一種非對稱加密算法,被廣泛應用于電子商業中,其安全性依賴于大整數的因數分解的困難性[14]。
RSA包括公鑰,私鑰,加密算法,解密算法。
(1)公鑰的產生過程:①首選選取兩個互為質數,并且兩個足夠大的素數p,q,這兩個素數是保密的;②計算n=p*q, n是可以公開的;③計算fun(n)=(p-1)(q-1), fun(n)是保密的;④找一個與fun(n)互質的數e,且1 (2)私鑰的產生過程:根據d*e≡1mod(fun(n)), 計算得出私鑰值d。 (3)加密的過程:假設需要加密的明文為m,加密后的密文為c。則計算過程為: c≡me(mod n)。 (4)解密的過程: m≡cd(mod n)。 根據RSA的算法描述,我們清楚的認識到,足夠大的素數是保證算法安全性的關鍵,所以在本文中,我們采用1024位的密鑰,即n為1024位,對TOTP中所用的密鑰進行加密后再傳遞給客戶端。 基于RSA算法的域名保護系統,在用戶操作時增加了動態驗證碼的輸入操作,用戶在輸入需要保護域名的相關參數后,需打開手機輸入當前的動態口令提交即可。相較于以前的域名保護系統,只是增加了一個動態碼參數的輸入。采用手機電子口令的方式,對于用戶來說,不需要額外攜帶口令設備,比較方便。 本文采用REST分布式部署,分層系統,簡化了服務的復雜性,同時提高了其可擴展性。可根據具體情況對具體服務進行擴展,充分利用服務資源。 (1)本文中所用的TOTP雙因素認證方法,采用SHA-512或SM3算法對時間值以及用戶名、靜態碼等進行加密,根據實際情況,本文對SHA-512或SM3算法進行了碰撞測試,系統中每周都會生成新的加密密鑰,這里我們只對一個周期內的密鑰進行測試,即密鑰參數固定,測試參數見表1。 表1 測試參數 密鑰、用戶名、靜態密碼保持不變,變動的只有時間戳的值,即隨著時間的變化不斷增長。首先進行轉碼位數為6位時SM3算法和SHA算法的碰撞次數及碰撞概率測試。得到的測試結果見表2和圖6。 表2 SM3和SHA算法碰撞測試結果(6位轉碼) 圖6 SM3和SHA算法碰撞測試結果(6位轉碼) 根據表2和圖6中的結果,我們看到SM3和SHA-512的碰撞次數是沒有太大差別的,但是SHA-512算法得到的動態口令碰撞次數要稍低于SM3的碰撞次數,所以我們采用SHA-512函數實現TOTP算法。 測試結果中,當測試次數達到百萬級別時,碰撞率很高。接下來基于SHA-512函數對轉位碼為6位和8位分別進行碰撞測試,表3和圖7是基于SHA-512函數的碰撞測試結果。 表3 6和8位動態碼碰撞測試結果(SHA) 圖7 6位轉碼和8位轉碼碰撞概率對比 由表3的結果以及圖7可以看出,轉碼位數為6位和轉碼位數為8位,在碰撞概率上相差不止一個數量級,在測試次數到達一百萬的時候,轉碼位數為6位的碰撞概率達到了50%左右,而轉碼位數為8的碰撞概率只有0.5%左右,所以本系統中使用8位轉碼生成動態碼以減少碰撞概率,提高TOTP算法的安全性。 根據表3中的測試結果,8位轉碼在一萬次及以下碰撞的幾率基本為0,隨著次數不斷增加,發生碰撞的次數和概率也在增加,在測試次數達到10萬次的時候,發生碰撞的概率為萬分之六。按照本文系統實現,每隔1周時間會生成一個新的用于生成動態碼的密鑰,一分鐘生成一個動態碼的情況下,1周共計生成43 200個動態碼,發生碰撞的概率為:0.016 203 7%,即不到萬分之二的碰撞概率,已經可以滿足本文中實際操作的安全性要求。 (2)本文增加了一次性動態碼驗證時錯誤次數的預警值,當一個用戶的口令不停進行校驗并且錯誤次數超過預警值時,將該口令禁用,有效防止了暴力破解的可能性。 (3)對TOTP中用于生成動態碼的密鑰進行RSA非對稱算法加密,并定期更新,確保該密鑰的安全可靠,且增加了破解的難度。 (4)系統中采用web和service服務分布部署,實行了物理上的隔離,進一步保障了系統的安全性。 本文采用了改進的動態口令技術,使用RSA非對稱加密算法對動態口令的密鑰進行加密,同時增加預警值設置以及定期更新密鑰的邏輯,增強了動態口令的安全性,保證了域名保護系統的操作安全可靠。同時,域名保護系統的各個服務劃分為web和service子服務,分布部署,這樣從物理上保證了數據及服務的安全,進一步保證了互聯網的域名數據安全。本文提到的身份認證方法可推廣至其它領域的web服務中,提高服務的安全性及可擴展性。3 域名保護系統分析
3.1 易用性
3.2 易擴展
3.3 安全性





4 結束語