基于SASL框架下身份認證機制的研究
鄭之華
(福建省湄洲灣職業技術學院自動化工程系,福建 莆田 351254)
摘要:在LDAP V3中身份認證過程是包含在綁定操作過程中的,綁定操作的功能是允許驗證信息在客戶端和服務端之間交換的,LDAP V3主要支持3種認證方式:匿名認證、基本認證、基于SASL認證。目前SASL定義的安全機制主要有:Anonymous、CRAM-MD5、DIGEST-MD5、External、Kerberos v4與v5等。在這里我們針對CRAM-MD5、DIGEST-MD5、External這三種安全機制進行分析和比較它們的各自優缺點。通過分析和比較為實際身份認證系統提供一個參考。
關鍵詞:SASL; CRAM-MD5; DIGEST-MD5; Extrernal
收稿日期:2014-11-11
作者簡介:鄭之華(1978-),女, 福建仙游人, 講師, 碩士,主要從事通信與信息系統方面的研究。
中圖分類號:TN918.91文獻標志碼:A
0引言
SASL(SimpleAuthenticanon and SecurityLayer)簡單認證和安全層,由RFC2222文件定義,是面向網絡協議提供輔助身份認證的一個通用框架,具有靈活一致的特點。它最初是為了對IMAP協議(Internet Mail Access Protocol 交互式郵件存取協議)提供強認證支持而設計的,隨之便發展為一種實現不同協議和認證系統間的交互的更為通用的框架[1]。不同的機制在實現過程中,其實現方式有所不同,目前SASL定義的安全機制主要有:Anonymous、CRAM-MD5、DIGEST-MD5、External、Kerberos v4與v5等。圖1說明了它們間的關系。

圖1 SASL機制
1基于SASL框架下三種安全機制的比較
在這里我們針對CRAM-MD5、DIGEST-MD5、External這三種安全機制進行分析和比較它們的各自優缺點。

圖2 CRAM-MD5機制的認證過程
1.1CRAM-MD5機制
CRAM的英文全稱為:Challenge-Response Authentication Mechanism即中文的質詢-響應鑒別機制,該機制在SASL中的名稱為“CRAM-MD5”,由RFC2195文件定義[2]。
CRAM-MD5機制的認證過程如圖2所示。
首先,服務器端向客戶端發出質詢報文。質詢報文主要包含一個由隨機數字、時間戳和服務器主機名組成的字符串,該非編碼字符串在語法上必須符合RFC 822文件在RFC 1939(Post Office Protocol-Version 3 郵局協議版本3)文件中關于時間戳對應于RFC 822定義的“msg-id”所描述的規定格式(如:
摘要其次,客戶端收到質詢報文后記錄下該數據,并對質詢報文經計算生成,然后用一個包含用戶名,一個間隔和“摘要”的報文予以響應,摘要文本由KEYED-MD5算法計算出來,摘要中含有密鑰且為客戶端和服務器端雙方共享的密鑰,該共享的密鑰僅為客戶端和服務器端通訊雙方所知。
摘要最后,服務器接收到這個客戶機響應后,檢驗其中的。如果摘要正確,服務器應該確認該客戶端已通過認證,并作出適當的響應。否則,向客戶機發送一個鑒別失敗的消息。
KEYED-MD5計算公式為[3]:
H(K XOR opad,H(K XOR ipad,text));
公式參數說明如下:
1)H是一個將數據塊用一個基本的迭代壓縮函數來加密的散列函數;
2)K為密鑰,密鑰的長度可以是任意長度的,推薦的最小密鑰長度為64個字長(即512位);
3)XOR為異或操作;
4)ipad和opad分別為兩個事先定義的值,“i”、“o”標志內部與外部,ipad=字節0x36重復64次,opad=字節0x5c重復64次;
5)text為質詢報文的內容。
計算步驟為:
1) 在密鑰K后面添加多個0來創建一個字長為B的字符串。(例如,如果K的字長是20字節,B=64字節,則K后會加入44個字節的0x00);
2) 將上一步生成的B字長的字符串與ipad做異或運算;
3) 將質詢報文text填充至第二步計算出來的字符串中;
4) 將第三步產生的字符串用H散列函數進行運算;
5) 將第一步生成的B字長字符串與opad做異或運算;
6) 再將第四步運算的結果填充至第五步運算結果中;
7) 用H作用于第六步生成的數據流,輸出最終結果。
KEYED-MD5算法預先計算好共享密鑰的中間值(K XOR opad)、(K XOR ipad),并將這些中間結果存儲在服務器上,等到有需要驗證時候用來生成H散列函數的初始值。
1.2DIGEST-MD5機制
DIGEST-MD5機制英文全稱為:Using Digest Authentication as a SASL Mechanism(使用摘要身份驗證作為SASL機制)由RFC2831文件定義。DIGEST-MD5機制的認證過程共有三步如圖3所示。

