
S/KEY認證協議由貝爾通信研究所提出,並在RFC1760文檔中定義,專用於處理重放攻擊問題。
在由認證方初始化的過程中,被認證方與服務器均得用一樣的口令和一個選代次數配置。疊代次數是為了指出對挑戰實施摘要運算的次數。
S/KEY認證過程如下。
(1)當要身份驗證時,被認證方利用發送一個初始化包開始S/KEY交換,服務器用一個選代次數與種子來響應。
(2)被認證方計算一次性口令,把在服務器得到的種子與用戶輸入的口令連接起來,用單向Hash函數(MD4或MD5)反覆計算Seq次,把得到的數字摘要當做一次性口令傳到服務器端。
(3)服務器端保存有一個文件,含了每個用戶上一次登錄時的一次性口令。為驗證本次認證請求,服務器把接收的一次性口令繼續操作一次安全Hash運算,並與保存的文件內容進行比較。如果匹配那麼認證成功,並拿接收的一次性口令更新,文件的內容,以備後面認證用。同時,將Seq減1。
(4)因Seq由認證次數的增加不斷減少,一定會有重新初始化的問題。用戶可在初始化時重新指定口令、選代次數與種子。
S/KEY的優點如下。
(1)口令不僅不保存在被認證方的機器上,還不存儲在服務器端,技術上不存在泄露問題。
(2)每次傳輸的內容均不一樣,有效避免了重放攻擊。
(3)算法公開,任何人都能使用。
(4)若無一次性口令發生器,可先保存一系列陆续在的一次性口令列表,在通信時用,但不可暴露當前用到哪個一次性口令。
因種子與疊代次數都以明文進行傳輸,這為黑客留下了漏洞。像黑客可用小數攻擊取得一系列口令假冒合法用戶,也就是當被認證方對服務器請求認證的時候,把疊代次數改為較小的值再傳給被認證方,同時再截獲被認證方計算得到的一次性口令,之後用已知的安全Hash運算按順序計算較大疊代次數的一次性口令,逐次嘗試服務器,直至認證顺利获得為止。此外,顺利获得該系統實施身份認證,被認證方得多次Hash運算,服務器要記錄每次登錄的口令,且每隔段時間還要重新初始化系統,認證過程的運算量與額外花銷較大。
