複製鏈接
請複製以下鏈接發送給好友

Nonce

鎖定
Nonce是Number once的縮寫,在密碼學中Nonce是一個只被使用一次的任意或非重複的隨機數值。
在加密技術中的初始向量加密散列函數都發揮着重要作用,在各類驗證協議的通信應用中確保驗證信息不被重複使用以對抗重放攻擊(Replay Attack)。
外文名
Number used once
縮    寫
Nonce
含    義
被使用一次的非重複的隨機數值
學科範圍
密碼學
領    域
密碼學
相關術語
加密技術

目錄

Nonce簡述

Nonce,Number used once或Number once的縮寫,在密碼學中Nonce是一個只被使用一次的任意或非重複的隨機數值,在加密技術中的初始向量和加密散列函數都發揮着重要作用,在各類驗證協議的通信應用中確保驗證信息不被重複使用以對抗重放攻擊(Replay Attack)。在信息安全中,Nonce是一個在加密通信只能使用一次的數字。在認證協議中,它往往是一個隨機偽隨機數,以避免重放攻擊。Nonce也用於流密碼以確保安全。如果需要使用相同的密鑰加密一個以上的消息,就需要Nonce來確保不同的消息與該密鑰加密的密鑰流不同。

Nonce具體應用

摘要認證中服務器讓客户選一個隨機數(稱作”nonce“),然後瀏覽器使用一個單向的加密函數生成一個消息摘要(message digest),該摘要是關於用户名、密碼、給定的nonce值、HTTP方法,以及所請求的URL。 [1] 

Nonce例子

一個典型的基於 nonce 的驗證協議如下:
這裏的 cnonce 為 client nonce(後面將討論為什麼需要 cnonce)。Client 並不直接發送密碼(或者密碼直接加密後的密文)用以避免攻擊者直接竊取密碼(或者密碼直接加密後的密文)並冒充用户進行身份驗證。
先不考慮 Client nonce。Server 首先發送 nonce 到 Client,Client 將密碼和 nonce 通過 hash 運算再提交到 Server 進行身份驗證,這樣我們可以認為(而非絕對)每次用於身份驗證的 hash 值都不相同,即使攻擊者竊取了前一次用於身份驗證的 hash 值也無法冒充用户進行登錄。公式如下:
A = Hash(nonce, password);
在不安全的網絡環境中,A、nonce、Hash 算法都可以被攻擊者獲取,如果能夠滿足以下條件:
  • nonce 僅僅被使用一次,
  • Hash 運算不出現衝突。
攻擊者則在理論上無法實施 Replay attack。 因此 nonce 在特定上下文中僅僅被使用一次以及 Hash 算法儘量避免衝突是安全的關鍵。為了確保 nonce 在特定上下文中僅僅被使用一次,可以使用以下策略生成 nonce:
  • nonce 可以是一個時間相關變量,
  • nonce 可以是一個通過足夠隨機算法生成的足夠長的 bits。
以上算法難以避免攻擊者使用字典進行密碼破解。其中一個可行的方法為:攻擊者可以截取A = Hash(nonce, password) 中的 A、nonce,然後通過字典破解用户的密碼 password。不過破解的過程是很耗時的,使用一箇中等規模的集羣(medium-scale cluster)可能需要數週),如果期望破解成千上萬用户的密碼,那麼將消耗極大量的時間。
如果攻擊者能夠構建一個預計算的表(例如Rainbow tables)那麼破解大量用户密碼的時間將大大縮短。nonce 阻止了預計算表的生成(因為 Server nonce 每次都不相同),但是如果網絡中傳輸的數據能被篡改,情況就不一樣了。假定攻擊者偽造一個固定的 nonce 發送給網絡中的 Clients 並且記錄 nonce 和 Clients 的迴應(Hash(nonce, password)),由於 nonce 為一個固定值,那麼攻擊者就可以構造一個預計算的表,此表使用此固定的 nonce。通過此表即可大大縮短破解用户密碼的時間了。
為了避免攻擊者通過以上手段構建預計算的表。在 Client 也引入了一個 nonce。這樣,每次都不同的 cnonce 防止了預計算表的生成。
參考資料
  • 1.    Xiao Y, Sethi S, Chen H H, et al. Security services and enhancements in the IEEE 802.15. 4 wireless sensor networks[C]//Global Telecommunications Conference, 2005. GLOBECOM'05. IEEE. IEEE, 2005, 3: 5 pp.