圖3 DIGEST-MD5機制的認證過程
首先,服務器端向客戶端發送一個經過復雜計算長度不超過2048字節的質詢報文;
其次,客戶端收到服務器端發來的質詢報文后,回復一個經過復雜計算長度不超過4096字節的響應報文;
最后,服務器端對收到的響應值進行驗證,驗證通過后向客戶端發送一個驗證通過的報文,該報文的計算方法與第二步中的response參數值的計算方法相同。
質詢報文計算公式如下[4]:
digest-challenge=1#(realm | nonce | qop-options | stale | maxbuf | charset | algorithm | cipher-opts | auth-param)
響應報文計算公式如下:
digest-response=1#(username | realm | nonce | cnonce | nonce-count | qop | digest-uri | response | maxbuf | charset | cipher | authzid | auth-param)
我們重點研究第二步驟和第三步驟的參數值計算方法,第二步響應報文和第三步驗證通過報文的respons參數值具體計算公式如下:
response-value= HEX( KD ( HEX(H(A1)),
{ nonce-value, ":" nc-value, ":",
cnonce-value, ":", qop-value, ":", HEX(H(A2)) }))
默認的A1的值為:
A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
":", nonce-value, ":", cnonce-value }
當客戶端響應報文中的authzid值有指定,那么A1的值為:
A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
":", nonce-value, ":", cnonce-value, ":", authzid-value }
默認的A2的值為:
A2= { "AUTHENTICATE:", digest-uri-value }
當客戶端響應報文中的qop值為“auth-int”或“auth-conf”,那么A2的值為:
A2={"AUTHENTICATE:",digest-uri-value,":00000000000000000000000000000000"}
上述的response參數值計算公式中運算符號及函數說明如表1所示。

表1 運算符號及函數說明
從上述公式我們可以看出客戶端的響應報文與服務器端的驗證通過報文的response參數值為一個128位的MD5散列值,即32個16進制數。計算過程如下:
首先response參數值分別計算A1、A2的參數值,然后分別對A1、A2的值進行MD5處理后,再將所得到的MD5散列數變換為32個16進制數,其中A1值中含有用戶名及用戶密碼等信息;
接著將 "nonce-value", ":" ,"nc-value", ":"," cnonce-value", ":", "qop-value", ":"與A2計算后的值串聯起來形成一串字符串,再將A1計算后的值與之前得到的字符串串聯起來形成新的字符串,將得到的字符串與":"s字符串串聯成新的字符串后再進行MD5處理;
最后將得到的16個字節的MD5散列數變換為32個16進制數。
response參數值在計算過程中含有用戶名及用戶密碼,用來表明用戶為合法的用戶,若第二步驟與第三步驟的response參數值一樣,則說明用戶身份驗證成功。
1.3External機制
在SASL中和外部驗證機制有關的機制名稱為“External”,它的認證過程如圖4所示。

圖4 外部機制身份認證過程
1) 客戶端向服務器端發出一個含有用戶授權身份(采用UTF-8編碼)的初始響應;
2) 服務器端使用SASL外部的鑒別機制,對客戶端做授權身份的鑒別;
3) 外部機制驗證完畢,返回鑒別信息給服務器端;
4)如果服務器端鑒別出客戶端確實具有該授權身份,則返回給客戶端一個指示鑒別成功的報文,否則,返回給客戶端一個鑒別失敗的報文。
能夠提供這種外部的鑒別機制的系統有IPSec(Internet Protocol Security網際協議安全套件)、TLS。在客戶端協商使用外部驗證機制之前,客戶端發送空的字符串作為授權身份,那么授權身份從存在于外部授權系統中的授權證書中獲取。
2比較與總結
對于CRAM-MD機制我們需要注意的是KEYED-MD5算法預先計算好共享密鑰的中間值(K XOR opad、K XOR ipad)同樣需要保密,若存放中間值的服務器本身不夠安全,同樣保護不了共享密鑰,共享密鑰必須隨機選取(或使用強大的基于隨機種子的偽隨機生成方法),為了對付函數和密鑰所存在的潛在缺陷并降低泄漏密鑰帶來的危害,我們還需要周期性的更新共享密鑰,采用CRAM-MD5機制可以防止回放攻擊,不過它易受到主動攻擊(Active attack)。
對于External機制,其本身不提供任何安全保護,它容易受到客戶機假冒、服務器假冒攻擊,主動攻擊和竊聽攻擊,我們僅僅在外部驗證機制的安全性能有足夠的強度時使用它[1],另外使用外部驗證機制的時候,對于外部的授權證書我們還需要一筆不小的額外投入。
DIGEST-MD5機制在CRAM-MD5機制的基礎上發展而來的,不僅提供了身份驗證,還支持在身份驗證成功后,通過談判建立安全層來執行完整性和機密性保護。完整性和機密性保護的密鑰都是基于前面所述的H(A1)產生的。雖然DIGEST-MD5機制相對于第三方認證系統(例如Kerberos或公共密鑰系統)來說不是一種強的身份認證機制。但它可被用來取代那些在安全性方面較弱的明文口令機制。與CRAM-MD5相比,DIGEST-MD5提供了對一定數量的攻擊提供重要的保護如:重放攻擊、在線字典攻擊、脫機字典攻擊、中間人攻擊、選擇明文攻擊、防止假冒服務器的欺騙等。在政務內網內,與互聯網網絡完全物理隔離,網絡相對安全下,不增加投資,我們可考慮選擇采用基于SASL框架下的DIGEST-MD5機制來進行身份認證。
參考文獻:
[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.
責任編輯:吳旭云
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