Authentication
如何從“密碼學:介紹”中攻擊此身份驗證協議
考慮以下協議(來自 Nigel Smart 的“密碼學:介紹”一書):
A → B: A, Na B → S: B, {A, Na, Tb}Kbs, Nb S → A: {B, Na, Kab, Tb}Kas, {A, Kab, Tb}Kbs, Nb A → B: {A, Kab, Tb}Kbs, {Nb}Kab
其中較小的字母是後綴,因此範例
Kab
表示 A 和 B 共享的密鑰。Tb
表示消息的時間戳並Nb
表示隨機數。我的問題是:如果外部攻擊者同時冒充 A 和 S,攻擊者如何設法誘騙 B 相信 A 已通過身份驗證?有人告訴我,我應該能夠在 3 條消息中描述如何做到這一點(省略協議中的一條消息)。
我嘗試的解決方案是:如果模擬了 A 和 S,那麼當 B 向 S 發送消息時,外部攻擊者將知道正在發送什麼,因此攻擊者可以正常將消息轉發給 A,但可能會破壞消息。我無法編寫協議,因為它有點令人困惑。
另請參閱此身份驗證協議實現什麼以及共享哪些資訊?有關同一協議的相關問題。
如果攻擊者 M 同時冒充 A 和 S,那麼他顯然不必費心將協議中的第三條消息發送給自己。因此,協議簡化為:
M(A) → B: A, Na B → M(S): B, {A, Na, Tb}Kbs, Nb M(A) → B: {A, Kab, Tb}Kbs, {Nb}Kab
其中 M(A) 和 M(S) 分別表示 M 冒充 A 和 S。
就其本身而言,這不是一次成功的攻擊:雖然 M 可以選擇任何
Kab
他想要的有效值,但他通常無法獲得相應的密文{A, Kab, Tb}Kbs
發送給 B。但是,如果 和 的格式Kab
兼容Na
,則 M 可以選擇Kab
等於Na
,並且如果 B 不檢查這種可能性,那麼 M 可以簡單地重放{A, Na, Tb}Kbs
他在第二步從 B 收到的密文,從而導致攻擊:M(A) → B: A, Na=Kab B → M(S): B, {A, Na=Kab, Tb}Kbs, Nb M(A) → B: {A, Na=Kab, Tb}Kbs, {Nb}Na=Kab
如果花括號表示的加密方案具有延展性,則可能存在其他攻擊方法,但即使不是,上述攻擊也會起作用。