摘要:該文設計了一種適用于B/S結構的,復雜度和安全性適中的SSO協議,它在設計上吸取了很多Kerberos和CAS的設計思想,比如Kerberos協議的票據與CAS協議中的重定向和Cookie管理技術。它的特點有:使用加強的密碼校驗協議,不需傳輸密碼或加密密碼即可完成校驗;采用簡化的Kerberos票據管理技術;增加票據有效性的檢驗;由于鑒權服務器和應用服務器之間使用對稱密碼,所以在票據的加密時,使用主密鑰分散技術,更安全的保護主密鑰;改進Kerberos票據,增加application server sequence number,與時間戳共同解決重傳攻擊問題。
關鍵詞:單點登錄;服務票據;重定向
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)25-1457-03
Design and Realization of the system on Single Sign On
CHEN Lu-yi, GUAN Xiao-qing
(Beijing Electronic Science and Technology Vocational College, Beijing 100021, China)
Abstract: This paper illustrates a SSO protocol suitable for B/S structure and of appropriate complication and security level. It reflects the design principles of Kerberos and CAS, for example, instruments under Kerberos protocol, redirection in CAS and Cookie managing techniques. Its features include: enhanced code checking agreement performing checks without transmitting password or pin; simplified Kerberos instrument managing techniques; instrument validity checking; safer protection master key by using master key allocation technique for coding instruments since symmetric code is used between authorization server and application server; improved Kerberos instruments, increasing application server sequence number.
Key words: Single Sign On; service ticket; redirection
1 引言
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用于同一個用戶的登錄的機制。
當用戶第一次訪問應用系統1的時候,因為還沒有登錄,會被引導到認證系統中進行登錄;根據用戶提供的登錄信息,認證系統進行身份校驗,如果通過校驗,應該返回給用戶一個認證的憑據——ticket;用戶再訪問別的應用的時候就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之后會把ticket送到認證系統進行校驗,檢查ticket的合法性。如果通過校驗,用戶就可以在不用再次登錄的情況下訪問應用系統2和應用系統3了。
2 假定需求
為一公司設計一個單點登錄系統,集成公司內部的幾個子系統,包括財務系統,內部資料訪問系統等, 要求用戶從瀏覽器登錄一次即可以同樣身份登錄其他系統,需要有權限管理和訪問控制。
3 網絡模型
各部分說明如下:
Application Servers:應用服務器,為用戶提供服務, 簡稱S。在用戶登錄后需要維護用戶的信息,便于其他應用服務器使用。
Authentication Server:鑒權服務器,為應用服務器提供鑒權服務,存儲了用戶名和密碼,簡稱AS。
Directory Server:目錄服務器,為AS提供用戶身份檢索服務,簡稱DS。
Browser:用戶,簡稱C。
每個S都應該在應用服務器(AS)注冊,由于S的數目不會太多,可以為每個S與AS維護一個對稱密碼以便于傳輸加密信息。同時為每個S維護一個sequence number,分別存儲與應用服務器和鑒權服務器,便于預防重傳攻擊。
各個應用服務器根據各自用戶信息進行訪問和權限控制, 用戶信息由用戶第一個登錄的應用服務器得到。
4 設計思想
將適用于C/S結構的Kerberos協議與CAS協議中的重定向和Cookie管理技術結合,產生出一種適用于B/S結構的,復雜度和安全性適中的安全協議。具體為:
使用加強的密碼校驗協議,不需傳輸密碼或加密密碼即可完成校驗;
采用簡化的Kerberos票據管理技術;
增加票據有效性的檢驗;
由于鑒權服務器和應用服務器之間使用對稱密碼,所以在票據的加密時,使用主密鑰分散技術,更安全的保護主密鑰;
使用Cookie保存票據,用url參數進行重定向以實現單點登錄;
用時間戳和sequence number共同解決Kerberos協議的重傳攻擊問題。
5 詳細設計
交互流程如圖2所示。
下面分別詳細描述各個過程。
5.1 密碼驗證(Password Validation)
5.1.1 操作步驟
Step I,client send username+url to authentication server
Step II, AS:
Step III, authentication server send e_ra to client
Step IV, client decrypt e_ra and send response to AS
Step V, C-->AS: e_rb
Step VI, authentication server decrypt e_rb and validate the password
5.1.2 流程描述
1) 客戶端使用Java Applet來使用戶輸入用戶名密碼。用戶輸入之后,將用戶名和請求的url傳送至鑒權服務器;
2) 鑒權服務器從數據庫中提取出該用戶密碼,根據用戶名,密碼,和url派生出一個pw_key,派生算法可以使用des_cbc_md5(ref: RFC 1510)或者sha;
3) 生成一隨機數ra;
4) 用pw_key加密隨機數送至客戶端Applet;
5) 客戶端Applet用與鑒權服務器同樣的方法派生出pw_key1,并用之解密出ra',然后將ra'減一與用戶名url組合后,加密送至鑒權服務器;(之所以再次送出用戶名和url,是因為處在一個分布式多用戶多進程的環境中,這樣做可以實現多個用戶的多個鑒權請求同步進行)
6) 服務器解密數據,并提取出rb,看是否與ra-1相同,若相同則證明用戶輸入的密碼正確,若不同則鑒權失敗。
5.2 生成票據(Generate Ticket:主要由Authentication Server來完成)
5.2.1 操作步驟
Step I, Build service ticket
Step II, Derive server master key
Kc1 = PBOC(server_master_key, ServerID)
Kc = PBOC(Kc1, session_key)
Step III, encrypt srvice ticket
5.2.2 流程描述
1) 生成票據
其中各屬性意義如下:
Ticket ID:標識一個唯一的service ticket。
Random key:用于數據有效性檢驗。這個key在Kerberos協議中的主要目的是用于CS結構中客戶端和服務器端的加解密,在BS結構中瀏覽器單獨無法進行加解密運算,所以我將這個key改為有效性檢驗的一個隨機數,具體檢驗方法參見利用d_service_ticket訪問服務器。
User information:用戶信息,從目錄服務器中提取,用于給應用服務器作訪問權限控制。
Timestamp:票據申請時間。
Lifespan:票據生命期。
Sequence number:目標應用服務器的序列號,自增一后提取出來。
2) 兩級分散應用服務器主密鑰
由于鑒權服務器和應用服務器之間使用對稱密碼,所以在票據的加密時,使用主密鑰分散技術,密鑰分散使用標準的PBOC分散技術,兩級分散,分散因子分別為session key和server id(或者由server id派生出分散因子)。
3) 加密票據并發送至客戶端applet
與標準Kerberos協議相比,多了ticket id, 目的是為了方便重定向時ticket 的檢索。
5.3 傳輸票據(Transport ticket)
5.3.1 操作步驟:
Step I, AS-->C: d_message
Step II,Decrypt message and store some information in Cookie
C:
message' = DESd(d_message, pw_key');
extract d_service_ticket', ticket_ID' and session_key' from message'
store d_service_ticket' and ticket_ID' in the Cookie whose site name is AS
5.3.2 流程描述
1) 鑒權服務器將d_message發送至客戶端Applet,并將加密的票據與票據編號存儲在Cookie中
2) 客戶端Applet解密票據
5.4 訪問應用服務器(Access application server)
5.4.1 利用 d_service_ticket訪問應用服務器
1) 操作步驟
Step I, Client send d_service_ticket' and session_key' to Server
Step II, Application Server decrypt and extract the service ticket:
Step III, Check the availability of service ticket
if(session_key!=session_key')
illegal access, exit
Step IV, Check the availability of service ticket
Step V, check if the user is a legal user and has the permission
2) 流程描述
客戶端發送密文service ticket 和session key 到應用服務器;
應用服務器分散主密鑰,解密service ticket;
校驗service ticket有效性;
校驗sequence number,預防重傳攻擊;
校驗用戶合法性。
5.4.2 不使用d_service_ticket訪問服務器
(1) 操作步驟
Step I, Application server send redirection request to client
url=\"http://AS?servername=application_server_name
Step II, client send application server name to auchentication server
(2) 流程描述
應用服務器發送重定向請求至客戶端;
客戶端重定向,并將應用服務器名附在url中發送至鑒權服務器;
鑒權服務器從Cookie中提取ticket id 和加密的service ticket,若ticket為合法票據,則清空Cookie,并根據新應用服務器生成新的票據,存于Cookie中,然后附在url后重定向至應用服務器;若不合法,則要求用戶輸入用戶名密碼。
5.5 用戶注銷(logoff)
5.5.1 操作步驟
Step I, Application Server clear related information
Server clear all session information
Server send redirection request to client
url = \"http://AS/logoff
Step II
request logoff
Step III, Authentication Server clear Cookie information
5.5.2 流程描述
1) 應用服務器清除所有本地session狀態及相關信息,并發送注銷重定向請求至客戶端。
2) 客戶端重定向。
3) 鑒權服務器驗證當前ticket,如有效則清除Cookie信息; 如無效則要求登錄或退出。
6 優缺點分析
6.1 優點
本方案設計的用戶單點登錄系統做到統一了單點登錄服務器到應用服務器的用戶認證信息訪問標準,統一了令牌安全加密的傳輸和識別標準,為將來更多應用系統提供了統一的單點登錄框架。主要優點可歸納如下:
1) 使用時間戳和sequence number 共同解決重傳攻擊的問題。
2) 網絡中沒有傳輸用戶密碼,這樣可以防止密碼被惡意捕獲,做到登錄更安全。
3) 密碼校驗中隨機數的使用一定程度上增加了口令猜測攻擊的難度。
4) 相對于Kerberos協議來講,增加了一個約束,即密碼校驗過之后才進行service ticket的生產,這樣做有利于在壓力攻擊時降低鑒權服務器的負擔。
5) 生產加密service ticket時,適用兩級分散密鑰,更安全,更有利于保護主密鑰
6) 增加了對 service ticket的有效性檢驗
7) 由于該系統屬于一個企業,使用時間戳來做安全時間服務是可行的,同時可以一定程度上遏制重傳攻擊
6.2 缺點
這種使用sequence number的做法在一個分布式網絡環境中是有局限性的,因為無法保證訪問請求按照申請票據的順序到達應用服務器,但是在一個通信量和用戶數都不大的企業環境中,訪問時間的間隔較長,保證了這種方法的可行性。由于時間和經驗有限,有些驗證可能存在一些漏洞需要在實踐中更進一步完善。
參考文獻:
[1] RFC 1510 The Kerberos Network Authentication Service (V5)[S]. 1993.
[2] Central Authentication Service v2.0 Protocol Specification[S]. Drew Mazurek, 2005.
[3] 林國恩. Cryptographic Techniques and Systems Security[D]. 清華大學軟件學院,2003.
[4] Simplify enterprise Java authentication with single sign-on.[J]. Faheem Khan IBM, 2003(9).