本備忘錄的狀態
本文檔講述了一種Internet社區的Internet標準跟蹤協議,它需要進一步進行討論和建議以得到改進。請參考最新版的“Internet正式協議標準” (STD1)來獲得本協議的標準化程度和狀態。本備忘錄的發布不受任何限制。
版權聲明
Copyright (C) The Internet Society (2001).
摘要
本文檔描述了一個用密碼來加強的網絡鑒別機制,即我們所知的安全遠程口令(SRP)的協議,這種機制適合于如下情況,即需要用戶提供口令來協商安全的連接,同時須消除在傳統中因重新使用口令而帶來的安全問題。這個系統同時能在鑒別過程中提供一個安全的秘鑰交換,并可在會話時使用安全的訪問層(秘密性和/或者完整性保護)。它不需要可信的秘鑰服務器和證書基礎結構,同時客戶也不需要儲存和治理任何長的秘鑰。SRP同時提供了在安全和部署等方面,比現有的查問/應答技術要好的優勢。另外,它還是一個,在需要安全口令鑒別的地方可被使用的理想的替代方案。
1.簡介
缺乏一個安全的并且易于使用的鑒別機制,對于正在使用的絕大多數的Internet協議來說,是一個長期的固有的問題。問題就在于這兩點缺陷:用戶喜歡使用他們輕易記住的口令,但是大多數基于口令的鑒別系統只提供很少的保護,甚至對于被動攻擊者,尤其是假如一個弱的和易于猜測的口令被使用的話。對于使用明顯的方式來傳輸口令的協議,要在一個TCP/ip網絡上實施竊聽,非常輕易和有效。甚至對所謂的“查問/應答”技術,如在[RFC2095]和[RFC1760]中描述的被設計用來防范簡單的竊聽攻擊,也可以被聞名的“字典攻擊”所攻破。這種攻擊就是,攻擊者在協議合法運行時,捕捉交互的消息,并利用這些信息驗證從一個預編譯好的口令字典中提取的一系列的口令。這之所以有效,就是因為用戶經常選擇簡單的、易于記憶的口令,導致其總是被輕易的猜中。
現存的多數機制都需要主機中的口令數據庫保持秘密狀態,因為口令P或者某些秘密的散列值h(P)被保存在其中,假如被泄漏的話就會危及安全。這種方法經常退化為“模糊的安全”。這種方法反對在UNIX傳統中保存一個“公共”口令文件,這個文件的內容會在不破壞系統安全的情況下被泄漏。
對于一個不能泄漏的鑒別協議來說,SRP滿足了嚴格的,并在[RFC1704]中被定義的需求。它提供了全面的保護,來防范被動和主動的攻擊者,并使用了一個類似于Diffie-Hellman樣式的單輪計算來有效的實現,使它對于大多數的Internet協議,都可以在交互或者非交互的鑒別中使用。既然它能在帶有低熵的口令的情況下使用的同時,保持其安全性,它就可以被無縫集成在現有的用戶應用中。
2.約定和術語
這個文檔中所描述的協議,由于一些歷史原因,某些時候是指“SRP-3”。這個特定的協議在[SRP]中描述,被認為有非常好的合理性和加密性,能同時反抗竊聽和主動的攻擊。
這個文檔不會試圖在特定的Internet協議的上下文中描述SRP。相反,它只是描述一個抽象的協議,其可以輕易的適應于特定的應用。比如,特定的消息格式(包括填充)不會具體說明。這些問題留給協議實現者去決定。
這里,一個需要值得具體說明的有關實現的問題,是關于字符串和整數之間的映射。Internet協議是面向字節的,但是SRP在它的消息中要執行代數操作。因此,要合乎邏輯的話,至少要定義一種方法,它能把整數轉換成一個字節串,或者相反。
一個n字節的字符串S可以用如下方法轉換成一個整數。
i = S[n-1] + 256 * S[n-2] + 256^2 * S[n-3] + ... + 256^(n-1) * S[0]
這里i是一個整數,S[x]是S的第x個字節的值。在人們的術語中,由字節組成的字符串是以256為基來表示的整數,并且是最高有效位優先。當轉換成為一個字符串時,S[0]必須是一個非零值(填充考慮作為一個分離的,獨立的過程)。這種轉換方法適合于文件存儲、內存內部表示和大整數值的網絡傳輸中。除非另外的說明,就將假設為這種映射。
假如實現需要填充一個代表整數值的字符串,建議用值為零的字節加到字符串的開頭。反過來,將其轉換為整數將自動丟棄前導為零的字節,這種填充模式傾向于產生更少的錯誤。
在這個文檔中使用的SHA散列函數,指的是在[SHA1]中描述的SHA-1消息摘要算法
3.SRP-SHA1機制
這一節描述一個SRP鑒別和秘鑰交換系統的實現,它使用了SHA散列函數來產生會話密鑰和鑒別證實。
主機用三元組的形式保存用戶的口令
{
口令實體由如下方法來產生:
x = SHA(
“”符號代表字符串連接,^操作符代表求冪運算,%操作符代表整數求余運算。大多數的實現在一個單獨的階段執行求冪和求余運算,以避免產生難以處理的中間結果。注重,SHA的160位的輸出在被操作前要被明確轉換成一個整數。
鑒別通常由客戶端發起。
Client Host
-------- ------
U =
<-- s =
在給主機鑒定它自身的時候,客戶會收到保存在主機中,并且在它的用戶名下的salt。
a = random()
A = g^a % N -->
v =
b = random()
<-- B = (v + g^b) % N
p =
x = SHA(s SHA(U ":" p))
S = (B - g^x) ^ (a + u * x) % N S = (A * v^u) ^ b % N
K = SHA_Interleave(S) K = SHA_Interleave(S)
(這個函數會在下節中描述)
客戶端產生一個隨機數,生成以g為底的冪,再以一個素數為模取余,把結果發送給主機。主機做同樣的事情,但要加上公共驗證符,然后發給客戶端。這樣,兩端就共享了基于各自因子的會話密鑰。
參數u是一個32位的無符號整數,它的值來自于B的SHA1散列的第一個32位,這里最高有效位優先。
假如B % N結果為零,客戶端必須中斷鑒別過程。
假如B % N結果為零,主機必須中斷鑒別企圖。主機必須在從客戶端收到A之后,發送B,千萬不要在這之前。
在這一點上,客戶端和服務器端將有一個安全的公用會話密鑰(比如不會被外界的一方知道)。為了完成鑒別,他們必須互相證實他們的密鑰是同樣的。
M = H(H(N) XOR H(g) H(U) s A B K)
-->
<-- H(A M K)
服務器端用它自己的K計算M并且和客戶端的回應進行比較。假如它們不匹配,在它嘗試回答客戶端的查問前,服務器必須中斷并發出一個錯誤信號。這樣任何事情都不會危及用戶密碼的安全性。
假如服務器收到正確的響應,它就發出自己的證實給客戶端。客戶端用它自己的K計算預期的響應,來驗證服務器的真實性。假如客戶端響應正確,服務器必須用它自己的散列值作為響應。
在這個協議的描述中,處理過程不必和實際的協議消息一對一的對應。這里的描述僅僅是為了闡明不同參數的關系和它們如何計算。比如,有可能一個SRP-SHA1機制的實現,可以加固某些流程,如下所示:
Client Host
-------- ------
U, A -->
<-- s, B
H(H(N) XOR H(g) H(U) s A B K)
-->
<-- H(A M K)
在這個協議的使用中,N和g的值必須由雙方討論來達成一致。它們可以被提前設置好,或者主機把它們發送給客戶端。在后一種方式中,主機將在第一個消息中連帶salt把參數發送出去。為了最大化安全性,N可以是一個安全的素數(也就是,一個類似于N=2q + 1形式的數,同時q是個素數)。而且,g將是一個以N為模的生成元,意味著,對任何X,有0 < X < N,存在一個值x,使得g^x % N == X。
3.1交叉存取的SHA
在SRP-SHA1中使用的SHA_Interleave函數,用來產生一個會話密鑰,它的長度是SHA1的160位的輸出的兩倍長。為了執行這個函數,需要移去輸入值的前導是零的字節。假如字符串的結果長度是奇數,也要移去第一個字節。我們稱結果的字符串為T。提取T的偶數位的字節到字符串E,奇數位的字節到F,即:
E = T[0] T[2] T[4] ...
F = T[1] T[3] T[5] ...
E和F都嚴格為T的長度的一半。用標準的SHA1對它們分別散列,即:
G = SHA(E)
H = SHA(F)
兩個散列交叉連接在一起,組成輸出,即:
result = G[0] H[0] G[1] H[1] ... G[19] H[19]
結果將有40字節(320位)長。
3.2其它的散列算法
SRP可以不使用SHA而使用其它的散列函數。假如散列函數產生輸出的長度不同于SHA(20字節),它可能改變協議中的某些消息的長度,但是基本的操作將不受影響。
早期版本的SRP機制使用md5散列函數,其在[RFC1321]中描述。鍵入式散列變換也可以在SRP中使用。一種可能的結構是使用HMAC [RFC2104],即用K去鍵入散列的每個方向,而不是使K和其它的參數連接起來。
任何同SRP使用的散列函數應該至少產生16字節的輸出,并且應具有這樣的屬性,即輸入的微小變化會引起輸出的重大的非線性的改變。[SRP]進一步的討論了這個問題。
4.安全事宜
整個備忘錄就討論了一個鑒別和密鑰交換系統,它用來在不可靠的網絡中保護口令和交換密鑰。這個系統,通過消除了在網絡上發送明文口令的需要,并且通過安全的密鑰交換機制來使用加密,改進了安全性。
a和b的密值大約和在Diffie-Hellman 交換中的密值相一致,并且在長度和熵上有著相似的約束。實現上可以選擇增加參數u的長度,只要客戶端和服務器達成一致就行,但并不建議使用短于32位的參數。
SRP被設計用來,不僅可以反抗偶然的密碼竊聽,也可以防范頑固的攻擊者,通過捕捉網絡的數據流,并使用一個口令字典來猜測口令。SRP協議本身也能反抗主動的網絡攻擊,并且實現中,可以使用安全的交換密鑰來保護會話被劫取,同時提供機密性。
SRP也增加了如下的優勢,即答應主機,用一種對攻擊者來說并不直接有用的形式,來保存口令。甚至于假如主機的口令數據庫被公之于眾,攻擊者仍然需要一個龐大的字典去搜索來獲得口令。在這種情況下,要驗證一次猜測,所需要的指數級的計算,比現在大多數UNIX系統使用的散列函數,要耗費更多的時間。盡管如此,建議主機仍然應該盡力來保持它們的口令文件的安全性。
5.參考
[RFC1321]Rivest, R., "The MD5 Message-Digest Algorithm", RFC1321, APRil 1992.
[RFC1704]Haller, N. and R. Atkinson, "On Internet Authentication", RFC1704, October 1994.
[RFC1760]Haller, N., "The S/Key One-Time PassWord System", RFC1760, Feburary 1995.
[RFC2095]Klensin, J., Catoe, R. and P. Krumviede, "IMAP/POP AUTHorize Extension for Simple Challenge/Response", RFC2095, January 1997.
[RFC2104]Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed-Hashing for Message Authentication", RFC2104, February 1997.
[SHA1]National Institute of Standards and Technology (NIST), "Announcing the Secure Hash Standard", FIPS 180-1, U.S. Department of Commerce, April 1995.
[SRP]T. Wu, "The Secure Remote Password Protocol", In Proceedings of the 1998 Internet Society Symposium on Network and Distributed Systems Security, San Diego, CA, pp. 97-111.
6.作者的聯系地址
Thomas Wu
Stanford University
Stanford, CA 94305
EMail: tjw@cs.Stanford.EDU
7.版權聲明
Copyright (C) The Internet Society (2000)。版權所有。
本文檔及其譯文可以拷貝和提供給他人,且其衍生物,如評論、解釋或幫助實施的作品可以全部或部分地定制、拷貝、出版和發布,對此我們不加任何限制,前提是上述版權聲明,及本段內容包含在所有的拷貝和派生作品中。然而,本文檔本身不答應以任何方式修改,例如刪除Internet社團或其他Internet組織的版權聲明或參考,除非是為了開發Internet標準的需要。即便在這種情況下,也需要添加Internet標準中定義的版權聲明,或者根據需要把他翻譯成英語以外的其他語言。
上述準許的有限許可是永久性的, 無論是Internet社團以及其繼續者或代理者都將不會廢止這些許可。
本文檔及其中包含的信息基于“AS IS”提供,而且INTERNET社團和IETF拒絕所有授權、表達或影射,包括但不限于任何這里使用的消息的授權將不會違反任何版權或者隱含的商業性授權或對特定的合理目的。
致謝
目前,RFC編者活動的基金由Internet社團提供。
新聞熱點
疑難解答