版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、linux下的網(wǎng)絡(luò)層加密解密的實(shí)現(xiàn)摘 要隨著網(wǎng)絡(luò)技術(shù)在各行各業(yè)中的廣泛應(yīng)用,網(wǎng)絡(luò)安全逐漸成為一個(gè)重要的問題。linux是一個(gè)優(yōu)秀的、開源的操作系統(tǒng),非常適合作為一些新技術(shù)的測試平臺。本文修改linux操作系統(tǒng)內(nèi)核的網(wǎng)絡(luò)協(xié)議,以實(shí)現(xiàn)對網(wǎng)絡(luò)通信數(shù)據(jù)的加密。先介紹了網(wǎng)絡(luò)數(shù)據(jù)加密的發(fā)展和現(xiàn)狀。接著分析了網(wǎng)際協(xié)議、des加密算法和linux下的網(wǎng)際協(xié)議的實(shí)現(xiàn)和套接字結(jié)構(gòu)。然后,實(shí)現(xiàn)了des算法,對內(nèi)核進(jìn)行了修改,添加了一些功能性內(nèi)核模塊。在此基礎(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)位于ip層的端到端加密的系統(tǒng),整個(gè)系統(tǒng)嵌入到linux內(nèi)核中,可以通過內(nèi)核模塊對其進(jìn)行操作,來實(shí)現(xiàn)其功能。該系統(tǒng)的主要特點(diǎn)是針對ip地址判斷是
2、否進(jìn)行加密操作。最后,通過測試驗(yàn)證了系統(tǒng)設(shè)計(jì)的正確性。關(guān)鍵字:網(wǎng)絡(luò)層;linux內(nèi)核;端到端;加密;模塊;網(wǎng)絡(luò)通信the implementation of encryption and decryption at net layer based on linuxabstractwith the abroad use of network technology in various trades, network security is becoming an important issue. linux is an excellent open-source operating system
3、 and is very suitable for the test of some new technology. in this paper, the network protocol stack of the linux operating system kernel is changed to encrypt network communication data. firstly, introduces the development and actuality of the network data encryption. secondly, analyses the inernet
4、 protocol, the des encryption algorithm, and the implementation of internet protocol and the socket structure in the linux kernel. whereafter, realizes the des algorithm, changes the kernel, and adds some functional kernel modules. and then, an ip end-to-end encryption system is designed and impleme
5、nted, and it is embeded in the linux kernel, we can achieve its function through kernel module. lastly, a test is given to testify the correctness of the design.key words: net layer; linux kernel; end-to-end; encrypt; module; network communications目 錄論文總頁數(shù):23頁1 引言12 網(wǎng)絡(luò)數(shù)據(jù)加密技術(shù)12.1 鏈路加密12.2 節(jié)點(diǎn)加密22.3 端到
6、端加密23 系統(tǒng)的總體分析33.1 網(wǎng)際協(xié)議分析33.2 套接字結(jié)構(gòu)分析53.3 linux下ipv4的實(shí)現(xiàn)63.4 des算法介紹84 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)124.1 系統(tǒng)的總體設(shè)計(jì)124.2 模塊部分的設(shè)計(jì)與實(shí)現(xiàn)134.3 des算法實(shí)現(xiàn)154.4 對內(nèi)核函數(shù)的修改185 網(wǎng)絡(luò)層加密系統(tǒng)的測試18結(jié)論21參考文獻(xiàn)21致謝22聲明231 引言隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)安全也就成為當(dāng)今網(wǎng)絡(luò)社會的焦點(diǎn)中的焦點(diǎn),幾乎沒有人不在談?wù)摼W(wǎng)絡(luò)上的安全問題,病毒、黑客程序、郵件炸彈、遠(yuǎn)程偵聽等這一切都無不讓人膽戰(zhàn)心驚。病毒、黑客的猖獗使身處今日網(wǎng)絡(luò)社會的人們感覺到談網(wǎng)色變,無所適從。 但我們必需清楚地認(rèn)識到,這一
7、切一切的安全問題我們不可一下全部找到解決方案,況且有的是根本無法找到徹底的解決方案,如病毒程序,因?yàn)槿魏畏床《境绦蚨贾荒茉谛虏《景l(fā)現(xiàn)之后才能開發(fā)出來,目前還沒有哪能一家反病毒軟件開發(fā)商敢承諾他們的軟件能查殺所有已知的和未知的病毒,所以我們不能有等網(wǎng)絡(luò)安全了再上網(wǎng)的念頭,因?yàn)榛蛟S網(wǎng)絡(luò)不能有這么一日,就象“矛”與“盾”,網(wǎng)絡(luò)與病毒、黑客永遠(yuǎn)是一對共存體。現(xiàn)代的網(wǎng)絡(luò)加密技術(shù)就是適應(yīng)了網(wǎng)絡(luò)安全的需要而應(yīng)運(yùn)產(chǎn)生的,它為我們進(jìn)行一般的電子商務(wù)活動提供了安全保障,如在網(wǎng)絡(luò)中進(jìn)行文件傳輸、電子郵件往來和進(jìn)行合同文本的簽署等。其實(shí)加密技術(shù)也不是什么新生事物,只不過應(yīng)用在當(dāng)今電子商務(wù)、電腦網(wǎng)絡(luò)中還是近幾年的歷史。
8、當(dāng)今網(wǎng)絡(luò)社會選擇加密已是我們別無選擇,其一是我們知道在互聯(lián)網(wǎng)上進(jìn)行文件傳輸、電子郵件商務(wù)往來存在許多不安全因素,特別是對于一些大公司和一些機(jī)密文件在網(wǎng)絡(luò)上傳輸。而且這種不安全性是互聯(lián)網(wǎng)存在基礎(chǔ)tcp/ip協(xié)議所固有的,包括一些基于tcp/ip的服務(wù);另一方面,互聯(lián)網(wǎng)給眾多的商家?guī)砹藷o限的商機(jī),互聯(lián)網(wǎng)把全世界連在了一起,走向互聯(lián)網(wǎng)就意味著走向了世界,這對于無數(shù)商家無疑是夢寐以求的好事,特別是對于中小企業(yè)。為了解決這一對矛盾、為了能在安全的基礎(chǔ)上大開這通向世界之門,我們只好選擇了數(shù)據(jù)加密和基于加密技術(shù)的數(shù)字簽名。2 網(wǎng)絡(luò)數(shù)據(jù)加密技術(shù)2.1 鏈路加密對于在兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)間的某一次通信鏈路, 鏈路加密
9、能為網(wǎng)上傳輸?shù)臄?shù)據(jù)提供安全保證。對于鏈路加密(又稱在線加密), 所有消息在被傳輸之前進(jìn)行加密, 在每一個(gè)節(jié)點(diǎn)對接收到的消息進(jìn)行解密, 然后先使用下一個(gè)鏈路的密鑰對消息進(jìn)行加密, 再進(jìn)行傳輸。在到達(dá)目的地之前, 一條消息可能要經(jīng)過許多通信鏈路的傳輸。由于在每一個(gè)中間傳輸節(jié)點(diǎn)消息均被解密后重新進(jìn)行加密, 因此, 包括路由信息在內(nèi)的鏈路上的所有數(shù)據(jù)均以密文形式出現(xiàn)。這樣, 鏈路加密就掩蓋了被傳輸消息的源點(diǎn)與終點(diǎn)。由于填充技術(shù)的使用以及填充字符在不需要傳輸數(shù)據(jù)的情況下就可以進(jìn)行加密,這使得消息的頻率和長度特性得以掩蓋, 從而可以防止對通信業(yè)務(wù)進(jìn)行分析。盡管鏈路加密在計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中使用得相當(dāng)普遍, 但
10、它并非沒有問題。鏈路加密通常用在點(diǎn)對點(diǎn)的同步或異步線路上, 它要求先對在鏈路兩端的加密設(shè)備進(jìn)行同步, 然后使用一種鏈模式對鏈路上傳輸?shù)臄?shù)據(jù)進(jìn)行加密。這就給網(wǎng)絡(luò)的性能和可管理性帶來了副作用。在線路/信號經(jīng)常不通的海外或衛(wèi)星網(wǎng)絡(luò)中,鏈路上的加密設(shè)備需要頻繁地進(jìn)行同步, 帶來的后果是數(shù)據(jù)丟失或重傳。另一方面, 即使僅一小部分?jǐn)?shù)據(jù)需要進(jìn)行加密, 也會使得所有傳輸數(shù)據(jù)被加密。在一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn), 鏈路加密僅在通信鏈路上提供安全性, 消息以明文形式存在, 因此所有節(jié)點(diǎn)在物理上必須是安全的, 否則就會泄漏明文內(nèi)容。然而保證每一個(gè)節(jié)點(diǎn)的安全性需要較高的費(fèi)用, 為每一個(gè)節(jié)點(diǎn)提供加密硬件設(shè)備和一個(gè)安全的物理環(huán)境所需要
11、的費(fèi)用由以下幾部分組成: 保護(hù)節(jié)點(diǎn)物理安全的雇員開銷, 為確保安全策略和程序的正確執(zhí)行而進(jìn)行審計(jì)時(shí)的費(fèi)用, 以及為防止安全性被破壞時(shí)帶來損失而參加保險(xiǎn)的費(fèi)用。在傳統(tǒng)的加密算法中, 用于解密消息的密鑰與用于加密的密鑰是相同的,該密鑰必須被秘密保存, 并按一定規(guī)則進(jìn)行變化。這樣, 密鑰分配在鏈路加密系統(tǒng)中就成了一個(gè)問題, 因?yàn)槊恳粋€(gè)節(jié)點(diǎn)必須存儲與其相連接的所有鏈路的加密密鑰, 這就需要對密鑰進(jìn)行物理傳送或者建立專用網(wǎng)絡(luò)設(shè)施。而網(wǎng)絡(luò)節(jié)點(diǎn)地理分布的廣闊性使得這一過程變得復(fù)雜, 同時(shí)增加了密鑰連續(xù)分配時(shí)的費(fèi)用。2.2 節(jié)點(diǎn)加密盡管節(jié)點(diǎn)加密能給網(wǎng)絡(luò)數(shù)據(jù)提供較高的安全性, 但它在操作方式上與鏈路加密是類似的
12、:兩者均在通信鏈路上為傳輸?shù)南⑻峁┌踩裕荚谥虚g節(jié)點(diǎn)先對消息進(jìn)行解密,然后進(jìn)行加密。因?yàn)橐獙λ袀鬏數(shù)臄?shù)據(jù)進(jìn)行加密,所以加密過程對用戶是透明的。然而,與鏈路加密不同, 節(jié)點(diǎn)加密不允許消息在網(wǎng)絡(luò)節(jié)點(diǎn)以明文形式存在,它先把收到的消息進(jìn)行解密, 然后采用另一個(gè)不同的密鑰進(jìn)行加密, 這一過程是在節(jié)點(diǎn)上的一個(gè)安全模塊中進(jìn)行。節(jié)點(diǎn)加密要求報(bào)頭和路由信息以明文形式傳輸, 以便中間節(jié)點(diǎn)能得到如何處理消息的信息。因此這種方法對于防止攻擊者分析通信業(yè)務(wù)是脆弱的。2.3 端到端加密端到端加密允許數(shù)據(jù)在從源點(diǎn)到終點(diǎn)的傳輸過程中始終以密文形式存在。采用端到端加密(又稱脫線加密或包加密), 消息在被傳輸時(shí)到達(dá)終點(diǎn)之前
13、不進(jìn)行解密, 因?yàn)橄⒃谡麄€(gè)傳輸過程中均受到保護(hù), 所以即使有節(jié)點(diǎn)被損壞也不會使消息泄露。端到端加密系統(tǒng)的價(jià)格便宜些, 并且與鏈路加密和節(jié)點(diǎn)加密相比更可靠,更容易設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)。端到端加密還避免了其它加密系統(tǒng)所固有的同步問題, 因?yàn)槊總€(gè)報(bào)文包均是獨(dú)立被加密的, 所以一個(gè)報(bào)文包所發(fā)生的傳輸錯誤不會影響后續(xù)的報(bào)文包。此外,從用戶對安全需求的直覺上講, 端到端加密更自然些。單個(gè)用戶可能會選用這種加密方法, 以便不影響網(wǎng)絡(luò)上的其他用戶, 此方法只需要源和目的節(jié)點(diǎn)是保密的即可。端到端加密系統(tǒng)通常不允許對消息的目的地址進(jìn)行加密, 這是因?yàn)槊恳粋€(gè)消息所經(jīng)過的節(jié)點(diǎn)都要用此地址來確定如何傳輸消息。由于這種加密
14、方法不能掩蓋被傳輸消息的源點(diǎn)與終點(diǎn), 因此它對于防止攻擊者分析通信業(yè)務(wù)是脆弱的。3 系統(tǒng)的總體分析3.1 網(wǎng)際協(xié)議分析網(wǎng)絡(luò)層是tcp/ip協(xié)議棧的核心組件,網(wǎng)際協(xié)議(internet protocol)是網(wǎng)絡(luò)層的最重要協(xié)議。它為internet以及其他基于ip的網(wǎng)絡(luò)上的所有數(shù)據(jù)通信提供了基本服務(wù)。ip的首要任務(wù)是:隱藏各種數(shù)據(jù)傳輸層之間的差異,并且為不同的網(wǎng)絡(luò)技術(shù)提供一種統(tǒng)一的表示??偟膩碚f,ip實(shí)現(xiàn)了如下功能:Ø 提供了無連接的、不安全的數(shù)據(jù)報(bào)服務(wù);Ø 定義了ip數(shù)據(jù)報(bào)是數(shù)據(jù)傳輸?shù)幕締卧?#216; 定義了ip尋址機(jī)制;Ø 在各種互聯(lián)網(wǎng)絡(luò)之間路由、轉(zhuǎn)發(fā)ip數(shù)
15、據(jù)報(bào);Ø 驗(yàn)證包的生存期;Ø 分片、組裝包;Ø 使用icmp輸出錯誤。ip的開發(fā)思路是,即使有一些傳輸故障存在,仍能維持兩個(gè)之間的通信。因此,ip的開發(fā)基礎(chǔ)是數(shù)據(jù)報(bào)交換原理。ip的頭字段如圖1:圖1 ip首部Ø 4位版本號:表示ip的版本,現(xiàn)有ipv4和ipv6;Ø 4位首部長:表示ip首部長,值域?yàn)?15;Ø 8位tos字段:包括3位優(yōu)先權(quán)字段(已廢棄),4位tos子字段和1位未用位(必須為0);Ø 16位ip數(shù)據(jù)報(bào)總長度,包括頭部;Ø 16位標(biāo)志位:為此ip數(shù)據(jù)報(bào)的唯一標(biāo)志(同一數(shù)據(jù)報(bào)分片后此相同);Ø
16、; 3位標(biāo)志:用于分片于組裝的標(biāo)志位;Ø 13位片偏移:用于確定組裝分片的順序;Ø 8位生存時(shí)間:限定路由次數(shù),避免無用數(shù)據(jù)報(bào)長期占用網(wǎng)絡(luò)資源;Ø 8位協(xié)議:標(biāo)記上層協(xié)議類型;Ø 16位首部檢驗(yàn)和:首部檢驗(yàn)和存放與其中,作用為檢驗(yàn)ip頭正確性;在linux系統(tǒng)中ip頭部以結(jié)構(gòu)體方式實(shí)現(xiàn),定義在include/linux/ip.h中:struct iphdr #if defined(_little_endian_bitfield)_u8ihl:4,version:4;#elif defined (_big_endian_bitfield)_u8versio
17、n:4, ihl:4;#else#error"please fix <asm/byteorder.h>"#endif_u8tos;_u16tot_len;_u16id;_u16frag_off;_u8ttl;_u8protocol;_u16check;_u32saddr;_u32daddr;/*the options start here. */;3.2 套接字結(jié)構(gòu)分析nextprevliststampdevhnhmacdstlen.headdatatailendsk_buff_headheadroommac地址ip頭傳輸層頭數(shù)據(jù)tailroomsk_buffs
18、k_buff圖2 套接字緩存結(jié)構(gòu)圖在linux系統(tǒng)tcp/ip協(xié)議棧設(shè)計(jì)中的一個(gè)基本概念就是套接字緩存,稱作sk_buff,在整個(gè)聯(lián)網(wǎng)代碼中用于存儲各種信息。它滿足了網(wǎng)絡(luò)協(xié)議對內(nèi)核的存儲器管理能力提出的很多要求。這些要求包括能方便的操作可變長緩存,能在緩存的頭部和尾部填加數(shù)據(jù),能從緩存中移除數(shù)據(jù),并能盡量減少這些操作所做的數(shù)據(jù)復(fù)制。它被定義在include/linux/skbuff.h中,其結(jié)構(gòu)表示如圖2:由圖2可見,套接字緩存由兩部分組成:Ø 報(bào)文數(shù)據(jù):該存儲區(qū)域保存了實(shí)際在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù);Ø 管理數(shù)據(jù):當(dāng)一個(gè)報(bào)文在linux內(nèi)核中進(jìn)行處理時(shí),內(nèi)核需要額外的數(shù)據(jù),這些數(shù)
19、據(jù)沒有必要存儲在實(shí)際的報(bào)文當(dāng)中。這些主要是實(shí)現(xiàn)方式中特有的數(shù)據(jù)(指針、計(jì)數(shù)器等)。他們構(gòu)成了協(xié)議實(shí)例間交換的接口控制信息。套接字緩存是用來定位和管理一個(gè)報(bào)文在內(nèi)核中被處理的整個(gè)周期的。當(dāng)應(yīng)用程序向一個(gè)套接字傳輸數(shù)據(jù)后,該套接字就創(chuàng)建相應(yīng)的套接字緩存并將有效數(shù)據(jù)的地址存入此結(jié)構(gòu)的變量中。在報(bào)文穿過層的過程中,每一層的報(bào)文的頭信息被插入到有效數(shù)據(jù)之前。由于為報(bào)文頭申請了足夠的空間,所以避免了在報(bào)文頭之后對有效數(shù)據(jù)的多次拷貝。有效數(shù)據(jù)只被拷貝了兩次,一次是從用戶空間到內(nèi)核空間,一次是到達(dá)網(wǎng)卡的時(shí)候。3.3 linux下ipv4的實(shí)現(xiàn)對于基于tcp/ip協(xié)議實(shí)現(xiàn)的網(wǎng)絡(luò)來說,ip層是完成數(shù)據(jù)傳輸?shù)谋匾獙?/p>
20、,網(wǎng)絡(luò)層以上的包都要經(jīng)過網(wǎng)絡(luò)層。數(shù)據(jù)包可以從三處進(jìn)入具體的網(wǎng)絡(luò)層:Ø 通過網(wǎng)絡(luò)適配器抵達(dá)計(jì)算機(jī)的包會存儲在對應(yīng)的輸入隊(duì)列中。判定了數(shù)據(jù)鏈路層中的三層協(xié)議后,上層協(xié)議為ip的包會傳遞給ip_rcv()函數(shù)。Ø 第二處入口位于傳輸層協(xié)議接口處。這些是tcp、udp等協(xié)議用到的包。這些協(xié)議使用ip_queue_xmit()函數(shù)將他們打包成ip包并發(fā)送出去。還有一些其他函數(shù)也能生成ip包。Ø 第三種情況就是:ip層自動主動生成ip包。這些包主要是新的多播包、大型包的碎片及不含專門有效負(fù)載的icmp包或者igmp包。這些包是用特殊的方法創(chuàng)建的(如icmp_send())。包
21、一旦進(jìn)入了網(wǎng)絡(luò)層,就會有多種退出選擇。對ip而言,我們一般只區(qū)分計(jì)算機(jī)可扮演的兩種不同角色,其中第一種是第二種的特例。Ø 終端系統(tǒng):linux計(jì)算機(jī)正常情況下會配置成終端系統(tǒng)它會用作工作站或者服務(wù)器。主要負(fù)責(zé)的任務(wù)是運(yùn)行用戶應(yīng)用程序或者提供應(yīng)用程序服務(wù)。終端系統(tǒng)的基本屬性是,它們不會轉(zhuǎn)發(fā)ip包。也就是說,如果系統(tǒng)實(shí)際上只有一塊網(wǎng)絡(luò)適配器,即可認(rèn)定它是終端系統(tǒng)。即使有多種網(wǎng)絡(luò)訪問的系統(tǒng)也可以配置成終端系統(tǒng)只要禁用包轉(zhuǎn)發(fā)即可。Ø 路由器:路由器將抵達(dá)一塊網(wǎng)絡(luò)適配器的ip包傳遞給另一塊網(wǎng)絡(luò)適配器。也就是說,路由器擁有多塊在本地接口之間轉(zhuǎn)發(fā)包的網(wǎng)絡(luò)適配器。包抵達(dá)路由器之后,一般有兩
22、種選擇:可以本地投寄(即傳遞給上層協(xié)議處理);或者,可以轉(zhuǎn)發(fā)包。因此,路由器可以看作是終端系統(tǒng)的一般化,它還有額外的包轉(zhuǎn)發(fā)功能。與終端系統(tǒng)相反,路由器一般不會啟動任何應(yīng)用程序,以此確保盡可能快的轉(zhuǎn)發(fā)包。linux內(nèi)核中ip包流經(jīng)網(wǎng)絡(luò)層時(shí),其主要途徑如圖3。首先分析傳入包的情況。ip_rcv()進(jìn)行一些ip協(xié)議工作。首先,該函數(shù)丟棄那些并非去往本地計(jì)算機(jī)的包;接著過濾掉包頭錯誤的包,主要是檢驗(yàn)它的尺寸是否至少相當(dāng)于ip包頭,包是否是ipv4,檢驗(yàn)和是否正確,包的長度是否錯誤。然后再把包傳遞給ip_rcv_finish()。ip_rcv_finish()中激活ip_route_input()函數(shù)以
23、決定包的路由。接下來,ip_rcv_finish檢查ip頭是否含有選項(xiàng)。如果確定含有選項(xiàng),則分析這些選項(xiàng)并創(chuàng)ip_local_deliverip_rcv_finiship_rcvip_route_input轉(zhuǎn)發(fā)信息庫ip_forwardip_mr_inputip_forward_finiship_fragmentip_finish_outputip_finish_output2ip_outputip_queue_xmit2ip_queue_xmit圖3 linux中ip實(shí)現(xiàn)的體系結(jié)構(gòu) 建一個(gè)ip_options的結(jié)構(gòu);所有選項(xiàng)設(shè)置都會有效的存儲在這個(gè)結(jié)構(gòu)中。最后在ip_rcv_finish()
24、中,ip流程走到了一個(gè)岔路口:包是去往本地還是被轉(zhuǎn)發(fā):Ø 遇到應(yīng)該投遞給本地計(jì)算機(jī)的單播包或多播包時(shí),則進(jìn)入ip_local_deliver();Ø 遇到需要轉(zhuǎn)發(fā)的單播包則進(jìn)入ip_forward();Ø 遇到需要轉(zhuǎn)發(fā)的多播包則交給ip_mr_input()處理;由于這里路徑出現(xiàn)分支,而針對個(gè)人計(jì)算機(jī),一般不開啟轉(zhuǎn)發(fā)功能,在這里只描述包的本地投寄。不需要轉(zhuǎn)發(fā)的數(shù)據(jù)包被ip_rcv_finish()傳遞給ip_local_deliver()。ip_local_deliver()的首要任務(wù)是利用ip_defrag()組裝那些分片后的包。接著,流程流向ip_local_
25、deliver_finish()。在這里會需要為下一步處理判定傳輸協(xié)議。在這里,分析包的傳出流程。本地創(chuàng)建的包在處理時(shí)與傳入時(shí)是完全獨(dú)立的。首先,創(chuàng)建ip頭的函數(shù)不只一個(gè),而是多個(gè),其中包括了ip_queue_xmit()、ip_build_and_send_pkt()和ip_push_pending_frames()。每個(gè)函數(shù)針對某項(xiàng)特殊用法進(jìn)行了定制和優(yōu)化。其中ip_build_and_send_pkt()只處理tcp連接過程中的syn/ack等包,而ip_queue_xmit()函數(shù)來自上層協(xié)議的其他包,ip_push_pending_frames()處理ip層自身的包。它們首先會檢查套
26、接字結(jié)構(gòu)中路由。若尚未選擇路由,則啟用ip_route_output()選出一個(gè)路由。接著會填充ip包的各個(gè)字段(版本、包頭長度、tos字段、碎片偏移量、地址級協(xié)議字段)。然后,會由ip_options_build()添加可能存在的ip選項(xiàng)。最后計(jì)算檢驗(yàn)和。然后流程流經(jīng)ip_queue_xmit2()等函數(shù),最后到達(dá)鏈路層,由鏈路層繼續(xù)處理。3.4 des算法介紹美國國家標(biāo)準(zhǔn)局1973年開始研究除國防部外的其它部門的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),于1973年5月15日和1974年8月27日先后兩次向公眾發(fā)出了征求加密算法的公告。加密算法要達(dá)到的目的(通常稱為des 密碼算法要求)主要為以下四點(diǎn):&
27、#216; 提供高質(zhì)量的數(shù)據(jù)保護(hù),防止數(shù)據(jù)未經(jīng)授權(quán)的泄露和未被察覺的修改:Ø 具有相當(dāng)高的復(fù)雜性,使得破譯的開銷超過可能獲得的利益,同時(shí)又要便于理解和掌握; Ø des密碼體制的安全性應(yīng)該不依賴于算法的保密,其安全性僅以加密密鑰的保密為基礎(chǔ); Ø 實(shí)現(xiàn)經(jīng)濟(jì),運(yùn)行有效,并且適用于多種完全不同的應(yīng)用。 1977年1月,美國政府頒布:采納ibm公司設(shè)計(jì)的方案作為非機(jī)密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(des/data encryption standard)。 目前在國內(nèi),隨著三金工程尤其是金卡工程的啟動,des算法在pos、atm、磁卡及智能卡(ic卡)、加油站、高速公路收費(fèi)站
28、等領(lǐng)域被廣泛應(yīng)用,以此來實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的保密,如信用卡持卡人的pin的加密傳輸,ic卡與pos間的雙向認(rèn)證、金融交易數(shù)據(jù)包的mac校驗(yàn)等,均用到des算法。des算法的入口參數(shù)有三個(gè):key、data、mode。其中key為8個(gè)字節(jié)共64位,是des算法的工作密鑰;data也為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);mode為des的工作方式,有兩種:加密或解密。des算法是這樣工作的:如mode為加密,則用key 去把數(shù)據(jù)data進(jìn)行加密, 生成data的密碼形式(64位)作為des的輸出結(jié)果;如mode為解密,則用key去把密碼形式的數(shù)據(jù)data解密,還原為data的明碼形式(64位)作為
29、des的輸出結(jié)果。在通信網(wǎng)絡(luò)的兩端,雙方約定一致的key,在通信的源點(diǎn)用key對核心數(shù)據(jù)進(jìn)行des加密,然后以密碼形式在公共通信網(wǎng)(如電話網(wǎng))中傳輸?shù)酵ㄐ啪W(wǎng)絡(luò)的終點(diǎn),數(shù)據(jù)到達(dá)目的地后,用同樣的key對密碼數(shù)據(jù)進(jìn)行解密,便再現(xiàn)了明碼形式的核心數(shù)據(jù)。這樣,便保證了核心數(shù)據(jù)(如pin、mac等)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃?。圖4 des流程圖通過定期在通信網(wǎng)絡(luò)的源端和目的端同時(shí)改用新的key,便能更進(jìn)一步提高數(shù)據(jù)的保密性,這正是現(xiàn)在金融交易網(wǎng)絡(luò)的流行做法。des算法是把64位明文輸入塊變成64位密文輸出塊,其流程圖如圖4:其功能是把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為l0、r0兩部分,
30、每部分各長32位,其置換規(guī)則見下表:58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,即將輸入的第58位換到第一位,第50位換到第2位,.,依此類推,最后一位是原來的第7位。l0、r0則是換位輸出后的兩部分,l0是輸出的左32位,r0 是右32位,例:設(shè)置換前的輸入值為d1d2d3
31、.d64,則經(jīng)過初始置換后的結(jié)果為:l0=d58d50.d8;r0=d57d49.d7。經(jīng)過16次迭代運(yùn)算后。得到l16、r16,將此作為輸入,進(jìn)行逆置換,即得到密文輸出。逆置換正好是初始置的逆運(yùn)算,例如,第1位經(jīng)過初始置換后,處于第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規(guī)則如下表所示:40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,1
32、0,50,18,58 26,33,1,41, 9,49,17,57,25,放大換位表32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,單純換位表16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,在f(ri,ki)算法描述圖中
33、,s1,s2.s8為選擇函數(shù),其功能是把6bit數(shù)據(jù)變?yōu)?bit數(shù)據(jù)。下面給出選擇函數(shù)si(i=1,2.8)的功能表:選擇函數(shù)sis1:14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,s2:15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0
34、,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,s3:10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,s4:7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1
35、,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,s5:2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,s6:12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,
36、6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,s7:4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,s8:13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8
37、,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,在此以s1為例說明其功能,我們可以看到:在s1中,共有4行數(shù)據(jù),命名為0,1、2、3行;每行有16列,命名為0、1、2、3,.,14、15列?,F(xiàn)設(shè)輸入為: dd1d2d3d4d5d6令:列d2d3d4d5行d1d6然后在s1表中查得對應(yīng)的數(shù),以4位二進(jìn)制表示,此即為選擇函數(shù)s1的輸出。下面給出子密鑰ki(48bit)的生成算法:初始key值為64位,但des算法規(guī)定,其中第8、16、.6
38、4位是奇偶校驗(yàn)位,不參與des運(yùn)算。故key 實(shí)際可用位數(shù)便只有56位。即:經(jīng)過縮小選擇換位表1的變換后,key 的位數(shù)由64 位變成了56位,此56位分為c0、d0兩部分,各28位,然后分別進(jìn)行第1次循環(huán)左移,得到c1、d1,將c1(28位)、d1(28位)合并得到56位,再經(jīng)過縮小選擇換位2,從而便得到了密鑰k0(48位)。依此類推,便可得到k1、k2、.、k15,不過需要注意的是,16次循環(huán)左移對應(yīng)的左移位數(shù)要依據(jù)下述規(guī)則進(jìn)行:循環(huán)左移位數(shù)1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介紹了des算法的加密過程。des算法的解密過程是一樣的,區(qū)別僅僅在于第一次迭代時(shí)用
39、子密鑰k15,第二次k14、.,最后一次用k0,算法本身并沒有任何變化。商業(yè)源代碼,全套計(jì)算機(jī)畢業(yè)設(shè)計(jì)免費(fèi)下載 更多全套設(shè)計(jì)聯(lián)系qq:1042897696最新設(shè)計(jì)大全 4 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)4.1 系統(tǒng)的總體設(shè)計(jì)內(nèi)核嵌入部分主要實(shí)現(xiàn)對套接字緩存的數(shù)據(jù)即skbuff->data進(jìn)行加密、解密。在內(nèi)核中定義的函數(shù)均在linux/include/net/ip.h中聲明。對于ip包的加密狀況,這里采用設(shè)置加密位來標(biāo)志該ip包是否被加密,而由于ip頭中的tos字段作為優(yōu)先權(quán)的高3位已經(jīng)廢棄,為了減少內(nèi)核的大小,采取把tos最高位置1作為加密標(biāo)志。以次判斷包是否應(yīng)該解密。對于如何判斷一個(gè)包是否應(yīng)該加密
40、,設(shè)計(jì)為判斷目的ip地址。設(shè)計(jì)思路為把需要加密發(fā)送的目的ip地址存放到一個(gè)定義為全局變量的鏈表中。該鏈表在內(nèi)核運(yùn)行期間始終有效,并聲明為模塊可讀寫。鏈表結(jié)構(gòu)體定義在ip.h中:extern struct iplistunsigned int ip;struct iplist *next;iplist;定義一個(gè)全局變量:struct iplist *list;并聲明為模塊可讀寫:export_symbol(list);通過模塊對用戶文件/home/ip.list和/home/rm_ip.list讀取實(shí)現(xiàn)對list的插入和刪除。通過對list的查詢來判斷發(fā)送包是否應(yīng)該加密。4.2 模塊部分的設(shè)計(jì)與
41、實(shí)現(xiàn)由于模塊主要是針對鏈表和文件的操作,為了能夠使多個(gè)模塊都能使用到這些函數(shù),采取把一些主要函數(shù)定義在內(nèi)核中。具體位置為net/ipv4/myfile.c,里面的函數(shù)主要是涉及到對全局變量list的操作。首先定義直接對鏈表操作的函數(shù):Ø void init_iplist(struct iplist *list),初始化鏈表,export_symbol(init_iplist)聲明為模塊可用;Ø void insert_iplist(struct iplist *list, unsigned int ipaddr),鏈表插入操作函數(shù),插入位置為緊接頭部之后。由于網(wǎng)絡(luò)通信的特點(diǎn)
42、是短時(shí)間內(nèi)發(fā)往同一目的地址的數(shù)據(jù)包一般情況下最頻繁。這樣可以減少查詢鏈表的時(shí)間;Ø int query_iplist(struct iplist *list, unsigned int ipaddr)。鏈報(bào)查詢操作函數(shù),在鏈表未初始化時(shí)返回2,鏈表中存在ipaddr時(shí)返回1,不存在則返回0,export_symbol(query_iplist)聲明為模塊可用。定義對文件的操作,文件部分的函數(shù)均聲明為模塊可用:Ø struct file *list_fopen(const char *filename, int flags, int mode),定義在內(nèi)核中打開文件的操作;&
43、#216; void list_fclose(struct file *filp),定義對文件的關(guān)閉操作;Ø int list_fread(char *buf, int len, struct file *filp),定義對文件的讀操作。由于內(nèi)核中對文件的讀寫操作要求緩存buf為用戶空間變量,所以操作的時(shí)候要避免內(nèi)核對變量地址的檢查;Ø int list_fgetc(struct file *filp),通過調(diào)用list_fread()函數(shù)實(shí)現(xiàn)按1個(gè)字節(jié)讀??;其他函數(shù)的定義,以下函數(shù)也均聲明為模塊可用:Ø void my_atoi(char *buf, unsig
44、ned int *ipaddr),把點(diǎn)分十進(jìn)制的ip地址轉(zhuǎn)換為32位無符號整形數(shù)。但是按點(diǎn)分段從右到左轉(zhuǎn)換,以保證于套接字緩存中的目的ip地址方式一致;Ø void init_iplist_byfile(struct file *fp, struct iplist *list),根據(jù)文件對list進(jìn)行插入操作。功能模塊主要包含對list的插入操作、刪除操作和讀操作,對des密匙的修改。模塊是linux系統(tǒng)為防止內(nèi)核不斷擴(kuò)大而設(shè)計(jì)的一種體系,它能運(yùn)行于內(nèi)核態(tài),可以自由加載和刪除,增加了系統(tǒng)的靈活性。針對2.6版本內(nèi)核,模塊的編寫方法大致如下,egmodule.c:#include &l
45、t;linux/kernel.h>#include <linux/module.h>int function1().函數(shù)體.void functionx().函數(shù)體.void functiony().函數(shù)體.module_init(functionx);module_exit(functiony);module_license("gpl");然后利用make,gcc編譯成可執(zhí)行的模塊,makefile內(nèi)容為:ifneq ($(kernelrelease),) obj-m := egmodule.o else kerneldir ?= /lib/module
46、s/$(shell uname -r)/build pwd := $(shell pwd) default: $(make) -c $(kerneldir) m=$(pwd) modules endif分別編寫模塊insertlist、deletelist、showlist、和repdeskey:Ø insertlist主要實(shí)現(xiàn)讀取文件/home/ip.list中的點(diǎn)分十進(jìn)制ip地址插入 list中,如果list中已經(jīng)存在的ip地址則不需再插入;Ø deletelist主要實(shí)現(xiàn)讀取文件/home/rm_ip.list中的點(diǎn)分十進(jìn)制ip地址,并刪除list中與之相同的ip地址
47、;Ø showlist主要實(shí)現(xiàn)查看list中的ip地址;Ø repdeskey主要實(shí)現(xiàn)修改des加密算法的密匙。4.3 des算法實(shí)現(xiàn)與des相關(guān)函數(shù)全部定義在文件net/ipv4/des.c中。由于套接字緩存中skbuff->data為數(shù)據(jù)開始,但是其并不是標(biāo)準(zhǔn)字符串(即不是以0結(jié)尾)的頭指針。所以在次先多des加密算法做一些修改,即添加一個(gè)參數(shù),表示需加密的長度。而由于ip包的一個(gè)特點(diǎn)是,數(shù)據(jù)的長度為8的整數(shù)倍,所以這里的des算法可以不考慮對字符串的填充。des算法的主要實(shí)現(xiàn)思想為定義一個(gè)長度為64的unsigned char類型的字符數(shù)組把字符串的每8字節(jié)按位
48、存儲在該字符數(shù)組中。密匙也用基本相同的方法處理。加密算法的所有操作都以數(shù)組元素為單位操作,減少了位操作的煩瑣。des.c中定義的所有函數(shù)如下:Ø extern void bytetobit(unsigned char *, unsigned char *),16輪迭代過后,把字符數(shù)組,每字節(jié)用位表示;Ø extern void initper(unsigned char *, unsigned char *),對傳入數(shù)據(jù)的初始置換,同時(shí)按每位沒字節(jié)存放到字符數(shù)組中;Ø extern void expper(unsigned char *, unsigned cha
49、r *),數(shù)據(jù)右半部分的擴(kuò)展置換;Ø extern void keyper(unsigned char *, unsigned char *),密匙替換;Ø extern void pper(unsigned char *),p盒置換;Ø extern void tailper(unsigned char *),末置換;Ø extern void cvrtdata(int, unsigned char *, unsigned char *),把數(shù)據(jù)分成8字節(jié)每塊;Ø extern void packper(int, int, unsigned
50、char *, unsigned char *),生成每輪密匙;Ø extern void sproc(unsigned char *, unsigned char *),s盒處理;Ø extern void des(int, unsigned char *, int, unsigned char *),des主函數(shù);Ø extern void decskb(struct sk_buff *skb)和extern void encskb(struct sk_buff *skb)實(shí)現(xiàn)對套接字緩存的操作。在這里給出幾個(gè)重要函數(shù)的實(shí)體:des算法主程序:void des
51、(int mode, unsigned char *data, int datalen, unsigned char *key)unsigned char *s, keyw48, keybyte56, databyte64, bufdata64, expdata48, tempdata32;int i, iternm, len = 0;s = data;keyper(key,keybyte);/*密匙置換,每位以1字節(jié)表示*/while (len < datalen) for (i = 0; i< 8; +i, +len) cvrtdata(i, s ,databyte);/*數(shù)據(jù)
52、分塊,并擴(kuò)展為每位用1字節(jié)表示*/initper(bufdata, databyte);/*初始置換*/for(iternm = 0; iternm < 16; +iternm) /*16輪迭代*/packper(mode, iternm, keybyte, keyw);/*得到壓縮的48位密匙*/for (i = 0; i < 32; +i)tempdatai = bufdata32 + i;expper(tempdata, expdata);/*得到擴(kuò)展的48位數(shù)據(jù)*/for (i = 0; i < 48; +i)expdatai = keywi;/*數(shù)據(jù)密匙異或*/sp
53、roc(expdata, tempdata);/*s盒子處理*/pper(tempdata);/*p盒置換*/for (i = 0; i < 32; +i)tempdatai = bufdatai;/*與左半部異或*/if (iternm < 15) /*前15輪左右交換*/for (i = 0; i < 32; +i) bufdatai = bufdata32 + i;bufdata32 + i = tempdatai;else /*最后1輪不交換*/for (i = 0; i < 32; +i)bufdatai = tempdatai;/*迭代結(jié)束*/tailper
54、(bufdata);/*末置換*/bytetobit(s, bufdata);/*把以字節(jié)表示的位轉(zhuǎn)換為位表示*/s += 8;;encskb函數(shù)實(shí)體:void encskb(struct sk_buff *skb)int i = skb->tail - skb->data;unsigned char *data;data = skb->data + (skb->nh.iph->ihl * 4);des(1,data, i, des_key);;decskb函數(shù)實(shí)體:void decskb(struct sk_buff *skb)int i = skb->t
55、ail - skb->data;unsigned char *data;data = skb->data +(skb->nh.iph->ihl * 4);des(0, data, i, des_key);;4.4 對內(nèi)核函數(shù)的修改修改的內(nèi)核函數(shù)主要在net/ipv4/ip_output.c和net/ipv4/ip_input.c中。主要通過對list的查詢和加密位的檢查調(diào)用加密算法實(shí)現(xiàn)對數(shù)據(jù)的加密解密。在ip_input.c中的ip_local_deliver()函數(shù)中decskb()需被調(diào)用,對套接字緩存中ip頭以后的數(shù)據(jù)進(jìn)行解密。并檢查list,如果list中沒有該源ip地址,則插入:/* * decrypt the skb whose destination is in the list. */if (skb->nh.iph->tos) & 128) skb->nh.iph->tos &= 127;printk(kern_alert "ip_local_deliver(),decrypt!n");/*測試語句*/decskb(skb);if (list = null)init_ipl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度牧業(yè)產(chǎn)業(yè)扶貧項(xiàng)目承包合同范本3篇
- 2025版農(nóng)產(chǎn)品溯源與質(zhì)量認(rèn)證服務(wù)合同3篇
- 遼寧省朝陽市北票市2024-2025學(xué)年七年級上學(xué)期1月期末道德與法治試題(含答案)
- 2025年度個(gè)人公司股權(quán)結(jié)構(gòu)調(diào)整合同4篇
- 二零二五年度某局勞務(wù)分包結(jié)算與數(shù)字化轉(zhuǎn)型戰(zhàn)略合同2篇
- 天然氣在科技創(chuàng)新中的地位考核試卷
- 家禽飼養(yǎng)業(yè)質(zhì)量品牌提升與市場競爭策略考核試卷
- 供應(yīng)鏈協(xié)同采購與供應(yīng)商管理考核試卷
- 儀器儀表制造業(yè)的持續(xù)創(chuàng)新能力考核試卷
- 2025版二零二五年度美發(fā)店房東租賃合同范本:租賃合作協(xié)議4篇
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢管理與擺位》
- 《論文的寫作技巧》課件
- 空氣自動站儀器運(yùn)營維護(hù)項(xiàng)目操作說明以及簡單故障處理
- 2022年12月Python-一級等級考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識
評論
0/150
提交評論