一、Internet層的安全性 對Internet層的安全協議進行標準化的想法早就有了。在過去十年里,已經提出了一些方案。例如,“安全協議3號(SP3)”就是美國國家安全局以及標準技術協會作為“安全數據網絡系統(SDNS)”的一部分而制定的。“網絡層安全協議(NLSP)”是由國際標準化組織為“無連接網絡協議(CLNP)”制定的安全協議標準。“集成化NLSP(I-NLSP)”是美國國家科技研究所提出的包括IP和CLNP在內的統一安全機制。SwIPe是另一個Intenet層的安全協議,由Ioannidis和Blaze提出并實現原型。所有這些提案的共同點多于不同點。事實上,他們用的都是IP封裝技術。其本質是,純文本的包被加密,封裝在外層的IP報頭里,用來對加密的包進行Internet上的路由選擇。到達另一端時,外層的IP報頭被拆開,報文被解密,然后送到收報地點。 Internet工程特遣組(IETF)已經特許Internet協議安全協議(IPSEC)工作組對IP安全協議(IPSP)和對應的Internet密鑰管理協議(IKMP)進行標準化工作。IPSP的主要目的是使需要安全措施的用戶能夠使用相應的加密安全體制。該體制不僅能在目前通行的IP(IPv4)下工作,也能在IP的新版本(IPng或IPv6)下工作。該體制應該是與算法無關的,即使加密算法替換了,也不對其他部分的實現產生影響。此外,該體制必須能實行多種安全政策,但要避免給不使用該體制的人造成不利影響。按照這些要求,IPSEC工作組制訂了一個規范:認證頭(Authentication Header,AH)和封裝安全有效負荷(Encapsulating Security Payload,ESP)。簡言之,AH提供IP包的真實性和完整性,ESP提供機要內容。 IP AH指一段消息認證代碼(Message Authentication Code,MAC),在發送IP包之前,它已經被事先計算好。發送方用一個加密密鑰算出AH,接收方用同一或另一密鑰對之進行驗證。如果收發雙方使用的是單鑰體制,那它們就使用同一密鑰;如果收發雙方使用的是公鑰體制,那它們就使用不同的密鑰。在后一種情形,AH體制能額外地提供不可否認的服務。事實上,有些在傳輸中可變的域,如IPv4中的time-to-live域或IPv6中的hop limit域,都是在AH的計算中必須忽略不計的。RFC 1828首次規定了加封狀態下AH的計算和驗證中要采用帶密鑰的MD5算法。而與此同時,MD5和加封狀態都被批評為加密強度太弱,并有替換的方案提出。 IP ESP的基本想法是整個IP包進行封裝,或者只對ESP內上層協議的數據(運輸狀態)進行封裝,并對ESP的絕大部分數據進行加密。在管道狀態下,為當前已加密的ESP附加了一個新的IP頭(純文本),它可以用來對IP包在Internet上作路由選擇。接收方把這個IP頭取掉,再對ESP進行解密,處理并取掉ESP頭,再對原來的IP包或更高層協議的數據就象普通的IP包那樣進行處理。RFC 1827中對ESP的格式作了規定,RFC 1829中規定了在密碼塊鏈接(CBC)狀態下ESP加密和解密要使用數據加密標準(DES)。雖然其他算法和狀態也是可以使用的,但一些國家對此類產品的進出口控制也是不能不考慮的因素。有些國家甚至連私用加密都要限制。 AH與ESP體制可以合用,也可以分用。不管怎么用,都逃不脫傳輸分析的攻擊。人們不太清楚在Internet層上,是否真有經濟有效的對抗傳輸分析的手段,但是在Internet用戶里,真正把傳輸分析當回事兒的也是寥寥無幾。 1995年8月,Internet工程領導小組(IESG)批準了有關IPSP的RFC作為Internet標準系列的推薦標準。除RFC 1828和RFC 1829外,還有兩個實驗性的RFC文件,規定了在AH和ESP體制中,用安全散列算法(SHA)來代替MD5(RFC 1852)和用三元DES代替DES(RFC 1851)。 在最簡單的情況下,IPSP用手工來配置密鑰。然而,當IPSP大規模發展的時候,就需要在Internet上建立標準化的密鑰管理協議。這個密鑰管理協議按照IPSP安全條例的要求,指定管理密鑰的方法。 因此,IPSEC工作組也負責進行Internet密鑰管理協議(IKMP),其他若干協議的標準化工作也已經提上日程。其中最重要的有: IBM 提出的“標準密鑰管理協議(MKMP)” | |
二、傳輸層的安全性 在Internet應用編程序中,通常使用廣義的進程間通信(IPC)機制來與不同層次的安全協議打交道。比較流行的兩個IPC編程界面是BSD Sockets和傳輸層界面(TLI),在Unix系統V命令里可以找到。 在Internet中提供安全服務的首先一個想法便是強化它的IPC界面,如BSD Sockets等,具體做法包括雙端實體的認證,數據加密密鑰的交換等。Netscape通信公司遵循了這個思路,制定了建立在可靠的傳輸服務(如TCP/IP所提供)基礎上的安全套接層協議(SSL)。SSL版本3(SSL v3)于1995年12月制定。它主要包含以下兩個協議: SSL記錄協議 它涉及應用程序提供的信息的分段、壓縮、數據認證和加密。SSL v3提供對數據認證用的MD5和SHA以及數據加密用的R4和DES等的支持,用來對數據進行認證和加密的密鑰可以通過SSL的握手協議來協商。 微軟推出了SSL2的改進版本稱為PCT(私人通信技術)。至少從它使用的記錄格式來看,SSL和PCT是十分相似的。它們的主要差別是它們在版本號字段的最顯著位(The Most Significant Bit)上的取值有所不同: SSL該位取0,PCT該位取1。這樣區分之后,就可以對這兩個協議都給以支持。 1996年4月,IETF授權一個傳輸層安全(TLS)工作組著手制定一個傳輸層安全協議(TLSP),以便作為標準提案向IESG正式提交。TLSP將會在許多地方酷似SSL。 前面已介紹Internet層安全機制的主要優點是它的透明性,即安全服務的提供不要求應用層做任何改變。這對傳輸層來說是做不到的。原則上,任何TCP/IP應用,只要應用傳輸層安全協議,比如說SSL或PCT,就必定要進行若干修改以增加相應的功能,并使用(稍微)不同的IPC界面。于是,傳輸層安全機制的主要缺點就是要對傳輸層IPC界面和應用程序兩端都進行修改。可是,比起Internet層和應用層的安全機制來,這里的修改還是相當小的。另一個缺點是,基于UDP的通信很難在傳輸層建立起安全機制來。同網絡層安全機制相比,傳輸層安全機制的主要優點是它提供基于進程對進程的(而不是主機對主機的)安全服務。這一成就如果再加上應用級的安全服務,就可以再向前跨越一大步了。 必須牢記(且須仔細品味): 網絡層(傳輸層)的安全協議允許為主機(進程)之間的數據通道增加安全屬性。本質上,這意味著真正的(或許再加上機密的)數據通道還是建立在主機(或進程)之間,但卻不可能區分在同一通道上傳輸的一個具體文件的安全性要求。比如說,如果一個主機與另一個主機之間建立起一條安全的IP通道,那么所有在這條通道上傳輸的IP包就都要自動地被加密。同樣,如果一個進程和另一個進程之間通過傳輸層安全協議建立起了一條安全的數據通道,那么兩個進程間傳輸的所有消息就都要自動地被加密。 如果確實想要區分一個具體文件的不同的安全性要求,那就必須借助于應用層的安全性。提供應用層的安全服務實際上是最靈活的處理單個文件安全性的手段。例如一個電子郵件系統可能需要對要發出的信件的個別段落實施數據簽名。較低層的協議提供的安全功能一般不會知道任何要發出的信件的段落結構,從而不可能知道該對哪一部分進行簽名。只有應用層是唯一能夠提供這種安全服務的層次。 一般來說,在應用層提供安全服務有幾種可能的做法,第一個想到的做法大概就是對每個應用(及應用協議)分別進行修改。一些重要的TCP/IP應用已經這樣做了。在RFC 1421至1424中,IETF規定了私用強化郵件(PEM)來為基于SMTP的電子郵件系統提供安全服務。由于種種理由,Internet業界采納PEM的步子還是太慢,一個主要的原因是PEM依賴于一個既存的、完全可操作的PKI(公鑰基礎結構)。PEM PKI是按層次組織的,由下述三個層次構成: 頂層為Internet安全政策登記機構(IPRA) S-HTTP是Web上使用的超文本傳輸協議(HTTP)的安全增強版本,由企業集成技術公司設計。S-HTTP提供了文件級的安全機制,因此每個文件都可以被設成私人/簽字狀態。用作加密及簽名的算法可以由參與通信的收發雙方協商。S-HTTP提供了對多種單向散列(Hash)函數的支持,如: MD2,MD5及SHA; 對多種單鑰體制的支持,如:DES,三元DES,RC2,RC4,以及CDMF; 對數字簽名體制的支持,如: RSA和DSS。 目前還沒有Web安全性的公認標準。這樣的標準只能由WWW Consortium,IETF或其他有關的標準化組織來制定。而正式的標準化過程是漫長的,可能要拖上好幾年,直到所有的標準化組織都充分認識到Web安全的重要性。S-HTTP和SSL是從不同角度提供Web的安全性的。S-HTTP對單個文件作“私人/簽字”之區分,而SSL則把參與通信的相應進程之間的數據通道按“私用”和“已認證”進行監管。Terisa公司的SecureWeb工具軟件包可以用來為任何Web應用提供安全功能。該工具軟件包提供有 RSA數據安全公司的加密算法庫,并提供對SSL和S-HTTP的全面支持。 另一個重要的應用是電子商務,尤其是信用卡交易。為使Internet上的信用卡交易安全起見,MasterCard公司(同IBM,Netscape,GTE和Cybercash一道) 制定了安全電子付費協議(SEPP),Visa國際公司和微軟(和其他一些公司一道)制定了安全交易技術(STT)協議。同時,MasterCard,Visa國際和微軟已經同意聯手推出Internet上的安全信用卡交易服務。他們發布了相應的安全電子交易(SET)協議,其中規定了信用卡持卡人用其信用卡通過Internet進行付費的方法。這套機制的后臺有一個證書頒發的基礎結構,提供對X.509證書的支持。 上面提到的所有這些加安全功能的應用都會面臨一個主要的問題,就是每個這樣的應用都要單獨進行相應的修改。因此,如果能有一個統一的修改手段,那就好多了。通往這個方向的一個步驟就是赫爾辛基大學的Tatu Yloenen開發的安全shell(SSH)。SSH允許其用戶安全地登錄到遠程主機上,執行命令,傳輸文件。它實現了一個密鑰交換協議,以及主機及客戶端認證協議。SSH有當今流行的多種Unix系統平臺上的免費版本,也有由Data Fellows公司包裝上市的商品化版本。 把SSH的思路再往前推進一步,就到了認證和密鑰分配系統。本質上,認證和密鑰分配系統提供的是一個應用編程界面(API),它可以用來為任何網絡應用程序提供安全服務,例如: 認證、數據機密性和完整性、訪問控制以及非否認服務。目前已經有一些實用的認證和密鑰分配系統,如: MIT的Kerberos(V4與V5),IBM的CryptoKnight和Netwrok Security Program,DEC的SPX,Karlsruhe大學的指數安全系統(TESS)等,都是得到廣泛采用的實例。甚至可以見到對有些認證和密鑰分配系統的修改和擴充。例如,SESAME和OSF DCE對Kerberos V5作了增加訪問控制服務的擴充,Yaksha對Kerberos V5作了增加非否認服務的擴充。 關于認證和密鑰分配系統的一個經常遇到的問題是關于它們在Internet上所受到的冷遇。一個原因是它仍要求對應用本身做出改動。考慮到這一點,對一個認證和密鑰分配系統來說,提供一個標準化的安全API就顯得格外重要。能做到這一點,開發人員就不必再為增加很少的安全功能而對整個應用程序大動手術了。因此,認證系統設計領域內最主要的進展之一就是制定了標準化的安全API,即通用安全服務API(GSS-API)。GSS-API(v1及v2)對于一個非安全專家的編程人員來說可能仍顯得過于技術化了些,但德州Austin大學的研究者們開發的安全網絡編程(SNP),把界面做到了比GSS-API更高的層次,使同網絡安全性有關的編程更加方便了。 |