3.7.4 可行的密鑰管理
我們可以使用類似于Kerberos的協議來建立與管理用戶之間實際工作的密鑰,這要求每個用戶與充當密鑰分發(fā)中心的服務器之間共享一個或多個長期密鑰。本書后面將描述大量其他類似協議,比如第10章將討論銀行如何與其每臺ATM以及與其連接的每個銀行內網絡建立長期共享密鑰,之后,銀行會使用與Kerberos不太相同的協議與其每臺ATM以及網絡交換機建立一個日密鑰,因此,當你在屬于其他銀行的ATM上進行操作并試圖通過Cirrus網絡取錢時,ATM將使用其與所屬銀行共享的工作密鑰對交易數據進行加密,之后,銀行將使用該網絡的日密鑰進行加密的交易數據傳遞給Cirrus網絡。
到現在似乎一切都不錯,但只要稍稍考慮一下就會發(fā)現,如果按上面的方式實現,銀行就必須為其所擁有的數百臺ATM取款機分別維護不同的密鑰——?一個長期的主密鑰,可能還需要一個加密密鑰與一個身份驗證密鑰,銀行網絡的每個子網絡都需要一些密鑰。數百萬電子銀行客戶使用的密碼與安全信息,如果這些客戶所在計算機上安裝了使用密碼學機制的客戶端,也需要為其提供相應密鑰。此外,還需要為數千個員工提供加密的密碼,形式上也可能是使用用戶密碼加密的Kerberos密鑰。面對如此之多的密鑰原料,如何進行管理?
密鑰管理是一個復雜而困難的問題,并且經常出錯,因為這通常不是要考慮的首要問題。一個負責任的工程師會認真思考需要多少個密鑰、如何生成這些密鑰、密鑰需要存活多久以及最終如何銷毀密鑰。還有更多需要考慮的問題,Federal Information Processing Standard for key management[948]中列出了大多數這類問題。此外,由于應用程序的不斷演化,會導致出現新的問題,所以提供額外密鑰以支持未來的功能是重要的,這樣就不會因為在不兼容的協議中重用而導致現有功能損壞。為從安全失敗中恢復提供必要支持也是重要的。然而,這些都沒有標準的做法。
有很多實際可行的策略,但沒有哪一種是直截了當的。公鑰加密(將在第5章進行討論)可以在一定程度上簡化密鑰管理的工作,長期密鑰可以分為私鑰與公鑰兩個部分,你不需要保存公鑰部分,但必須保證其完整性。在銀行系統(tǒng)中,通常的做法是使用稱為安全模塊的專用密碼處理器,第16章將對其進行詳細描述。這些設備完成所有密碼學處理,并包含一些用于保護應用程序密鑰的內部密鑰。由此,你可以讓安全模塊為每個ATM生成主密鑰,并將其加密后的值存放在ATM主文件中。當有來自某個ATM的交易數據時,就可以從該文件中取回加密后的密鑰,并將加密數據與其一起傳送給安全模塊,之后由安全模塊進行必要的處理:對PIN進行解密,并對其進行驗證——或許通過與本地保存的加密值進行比較來實現。遺憾的是,用于完成這些操作的協議經常會失敗。有很多種攻擊方法可以滲透安全模塊的應用程序接口(API),而協議在API中是暴露的。第18章將詳細描述這些攻擊方法?,F在只要知道讓安全協議正確運行并不容易就足夠了。你不能在家中設計協議,這比設計爆炸裝置可要復雜得多。