是否存在僅使用“標準”加密原語的類似 SRP 的密鑰交換?
我正在研究 PAKE(密碼驗證密鑰交換),看起來 SRP(安全遠端密碼)本質上是事實上的標準。
然而,實現 SRP 實際上需要進行模運算,並且類似於實現 Diffie-Hellman。也就是說,您必須擁有恆定時間求冪算法、快速的 bignum 庫,並且其中任何一個都出現了微妙的錯誤,您可能會遇到可怕的邊通道攻擊。
與 AES 或 Curve25519 等算法不同,包含 SRP 原語的加密庫並不多,因此“滾動你自己的”通常是不可避免的。
是否有任何 PAKE 不是使用像 SRP 這樣的“自定義”數學,而是簡單地根據更標準的原語實現,例如“任何安全的加密雜湊”、“任何安全的 Diffie-Hellman 式交換”、“任何安全的簽名方案” “?更明顯的是它是安全的——SRP 乍一看並不明顯安全,除非你真的遵循離散日誌問題的簡化——而且如果你有原語的安全實現,安全實現會容易得多。
例如,我可以想到一個弱 PAKE,您只需進行 Diffie-Hellman 密鑰交換,但雙方都將 MAC 附加到從密碼派生的臨時公鑰上。如果密碼很強大,這顯然是安全的,但與 SRP 不同,攻擊者可以獲得足夠的資訊以進行離線暴力攻擊,並且伺服器必須以明文形式儲存密碼。
我正在尋找是否有強度類似於 SRP 的 PAKE 與上述弱方案一樣容易直覺地理解和實現其他原語。
加密社區中出現的第一個密碼驗證密鑰交換協議是Bellovin-Merritt 方案(另見本調查第 4 頁)。該協議非常簡單,實際上可能適合您的需要:is 正是 Diffie-Hellman 密鑰交換,其中流使用分組密碼(使用公共密碼作為密碼的密鑰)進行加密,其中的秘密玩家同意的密鑰是通過散列 Diffie-Hellman 元組得出的。該協議的安全性在各種模型(理想密碼模型或隨機預言模型,基於不可區分性的框架或基於仿真的框架……)中進行了多次分析。儘管它在普通模型中沒有安全性證明,但您可能會對在隨機預言模型中被證明安全的協議感到滿意。
在這種情況下,該方案似乎完全符合您的要求:您需要“任何 Diffie-Hellman 密鑰交換”,以及“任何(好的)散列函式”和“任何塊密碼”,允許您使用密碼加密流. 本文介紹了可能使其更簡單的 Bellovin-Merritt 方案的變體(它們基本上用簡單的一次性密碼替換分組密碼,並且有兩種變體,一種是非並發安全的,一種是並發安全的)。
編輯:所以,在與 Ricky Demer 討論之後,這還不太奏效。這樣做的一個必要條件是 DHKE 生成的消息——它們是組元素——應該與隨機位串無法區分。對於 DHKE 結束 $ \mathbb{Z}^*_p $ 對於一些大素數 $ p, $ 組元素可以自然地映射到與位串在統計上無法區分的分佈,並且現有實現可能已經將這些消息編碼為看起來隨機的位串(但這必須進行檢查)。對於橢圓曲線等更稀疏的組,我相信可以做這樣的映射,但是從實現的角度來看會比較麻煩。我感謝 Ricky Demer 指出這一點。
本文中介紹的變體不使用分組密碼,當編碼元素看起來不是隨機時,會引起字典攻擊,而是使用一種乘法一次性填充:Alice 掩蓋了她的流程 $ g^x $ 乘以 $ M^{\mathsf{pw}} $ , 在哪裡 $ M $ 是一個群元素並且 $ \mathsf{pw} $ 是密碼(鮑勃的玩法類似)。在這裡,您不必關心組元素是如何表示的;但是,您必須執行取冪(使用小指數)和乘法,因此它不會對 DHKE 密鑰交換進行黑盒使用。
編輯:
所以,我今天和我的博士生導師進行了討論,他恰好是 PAKE 領域很多論文的作者(尤其是我提到的這篇論文)。它證實了我開始的想法:用黑盒訪問 DH 密鑰交換和對稱原語來建構 PAKE 似乎並不可行。不知何故,您必須至少能夠將兩個組元素相乘(因此您必須知道它們的結構)。當然,我無法證明它是不可行的,但這在科學界目前是未知的,並且不被認為是可行的。