陳 紅,張 雷,張海闊,湛雅倩,徐明華
(中國互聯(lián)網(wǎng)絡(luò)信息中心,北京 100190)
域名系統(tǒng)(domain name system,DNS)是互聯(lián)網(wǎng)中的基礎(chǔ)設(shè)施,在互聯(lián)網(wǎng)中發(fā)揮著重要的作用,負(fù)責(zé)將人們輸入的域名指向復(fù)雜難記的IP地址,即完成域名解析的任務(wù)[1,2]。在互聯(lián)網(wǎng)的應(yīng)用中,絕大多數(shù)的互聯(lián)網(wǎng)應(yīng)用都是通過域名訪問的,所以保證域名的數(shù)據(jù)安全,對維護(hù)中國互聯(lián)網(wǎng)絡(luò)的安全有著至關(guān)重要的作用?,F(xiàn)有的域名保護(hù)系統(tǒng),登錄系統(tǒng)后可直接添加需要保護(hù)的域名,從而達(dá)到保護(hù)域名保護(hù)網(wǎng)站的目的,但是,單認(rèn)證的操作方式有可能被暴力破解,因而存在很大的數(shù)據(jù)風(fēng)險(xiǎn)。為了解決該問題,通過研究雙因素認(rèn)證方法、TOTP算法、RSA算法,提出了基于RSA算法的域名保護(hù)系統(tǒng),通過閾值控制暴力破解的風(fēng)險(xiǎn),通過RSA算法加強(qiáng)雙因素認(rèn)證算法的安全性。并經(jīng)過大量的測試,通過對比測試數(shù)據(jù)分析得出,該系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)可以解決當(dāng)前域名保護(hù)系統(tǒng)的安全問題,對提高域名數(shù)據(jù)安全,提高網(wǎng)絡(luò)安全有著重大的意義。
現(xiàn)有域名保護(hù)系統(tǒng)為單因素驗(yàn)證模式,系統(tǒng)實(shí)現(xiàn)如圖1所示,用戶通過用戶名、密碼、驗(yàn)證碼登錄域名保護(hù)系統(tǒng)后即可對域名進(jìn)行保護(hù)申請、撤銷等操作,系統(tǒng)內(nèi)部會對該域名的注冊時(shí)間、過期時(shí)間等條件進(jìn)行校驗(yàn),校驗(yàn)通過后,提交成功;內(nèi)部審核人員使用管理員的賬號登錄該系統(tǒng)進(jìn)行審核操作,操作成功后,該域名的保護(hù)正式生效;定時(shí)job等也由該系統(tǒng)一并實(shí)現(xiàn)。
圖1 域名保護(hù)系統(tǒng)現(xiàn)有實(shí)現(xiàn)
現(xiàn)有實(shí)現(xiàn)中,普通用戶和審核人員均采用同一入口進(jìn)行登錄,登錄成功后即可進(jìn)行權(quán)限內(nèi)的所有操作。該方式存在顯而易見的安全問題,黑客可以通過盜取數(shù)據(jù)庫、暴力破解等手段獲取到用戶名、密碼,可以對域名保護(hù)數(shù)據(jù)任意操作,還可以以審核員的身份對其審核操作進(jìn)行任意操作,從而威脅到整個(gè)系統(tǒng)服務(wù)及數(shù)據(jù)的安全。
由此可見當(dāng)前系統(tǒng)的單因素校驗(yàn)?zāi)J酱嬖诘谋锥撕苊黠@,故本文中增加了雙因素認(rèn)證的方式,即用戶通過用戶名、密碼登錄后,對域名進(jìn)行操作時(shí)仍需要通過二次身份認(rèn)證才可進(jìn)行域名保護(hù)申請等操作。
關(guān)于身份驗(yàn)證,目前主要有以下幾種方式:
(1)短信驗(yàn)證碼;
(2)生物特征驗(yàn)證方式,例如指紋、人臉識別、虹膜等;
(3)動態(tài)口令卡,例如工商銀行的電子銀行口令卡,每次根據(jù)口令刮開對應(yīng)位置的涂層獲取密碼;
(4)動態(tài)令牌,例如RSA SecurID以及QQ軟令牌等[3,4]。
對比以上幾種方式:
(1)短信驗(yàn)證碼方式價(jià)格高,點(diǎn)擊發(fā)送短信驗(yàn)證碼后,偶爾由于環(huán)境或者其它原因?qū)е买?yàn)證碼接收不及時(shí),且SIM卡可以克隆,容易被攔截和偽造;
(2)基于生物特征的驗(yàn)證方式對設(shè)備要求比較高,價(jià)格昂貴,而申請域名保護(hù)一般在PC端操作,并不適用;
(3)動態(tài)口令卡的安全性一般,且需要隨身攜帶,不方便;
(4)動態(tài)令牌,基于硬件的動態(tài)令牌同動態(tài)口令卡一樣,存在需要隨身攜帶的不便,且成本較高。
故我們選擇軟令牌即電子口令,基于手機(jī)的電子口令有成本低、安全性高、更易用等特點(diǎn)[5]。本文采取OTP(one-time password algorithm)技術(shù)實(shí)現(xiàn)。
動態(tài)口令OTP(one-time password),即一次性密碼,是一種重要的雙因素(2FA)認(rèn)證技術(shù)。其基本原理是認(rèn)證雙方共享密鑰,使用該共享密鑰對某一個(gè)事件計(jì)數(shù)、或時(shí)間值、或異步挑戰(zhàn)數(shù)進(jìn)行加密算法計(jì)算,之后比較計(jì)算值是否一致,從而進(jìn)行認(rèn)證[6,7]。其中HOTP(an HMAC-based one-time password algorithm)是基于事件的一次性密碼的生成算法;TOTP(time-based one-time password algorithm)是基于時(shí)間的一次性密碼的生成算法,也是HTOP算法的改進(jìn)算法[8]。
現(xiàn)在流行的TOTP實(shí)現(xiàn)原理如圖2所示,對時(shí)間、密鑰以及用戶名等信息進(jìn)行加密后再經(jīng)過截短函數(shù)處理得到一次性動態(tài)碼,TOTP中加密算法采用雜湊算法實(shí)現(xiàn)。以有限長度的數(shù)據(jù)值來表達(dá)不限長度的信息,理論上講,一定會有沖撞情況發(fā)生,被破解只是時(shí)間問題。
圖2 TOTP實(shí)現(xiàn)原理
域名保護(hù)系統(tǒng)旨在將需要保護(hù)的域名進(jìn)行加鎖保護(hù),加鎖保護(hù)后,將域名設(shè)置為禁止刪除、禁止更新、禁止轉(zhuǎn)移的狀態(tài),從而避免域名被惡意刪除、更新、轉(zhuǎn)移。
該域名保護(hù)系統(tǒng)的使用對象為注冊商,即域名注冊服務(wù)機(jī)構(gòu),域名所有者可向注冊服務(wù)機(jī)構(gòu)申請?jiān)摌I(yè)務(wù),由注冊服務(wù)機(jī)構(gòu)通過該系統(tǒng)進(jìn)行申請,為了保證數(shù)據(jù)的安全性,注冊服務(wù)機(jī)構(gòu)提交申請時(shí)需要進(jìn)行身份認(rèn)證。根據(jù)不同用戶的不同安全需要,設(shè)有標(biāo)準(zhǔn)版域名保護(hù)和高級版域名保護(hù),其中申請標(biāo)準(zhǔn)版域名保護(hù)時(shí)只對注冊服務(wù)機(jī)構(gòu)的身份進(jìn)行認(rèn)證,而申請高級版域名保護(hù)時(shí)不僅需要對注冊服務(wù)機(jī)構(gòu)進(jìn)行身份認(rèn)證,還需要對域名所有者進(jìn)行身份認(rèn)證,即在域名持有者確認(rèn)的情況下才能進(jìn)行操作。
域名保護(hù)系統(tǒng)的系統(tǒng)架構(gòu)如圖3所示,包括3個(gè)服務(wù):
(1)域名保護(hù)申請服務(wù),包括以下幾個(gè)模塊:①權(quán)限管理模塊;②域名保護(hù)模塊,包括標(biāo)準(zhǔn)版域名保護(hù)申請、高級版域名保護(hù)申請、標(biāo)準(zhǔn)版域名保護(hù)管理、高級版域名保護(hù)管理功能。用戶通過輸入域名名稱、保護(hù)年限、動態(tài)口令后點(diǎn)擊提交,系統(tǒng)后臺會調(diào)用身份認(rèn)證服務(wù)的動態(tài)碼校驗(yàn)接口,檢查用戶輸入的動態(tài)碼和服務(wù)器產(chǎn)生的動態(tài)碼是否一致,校驗(yàn)都通過后保存至數(shù)據(jù)庫的待審核表中。臨時(shí)撤銷操作將域名的保護(hù)狀態(tài)臨時(shí)取消,方便用戶進(jìn)行更新或者轉(zhuǎn)移操作,操作后再恢復(fù)保護(hù)狀態(tài)。這樣既能保證域名數(shù)據(jù)的安全,又不影響其正常使用和操作;③個(gè)人口令管理模塊。
(2)身份認(rèn)證服務(wù),包括:①電子口令的管理;②APP 生成動態(tài)碼功能,包括每周定期向服務(wù)器請求新的密鑰,根據(jù)私鑰對密鑰進(jìn)行解密得到真正的密鑰,通過TOTP算法計(jì)算得到動態(tài)碼;③服務(wù)器動態(tài)碼模塊,定期根據(jù)具體用戶信息等生成新的密鑰,并對密鑰進(jìn)行RSA算法加密。根據(jù)不同用戶名、靜態(tài)密碼和密鑰通過TOTP算法生成動態(tài)碼。對外提供動態(tài)碼校驗(yàn)的API接口服務(wù),供域名保護(hù)模塊調(diào)用。
(3)域名保護(hù)審核服務(wù),審核員登錄該系統(tǒng)后,可以對域名保護(hù)業(yè)務(wù)申請進(jìn)行審核,審核通過后域名保護(hù)正式生效;定期統(tǒng)計(jì)功能;定期清理逾期的域名保護(hù)。
圖3 域名保護(hù)系統(tǒng)架構(gòu)
其中,以上3個(gè)服務(wù)中每個(gè)服務(wù)又分為兩個(gè)子服務(wù),web服務(wù)和service服務(wù),即本系統(tǒng)共包含6個(gè)子服務(wù):protect-web,protect-service,admin-web,admin-service,job-web,job-service。其中各web服務(wù)包括CSS,JSP,JS,圖片等靜態(tài)資源以及負(fù)責(zé)和外界進(jìn)行交互,獲取用戶的請求,將請求封裝后提交給對應(yīng)的service服務(wù)進(jìn)行處理。service通過REST API 的方式對web提供相應(yīng)的資源,web再將結(jié)果返回給用戶。
REST(representational state transfer)是Roy Fielding博士2000年在他的博士論文中提出來的一種軟件架構(gòu)風(fēng)格,可以降低開發(fā)的復(fù)雜性同時(shí)提高系統(tǒng)的可伸縮性[9,10]。
service服務(wù)所在的服務(wù)器只允許固定IP的服務(wù)器訪問,例如web,以及數(shù)據(jù)庫,對外進(jìn)行物理隔離,這樣在物理上保證了域名保護(hù)系統(tǒng)服務(wù)和數(shù)據(jù)的安全性。
雖然用戶申請域名保護(hù)業(yè)務(wù)需要先登錄域名保護(hù)申請服務(wù),但是,基于用戶名和靜態(tài)密碼的登錄驗(yàn)證是很容易被劫持和破解的,為了增加域名數(shù)據(jù)的安全性,用戶申請域名保護(hù)時(shí),增加了身份驗(yàn)證邏輯。用戶申請時(shí),除填寫需要保護(hù)的域名信息外,還需要根據(jù)申請的電子口令A(yù)PP獲取動態(tài)口令,以和身份認(rèn)證服務(wù)端的口令進(jìn)行匹配,來對身份進(jìn)行校驗(yàn)。身份認(rèn)證的設(shè)計(jì),極大的保證了系統(tǒng)操作的安全性[11,12]。
圖4為APP端到認(rèn)證服務(wù)器的交互過程。
圖4 身份認(rèn)證過程
(1)用戶首次拿到域名保護(hù)申請業(yè)務(wù)資質(zhì)后,安裝APP,并通過掃描二維碼的方式將用戶名、靜態(tài)密碼以及密鑰(私鑰)等數(shù)據(jù)導(dǎo)入APP。第一次使用APP時(shí),根據(jù)用戶名和靜態(tài)密碼向服務(wù)器請求TOTP算法的密鑰。
(2)根據(jù)系統(tǒng)設(shè)置,每周定期向服務(wù)器請求最新的密鑰,服務(wù)器也會每周生成新的密鑰key,為24字節(jié)的隨機(jī)值。
(3)服務(wù)器根據(jù)用戶名和靜態(tài)密碼獲取該用戶對應(yīng)的密鑰key1(key1為服務(wù)器端使用公鑰對原始密鑰key經(jīng)RSA算法進(jìn)行加密后的結(jié)果,key值由服務(wù)器每周定時(shí)使用偽隨機(jī)算法生成),返回給APP端。
(4)APP端使用私鑰對密鑰key1解密,獲取key。
(5)APP每隔一分鐘生成一次動態(tài)碼,根據(jù)時(shí)間戳,用戶名+靜態(tài)密碼+key,經(jīng)TOTP算法處理后得到一個(gè)8位數(shù)字的動態(tài)碼。
(6)PC端拿到APP端的動態(tài)碼,發(fā)送用戶名和動態(tài)碼到服務(wù)器認(rèn)證。
(7)服務(wù)器首先會根據(jù)用戶名來查看之前的錯(cuò)誤驗(yàn)證次數(shù),判斷這個(gè)動態(tài)碼驗(yàn)證失敗的次數(shù)是否達(dá)到預(yù)警值,或者該電子口令驗(yàn)證失敗的總次數(shù)是否達(dá)到預(yù)警值,如果其中一項(xiàng)達(dá)到預(yù)警值則視為口令異常(可能遭遇破解攻擊),禁用該電子口令。
(8)如果均未達(dá)到預(yù)警值,將動態(tài)碼和服務(wù)器端生成的動態(tài)碼進(jìn)行比對看是否匹配。如果匹配失敗將該動態(tài)碼驗(yàn)證失敗次數(shù)加1,該電子口令的驗(yàn)證失敗總次數(shù)+1。如果成功,失敗次數(shù)清零,返回結(jié)果。
傳統(tǒng)的身份驗(yàn)證方法仍有可能會被暴力攻擊等破解,本文針對該風(fēng)險(xiǎn),增加了步驟(2)~步驟(4),對TOTP算法中的密鑰經(jīng)過加密后再傳輸,并定期更新,保證了密鑰的安全性,增加步驟(7)的校驗(yàn),有效阻止暴力破解。電子口令被禁止后只有導(dǎo)入新的用戶信息及密鑰(私鑰)方可繼續(xù)使用。
本文實(shí)現(xiàn)的TOTP算法流程如圖5所示:
(1)根據(jù)2.1文中得到的密鑰key1,使用APP本地的私鑰d,對key1進(jìn)行解密,得到密鑰key值, key=fun(key1,d);
(2)將用戶名+靜態(tài)密碼+key組成新的字符串值key2,根據(jù)當(dāng)前時(shí)間的毫秒值與初始值(可選時(shí)間,取其毫秒值)的差值,除以時(shí)間間隔一分鐘即60 000,并轉(zhuǎn)換為16進(jìn)制字符作為時(shí)間值time;
(3)使用SHA-512算法,對key2和time進(jìn)行加密,加密后經(jīng)截短函數(shù)處理,得到最終動態(tài)碼, code=trunc(encode(username+pinPw+key,time)), 其中encode函數(shù)即為加密函數(shù),trunc為截短函數(shù),將加密后的串經(jīng)過截短處理得到動態(tài)碼。
圖5 TOTP算法實(shí)現(xiàn)
TOTP算法實(shí)現(xiàn)中,使用的SHA-512算法屬于哈希算法(也叫雜湊算法),哈希算法是將任意長的輸入信息轉(zhuǎn)換成固定長的輸出串,即雜湊值。哈希函數(shù)為不可逆處理,所以很安全。但是理論上來講,由限制長度的哈希算法來計(jì)算沒有長度限制的輸入信息,必然會有沖撞情況,所以隨著公開時(shí)間的增長,MD5,SHA-1已經(jīng)可以通過碰撞破解[13]。本文采用SHA-512算法,該算法的雜湊過程較之前者更復(fù)雜,且其雜湊值更長,并且本文對密鑰進(jìn)行了RSA非對稱加密,保證了密鑰的安全性,增加了破解的難度。
RSA算法是1977年提出的一種非對稱加密算法,被廣泛應(yīng)用于電子商業(yè)中,其安全性依賴于大整數(shù)的因數(shù)分解的困難性[14]。
RSA包括公鑰,私鑰,加密算法,解密算法。
(1)公鑰的產(chǎn)生過程:①首選選取兩個(gè)互為質(zhì)數(shù),并且兩個(gè)足夠大的素?cái)?shù)p,q,這兩個(gè)素?cái)?shù)是保密的;②計(jì)算n=p*q, n是可以公開的;③計(jì)算fun(n)=(p-1)(q-1), fun(n)是保密的;④找一個(gè)與fun(n)互質(zhì)的數(shù)e,且1 (2)私鑰的產(chǎn)生過程:根據(jù)d*e≡1mod(fun(n)), 計(jì)算得出私鑰值d。 (3)加密的過程:假設(shè)需要加密的明文為m,加密后的密文為c。則計(jì)算過程為: c≡me(mod n)。 (4)解密的過程: m≡cd(mod n)。 根據(jù)RSA的算法描述,我們清楚的認(rèn)識到,足夠大的素?cái)?shù)是保證算法安全性的關(guān)鍵,所以在本文中,我們采用1024位的密鑰,即n為1024位,對TOTP中所用的密鑰進(jìn)行加密后再傳遞給客戶端。 基于RSA算法的域名保護(hù)系統(tǒng),在用戶操作時(shí)增加了動態(tài)驗(yàn)證碼的輸入操作,用戶在輸入需要保護(hù)域名的相關(guān)參數(shù)后,需打開手機(jī)輸入當(dāng)前的動態(tài)口令提交即可。相較于以前的域名保護(hù)系統(tǒng),只是增加了一個(gè)動態(tài)碼參數(shù)的輸入。采用手機(jī)電子口令的方式,對于用戶來說,不需要額外攜帶口令設(shè)備,比較方便。 本文采用REST分布式部署,分層系統(tǒng),簡化了服務(wù)的復(fù)雜性,同時(shí)提高了其可擴(kuò)展性??筛鶕?jù)具體情況對具體服務(wù)進(jìn)行擴(kuò)展,充分利用服務(wù)資源。 (1)本文中所用的TOTP雙因素認(rèn)證方法,采用SHA-512或SM3算法對時(shí)間值以及用戶名、靜態(tài)碼等進(jìn)行加密,根據(jù)實(shí)際情況,本文對SHA-512或SM3算法進(jìn)行了碰撞測試,系統(tǒng)中每周都會生成新的加密密鑰,這里我們只對一個(gè)周期內(nèi)的密鑰進(jìn)行測試,即密鑰參數(shù)固定,測試參數(shù)見表1。 表1 測試參數(shù) 密鑰、用戶名、靜態(tài)密碼保持不變,變動的只有時(shí)間戳的值,即隨著時(shí)間的變化不斷增長。首先進(jìn)行轉(zhuǎn)碼位數(shù)為6位時(shí)SM3算法和SHA算法的碰撞次數(shù)及碰撞概率測試。得到的測試結(jié)果見表2和圖6。 表2 SM3和SHA算法碰撞測試結(jié)果(6位轉(zhuǎn)碼) 圖6 SM3和SHA算法碰撞測試結(jié)果(6位轉(zhuǎn)碼) 根據(jù)表2和圖6中的結(jié)果,我們看到SM3和SHA-512的碰撞次數(shù)是沒有太大差別的,但是SHA-512算法得到的動態(tài)口令碰撞次數(shù)要稍低于SM3的碰撞次數(shù),所以我們采用SHA-512函數(shù)實(shí)現(xiàn)TOTP算法。 測試結(jié)果中,當(dāng)測試次數(shù)達(dá)到百萬級別時(shí),碰撞率很高。接下來基于SHA-512函數(shù)對轉(zhuǎn)位碼為6位和8位分別進(jìn)行碰撞測試,表3和圖7是基于SHA-512函數(shù)的碰撞測試結(jié)果。 表3 6和8位動態(tài)碼碰撞測試結(jié)果(SHA) 圖7 6位轉(zhuǎn)碼和8位轉(zhuǎn)碼碰撞概率對比 由表3的結(jié)果以及圖7可以看出,轉(zhuǎn)碼位數(shù)為6位和轉(zhuǎn)碼位數(shù)為8位,在碰撞概率上相差不止一個(gè)數(shù)量級,在測試次數(shù)到達(dá)一百萬的時(shí)候,轉(zhuǎn)碼位數(shù)為6位的碰撞概率達(dá)到了50%左右,而轉(zhuǎn)碼位數(shù)為8的碰撞概率只有0.5%左右,所以本系統(tǒng)中使用8位轉(zhuǎn)碼生成動態(tài)碼以減少碰撞概率,提高TOTP算法的安全性。 根據(jù)表3中的測試結(jié)果,8位轉(zhuǎn)碼在一萬次及以下碰撞的幾率基本為0,隨著次數(shù)不斷增加,發(fā)生碰撞的次數(shù)和概率也在增加,在測試次數(shù)達(dá)到10萬次的時(shí)候,發(fā)生碰撞的概率為萬分之六。按照本文系統(tǒng)實(shí)現(xiàn),每隔1周時(shí)間會生成一個(gè)新的用于生成動態(tài)碼的密鑰,一分鐘生成一個(gè)動態(tài)碼的情況下,1周共計(jì)生成43 200個(gè)動態(tài)碼,發(fā)生碰撞的概率為:0.016 203 7%,即不到萬分之二的碰撞概率,已經(jīng)可以滿足本文中實(shí)際操作的安全性要求。 (2)本文增加了一次性動態(tài)碼驗(yàn)證時(shí)錯(cuò)誤次數(shù)的預(yù)警值,當(dāng)一個(gè)用戶的口令不停進(jìn)行校驗(yàn)并且錯(cuò)誤次數(shù)超過預(yù)警值時(shí),將該口令禁用,有效防止了暴力破解的可能性。 (3)對TOTP中用于生成動態(tài)碼的密鑰進(jìn)行RSA非對稱算法加密,并定期更新,確保該密鑰的安全可靠,且增加了破解的難度。 (4)系統(tǒng)中采用web和service服務(wù)分布部署,實(shí)行了物理上的隔離,進(jìn)一步保障了系統(tǒng)的安全性。 本文采用了改進(jìn)的動態(tài)口令技術(shù),使用RSA非對稱加密算法對動態(tài)口令的密鑰進(jìn)行加密,同時(shí)增加預(yù)警值設(shè)置以及定期更新密鑰的邏輯,增強(qiáng)了動態(tài)口令的安全性,保證了域名保護(hù)系統(tǒng)的操作安全可靠。同時(shí),域名保護(hù)系統(tǒng)的各個(gè)服務(wù)劃分為web和service子服務(wù),分布部署,這樣從物理上保證了數(shù)據(jù)及服務(wù)的安全,進(jìn)一步保證了互聯(lián)網(wǎng)的域名數(shù)據(jù)安全。本文提到的身份認(rèn)證方法可推廣至其它領(lǐng)域的web服務(wù)中,提高服務(wù)的安全性及可擴(kuò)展性。3 域名保護(hù)系統(tǒng)分析
3.1 易用性
3.2 易擴(kuò)展
3.3 安全性
4 結(jié)束語