




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
12三月2024信息安全原理與技術第7章網絡安全協議主要知識點:--簡單的安全認證協議
--Kerberos協議
--SSL協議
--IPSec協議
--PGP
網絡安全協議按照其完成的功能可以分為:(1)密鑰交換協議:一般情況下是在參與協議的兩個或者多個實體之間建立共享的秘密,通常用于建立在一次通信中所使用的會話密鑰。
(2)認證協議:認證協議中包括實體認證(身份認證)協議、消息認證協議、數據源認證和數據目的認證協議等,用來防止假冒、篡改、否認等攻擊。
(3)認證和密鑰交換協議:這類協議將認證和密鑰交換協議結合在一起,是網絡通信中最普遍應用的安全協議。該類協議首先對通信實體的身份進行認證,如果認證成功,進一步進行密鑰交換,以建立通信中的工作密鑰,也叫密鑰確認協議。
網絡層的安全協議:IPSec傳輸層的安全協議:SSL/TLS應用層的安全協議:
SHTTP(Web安全協議)
PGP(電子郵件安全協議)
S/MIME(電子郵件安全協議)
MOSS(電子郵件安全協議)
PEM(電子郵件安全協議)
SSH(遠程登錄安全協議)
Kerberos(網絡認證協議)等。
常見的網絡安全協議7.1簡單的安全認證協議Needham-Schroeder認證協議
是最為著名的早期的認證協議,許多廣泛使用的認證協議都是以Needham-Schroeder協議為基礎而設計的。
Otway-Rees協議Otway-Rees協議的主要功能是完成身份的雙向認證,使用對稱密碼。
7.1.1Needham-Schroeder認證協議Needham--Schroder協議的目的是使得通訊雙方能夠互相證實對方的身份并且為后續的加密通訊建立一個會話密鑰(sessionkey)。協議涉及三個主體:A和B,以及A,B信賴的可信第三方,也叫認證服務器(authenticationserver)S。Needham和Schroeder于1978年提出的基于共享密鑰體系的協議過程:
圖7.1Needham-Schroeder認證過程
其中,Kas是A與S之間的共享密鑰,Kbs是B與S之間的共享密鑰。Kab
是認證服務器臨時生成的密鑰,用于A、B雙方認證之后的加密通訊,稱為會話密鑰。Na和Nb分別是A和B生成的隨機量(nonce)。
ABS13452(1)A
S:A,B,Na(2)S
A:{Na,B,Kab,{Kab,A}Kbs}Kas(3)A
B:{Kab,A}Kbs(4)B
A:{Nb}Kab(5)A
B:{Nb-1}KabNeedhaul-Scllroeder共享密鑰協議的漏洞
假定有攻擊者H記錄下A與B之間執行Needham-Schroeder共享密鑰協議的一輪消息,并且進而破獲了其會話密鑰Kab
(如經過蠻力攻擊等),攻擊者可以在第3步冒充A利用舊的會話密鑰欺騙B。在這個攻擊中,攻擊者H首先向B發送一個他記錄的從A發出的舊消息,此消息用于向B表明是A在與B通訊并且Kab是會話密鑰。B無法知道這是不是一個A發送的正常通訊請求,也不記得他過去曾經用過Kab作為會話密鑰。遵循協議,B將向A發送一個加密的新隨機量作為挑戰。H截獲之,并用Kab解密得到此隨機量,然后向B返回一個響應消息,使得B相信他正在用會話密鑰Kab與A通訊,而實際上A根本沒有參加這一輪協議的運行。除非B記住所有以前使用的與A通信的會話密鑰,否則B無法判斷這是一個重放攻擊,攻擊者由此可以隨意冒充A與B進行通訊了!
Denning協議使用時間戳修正了這個漏洞,改進的協議如下:其中T表示時間戳。T記錄了認證服務器S發送消息(2)時的時間,A、B根據時間戳驗證消息的“新鮮性”,從而避免了重放攻擊。(1)A
S:A,B(2)S
A:{B,Kab,T,{Kab,A,T}Kbs}Kas(3)A
B:{Kab,A,T}Kbs(4)B
A:{Nb}Kab(5)A
B:{Nb-1}Kab7.1.2Otway-Rees協議
圖7.2Otway-Rees認證過程標號1表示A產生一消息,包括用和S共享的密鑰Kas加密的一個索引號R、A的名字、B的名字和一隨機數Ra。標號2表示B用A消息中的加密部分構造一條新消息。包括用和S共享的密鑰Kbs加密的一個索引號R、A的名字、B的名字和一新隨機數Rb。ABS1234標號3表示S檢查兩個加密部分中的索引號R是否相同,如果相同,就認為從B來的消息是有效的。S產生一個會話密鑰Ks用Kb和Ka分別加密后傳送給B,每條消息都包含S接收到的隨機數。標號4表示B把用A的密鑰加密的消息連同索引號R一起傳給A。7.2Kerberos協議
在一個開放的分布式網絡環境中,用戶通過工作站訪問服務器上提供的服務時,一方面,工作站無法可信地向網絡服務證實用戶的身份,可能存在著以下三種威脅:①用戶可能訪問某個特定工作站,并假裝成另一個用戶在操作工作站。②用戶可能會更改工作站的網絡地址,使從這個已更改的工作站上發出的請求看似來自偽裝的工作站。③用戶可能竊聽他人的報文交換過程,并使用重放攻擊來獲得對一個服務器的訪問權或中斷服務器的運行。
另一方面,在開放的網絡環境中,客戶也必須防止來自服務端的欺騙。以自動取款機ATM為例,如果存在欺騙,那么客戶將泄漏自己的帳戶信息。如何使用一個集中的認證服務器,提供用戶對服務器的認證以及服務器對用戶的認證,這就是Kerberos要解決的問題。7.2.1Kerberos概述Kerberos是由美國麻省理工學院(MIT)提出的基于可信賴的第三方的認證系統,它是基于Needham-Schroeder協議設計的,采用對稱密碼體制。Kerberos一詞源自希臘神話,在希臘神話故事中,Kerberos是一種長有三個頭的狗,還有一個蛇形尾巴,是地獄之門的守衛者。現代取Kerberos這個名字意指要有三個“頭”來守衛網絡之門,這“三頭”包括:-認證(authentication)-清算(accounting)-審計(audit)Kerberos協議中的一些概念Principal(安全個體)被鑒別的個體,有一個名字(name)和口令(password)。KDC(Keydistributioncenter,密鑰分配中心)可信的第三方,即Kerberos服務器,提供ticket和臨時的會話密鑰。Ticket(訪問許可證)是一個記錄憑證,客戶可以用它來向服務器證明自己的身份,其中包括客戶的標識、會話密鑰、時間戳,以及其他一些信息。Ticket中的大多數信息都被加密,密鑰為服務器的密鑰。Authenticator(認證符)是另一個記錄憑證,其中包含一些最近產生的信息,產生這些信息需要用到客戶和服務器之間共享的會話密鑰。Credentials(證書)由一個ticket加上一個秘密的會話密鑰組成。7.2.2Kerberos協議的工作過程Kerberos基本思想采用對稱密鑰體制對信息進行加密,能正確對信息進行解密的用戶就是合法用戶。用戶在對應用服務器進行訪問之前,必須先從第三方(Kerberos服務器)獲取該應用服務器的訪問許可證(ticket)。認證服務器AS(AuthenticationServer)許可證頒發服務器TGS(TicketGrantingServer)7.2.2Kerberos協議的工作過程①②③④⑤⑥認證服務器AS許可證頒發服務器TGS用戶C應用服務器V圖7.3Kerberos的認證過程①用戶想要獲取訪問某一應用服務器的許可證時,先以明文方式向認證服務器AS發出請求,要求獲得訪問TGS的許可證。②AS以證書(credential)作為響應,證書包括訪問TGS的許可證和用戶與TGS間的會話密鑰。會話密鑰以用戶的密鑰加密后傳輸。③用戶解密得到TGS的響應,然后利用TGS的許可證向TGS申請應用服務器的許可證,該申請包括TGS的許可證和一個帶有時間戳的認證符(authenticator)。認證符以用戶與TGS間的會話密鑰加密。④TGS從許可證中取出會話密鑰、解密認證符,驗證認證符中時間戳的有效性,從而確定用戶的請求是否合法。TGS確認用戶的合法性后,生成所要求的應用服務器的許可證,許可證中含有新產生的用戶與應用服務器之間的會話密鑰。TGS將應用服務器的許可證和會話密鑰傳回到用戶。⑤用戶向應用服務器提交應用服務器的許可證和用戶新產生的帶時間戳的認證符(認證符以用戶與應用服務器之間的會話密鑰加密)。⑥應用服務器從許可證中取出會話密鑰、解密認證符,取出時間戳并檢驗有效性。然后向用戶返回一個帶時間戳的認證符,該認證符以用戶與應用服務器之間的會話密鑰進行加密。據此,用戶可以驗證應用服務器的合法性。
Kerberos的主要優點:通過對實體和服務的統一管理實現單一注冊,也就是說用戶通過在網絡中的一個地方的一次登錄就可以使用網絡上他可以獲得的所有資源。Kerberos存在的問題:①Kerberos服務器的損壞將使得整個安全系統無法工作;②AS在傳輸用戶與TGS間的會話密鑰時是以用戶密鑰加密的,而用戶密鑰是由用戶口令生成的,因此可能受到口令猜測的攻擊;③Kerberos使用了時間戳,因此存在時間同步問題;④要將Kerberos用于某一應用系統,則該系統的客戶端和服務器端軟件都要作一定的修改。7.3SSL協議
SSL(安全套接字層,SecureSocketLayer)協議是網景(Netscape)公司提出的基于WEB應用的安全協議,是一種用于傳輸層安全的協議。傳輸層安全協議的目的是為了保護傳輸層的安全,并在傳輸層上提供實現保密、認證和完整性的方法。SSL指定了一種在應用程序協議(例如http、telnet、NNTP、FTP)和TCP/IP之間提供數據安全性分層的機制。它為TCP/IP連接提供數據加密、服務器認證、消息完整性以及可選的客戶機認證。7.3.1SSL協議概述圖7.4SSL的體系結構
SSL握手協議SSL修改密文協議SSL告警協議HTTPSSL記錄協議TCPIPSSL中有兩個重要概念:SSL連接:連接是提供恰當類型服務的傳輸。SSL連接是點對點的關系,每一個連接與一個會話相聯系。SSL會話:SSL會話是客戶和服務器之間的關聯,會話通過握手協議(在SSL協議的高層)來創建。會話定義了加密安全參數的一個集合,該集合可以被多個連接所共享。會話可以用來避免為每個連接進行昂貴的新安全參數的協商。
7.3.2SSL記錄協議
SSL從應用層取得的數據需要重定格式(分片、可選的壓縮、應用MAC、加密等)后才能傳給傳輸層進行發送。同樣,當SSL協議從傳輸層接收到數據后需要對其進行解密等操作后才能交給上層的應用層。這個工作是由SSL記錄協議完成的。上層報文分片1分片2分片n壓縮(可選)加密增加MAC增加SSL記錄首部圖7.6SSL記錄協議的發送方執行的操作步驟SSL記錄協議中發送方執行的操作步驟:①從上層接受傳輸的應用報文;②分片:將數據分片成可管理的塊,每個上層報文被分成16KB或更小的數據塊;③進行數據壓縮(可選):壓縮是可選的,壓縮的前提是不能丟失信息,并且增加的內容長度不能超過1024字節,缺省的壓縮算法為空;④應用MAC:加入信息認證碼(MAC),這一步需要用到共享的密鑰;⑤加密:利用IDEA、DES、3DES或其他加密算法對壓縮報文和MAC碼進行數據加密;⑥增加SSL首部:增加由內容類型、主要版本、次要版本和壓縮長度組成的首部。⑦將結果傳輸到下層。SSL記錄協議中接收方接收數據的工作過程①從低層接受報文;②解密;
③用事先商定的MAC碼校驗數據;④如果是壓縮的數據,則解壓縮;⑤重裝配數據;⑥傳輸信息到上層。7.3.3SSL修改密文規約協議SSL修改密文規約協議用來發送修改密文規約協議信息。任何時候客戶都能請求修改密碼參數,比如握手密鑰交換。在修改密文規約的通告發出以后,客戶方就發出一個握手密鑰交換信息(如果可得到的話),鑒定認證信息,服務器則在處理了密鑰交換信息之后發送一個修改密文規約信息。此后,新的雙方約定的密鑰就將一直使用到下次提出修改密鑰規約請求為止。7.3.4SSL告警協議SSL告警協議是用來將SSL有關的告警傳送給對方實體的。和其他使用SSL的情況一樣,告警報文按照當前狀態說明被壓縮和加密。SSL告警協議的每個報文由兩個字節組成。第一個字節的值用來表明警告的的級別,第二個字節表示特定告警的代碼。如果在通信過程中某一方發現任何異常,就需要給對方發送一條警示消息通告。警示消息有兩種:一種是Fatal錯誤,如傳遞數據過程中,發現錯誤的MAC,雙方就需要立即中斷會話,同時消除自己緩沖區相應的會話記錄;第二種是Warning消息,這種情況,通信雙方通常都只是記錄日志,而對通信過程不造成任何影響。7.3.5SSL握手協議一個SSL會話工作在不同的狀態,即會話狀態和連接狀態。會話狀態:①會話標識符②對方的證書③壓縮方法④密文規約⑤主密鑰⑥可重新開始標志連接狀態:①服務器和客戶隨機數②服務器寫MAC密鑰③客戶寫MAC密鑰④服務器寫密鑰⑤客戶寫密鑰⑥初始化向量⑦序號SSL握手協議用于鑒別初始化和傳輸密鑰,它使得服務器和客戶能相互鑒別對方的身份,并保護在SSL記錄中發送的數據。因此在傳輸任何應用數據前,都必須使用握手協議。圖7.7SSL握手過程SSL客戶端SSL服務器端發送”hello”消息傳送數據回復”hello”消息,發出服務器證書,服務器密鑰交換信息,證書請求,服務器HELLODONE發送證書,客戶密鑰交換信息,證書驗證信息,結束發修改密文規約信息結束發修改密文規約信息傳送數據21435SSL握手的詳細過程第一步:客戶發出一個帶有客戶HELLO信息的連接請求。這信息包括:①想要使用的SSL版本號。②時間信息,以標準的UNIX32位格式標識的現時和日期。③會話標識(可選),如果沒有指定的話,則服務器便重用上一次的會話標識或返回一個錯誤信息④密文組(客戶方所支持的各種加密算法選項清單。包括認證碼、密鑰交換方法、加密和MAC算法)。⑤客戶方所支持的壓縮算法。⑥隨機數。SSL握手的詳細過程第二步:服務器評估客戶方發來的HELLO信息中的各項參數,并且返回一個服務器方的HELLO信息,其中含有服務器選來用于SSL會話的各項參數(版本號、時間信息、以標準的UNIX32位格式標識的現時和日期、會話標識、密文組、壓縮方法、隨機數)。在服務器HELLO信息之后,服務器發出如下信息:①服務器證書,如果服務器需要被鑒別的話。②服務器密鑰交換信息,如果得不到證書或證書僅僅用作簽名的話。③證書請求,如果客戶要求被鑒別的話。最后,服務器發出一個服務器HELLODONE信息,開始等待客戶的回音。SSL握手的詳細過程第三步:客戶發送下列信息:①如果服務器發出了一個證書請求,那么客戶方必須發送一個證書或非證書信息。②如果服務器發送了一個服務器密鑰交換信息,那么客戶方就發送一個基于公鑰算法的由HELLO信息決定的密鑰交換信息。③如果客戶方已經發送了一個證書,那么客戶方就需驗證服務器方的證書并且發出一個證書驗證信息指明結果。然后,客戶方發出一個結束信息,指出協商過程已經完成。客戶方還發送一個修改密文規約信息來產生共享的常規密鑰。應該注意這部分工作不是由握手協議控制,是由修改密文規約協議管理的。SSL握手的詳細過程第四步:服務器發出一個結束信息指出協商協商階段完成。然后服務器發出一個密文修改規約信息。第五步:會話雙方分別產生一個加密密鑰,然后他們再根據這些密鑰導出會話主密鑰。握手協議改變狀態至連接狀態。所有從應用層的來的數據傳輸作為特定信息傳輸給對方。7.3.6TLS協議傳輸層安全TLS(TransportLayerSecurity)協議是IETF正在定義一種新的協議。它建立在Netscape所提出的SSL3.0協議規范基礎上。兩個互相不知其代碼的應用程序可用TLS來安全地通信。
7.3.7SSL協議應用一個使用WEB客戶機和服務器的范例WEB客戶機通過連接到一個支持SSL的服務器,啟動一次SSL會話。支持SSL的典型WEB服務器在一個與標準HTTP請求(默認為端口80)不同的端口(默認為443)上接受SSL連接請求。當客戶機連接到這個端口上時,它將啟動一次建立SSL會話的握手。當握手完成之后,通信內容被加密,并且執行消息完整性檢查,直到SSL會話過期。SSL創建一個會話,在此期間,握手必須只發生過一次。步驟1:SSL客戶機連接到SSL服務器,并要求服務器驗證它自身的身份。步驟2:服務器通過發送它的數字證書證明其身份。這個交換還可以包括整個證書鏈,直到某個根證書權威機構(CA)。通過檢查有效日期并確認證書包含有可信任CA的數字簽名,來驗證證書。步驟3:服務器發出一個請求,對客戶端的證書進行驗證。但是,因為缺乏公鑰體系結構,當今的大多數服務器不進行客戶端認證。步驟4:協商用于加密的消息加密算法和用于完整性檢查的哈希函數。通常由客戶機提供它支持的所有算法列表,然后由服務器選擇最強健的加密算法。步驟5:客戶機和服務器通過下列步驟生成會話密鑰:a.客戶機生成一個隨機數,并使用服務器的公鑰(從服務器的證書中獲得)對它加密,發送到服務器上。b.服務器用更加隨機的數據(從客戶機的密鑰可用時則使用客戶機密鑰;否則以明文方式發送數據)響應。c.使用哈希函數,從隨機數據生成密鑰。SSL協議的優點機密性即連接是私有的。在初始握手階段,雙方建立對稱密鑰后,信息即用該密鑰加密。完整性在信息中嵌入信息鑒別碼(MAC)來保證信息的完整性。其中使用了安全哈希函數(例如SHA和MD5)來進行MAC計算。鑒別在握手階段,客戶鑒別服務器用不對稱密鑰或公開密鑰。SSL協議的不足SSL要求對每個數據進行加密和解密操作,因而在帶來高性能的同時,對系統也要求高資源開銷。SSL協議主要是使用公開密鑰體制和X.509數字證書技術保護信息傳輸的機密性和完整性,它不能保證信息的不可抵賴性,主要適用于點對點之間的信息傳輸,常用WebServer方式。SSL為帶有安全功能的TCP/IP套接字應用程序接口提供了一個替代的方法,理論上,在SSL之上可以安全方式運行任何原有TCP/IP應用程序而不需修改,但實際上,SSL目前還只是用在HTTP連接上。OpenSSL官方網站為/EricA.Young和TimJ.Hudson這兩個加拿大人自1995年開始編寫后來具有巨大影響的OpenSSL軟件包,這是一個沒有太多限制的開放源代碼的軟件包。1998年,OpenSSL項目組接管了OpenSSL的開發工作,并推出了OpenSSL的0.9.1版,目前為止,OpenSSL的算法已經非常完善,對SSL2.0、SSL3.0以及TLS1.0都支持。OpenSSL采用C語言作為開發語言,這使得OpenSSL具有優秀的跨平臺性能,這對于廣大技術人員來說是一件非常美妙的事情,可以在不同的平臺使用同樣熟悉的東西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平臺,這使得OpenSSL具有廣泛的適用性。OpenSSL整個軟件包大概可以分成三個主要的功能部分:密碼算法庫,SSL協議庫,應用程序。openssl-加密算法作為一個基于密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議,并提供了豐富的應用程序供測試或其它目的使用。1.對稱加密算法OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它算法使用的則是64位。事實上,DES算法里面不僅僅是常用的DES算法,還支持三個密鑰和兩個密鑰3DES算法。2.非對稱加密算法OpenSSL一共實現了4種非對稱加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。DH算法一般用戶密鑰交換。RSA算法既可以用于密鑰交換,也可以用于數字簽名。DSA算法則一般只用于數字簽名。3.信息摘要算法OpenSSL實現了5種信息摘要算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事實上包括了SHA和SHA1兩種信息摘要算法,此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要算法DSS和DSS1。4.密鑰和證書管理
密鑰和證書管理是PKI的一個重要組成部分,OpenSSL為之提供了豐富的功能,支持多種標準。首先,OpenSSL實現了ASN.1的證書和密鑰相關標準,提供了對證書、公鑰、私鑰、證書請求以及CRL等數據對象的DER、PEM和BASE64的編解碼功能。OpenSSL提供了產生各種公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。并實現了私鑰的PKCS#12和PKCS#8的編解碼功能。OpenSSL在標準中提供了對私鑰的加密保護功能,使密鑰可以安全地進行存儲和分發。在此基礎上,OpenSSL實現了對證書的X.509標準編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。并提供了一種文本數據庫,支持證書的管理功能,包括證書密鑰產生、請求產生、證書簽發、吊銷和驗證等功能。OpenSSL提供的CA應用程序就是一個小型的證書管理中心(CA),實現了證書簽發的整個流程和證書管理的大部分機制。5.SSL和TLS協議
OpenSSL實現了SSL協議的SSLv2和SSLv3,支持了其中絕大部分算法協議。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標準化版,雖然區別不大,但畢竟有很多細節不盡相同。雖然已經有眾多的軟件實現了OpenSSL的功能,但是OpenSSL里面實現的SSL協議能夠對SSL協議有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協議是開放源代碼的,可以追究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其它協議(如HTTP)協議結合在一起,澄清了SSL協議的本來面目。6.應用程序OpenSSL的應用程序已經成為了OpenSSL重要的一個組成部分。現在OpenSSL的應用中,很多都是基于OpenSSL的應用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基于OpenSSL的密碼算法庫和SSL協議庫寫成的,所以也是一些非常好的OpenSSL的API使用范例。OpenSSL的應用程序提供了相對全面的功能,在相當多的人看來,OpenSSL已經為自己做好了一切,不需要再做更多的開發工作了,所以,他們也把這些應用程序成為OpenSSL的指令。OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試以及其它輔助配置功能。7.Engine機制Engine機制的出現是在OpenSSL的0.9.6版的事情,開始的時候是將普通版本跟支持Engine的版本分開的,到了OpenSSL的0.9.7版,Engine機制集成到了OpenSSL的內核中,成為了OpenSSL不可缺少的一部分。Engine機制目的是為了使OpenSSL能夠透明地使用第三方提供的軟件加密庫或者硬件加密設備進行加密。OpenSSL的Engine機制成功地達到了這個目的,這使得OpenSSL已經不僅僅使一個加密庫,而是提供了一個通用地加密接口,能夠與絕大部分加密庫或者加密設備協調工作。當然,要使特定加密庫或加密設備更OpenSSL協調工作,需要寫少量的接口代碼,但是這樣的工作量并不大,雖然還是需要一點密碼學的知識。Engine機制的功能跟Windows提供的CSP功能目標是基本相同的。目前,OpenSSL的0.9.7版本支持的內嵌第三方加密設備有8種,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM4758CCA的硬件加密設備。現在還出現了支持PKCS#11接口的Engine接口,支持微軟CryptoAPI的接口也有人進行開發。當然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一兩種公開密鑰算法。8.輔助功能BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。OpenSSL對于隨機數的生成和管理也提供了一整套的解決方法和支持API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提。OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發和管理中的配置文件機制等等。7.4IPSec協議由于協議IPv4最初設計時沒有過多地考慮安全性,缺乏對通信雙方真實身份的驗證能力,缺乏對網上傳輸的數據的完整性和機密性保護,并且由于IP地址可軟件配置等靈活性以及基于源IP地址的認證機制,使IP層存在著網絡業務流易被監聽和捕獲、IP地址欺騙、信息泄漏和數據項被篡改等多種攻擊,而IP是很難抵抗這些攻擊的。為了實現安全IP,因特網工程任務組IETF于1994年開始了一項IP安全工程,專門成立了IP安全協議工作組IPSEC,來制定和推動一套稱為IPSec的IP安全協議標準。
IPSec協議組網絡認證協議AuthenticationHeader(AH)封裝安全載荷協議EncapsulatingSecurityPayload(ESP)密鑰管理協議InternetKeyExchange(IKE)網絡認證及加密算法7.4.1IPSec安全體系結構圖7.8IPSec安全體系結構IPSec體系結構ESP協議AH協議加密算法DOI解釋域密鑰管理認證算法ESP協議規定了為通信提供機密性和完整性保護的具體方案,包括ESP載荷的格式、語義、取值以及對進入分組和外出分組的處理過程等。DOI〔InterpretationofDomain,DOI〕規定了每個算法的參數要求和計算規則,如算法的密鑰長度要求、算法強度要求以及初始向量的計算規則等。AH協議定義了認證的應用方法,提供數據源認證和完整性保證。IKE協議是IPSec目前唯一的正式確定的密別交換協議,為AH和ESP提供密鑰交換支持,同時也支持其他機制,如密鑰協商。安全關聯(SecurityAssociation,SA)為了正確封裝及提取IPSec數據包,有必要采取一套專門的方案,將安全服務/密鑰與要保護的通信數據聯系到一起;同時要將遠程通信實體與要交換密鑰的IPSec數據傳輸聯系到一起。換言之,要解決如何保護通信數據、保護什么樣的通信數據以及由誰來實行保護的問題。這樣的構建方案稱為安全關聯(SecurityAssociation,SA)。
SA是單向的,要么對數據包進行“進入”保護,要么進行“外出”保護。也就是說,在一次通信中,IPSec需要建立兩個SA,一個用于入站通信,另一個用于出站通信。若某臺主機,如文件服務器或遠程訪問服務器,需要同時與多臺客戶機通信,則該服務器需要與每臺客戶機分別建立不同的SA。
7.4.2AH(AuthenticationHeader)協議AH協議規定了AH頭在AH實現中應插入IP頭的位置、AH頭的語法格式、各字段的語義及取值方式,以及實施AH時進入和外出分組的處理過程。AH機制涉及到密碼學中的核心組件——鑒別算法。
AH的功能AH的兩種模式AH的格式
認證算法AH的功能AH協議為IP通信提供數據源認證、數據完整性和反重播保證,它能保護通信免受篡改,但不能防止竊聽,適合用于傳輸非機密數據。AH的工作原理是在每一個數據包上添加一個身份驗證報頭。此報頭包含一個帶密鑰的hash散列(可以將其當作數字簽名,只是它不使用證書),此hash散列在整個數據包中計算,因此對數據的任何更改將致使散列無效——這樣就提供了完整性保護。AH不能提供加密服務,這就意味著分組將以明文的形式傳送。由于AH的速度比ESP稍微快一點,因此僅當需要確保分組的源和完整性而不考慮機密性的時候,可以選擇使用AH。
AH的兩種模式傳輸模式:傳輸模式用于兩臺主機之間,只對上層協議數據(傳輸層數據)和IP頭中的固定字段提供認證,主要保護傳輸層協議頭,實現端到端的安全;隧道模式:隧道模式對整個IP數據項提供認證保護,把需要保護的IP包封裝在新的IP包中,既可用于主機也可用于安全網關,并且當AH在安全網關上實現時,必須采用隧道模式。AH的兩種模式AH的格式圖7.11AH報頭格式下一個報頭長度安全參數索引(SPI)序列號認證數據(hash檢查和)AH報頭NextHeader(下一個報頭,占8字節):識別下一個使用IP協議號的報頭,例如,NextHeader值等于6時,表示緊接其后的是TCP報頭。對于UDP,它的值將是17。Length(長度,占8字節):AH報頭長度。SecurityParametersIndex(SPI,安全參數索引,占32字節):這是一個為數據報識別安全關聯的32位偽隨機值。其中,SPI值0被保留,用來表明“沒有安全關聯存在”。SequenceNumber(序列號,占32字節):這是一個無符號單調遞增的計數器,從1開始的32位單增序列號,不允許重復,唯一地標識了每一個發送數據包,為安全關聯提供反重播保護。接收端校驗序列號為該字段值的數據包是否已經被接收過,若是,則拒收該數據包。對于一個特定的SA,它實現反重傳服務。這些信息不被接收對等實體使用,但是發送方必須包含這些信息。當建立一個SA時,這個值被初始化為0。如果使用反重傳服務重傳,那么這個值決不允許重復。由于發送方并不知道接受方是否使用了反重傳功能,該字段中的值不能被重復的事實就要求終止SA,并且在傳送第23個分組之前建立一個新的SA。AuthenticationData(AD,認證數據,可變長):包含完整性檢查和。接收端接收數據包后,首先執行hash計算,再與發送端所計算的該字段值比較,若兩者相等,表示數據完整,若在傳輸過程中數據遭修改,兩個計算結果不一致,則丟棄該數據包。通過這個值,通信雙方能實現對數據的完整性保護、分組級數據源鑒別以及通信的抗重放攻擊。認證算法用于計算完整性校驗值(ICV)的認證算法由SA指定,對于點到點通信,合適的認證算法包括基于對稱密碼算法(如DES)或基于單向Hash函數(如MD5或SHA-1)的帶密鑰的消息認證碼(MAC)。7.4.3ESP(EncapsulatingSecurityPayload)協議ESP涉及到密碼學中的核心組件——加密和鑒別算法。
ESP的功能ESP的兩種模式ESP的格式加密算法和認證算法ESP處理ESP的功能
ESP為IP數據包提供完整性檢查、認證和加密,可以看作是“超級AH”,因為它提供機密性并可防止篡改。ESP服務依據建立的安全關聯(SA)是可選的。一些限制:·完整性檢查和認證一起進行。·僅當與完整性檢查和認證一起時,“重播(Replay)”保護才是可選的。·“重播”保護只能由接收方選擇。ESP的加密服務是可選的,但如果啟用加密,則也就同時選擇了完整性檢查和認證。因為如果僅使用加密,入侵者就可能偽造包以發動密碼分析攻擊。ESP可以單獨使用,也可以和AH結合使用。ESP的兩種模式ESP的格式ESP協議包括ESP報頭、ESP報尾、ESP認證報尾三個部分。
圖7.14ESP報頭、報尾和認證報尾加密算法和認證算法
ESP所采用的加密算法由SA指定。為了提高加密效率,ESP設計使用的是對稱密碼算法。由于IP包可能會失序到達,因此每個IP包必須攜帶接收者進行解密所要求的密碼同步數據(如初始化向量IV)。這個數據可以在有效負載字段中明確攜帶,也可以從包頭中推導出來。由于機密性是可選擇的,因此加密算法可以是“空”。ESP中的認證算法同AH的認證算法一樣。由于認證算法是可選的,因此認證算法也可以是“空”。雖然加密和認證算法都可為空,但二者不能同時為空。因為這樣做不僅毫無安全保證可言,而且也為系統帶來了無謂的負擔。ESP處理
ESP的處理過程發生在發送時的IP分割之前以及接受時的IP重新組合之后。發送時的處理①ESP頭定位:在傳輸模式下,ESP頭插在IP頭和上一層協議頭之間;在隧道模式下,ESP頭在整個源IP數據項之前。②查找:只有當與此會話相關的有效的SA存在時,才進行ESP處理。③包加密:把數據封裝到ESP的有效負載字段,在傳輸模式下,只封裝上層協議數據;在隧道模式下、封裝整個原IP數據項。應使用由SA指定的密鑰和加密算法對上述結果加密。接受時的處理過程當接收方收到一個IP數據項時,先根據包中目的IP地址、安全協議ESP和SPI查找SA,若沒有用于此會話的SA存在,則接收者必須丟棄此包,并記入日志,否則就按SA中指定的算法進行解密并重新構造原IP數據項格式。7.4.4IKE(InternetKeyExchange)協議
IKE主要完成兩個作用:①安全關聯的集中化管理,減少連接時間;②密鑰的生成和管理。
IKE協議是IPSec目前唯一的正式確定的密鑰交換協議,它為AH和ESP提供密鑰交換支持,同時也支持其他機制,加密鑰協商。
IKE是由另外三種協議(ISAKMP、Oakley和SKEME)混合而成的一種協議。
PGP——PrettyGoodPrivacy(相當好的保密)是由MIT的P.R.Zimmerrmann提出的,主要用于安全電子郵件,它可以對通過網絡進行傳輸的數據創建和檢驗數字簽名、加密、解密以及壓縮。
7.5PGP表7.1PGP的功能功能使用的算法解釋說明保密性IDEA、CAST或三重DES,Diffie-Hellman或RSA發送者產生一次性會話密鑰,用會話密鑰以IDEA或CAST或三重DES加密消息,并用接收者的公鑰以Diffie-Hellman或RSA加密會話密鑰簽名RSA或DSS,MD5或SHA用MD5或SHA對消息散列并用發送者的私鑰加密消息摘要壓縮ZIP使用ZIP壓縮消息,以便于存儲和傳輸E-mail兼容性Radix64交換對E-mail應用提供透明性,將加密消息用Radix64變換成ASCII字符串分段功能-為適應最大消息長度限制,PGP實行分段并重組7.5.1鑒別
圖7.15(a)PGP的操作過程——只進行鑒別其中,圖7.15記號的含義為:Ks:會話密鑰EP:公鑰加密Kra:用戶A的私鑰DP:公鑰解密KUa:用戶A的公鑰EC:常規加密H:散列函數DC:常規解密||:連接Z:用ZIP算法進行數據壓縮R64:用radix64轉換到ASCII格式Z-1:解壓縮MMHEPH||ZZ-1DP比較EKRa[H(M)]KRaKUa發送者A接收者BPGP鑒別的過程﹒發送者產生消息M;﹒用SHA-1對M生成一個160位的散列碼H;﹒H用發送者的私鑰加密,并與M連接;﹒接收者用發送者的公鑰解密并恢復散列碼H;﹒對消息M生成一個新的散列碼,與H比較。如果一致,則消息M被認證,即報文作為已鑒別的報文而接受。(提供DSS/SHA-1可選替代方案和簽名與消息分離的支持。)7.5.2機密性
PGP提供的另一個基本服務是機密性,它是通過對將要傳輸的報文或者將要像文件一樣存儲在本地的報文進行加密來保證的(如圖7.15(b)所示)。圖7.15(b)PGP的操作過程——只保證機密性KsMMEPECDC||ZZ-1DPKUbEKUb[Ks]KRb7.5.3鑒別與機密性PGP可以同時提供機密性與鑒別。當加密和認證這兩種服務都需要時,發送者先用自己的私鑰簽名,然后用會話密鑰加密,再用接收者的公鑰加密會話密鑰(如圖7.15(c)所示)。圖7.15(c)PGP的操作過程——鑒別與機密性MHEP||ZKRaDCDPEKUb[Ks]KRbKsEP||KUbECMHZ-1DP比較EKRa[H(M)]KUa7.5.4壓縮PGP對報文進行壓縮,這有利于在電子郵件傳輸和文件存儲時節省空間。但壓縮算法的放置位置比較重要,在默認的情況下,放在簽名之后加密之前。這是因為:對沒有經過壓縮的報文進行簽名更好些。這樣,為了將來的驗證就只需要存儲沒壓縮的報文和簽名。如果對壓縮文檔簽名,那么為了將來的驗證就必須或者存儲壓縮過的報文、或者在需要驗證時更新壓縮報文;即使個人愿意在驗證時動態生成重新壓縮的報文,PGP的壓縮算法也存在問題。算法不是固定的,算法的不同實現在運行速度和壓縮比上進行不同的折衷,因此產生了不同的壓縮形式。但是,這些不同的壓縮算法是可以互操作的,因為任何版本的算法都可以正確地解壓其他版本的輸出。如果在壓縮之后應用散列函數和簽名,將約束所有的PGP實現都使用同樣的壓縮算法。在壓縮之后對報文加密可以加強加密的強度。因為壓縮過的報文比原始明文冗余更少,密碼分析更加困難。7.5.5電子郵件的兼容性當使用PGP時,至少傳輸報文的一部分需要被加密。因此,部分或全部的結果報文由任意的8bit二進制流組成。但是,很多電子郵件系統只允許使用ASCII文本。為了滿足這一約束,PGP提供了將原始8位二進制流轉換成可打印的ASCII字符的服務。為實現這一目的采用的方案是Radix64轉換,每三個字節的二進制數據為一組映射成四個ASCII字符。這種格式附加了CRC校驗來檢測傳輸錯誤。7.5.6分段與重組電子郵件設施經常受限于最大的報文長度,例如最大50kb的限制。任何長度超過這個數值的報文都必須劃分成更小的報文段,每個段單獨發送。為了滿足這個約束,PGP自動將太長的報文劃分成可以使用電子郵件發送的足夠小的報文段。分段是在所有其他的處理(包括Radix64轉換)完成之后才進行的,因此會話密鑰部分和簽名部分只在第一個報文段的開始位置出現一次;在接收端,PGP將各段自動重新裝配成完整的原來的分組。7.5.7PGP密鑰管理PGP包含四種密鑰:一次性會話密鑰公開密鑰私有密鑰基于口令短語的常規密鑰深入研究內容網絡安全編程網絡安全基礎編程技術主要包括6個方面:Socket編程注冊表編程文件系統編程定時器編程駐留程序編程多線程編程Socket編程談網絡安全編程離開網絡編程就會大失其味,凡是基于網絡應用的程序都離不開Socket。Socket的意思是套接字,是計算機與計算機之間通信的接口。使用Winsock提供的API函數是最基本的網絡編程技術,程序proj3_11.cpp利用Socket獲得本機的IP地址和機器名。Socket編程案例名稱:使用Socket得到IP地址程序名稱:proj3_11.cpp
#include<winsock.h>#include<stdio.h>voidCheckIP(void)//CheckIP函數,用于獲取本機IP地址{ WORDwVersionRequested;//WORD類型變量,用于存放Winsock版本的值 WSADATAwsaData;
charname[255];//用于存放主機名 PHOSTENThostinfo; wVersionRequested=MAKEWORD(2,0); //調用MAKEWORD()函數獲得Winsock的版本,用于加載Winsock庫 if(WSAStartup(wVersionRequested,&wsaData)==0) { //加載Winsock庫,如果WSAStartup()函數的返回值為0,說明加載成功 if(gethostname(name,sizeof(name))==0) { //判斷是否成功的將本地主機名存放入由name參數指定的緩沖區中 if((hostinfo=gethostbyname(name))!=NULL) { //如果獲得主機名成功的話,調用inet_ntoa()函數取得IP地址 LPCSTRip=inet_ntoa(*(structin_addr*)*hostinfo->h_addr_list); printf("本機的IP地址是:%s\n",ip);//輸出IP地址 printf("本機的名稱是:%s\n",name); } } WSACleanup();//卸載Winsock庫,并釋放所有資源 }}
intmain(){ CheckIP();//調用CheckIP()函數獲得并輸出IP地址 return0;}注冊表編程注冊表的句柄可以由調用RegOpenKeyEx()和RegCreateKeyEx()函數得到的,通過函數RegQueryValueEx()可以查詢注冊表某一項的值通過函數RegSetValueEx()可以設置注冊表某一項的值。RegCreateKeyEx()函數和RegSetValueEx()函數的使用方法如程序proj3_12.cpp所示。操作注冊表#include<stdio.h>#include<windows.h>
main(){ HKEYhKey1; DWORDdwDisposition; LONGlRetCode; //創建 lRetCode=RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\IniFileMapping\\WebSecurity", 0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE, NULL,&hKey1,&dwDisposition);
//如果創建失敗,顯示出錯信息 if(lRetCode!=ERROR_SUCCESS){ printf("ErrorincreatingWebSecuritykey\n"); return(0);} //設置第一個鍵值 lRetCode=RegSetValueEx(hKey1, "Hack_Name", 0, REG_SZ, (byte*)"sixage", 100); //設置第二個鍵值 lRetCode=RegSetValueEx(hKey1, "Hack_Hobby", 0, REG_SZ, (byte*)"Running", 100);
//如果創建失敗,顯示出錯信息 if(lRetCode!=ERROR_SUCCESS){ printf("ErrorinsettingSection1value\n"); return(0);} printf("注冊表編寫成功!\n"); return(0);}文件系統編程文件系統編程非常的重要,可以在DOS命令行下執行的操作都可以使用程序實現。在DOS命令行下使用命令“netuserHacker/add”添加一個用戶,同樣可以在程序中實現,如程序proj3_15.cpp所示。案例名稱:添加系統用戶程序名稱:proj3_15.cpp
#include<stdio.h>#include<windows.h>main(){ char*szCMD="netuserHacker/add"; BOOLbSuccess; PROCESS_INFORMATIONpiProcInfo; STARTUPINFOInfo; Info.cb=sizeof(STARTUPINFO); Info.lpReserved=NULL; Info.lpDesktop=NULL; Info.lpTitle=NULL; Info.cbReserved2=0; Info.lpReserved2=NULL; bSuccess=CreateProcess(NULL,szCMD,NULL,NULL,false,NULL,NULL,NULL,&Info,&piProcInfo); if(!bSuccess) printf("創建進程失敗!"); return1;}定時器編程著名的“CIH病毒”每年定時發作,其中需要利用定時器來控制程序的執行。定時器程序分成兩大類,一類是循環執行另一類是根據條件只執行一次。在程序中加載定時器,如程序proj3_18所示。定時器編程案例名稱:定時器編程程序名稱:proj3_18.cpp
#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;
/*消息處理函數wndProc的聲明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);
/*winMain函數的聲明*/intPASCALWinMain(HINSTANCEh_CurInstance, HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show){ /*初始化wndclass結構變量*/ wc.lpfnWndProc=WindowProc; wc.hInstance=h_CurInstance; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName="TheMainClass";
/*注冊WndClass結構變量*/ RegisterClass(&wc);
/*創建窗口*/ h_wnd=CreateWindow("TheMainClass","OurfirstWindow", WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);
/*顯示窗口*/ ShowWindow(h_wnd,SW_SHOWMAXIMIZED);
/*消息循環*/ while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg); return(msg.wParam);}#defineID_TIMER1
定時器編程/*定義消息處理函數*/longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg, WPARAMw_param,LPARAMl_param){ staticBOOLfFlipFlop=FALSE; HBRUSHhBrush; HDChdc; PAINTSTRUCTps; RECTrc;
switch(WinMsg) { caseWM_CREATE: SetTimer(h_wnd,ID_TIMER,1000,NULL); return0;
caseWM_TIMER: MessageBeep(-1); fFlipFlop=!fFlipFlop; InvalidateRect(h_wnd,NULL,FALSE); return0;
caseWM_PAINT: hdc=BeginPaint(h_wnd,&ps); GetClientRect(h_wnd,&rc); hBrush=CreateSolidBrush(fFlipFlop?RGB(255,0,0):RGB(0,0,255)); FillRect(hdc,&rc,hBrush);
EndPaint(h_wnd,&ps); DeleteObject(hBrush); return0;
caseWM_DESTROY: KillTimer(h_wnd,ID_TIMER); PostQuitMessage(0); return0; } returnDefWindowProc(h_wnd,WinMsg,w_param,l_param);}駐留程序編程案例名稱:內存駐留程序的編寫程序名稱:proj3_19.cpp
#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;
/*消息處理函數wndProc的聲明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);
/*winMain函數的聲明*/intPASCALWinMain(HINSTANCEh_CurInstance, HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show){ /*初始化wndclass結構變量*/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32/T 4686-2024城市軌道交通5G公網移動通信系統建設規范
- DB32/T 4618-2023船舶水污染物“一零兩全四免費”服務規范
- DB32/T 4584-2023翠蘆莉扦插育苗技術規程
- 高效能氣動角磨機行業跨境出海項目商業計劃書
- 傳染病科室應急管理職責
- 三年級數學課堂活動計劃設計
- 科技公司人事行政專員職責
- DB32/T 4495-2023元胡栽培及初加工技術規程
- 2025年牙膏項目安全調研評估報告
- 通信設備技術圖紙變更流程
- 【北京市人社局】2025年北京市人力資源市場薪酬數據報告(一季度)
- 醫院5s管理制度
- 2025年西藏自治區拉薩市城關區中考一模歷史試題(原卷版+解析版)
- 2025年濟南市中區九年級中考英語一模考試試題(含答案)
- 2025中學教師資格證《體育學科知識與教學能力》考前通關必練題庫-含答案
- 2025屆遼寧省丹東市高三總復習質量測試(一)生物試卷(原卷版+解析版)
- 2024中國人形機器人產業發展藍皮書1
- 食堂大廚考試試題及答案
- 調車作業培訓課件
- 違法用地違法建設培訓
- 玉盤二部合唱簡譜
評論
0/150
提交評論