HTTP摘要認證

摘要訪問認證是一種協議規定的Web伺服器用來同網頁瀏覽器進行認證資訊協商的方法。它在密碼發出前，先對其應用雜湊函式，這相對於HTTP基本認證傳送明文而言，更安全。從技術上講，摘要認證是使用隨機數來阻止進行密碼分析的MD5加密雜湊函式應用。它使用HTTP協議。概述.摘要訪問認證最初由 RFC 2069 ("HTTP的一個擴充套件：摘要訪問認證")中被定義。RFC 2069 大致定義了一個傳統的由伺服器生成隨機數來維護安全性的摘要認證架構。認證響應由下列組成：formula_1formula_2formula_3RFC 2069 隨後被 RFC 2617 ("HTTP 認證：基本及摘要訪問認證")取代。RFC 2617 引入了一系列安全增強的選項；“保護質量”(qop)、隨機數計數器由客戶端增加、以及客戶生成的隨機數。這些增強為了防止如選擇明文攻擊的密碼分析。formula_1如果 qop 值為“auth”或未指定，那麼 HA2 為formula_2如果 qop 值為“auth-int”，那麼 HA2 為formula_6如果 qop 值為“auth”或“auth-int”，那麼如下計算 response：formula_7如果 qop 未指定，那麼如下計算 response：formula_3上面所述的這種當 qop 未指定的情況，也就是遵循簡化的 RFC 2069 標準。MD5 安全問題對摘要認證的影響.在 HTTP 摘要認證中使用 MD5 加密是為了達成"不可逆的"，也就是說，當輸出已知的時候，確定原始的輸入應該是相當困難的。如果密碼本身太過簡單，也許可以透過嘗試所有可能的輸入來找到對應的輸出，甚至可以透過字典或者適當的查詢表加快查詢速度。HTTP 構架由Phillip Hallam-Baker於1993年在CERN設計成的，並且沒有吸收後續認證系統的改進，如基於金鑰的雜湊訊息驗證碼HMAC的發展。雖然所使用的密碼結構是基於MD5雜湊函式的，在2004年，通常認為衝突攻擊不會影響明文未被得知的應用。#重定向但是，在2006年的宣告 (Kim, Biryukov2, Preneel, Hong, "On the Security of HMAC and NMAC Based on HAVAL MD4 MD5 SHA-0 and SHA-1") 導致了一些包括關於 MD5 應用的疑慮。不過，至今為止，MD5 衝突攻擊沒有被視為對摘要認證的威脅，並且 RFC 2617 允許伺服器實現一些機制來檢測衝突以及重放攻擊。HTTP摘要認證的考慮.優勢.HTTP摘要認證目的在於比傳統摘要認證構架更安全；例如，“明顯強於一些HTTP摘要認證的安全性增強如下：劣勢.摘要訪問認證有意成為一個安全性的折衷。它意圖代替非加密的HTTP基本認證。但是，它沒有被設計為替換強認證協議，例如公鑰密碼學或Kerberos認證。在安全性方面，摘要訪問認證有幾個缺點：可替代的認證協議.一些可以用於Web應用程式的強認證協議包括：常用的弱明文協議：使用HTTPS網路加密同時使用這些弱明文協議解決了許多摘要訪問認證試圖要防止的許多威脅。示例及說明.下面的例子出自 RFC 2617，在這裡進行了擴充套件，對每一個請求和響應顯示出完整的文字。注意，這裡僅僅涵蓋了“auth”保護質量的程式碼，因為在撰寫期間，所知道的只有Opera和Konqueror網頁瀏覽器支援“auth-int”。雖然定義中提到了HTTP 1.1，但是該構架可以像下面所描述的這樣新增到1.0的伺服器中去。典型的認證過程包括如下步驟。注意：客戶端可能已經擁有了使用者名稱和密碼，因此不需要提示使用者，比如以前儲存在瀏覽器裡的。GET /dir/index.html HTTP/1.0Host: localhost(跟隨一個新行，形式為一個回車再跟一個換行）HTTP/1.0 401 UnauthorizedServer: HTTPd/0.9Date: Sun, 10 Apr 2005 20:26:47 GMTWWW-Authenticate: Digest realm="testrealm@host.com",qop="auth,auth-int",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171e9517f40e41"Content-Type: text/htmlContent-Length: 311GET /dir/index.html HTTP/1.0Host: localhostAuthorization: Digest username="Mufasa",realm="testrealm@host.com",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="/dir/index.html",qop=auth,nc=00000001,cnonce="0a4f113b",response="6629fae49393a05397450978507c4ef1",opaque="5ccc069c403ebaf9f0171e9517f40e41"(跟隨一個新行，形式如前所述).HTTP/1.0 200 OKServer: HTTPd/0.9Date: Sun, 10 Apr 2005 20:27:03 GMTContent-Type: text/htmlContent-Length: 7984(隨後是一個空行，然後是所請求受限制的HTML頁面).如下所述，response 值由三步計算而成。當多個數值合併的時候，使用冒號作為分割符。因為伺服器擁有與客戶端同樣的資訊，因此伺服器可以進行同樣的計算，以驗證客戶端提交的 response 值的正確性。在上面給出的例子中，結果是如下計算的。完成 RFC 2617 中所給出的示例，將在每步得出如下結果。HA1 = MD5( "Mufasa:testrealm@host.com:Circle Of Life" )= 939e7578ed9e3c518a452acee763bce9HA2 = MD5( "GET:/dir/index.html" )= 39aff3a2bab6126f332b942af96d3366Response = MD5( "939e7578ed9e3c518a452acee763bce9:\dcd98b7102dd2f0e8b11d0f600bfb0c093:\00000001:0a4f113b:auth:\39aff3a2bab6126f332b942af96d3366" )= 6629fae49393a05397450978507c4ef1此時客戶端可以提交一個新的請求，重複使用伺服器密碼隨機數(nonce)，但是提供新的客戶端密碼隨機數(cnonce)。在後續的請求中，十六進位制請求計數器(nc)必須比前一次使用的時候要大，否則攻擊者可以簡單的使用同樣的認證資訊重放老的請求。由伺服器來確保在每個發出的密碼隨機數nonce時，計數器是在增加的，並拒絕掉任何錯誤的請求。顯然，改變HTTP方法和/或計數器數值都會導致不同的 response 值。伺服器應當記住最近所生成的伺服器密碼隨機數nonce的值。也可以在發行每一個密碼隨機數nonce後，記住過一段時間讓它們過期。如果客戶端使用了一個過期的值，伺服器應該響應“401”狀態號，並且在認證頭中新增codice_4，表明客戶端應當使用新提供的伺服器密碼隨機數nonce重發請求，而不必提示使用者其它使用者名稱和口令。伺服器不需要儲存任何過期的密碼隨機數，它可以簡單的認為所有不認識的數值都是過期的。伺服器也可以只允許每一個伺服器密碼隨機數nonce使用一次，當然，這樣就會迫使客戶端在傳送每個請求的時候重複認證過程。需要注意的是，在生成後立刻過期伺服器密碼隨機數nonce是不行的，因為客戶端將沒有任何機會來使用這個nonce。SIP 摘要認證.SIP基本上使用了同樣的摘要認證演算法。它由 RFC 3261 定義。瀏覽器實現.大多數瀏覽器都基本上實現了該協議，除了某些特性，比如檢查auth-int、或者MD5-sess演算法。如果伺服器要求處理這類可選特性，客戶端可能無法進行認證。