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