賴宇陽, 徐平江, 房超, 唐曉柯, 張海峰, 杜君(南方電網(wǎng)科學(xué)研究院有限責(zé)任公司,廣東廣州50080;北京智芯微電子科技有限公司,北京009)
一種高安全的網(wǎng)絡(luò)數(shù)據(jù)傳輸實現(xiàn)*
賴宇陽1, 徐平江2, 房超2, 唐曉柯2, 張海峰2, 杜君2
(1南方電網(wǎng)科學(xué)研究院有限責(zé)任公司,廣東廣州510080;2北京智芯微電子科技有限公司,北京100192)
本文提出了一種基于L2TP協(xié)議的VPN實現(xiàn)方法。該方法首先建立L2TP的通道和會話連接,然后在L2TP連接上建立PPP通道,通過PPP協(xié)議驗證用戶合法性并動態(tài)的為其分配IP地址,利用可信計算單元對數(shù)據(jù)源進行加密后傳輸。這種方法保證了用戶數(shù)據(jù)在互聯(lián)網(wǎng)的可靠傳輸。
L2TP;PPP協(xié)議;可信計算
[Abstract]A VPN implementation based on L2TP protocol is proposed.In this implementation,the channels of L2TP and session connection are firstly established,then the PPP channel is built up on the L2TP connection,and via this PPP protocol,the user's validity is authenticated and the IP address dynamically allocated to the user.User data is encrypted for transmission by trusted computing unit.This method could ensure the reliable transmission of user data in the Internet.
[Key words]L2TP;PPP protocol;trusted computing
隨著互聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,網(wǎng)絡(luò)在社會生活中的重要作用日漸顯現(xiàn)。通過廣泛的使用網(wǎng)絡(luò),給人們的生活帶來了很大的方便。
然而事情總是有利有弊,隨著網(wǎng)絡(luò)技術(shù)的普遍應(yīng)用在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的安全性成為網(wǎng)絡(luò)發(fā)展需要重點考慮的問題。為了避免將數(shù)據(jù)在公網(wǎng)上傳輸,學(xué)校、企業(yè)等社會團體會建設(shè)內(nèi)部的局域網(wǎng)并通過防火墻和公網(wǎng)隔離。然而對于一些大型企業(yè),在不同城市有很多分支機構(gòu)。如果都要通過內(nèi)網(wǎng)通信,則成本巨大難以實現(xiàn)。如果企業(yè)員工在外地出差,想異地訪問企業(yè)內(nèi)網(wǎng)則更加困難。
面對這樣的需求,需要一種可以借助互聯(lián)網(wǎng)訪問局域網(wǎng)的方法,既可以利用互聯(lián)網(wǎng)的便利性,又可以實現(xiàn)局域網(wǎng)的安全性。在這種背景下VPN技術(shù)應(yīng)運而生。
VPN(Virtual Private Network)虛擬私有網(wǎng)絡(luò)是通過各種隧道技術(shù)在IP族協(xié)議上實現(xiàn)的。企業(yè)數(shù)據(jù)通過隧道傳輸,隧道的建立和數(shù)據(jù)傳輸可以通過口令及加密來保證其安全性。
有了安全的傳輸鏈路,用戶數(shù)據(jù)仍然不能透明傳遞。怎樣產(chǎn)生高強度的密文,如何讓數(shù)據(jù)接收方確認發(fā)送方的合法身份。需要引入可信計算平臺來參與系統(tǒng)的安全防護,可信平臺不依賴軟件,采用通過認證的安全算法用硬件對數(shù)據(jù)進行加解密、簽名、驗簽等操作。
安全的數(shù)據(jù)結(jié)合安全的鏈路最終實現(xiàn)一個高安全、可信賴的數(shù)據(jù)傳輸方法。
VPN應(yīng)用的隧道技術(shù)主要是指L2TP。L2TP(Layer Two Tunneling Protocol)是基于鏈路層的隧道協(xié)議,該協(xié)議通過UDP的1701端口承載于TCP/IP之上[1]。當(dāng)隧道建立后,可以在通道中建立若干個會話,這些會話彼此獨立。而L2TP消息分為兩類:控制消息和數(shù)據(jù)消息。其中控制消息負責(zé)建立、拆除及維護通道和會話,數(shù)據(jù)消息負責(zé)傳遞PPP數(shù)據(jù)。首先對L2TP的消息格式做簡單介紹。
1.1 L2TP數(shù)據(jù)格式
第一個字節(jié)中T表示數(shù)據(jù)類型,S表示NS和Nr數(shù)據(jù)域是否出現(xiàn),O表示后繼的offset數(shù)據(jù)項是否出現(xiàn),P表示該數(shù)據(jù)包是否具有較高的優(yōu)先級,Ver表示數(shù)據(jù)包類型,Tunnel ID表示建立的隧道ID,Session ID表示建立的會話ID,Ns表示發(fā)送數(shù)據(jù)包的序列號,Nr表示接受數(shù)據(jù)包的序列號,Offset表示 L2TP數(shù)據(jù)與L2TP頭的偏移量,Offset pad表示填充數(shù)據(jù)。
圖1 L2TP包頭格式
L2TP包的數(shù)據(jù)部分由不同的AVP(Attribute-Value Pair)數(shù)據(jù)域組成。格式如下:
圖2 AVP信息格式
M表示對不可識別AVP的處理方法,H用來指示AVP數(shù)據(jù)是否需要隱藏。該機制用來保證一些用戶隱私信息不會明文出現(xiàn)在報文里。如果該位置1,則后面會緊跟一個加密的AVP數(shù)據(jù)項來傳送這些數(shù)據(jù)。Vendor ID表示服務(wù)提供商的ID,Attribute Type表示AVP的類型,而Attribute Value表示對應(yīng)于某個AVP類型的具體值。
1.2 L2TP連接建立過程
在L2TP數(shù)據(jù)包中,消息類型要作為傳送的第一個AVP緊隨L2TP包頭發(fā)送,消息類型規(guī)定本條數(shù)據(jù)的具體功能。其它AVP例如協(xié)議版本、主機名稱則根據(jù)需要選擇發(fā)送。上面流程中用到的控制消息都是獨立的L2TP數(shù)據(jù)包中的第一條AVP。
SCCRQ(Start-Control-Connection-Request)該命令用于建立通道,是L2TP建立隧道的第一條命令。該命令后繼多個AVP,用來協(xié)商傳輸參數(shù)。通道號是其中比較重要的參數(shù),用來指定傳輸對端的通道號,在未協(xié)商前L2TP頭中所包含的通道號和會話號都是0。
SCCRP(Start-Control-Connection-Reply)該命令用于答復(fù)建立通道的SCCRQ命令。包含與前者相同的AVP數(shù)據(jù)項,同樣用來協(xié)商傳輸參數(shù)。該消息需要使用前一個SCCRQ命令中對方指定的通道號,同時為對方指定通道號。
SCCCN(Start-Control-Connection-Connected)用對方指定的通道號來發(fā)送本消息,表明通道的建立。
ZLB(Zero-Length Body)該數(shù)據(jù)包只有L2TP包頭,沒有數(shù)據(jù)體。用來通知通信對端沒有后繼數(shù)據(jù)包需要等待。
通過上面的命令交互,通信的雙方建立了可靠的信道,接下來需要在通道上建立會話。
圖3 L2TP會話建立過程
OCRQ(Outgoing-Call-Request)該命令用于協(xié)商會話號,向?qū)Ψ桨l(fā)送該消息后,對方在答復(fù)ICRP(Incoming-Call-Reply)消息的L2TP頭中填入該會話號,同時返回一個會話號供發(fā)送端使用。當(dāng)LAC端收到ICRP信號會向LNS端發(fā)送ICCN(Incoming-Call-Connected)信號,表明上一條ICRP信號已被接受。LNS收到ICCN后返回確認信號ZLB。
斷開L2TP連接的報文為CDN(Call-Disconnect-Notify),該報文斷開會話。在收到確認報文ZLB后,可以發(fā)送StopCCN報文斷開整個L2TP通道。
1.3 承載于L2TP連接的PPP應(yīng)用
當(dāng)通道和會話建立后,就可以在相應(yīng)的會話上進行PPP數(shù)據(jù)的傳輸了。首先要建立PPP通道,PPP協(xié)議主要有三部分構(gòu)成:鏈路控制協(xié)議LCP(Link Control Protocol)、NCP(Network Control Protocol)和PPP的擴展協(xié)議(如Multilink Protocol)。
圖4 PPP數(shù)據(jù)幀格式
PPP數(shù)據(jù)幀標志字節(jié)為0x7E,表示一幀數(shù)據(jù)的開始和結(jié)束。如果用戶數(shù)據(jù)含0x7E則需要進行字符插入,第二個字節(jié)為地址固定為廣播地址0xFF。第三字節(jié)為協(xié)議控制字節(jié),在PPP中固定為0x03。
協(xié)議域在數(shù)據(jù)幀中最為重要,它規(guī)定了數(shù)據(jù)幀的功能。下面列出常用的協(xié)議域取值。
表1 PPP協(xié)議常用的協(xié)議值
數(shù)據(jù)域的最大和缺省長度為1500字節(jié),該長度可以在建立PPP連接時協(xié)商。
(1)鏈路控制協(xié)議LCP
LCP報文用來建立鏈路連接,它作為PPP報文的數(shù)據(jù)域部分,此時PPP的協(xié)議域必須設(shè)置為0xC021[2]。為了完成建立鏈路的功能,LCP報文又分為請求、應(yīng)答、拒絕、確認等不同類型報文。
圖5 LCP數(shù)據(jù)格式
LCP的數(shù)據(jù)域包含許多不同類型的報文,用來協(xié)商建立鏈接時的參數(shù),這些類型如下表所示。
表2 LCP數(shù)據(jù)域的常見參數(shù)
上面的數(shù)據(jù)類型可以包含在一次LCP協(xié)商的過程中。例如當(dāng)PPP設(shè)備接收到Config-Request數(shù)據(jù)包后,可以根據(jù)自身對協(xié)議的支持程度,返回不同報文。如果支持全部的配置參數(shù)則返回Config-Ack,同時將協(xié)商的參數(shù)項原封不動的返回給發(fā)端。如果對協(xié)商參數(shù)中某些參數(shù)項不同意,則返回Config-Nak,同時將協(xié)商的參數(shù)信息返回,在自己不同意的參數(shù)項中填入允許的參數(shù)信息。發(fā)端設(shè)備會根據(jù)返回的參數(shù)信息重新發(fā)送Request數(shù)據(jù)包,協(xié)商過程直到收到Ack信號后進入下一個階段。如果在協(xié)商過程中,通信的一方收到無法識別的參數(shù)項,則應(yīng)該返回Config-Reject信息,該信息帶有所有不被識別的數(shù)據(jù)項。需要注意的是PPP設(shè)備通信雙方的參數(shù)配置過程獨立完成。
當(dāng)需要斷開連接時發(fā)送Terminate-Request報文,收到回復(fù)報文Terminate-Ack后PPP連接隨即斷開。
(2)PPP連接的認證方法
當(dāng)參數(shù)協(xié)商完畢后,通常進入PPP連接的認證階段。Chap認證為3次握手協(xié)議,是PPP協(xié)議默認的認證方式。發(fā)送CHAP數(shù)據(jù)包需要在PPP的協(xié)議域中填入0xC223,其幀格式同LCP數(shù)據(jù)包一樣,通過在代碼域中填入不同的值來表示不同功能的包。
CHAP認證過程如下:
1)認證方向被認證方發(fā)送挑戰(zhàn)幀,該幀包含自己的主機名和一段隨機報文。
2)被認證方收到挑戰(zhàn)幀后,得到其中的主機名,在本地查找與該用戶名對應(yīng)的密鑰,使用該密鑰通過MD5算法計算挑戰(zhàn)幀中的隨機報文的哈希值,將生成的新報文和主機名作為響應(yīng)返回給認證方。
3)認證方收到應(yīng)答后,用同樣的方法找到主機名對應(yīng)的密鑰對隨機報文進行哈希計算。將哈希結(jié)果和收到的響應(yīng)報文比較,如果符合則返回成功報文,認證結(jié)束。
通過以上舉措,系統(tǒng)建立了一個安全可靠的數(shù)據(jù)鏈路連接。然而用戶如何產(chǎn)生一個安全可靠的數(shù)據(jù)包,即令數(shù)據(jù)以密文方式傳輸,又保證接收方可以驗證發(fā)送者,確保收方不會收到一個偽造的數(shù)據(jù)包。為了達到這樣的設(shè)計日的,我們又為系統(tǒng)開發(fā)出可信計算單元。
所謂的可信計算,是指在計算和通信系統(tǒng)中廣泛使用基于硬件安全模塊支持的可信計算平臺,以提高系統(tǒng)整體的安全性。
為了更方便的實現(xiàn)設(shè)計日標,采用符合國家商用密碼標準算法要求的UKEY作為可信計算平臺。為了使系統(tǒng)具有更好的兼容性,將通過CSP算法中間件來調(diào)用UKEY接口進行系統(tǒng)的加解密操作。
UKEY平臺的核心是一個安全芯片。該芯片具備國家商用密碼標準算法SM1、SM2、SM3以及RSA、DES等算法,可以進行數(shù)據(jù)的加解密運算。同時該芯片具有一個微型的操作系統(tǒng),可以進行文件管理、多任務(wù)調(diào)度以及對外的通信。芯片內(nèi)嵌的安全體系可以為應(yīng)用提供不同等級的安全權(quán)限,UKEY中的文件也可以按應(yīng)用需要,在發(fā)行時賦予不同的訪問屬性。
UKEY平臺可以產(chǎn)生一對非對稱密鑰,私鑰保存在本地,不允許任何外部的讀寫操作。而公鑰可以通過密鑰導(dǎo)出命令,傳遞給應(yīng)用,應(yīng)用再將KEY的用戶信息及公鑰上傳證書服務(wù)器申請公鑰證書,申請到的證書最終回傳UKEY形成一個可信賴的數(shù)據(jù)文件。
微軟加密應(yīng)用程序接口(CSP)為win32應(yīng)用程序提供了用戶身份認證、數(shù)據(jù)加密和簽名等安全處理,然而CryptoAPI本身并不實現(xiàn)密碼運算相關(guān)操作,而是操作系統(tǒng)通過調(diào)用加密服務(wù)函數(shù)CSP來實現(xiàn)。
CSP通過容器來組織密鑰,每個容器可以存放2個密鑰對,一個用于加密解密,一個用于簽名驗證,同時還可以保存與公鑰對應(yīng)的X509公鑰證書。此外容器還將保存會話產(chǎn)生的臨時密鑰。
圖6 CSP中間件在系統(tǒng)中的作用
數(shù)據(jù)加密過程描述:
1)應(yīng)用發(fā)起數(shù)據(jù)加密傳輸?shù)囊蟆?/p>
2)應(yīng)用將本次登錄系統(tǒng)的用戶名發(fā)給UKEY。
UKEY校驗用戶名和本地證書相關(guān)信息是否一致。
4)UKEY將本地公鑰證書返回應(yīng)用。
5)應(yīng)用校驗用戶信息,同時檢查X509證書格式。
6)身份驗證通過,應(yīng)用將需要加密的數(shù)據(jù)傳輸?shù)経KEY。
7)UKEY使用臨時密鑰加密數(shù)據(jù)。
8)UKEY利用公鑰將密文及臨時密鑰打包成數(shù)字信封。
9)加密數(shù)據(jù)返回應(yīng)用.
10)完成。
通過以上流程,可以產(chǎn)生基于可信計算平臺的安全數(shù)據(jù),這樣的數(shù)據(jù)在前面建立的安全鏈路上傳輸,使系統(tǒng)的安全性達到最佳。
下面的數(shù)據(jù)包為L2TP連接建立后在LAC端截取的數(shù)據(jù)包,下面對該數(shù)據(jù)包做簡要的介紹。
圖7 L2TP上傳輸?shù)腜PP數(shù)據(jù)包
可以看到,當(dāng)L2TP連接建立后,通過該連接傳輸數(shù)據(jù)時必須包含通道號和會話號。每個通道可以承載不同的會話,L2TP占用UDP的1701端口。由于是L2TP的數(shù)據(jù)信息,因此L2TP包頭以0x40開始。通道號和會話號都是通過建立連接時協(xié)商所得。L2TP包的數(shù)據(jù)部分是一個完整的IP包,該包的日標IP地址是本機實際想要訪問的地址,而源地址則是由NCP協(xié)商得到的虛擬地址,該IP包所包含的數(shù)據(jù)內(nèi)容是通信實際需要的。
當(dāng)LNS收到該數(shù)據(jù)包后依次去除外層IP包頭得到L2TP數(shù)據(jù)包,再去掉L2TP包頭得到內(nèi)層IP包,最后去除內(nèi)層IP包頭后將通信數(shù)據(jù)重新封裝成單層的數(shù)據(jù)包按日標地址進行發(fā)送。
當(dāng)外界的IP包到達LNS服務(wù)器后,根據(jù)IP包頭信息LNS可以查詢到對應(yīng)的通道號和會話號組織成L2TP數(shù)據(jù)包,最后封裝外層IP數(shù)據(jù)包將數(shù)據(jù)發(fā)往需要的LAC。
L2TP技術(shù)的興起在一定程度提升了在互聯(lián)網(wǎng)上傳輸數(shù)據(jù)的安全性,而可信計算硬件的應(yīng)用強化了用戶源數(shù)據(jù)的安全性。在安全的數(shù)據(jù)鏈路上傳輸可信數(shù)據(jù)在最大程度上保證了通信雙方的安全性。
通過這樣的設(shè)計方法,使應(yīng)用獲得了很好的安全保障。然而沒有一種方法是絕對完美的,由于可信計算增加了系統(tǒng)負擔(dān)、降低了效率。為了克服這種影響,需要進一步研發(fā)具有高速運算能力的可信計算平臺。
[1] Townsley W,Valencia A,Rubens A.RFC2661.Layer Two Tunneling Protocol[S].1999:3.
[2] Simpson W.RFC1661.Point-to-Point Protocol[S].1994:5.
A High-Security Implementation of Network Data Transmission
LAI Yu-yang1,XU Ping-jiang2,F(xiàn)ANG Chao2,TANG Xiao-ke2,ZHANG Hai-Feng2,OU Jun2
(1Electric Power Research Institute China Southern Power Grid Co.,Ltd.,Guangzhou Guangdong 510080,China;2Beijing Smart Chip Microelectronics Company Limited,Beijing 100192,China)
TP393.08
A
1009-8054(2016)02-0109-04
2015-10-09
賴宇陽(1987—),男,碩士,工程師,主要研究方向為計量自動化系統(tǒng)安全防護;
徐平江(1977—),男,碩士,工程師,主要研究方向為智能電網(wǎng);
房 超(1982—),男,博士,高級工程師,主要研究方向為通信及電力自動化技術(shù);
唐蹺柯(1977—),男,碩士,高級工程師,主要研究方向為芯片設(shè)計;
張海峰(1978—),男,碩士,高級工程師,主要研究方向為芯片設(shè)計;
杜 君(1982—),女,碩士,工程師,主要研究方向為電力系統(tǒng)自動化。