Authentication
SCRAM 和 PAKE (OPAQUE) 用於簡單身份驗證的實際區別是什麼?
據我所知,從閱讀SCRAM和 OPAQUE 可以看出,維基百科將它們都歸為挑戰-響應身份驗證類別。
我很清楚 SCRAM 有一個 IETF RFC,而 OPAQUE 只有一個草稿。
但是,它們之間有哪些實際區別?例如,兩者都適用於 SASL 機制嗎?他們每個人都向對方洩露了什麼?他們的優勢和劣勢是什麼?
SCRAM 的目標是確定兩個端點是否共享一個共同的秘密。SCRAM 通過讓雙方比較/交換來實現這一點 $ \textrm{HMAC}(s,i) $ 在哪裡 $ s $ 是秘密和 $ i $ 是一個計數器/隨機數。它的意義遠不止於此,但這是主要本質。如果 $ s $ 是一個高熵密碼秘密,那麼這很好:看到一些 HMAC 輸出並不能幫助竊聽者/冒名頂替者猜測其他 HMAC 輸出。
但是如果共享密鑰像密碼一樣是低熵的,我會說 SCRAM 本身是不合適的。SCRAM 互動的協議記錄為竊聽者提供了足夠的資訊來離線測試他們的猜測是否 $ s $ 是正確的。所以 SCRAM 容易受到離線字典攻擊。我的理解是,通常 SCRAM 在一些加密隧道內執行,以防止外部竊聽者。但是,如果我是那個加密隧道的被動中間人(這似乎是合理的,因為如果我們已經對端點進行了身份驗證,就不需要 SCRAM!),我將從 SCRAM 記錄中學到足夠的知識來允許離線字典攻擊。
SCRAM 只進行身份驗證,但 OPAQUE 是一個成熟的 PAKE,它提供了更多功能:
- **密鑰協議:**端點在竊聽者存在的情況下建立密鑰,如果它們的秘密匹配。請注意,SCRAM 使用散列函式(在 HMAC 中)作為其唯一的密碼。眾所周知,僅通過散列函式不可能實現安全密鑰協議。這一事實證明了為什麼 PAKE 更昂貴/使用公鑰加密技術。
- 專為低熵秘密設計: PAKE 必須抵抗對共享秘密的離線字典攻擊。攻擊者可以測試猜測的唯一方法 $ s $ 是與其中一方互動執行 PAKE(線上字典攻擊)。