基于SASL框架下身份認(rèn)證機(jī)制的研究
鄭之華
(福建省湄洲灣職業(yè)技術(shù)學(xué)院自動(dòng)化工程系,福建 莆田 351254)
摘要:在LDAP V3中身份認(rèn)證過程是包含在綁定操作過程中的,綁定操作的功能是允許驗(yàn)證信息在客戶端和服務(wù)端之間交換的,LDAP V3主要支持3種認(rèn)證方式:匿名認(rèn)證、基本認(rèn)證、基于SASL認(rèn)證。目前SASL定義的安全機(jī)制主要有:Anonymous、CRAM-MD5、DIGEST-MD5、External、Kerberos v4與v5等。在這里我們針對(duì)CRAM-MD5、DIGEST-MD5、External這三種安全機(jī)制進(jìn)行分析和比較它們的各自優(yōu)缺點(diǎn)。通過分析和比較為實(shí)際身份認(rèn)證系統(tǒng)提供一個(gè)參考。
關(guān)鍵詞:SASL; CRAM-MD5; DIGEST-MD5; Extrernal
收稿日期:2014-11-11
作者簡介:鄭之華(1978-),女, 福建仙游人, 講師, 碩士,主要從事通信與信息系統(tǒng)方面的研究。
中圖分類號(hào):TN918.91文獻(xiàn)標(biāo)志碼:A
0引言
SASL(SimpleAuthenticanon and SecurityLayer)簡單認(rèn)證和安全層,由RFC2222文件定義,是面向網(wǎng)絡(luò)協(xié)議提供輔助身份認(rèn)證的一個(gè)通用框架,具有靈活一致的特點(diǎn)。它最初是為了對(duì)IMAP協(xié)議(Internet Mail Access Protocol 交互式郵件存取協(xié)議)提供強(qiáng)認(rèn)證支持而設(shè)計(jì)的,隨之便發(fā)展為一種實(shí)現(xiàn)不同協(xié)議和認(rèn)證系統(tǒng)間的交互的更為通用的框架[1]。不同的機(jī)制在實(shí)現(xiàn)過程中,其實(shí)現(xiàn)方式有所不同,目前SASL定義的安全機(jī)制主要有:Anonymous、CRAM-MD5、DIGEST-MD5、External、Kerberos v4與v5等。圖1說明了它們間的關(guān)系。
圖1 SASL機(jī)制
1基于SASL框架下三種安全機(jī)制的比較
在這里我們針對(duì)CRAM-MD5、DIGEST-MD5、External這三種安全機(jī)制進(jìn)行分析和比較它們的各自優(yōu)缺點(diǎn)。
圖2 CRAM-MD5機(jī)制的認(rèn)證過程
1.1CRAM-MD5機(jī)制
CRAM的英文全稱為:Challenge-Response Authentication Mechanism即中文的質(zhì)詢-響應(yīng)鑒別機(jī)制,該機(jī)制在SASL中的名稱為“CRAM-MD5”,由RFC2195文件定義[2]。
CRAM-MD5機(jī)制的認(rèn)證過程如圖2所示。
首先,服務(wù)器端向客戶端發(fā)出質(zhì)詢報(bào)文。質(zhì)詢報(bào)文主要包含一個(gè)由隨機(jī)數(shù)字、時(shí)間戳和服務(wù)器主機(jī)名組成的字符串,該非編碼字符串在語法上必須符合RFC 822文件在RFC 1939(Post Office Protocol-Version 3 郵局協(xié)議版本3)文件中關(guān)于時(shí)間戳對(duì)應(yīng)于RFC 822定義的“msg-id”所描述的規(guī)定格式(如:
摘要其次,客戶端收到質(zhì)詢報(bào)文后記錄下該數(shù)據(jù),并對(duì)質(zhì)詢報(bào)文經(jīng)計(jì)算生成,然后用一個(gè)包含用戶名,一個(gè)間隔和“摘要”的報(bào)文予以響應(yīng),摘要文本由KEYED-MD5算法計(jì)算出來,摘要中含有密鑰且為客戶端和服務(wù)器端雙方共享的密鑰,該共享的密鑰僅為客戶端和服務(wù)器端通訊雙方所知。
摘要最后,服務(wù)器接收到這個(gè)客戶機(jī)響應(yīng)后,檢驗(yàn)其中的。如果摘要正確,服務(wù)器應(yīng)該確認(rèn)該客戶端已通過認(rèn)證,并作出適當(dāng)?shù)捻憫?yīng)。否則,向客戶機(jī)發(fā)送一個(gè)鑒別失敗的消息。
KEYED-MD5計(jì)算公式為[3]:
H(K XOR opad,H(K XOR ipad,text));
公式參數(shù)說明如下:
1)H是一個(gè)將數(shù)據(jù)塊用一個(gè)基本的迭代壓縮函數(shù)來加密的散列函數(shù);
2)K為密鑰,密鑰的長度可以是任意長度的,推薦的最小密鑰長度為64個(gè)字長(即512位);
3)XOR為異或操作;
4)ipad和opad分別為兩個(gè)事先定義的值,“i”、“o”標(biāo)志內(nèi)部與外部,ipad=字節(jié)0x36重復(fù)64次,opad=字節(jié)0x5c重復(fù)64次;
5)text為質(zhì)詢報(bào)文的內(nèi)容。
計(jì)算步驟為:
1) 在密鑰K后面添加多個(gè)0來創(chuàng)建一個(gè)字長為B的字符串。(例如,如果K的字長是20字節(jié),B=64字節(jié),則K后會(huì)加入44個(gè)字節(jié)的0x00);
2) 將上一步生成的B字長的字符串與ipad做異或運(yùn)算;
3) 將質(zhì)詢報(bào)文text填充至第二步計(jì)算出來的字符串中;
4) 將第三步產(chǎn)生的字符串用H散列函數(shù)進(jìn)行運(yùn)算;
5) 將第一步生成的B字長字符串與opad做異或運(yùn)算;
6) 再將第四步運(yùn)算的結(jié)果填充至第五步運(yùn)算結(jié)果中;
7) 用H作用于第六步生成的數(shù)據(jù)流,輸出最終結(jié)果。
KEYED-MD5算法預(yù)先計(jì)算好共享密鑰的中間值(K XOR opad)、(K XOR ipad),并將這些中間結(jié)果存儲(chǔ)在服務(wù)器上,等到有需要驗(yàn)證時(shí)候用來生成H散列函數(shù)的初始值。
1.2DIGEST-MD5機(jī)制
DIGEST-MD5機(jī)制英文全稱為:Using Digest Authentication as a SASL Mechanism(使用摘要身份驗(yàn)證作為SASL機(jī)制)由RFC2831文件定義。DIGEST-MD5機(jī)制的認(rèn)證過程共有三步如圖3所示。
圖3 DIGEST-MD5機(jī)制的認(rèn)證過程
首先,服務(wù)器端向客戶端發(fā)送一個(gè)經(jīng)過復(fù)雜計(jì)算長度不超過2048字節(jié)的質(zhì)詢報(bào)文;
其次,客戶端收到服務(wù)器端發(fā)來的質(zhì)詢報(bào)文后,回復(fù)一個(gè)經(jīng)過復(fù)雜計(jì)算長度不超過4096字節(jié)的響應(yīng)報(bào)文;
最后,服務(wù)器端對(duì)收到的響應(yīng)值進(jìn)行驗(yàn)證,驗(yàn)證通過后向客戶端發(fā)送一個(gè)驗(yàn)證通過的報(bào)文,該報(bào)文的計(jì)算方法與第二步中的response參數(shù)值的計(jì)算方法相同。
質(zhì)詢報(bào)文計(jì)算公式如下[4]:
digest-challenge=1#(realm | nonce | qop-options | stale | maxbuf | charset | algorithm | cipher-opts | auth-param)
響應(yīng)報(bào)文計(jì)算公式如下:
digest-response=1#(username | realm | nonce | cnonce | nonce-count | qop | digest-uri | response | maxbuf | charset | cipher | authzid | auth-param)
我們重點(diǎn)研究第二步驟和第三步驟的參數(shù)值計(jì)算方法,第二步響應(yīng)報(bào)文和第三步驗(yàn)證通過報(bào)文的respons參數(shù)值具體計(jì)算公式如下:
response-value= HEX( KD ( HEX(H(A1)),
{ nonce-value, ":" nc-value, ":",
cnonce-value, ":", qop-value, ":", HEX(H(A2)) }))
默認(rèn)的A1的值為:
A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
":", nonce-value, ":", cnonce-value }
當(dāng)客戶端響應(yīng)報(bào)文中的authzid值有指定,那么A1的值為:
A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
":", nonce-value, ":", cnonce-value, ":", authzid-value }
默認(rèn)的A2的值為:
A2= { "AUTHENTICATE:", digest-uri-value }
當(dāng)客戶端響應(yīng)報(bào)文中的qop值為“auth-int”或“auth-conf”,那么A2的值為:
A2={"AUTHENTICATE:",digest-uri-value,":00000000000000000000000000000000"}
上述的response參數(shù)值計(jì)算公式中運(yùn)算符號(hào)及函數(shù)說明如表1所示。
表1 運(yùn)算符號(hào)及函數(shù)說明
從上述公式我們可以看出客戶端的響應(yīng)報(bào)文與服務(wù)器端的驗(yàn)證通過報(bào)文的response參數(shù)值為一個(gè)128位的MD5散列值,即32個(gè)16進(jìn)制數(shù)。計(jì)算過程如下:
首先response參數(shù)值分別計(jì)算A1、A2的參數(shù)值,然后分別對(duì)A1、A2的值進(jìn)行MD5處理后,再將所得到的MD5散列數(shù)變換為32個(gè)16進(jìn)制數(shù),其中A1值中含有用戶名及用戶密碼等信息;
接著將 "nonce-value", ":" ,"nc-value", ":"," cnonce-value", ":", "qop-value", ":"與A2計(jì)算后的值串聯(lián)起來形成一串字符串,再將A1計(jì)算后的值與之前得到的字符串串聯(lián)起來形成新的字符串,將得到的字符串與":"s字符串串聯(lián)成新的字符串后再進(jìn)行MD5處理;
最后將得到的16個(gè)字節(jié)的MD5散列數(shù)變換為32個(gè)16進(jìn)制數(shù)。
response參數(shù)值在計(jì)算過程中含有用戶名及用戶密碼,用來表明用戶為合法的用戶,若第二步驟與第三步驟的response參數(shù)值一樣,則說明用戶身份驗(yàn)證成功。
1.3External機(jī)制
在SASL中和外部驗(yàn)證機(jī)制有關(guān)的機(jī)制名稱為“External”,它的認(rèn)證過程如圖4所示。
圖4 外部機(jī)制身份認(rèn)證過程
1) 客戶端向服務(wù)器端發(fā)出一個(gè)含有用戶授權(quán)身份(采用UTF-8編碼)的初始響應(yīng);
2) 服務(wù)器端使用SASL外部的鑒別機(jī)制,對(duì)客戶端做授權(quán)身份的鑒別;
3) 外部機(jī)制驗(yàn)證完畢,返回鑒別信息給服務(wù)器端;
4)如果服務(wù)器端鑒別出客戶端確實(shí)具有該授權(quán)身份,則返回給客戶端一個(gè)指示鑒別成功的報(bào)文,否則,返回給客戶端一個(gè)鑒別失敗的報(bào)文。
能夠提供這種外部的鑒別機(jī)制的系統(tǒng)有IPSec(Internet Protocol Security網(wǎng)際協(xié)議安全套件)、TLS。在客戶端協(xié)商使用外部驗(yàn)證機(jī)制之前,客戶端發(fā)送空的字符串作為授權(quán)身份,那么授權(quán)身份從存在于外部授權(quán)系統(tǒng)中的授權(quán)證書中獲取。
2比較與總結(jié)
對(duì)于CRAM-MD機(jī)制我們需要注意的是KEYED-MD5算法預(yù)先計(jì)算好共享密鑰的中間值(K XOR opad、K XOR ipad)同樣需要保密,若存放中間值的服務(wù)器本身不夠安全,同樣保護(hù)不了共享密鑰,共享密鑰必須隨機(jī)選取(或使用強(qiáng)大的基于隨機(jī)種子的偽隨機(jī)生成方法),為了對(duì)付函數(shù)和密鑰所存在的潛在缺陷并降低泄漏密鑰帶來的危害,我們還需要周期性的更新共享密鑰,采用CRAM-MD5機(jī)制可以防止回放攻擊,不過它易受到主動(dòng)攻擊(Active attack)。
對(duì)于External機(jī)制,其本身不提供任何安全保護(hù),它容易受到客戶機(jī)假冒、服務(wù)器假冒攻擊,主動(dòng)攻擊和竊聽攻擊,我們僅僅在外部驗(yàn)證機(jī)制的安全性能有足夠的強(qiáng)度時(shí)使用它[1],另外使用外部驗(yàn)證機(jī)制的時(shí)候,對(duì)于外部的授權(quán)證書我們還需要一筆不小的額外投入。
DIGEST-MD5機(jī)制在CRAM-MD5機(jī)制的基礎(chǔ)上發(fā)展而來的,不僅提供了身份驗(yàn)證,還支持在身份驗(yàn)證成功后,通過談判建立安全層來執(zhí)行完整性和機(jī)密性保護(hù)。完整性和機(jī)密性保護(hù)的密鑰都是基于前面所述的H(A1)產(chǎn)生的。雖然DIGEST-MD5機(jī)制相對(duì)于第三方認(rèn)證系統(tǒng)(例如Kerberos或公共密鑰系統(tǒng))來說不是一種強(qiáng)的身份認(rèn)證機(jī)制。但它可被用來取代那些在安全性方面較弱的明文口令機(jī)制。與CRAM-MD5相比,DIGEST-MD5提供了對(duì)一定數(shù)量的攻擊提供重要的保護(hù)如:重放攻擊、在線字典攻擊、脫機(jī)字典攻擊、中間人攻擊、選擇明文攻擊、防止假冒服務(wù)器的欺騙等。在政務(wù)內(nèi)網(wǎng)內(nèi),與互聯(lián)網(wǎng)網(wǎng)絡(luò)完全物理隔離,網(wǎng)絡(luò)相對(duì)安全下,不增加投資,我們可考慮選擇采用基于SASL框架下的DIGEST-MD5機(jī)制來進(jìn)行身份認(rèn)證。
參考文獻(xiàn):
[1]J.Myers. Simple Authentication and Security Layer (SASL)[EB]. RFC2222,1997,10.
[2]J. Klensin,R. Catoe,P. Krumviede. IMAP/POP AUTHorize Extension for Simple Challenge/Response[EB]. RFC2195,1997,9.
[3]H. Krawczyk,M. Bellare,R. Canetti. HMAC: Keyed-Hashing for Message Authentication[EB]. RFC2104,1997,2.
[4]P. Leach,C. Newman. Using Digest Authentication as a SASL Mechanism[EB]. RFC2831,2000,5.
責(zé)任編輯:吳旭云
Research of Identity Authentication Mechanism Based on SASL Framework
ZHENG Zhihua
(College of Automation Engineering, Meizhouwan Vocational and Technical College, Putian 351254, China)
Abstract:Identity authentication process in LDAP V3 is contained in the binding operation process, which allows the verification information to exchange between the client end and the service end. LDAP V3 mainly supports three kinds of authentication methods: anonymous authentication, basic authentication and SASL-based authentication. At present, the security mechanism of SASL mainly includes Anonymous, CRAM-MD5, DIGEST-MD5, External, Kerberos v 4 and v 5. This paper, focusing on CRAM-MD5, DIGEST-MD5 and External, analyzes and compares their advantages and disadvantages, attempting to provide a reference for the actual identity authentication system.
Keywords:SASL; CRAM-MD5; DIGEST-MD5; External