3.7.2 Needham-Schroeder協(xié)議
很多事情都可能出錯,這里給出安全協(xié)議歷史上一個著名的實例。很多現(xiàn)有的密鑰分發(fā)協(xié)議都源自1978年的Needham-Schroeder協(xié)議[960]。這個協(xié)議和上面提到的有些類似,但是使用的是Nonce,而不是時間戳。該協(xié)議運行過程如下:
消息1 A→S: A,B,NA
消息2 S→A: {NA,B,KAB,{KAB,A}}
消息3 A→B: {KAB,A}
消息4 B→A: {NB}
消息5 A→B: {NB-1}
這里,Alice發(fā)起請求,并向Sam聲稱:“我是Alice,我想和Bob通話,我的隨機Nonce是NA?!弊鳛閼?yīng)答,Sam給她提供一個會話密鑰,該會話密鑰用他和Alice共享的密鑰進行加密。密文中也包括Alice的Nonce,因此她可以確定這不是一次重放。Sam還給她一個證書讓她把密鑰轉(zhuǎn)給Bob。Alice把證書發(fā)給Bob,之后Bob進行一次“質(zhì)詢-應(yīng)答”,以便確認(rèn)Alice在場而且是就緒的。
這個協(xié)議有一個小問題:Bob必須假定他從Sam(經(jīng)由Alice)那里收到的KAB是新鮮的,實際上可能并非如此——?Alice在第2和第3步之間可能等待了一年。在很多應(yīng)用中,這個問題并不重要,甚至還可以幫助Alice緩存密鑰,以預(yù)防服務(wù)器發(fā)生失敗的情況。但是如果對手,比如Charlie獲取了Alice的密鑰KAS,他就可以使用這個密鑰和其他很多主體建立會話密鑰。
比如,假設(shè)Alice也申請并收到了和Dave進行通信的密鑰,Charlie偷竊她的密鑰以后,就可以假冒Alice向Sam發(fā)送消息,并獲得與Freddie和Ginger進行通信的密鑰。他還有可能觀察到Alice和Dave通過協(xié)議交換的消息2。因此,現(xiàn)在Charlie可以冒充Alice與Dave、Freddie和Ginger進行通信。當(dāng)Alice發(fā)覺其密鑰被偷竊(或許是通過和Dave比較消息記錄發(fā)現(xiàn)的),她就必須讓Sam和每個她曾發(fā)放過密鑰的人取得聯(lián)系,并通知他們原來的密鑰失效了。她本人無法做到這一點,因為她對Freddie和Ginger一無所知。換句話說,撤消權(quán)限是一個問題:Sam可能必須保留自己所做操作的全部日志,這些日志一直都在增長,除非主體的名字在將來某個固定的時間過期。
大概30多年以后,這個實例仍在安全協(xié)議領(lǐng)域引發(fā)爭議。簡化的觀點是認(rèn)為Needham和Schroeder做錯了,Susan Pancho和Dieter Gollmann爭論的觀點(我比較傾向于這個觀點)則認(rèn)為,這又是一個改變假設(shè)而導(dǎo)致協(xié)議失敗的實例[538、1002]。1978年時,計算機與通信網(wǎng)絡(luò)還是一個文溫爾雅的世界,當(dāng)時的計算機安全是假定攻擊者在系統(tǒng)之外,而現(xiàn)在必須把壞人假想為系統(tǒng)的用戶。Needham-Schroeder的論文顯式地假定所有主體都扮演自己的角色,攻擊者都來自于外界[960]——?在這種假設(shè)下,當(dāng)時的協(xié)議設(shè)計是合理的。