唐浩波 方兵 侯克斌 周建斌 成都理工大學(xué) 610059
基于ARM的安全文件傳輸系統(tǒng)設(shè)計(jì)
唐浩波 方兵 侯克斌 周建斌 成都理工大學(xué) 610059
本文介紹一種基于sbc2410開(kāi)發(fā)板的安全文件傳輸系統(tǒng)設(shè)計(jì)方法。首先對(duì)基于ARM9處理器的sbc2410開(kāi)發(fā)板和openssl安全傳輸原理進(jìn)行了簡(jiǎn)要介紹,然后重點(diǎn)說(shuō)明了軟件設(shè)計(jì)部分的服務(wù)端和客服端的設(shè)計(jì)原理。服務(wù)端文件在傳輸過(guò)程中通過(guò)openssl協(xié)議傳輸加密,實(shí)現(xiàn)了多用戶數(shù)據(jù)操作??头酥饕峁┝擞脩裘钜约癚T圖形界面的操作數(shù)據(jù)。
ARM;Linux;網(wǎng)絡(luò)安全傳輸;openssl
隨著網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)文件存儲(chǔ)使人們的生活和工作變得更加方便、快捷。但隨之而來(lái)的數(shù)據(jù)安全的問(wèn)題越來(lái)越受到人們的重視。本文基于Samsung公司的ARM9處理器S3c2410,設(shè)計(jì)了一種基于ARM處理器的安全文件傳輸系統(tǒng)。該系統(tǒng)不但能為用戶提供方便的文件管理、上傳、下載功能,更在文件傳輸方面加入openSSL加密傳輸協(xié)議,使文件安全得到保障。
Sbc2410開(kāi)發(fā)板是一款基于ARM9、結(jié)構(gòu)緊湊的嵌入式平臺(tái)。它使用三星公司的成熟的ARM9處理器s3c2410,s3c2410是基于ARM920T核的嵌入式通用處理器,使得主頻為一般為200MHZ,最高可達(dá)到266M H Z,采用A R M V 4T(Harvard)結(jié)構(gòu),五級(jí)流水處理以及分離的Cache結(jié)構(gòu),平均功耗為0.7mW/ MHz。SBC2410使用了兩片外接的32M bytes 總共64M bytes 的SDRAM 芯片,同時(shí)具備兩種Flash,一種是Nor Flash,大小為2Mbyte;另一種是Nand Flash,大小為64Mbyte。同時(shí)采用了CS8900網(wǎng)卡芯片,它可以自適應(yīng)10/100M 網(wǎng)絡(luò)。sbc2410內(nèi)部帶有全性能的 MMU,支持Linux, Windows CE等操作系統(tǒng)。支持TFT LCD/觸摸屏,音頻,USB,網(wǎng)卡,SD卡, IDE, AD等,它適用于設(shè)計(jì)移動(dòng)手持設(shè)備類產(chǎn)品,具有高性能、低功耗、接口豐富和體積小能優(yōu)良特性。
結(jié)核框圖如圖1。
openssl是一個(gè)功能豐富且自包含的開(kāi)源安全工具箱。它提供的主要功能有:SSL協(xié)議實(shí)現(xiàn)(包括SSLv2、SSLv3和TLSv1)、大量軟算法(對(duì)稱/非對(duì)稱/摘要)、大數(shù)運(yùn)算、非對(duì)稱算法密鑰生成、ASN.1編解碼庫(kù)、證書(shū)請(qǐng)求(PKCS10)編解碼、數(shù)字證書(shū)編解碼、CRL編解碼、OCSP協(xié)議、數(shù)字證書(shū)驗(yàn)證、PKCS7標(biāo)準(zhǔn)實(shí)現(xiàn)和PKCS12個(gè)人數(shù)字證書(shū)格式實(shí)現(xiàn)等功能。
加密技術(shù)簡(jiǎn)介:加密,即將明文數(shù)據(jù)轉(zhuǎn)換為密文數(shù)據(jù)的過(guò)程,以起到對(duì)明文保密的作用。加密算法: 數(shù)據(jù)加密過(guò)程所采用的一種運(yùn)算算法,用于將明文轉(zhuǎn)換為密文。密鑰: 加密算法通過(guò)與密鑰進(jìn)行某種運(yùn)算,將明文數(shù)據(jù)進(jìn)行加密,生成加密數(shù)據(jù)。解密時(shí),加密算法通過(guò)密鑰, 將加密數(shù)據(jù)再轉(zhuǎn)換為明文數(shù)據(jù)。
現(xiàn)今的加密技術(shù),加密算法是公開(kāi)的,即所有人都知道加密所采用的運(yùn)算方式。但只有使用密鑰才能進(jìn)行對(duì)密文的解密。所以,密鑰的保護(hù),是數(shù)據(jù)安全的核心。
圖3 結(jié)核框圖
功能如下:1.在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包,同時(shí)保護(hù)這些數(shù)據(jù)不被修改和偽造;2.網(wǎng)絡(luò)對(duì)話中雙方的身份SSL協(xié)議包含兩個(gè)子協(xié)議,一個(gè)是包協(xié)議,一個(gè)是握手協(xié)議。包協(xié)議是說(shuō)明SSL的數(shù)據(jù)包應(yīng)該如何封裝的。握手協(xié)議則是說(shuō)明通信雙方如何協(xié)商共同決定使用什么算法以及算法使用的key。很明顯包協(xié)議位于握手協(xié)議更下一層。SSL握手過(guò)程說(shuō)就是:通信雙方通過(guò)不對(duì)稱加密算法來(lái)協(xié)商好一個(gè)對(duì)稱加密算法以及使用的key,然后用這個(gè)算法加密以后所有的數(shù)據(jù)完成應(yīng)用層協(xié)議的數(shù)據(jù)交換。
4.1 服務(wù)端的簡(jiǎn)要設(shè)計(jì)流程
服務(wù)端設(shè)計(jì)流程圖如圖2。
服務(wù)端的設(shè)計(jì)流程圖形如圖2所示,服務(wù)端分別有服務(wù)端初始化、命令解析,數(shù)據(jù)管理,數(shù)據(jù)傳輸3部分組成。命令解析主要用于解析用戶所要執(zhí)行的操作,數(shù)據(jù)管理主要用于對(duì)用戶數(shù)據(jù)的上傳下載刪除等功能的實(shí)現(xiàn)。用戶管理主要是管理用戶的登錄注冊(cè)信息。下面分別介紹圖2中所提及到的部分功能和實(shí)現(xiàn):
4.1.1 服務(wù)端配置以及初始化:
SSL初始化說(shuō)明:在使用OPENSSL之前,需要對(duì)其進(jìn)行初始化,這個(gè)過(guò)程通過(guò)SSL_library_init()函數(shù)來(lái)完成,它主要加載OpenSSL將會(huì)用到的算法, 同樣需要通過(guò)SSL_load_error_strings()來(lái)加載錯(cuò)誤字符串,否則,就不能夠?qū)penSSL錯(cuò)誤映射為字符串。通過(guò)使用S S L_C T X_n e w (SSLv23_server_method())為當(dāng)前服務(wù)器創(chuàng)建S S L上下文C T X。同時(shí)使用SSL_CTX_use_certificate_file(ctx,“cacert. pem”,SSL_FILETYPE_PEM)載入用戶的數(shù)字證書(shū),此證書(shū)用來(lái)發(fā)送給客服端口。最后使用SSL_CTX_use_PrivateKey_file()載入用戶私鑰。
圖2 服務(wù)端設(shè)計(jì)流程圖
4.1.2 套接字初始化:
應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP和UDP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問(wèn)題。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口。Socket可以看成在兩個(gè)程序進(jìn)行通訊連接中的一個(gè)端點(diǎn)。
相關(guān)函數(shù):int socket(int domain, int type, int protocol)。 一旦通過(guò)socket調(diào)用返回一個(gè)socket描述符,就將該socket與你本機(jī)上的一個(gè)端口相關(guān)聯(lián),即配置套接字基本信息。同時(shí)使用int bind(int sockfd,struct sockaddr *my_addr, int addrlen)將服務(wù)端的信息和套接字綁定。在服務(wù)器端程序中,當(dāng)socket與某一端口捆綁以后,就需要監(jiān)聽(tīng)該端口,以便對(duì)到達(dá)的服務(wù)請(qǐng)求加以處理。使用函數(shù)int listen(int sockfd, int backlog)。
4.1.3 循環(huán)等待服務(wù)器的連接
基于上面SSL初始化時(shí)候生成的SSL上下文CTX,用SSL_new(SSL_CTX* ctx)函數(shù)實(shí)現(xiàn)以個(gè)SSL結(jié)構(gòu)實(shí)例。和當(dāng)前accept函數(shù)返回的客服端套接字,建立SSL結(jié)構(gòu)與TCP套接字聯(lián)系,使SSL結(jié)構(gòu)對(duì)套接字中的TCp數(shù)據(jù)進(jìn)行SSL封裝(SSL_set_fd(SSL *ssl,int fd),同時(shí)接收新的SSL連接(int SSL_accept(SSL *ssl)).同時(shí)開(kāi)啟一個(gè)新的線程為新連接的客服端執(zhí)行不同的數(shù)據(jù)命令。
1)命令解析:對(duì)于用戶的不同操作命令信息,進(jìn)行解析,主要有解析以下命令的功能:登錄,注冊(cè),上傳,下載,刪除,重命名,退出等命令的解析。同時(shí)也包含了傳輸過(guò)程中的出錯(cuò)信息的處理功能。
2)數(shù)據(jù)管理:主要用于查詢數(shù)據(jù)庫(kù)文件。用戶登錄信息管理數(shù)據(jù)庫(kù)文件,記錄了所有用戶的賬號(hào)和密碼,主要有登錄、注冊(cè)2大功能,用于判定用戶登錄時(shí)的密碼校驗(yàn)。文件信息管理數(shù)據(jù)庫(kù),主要數(shù)據(jù)成員包括如下:文件擁有者,文件名,文件大小,修改時(shí)間等元數(shù)據(jù)。在本程序中使用了int sqlite3_open(const char*,sqlite3**),用于打開(kāi)或者創(chuàng)建特定的數(shù)據(jù)庫(kù)文件。文件數(shù)據(jù)管理主要有以下幾個(gè)功能:查詢,插入,搜索,重命名,刪除等功能。
4.1.4 數(shù)據(jù)傳輸:主要實(shí)現(xiàn)了用戶與服務(wù)器之間的信息和數(shù)據(jù)文件的安全傳輸,出錯(cuò)信息的傳輸。主要是使用了openssl協(xié)議進(jìn)行安全文件的傳輸。這里先說(shuō)一下SSL接受和發(fā)送數(shù)據(jù)的實(shí)現(xiàn)方式:和普通的read()/write()調(diào)用一樣,用下面的函數(shù)完成數(shù)據(jù)的SSL發(fā)送和接收,函數(shù)輸入數(shù)據(jù)是明文,SSL自動(dòng)將數(shù)據(jù)封裝進(jìn)SSL中:
讀/接收:int SSL_read(SSL *ssl, void *buf, int num);
寫(xiě)/發(fā)送:int SSL_write(SSL *ssl, const void *buf, int num);
當(dāng)服務(wù)端接收到客服端連接時(shí),等待客服端口發(fā)送的第一個(gè)命令數(shù)據(jù)包。這里通過(guò)ssl_read接收數(shù)據(jù)包信息,解析當(dāng)前執(zhí)行的命令,做出相應(yīng)的操作。
4.1.5 循環(huán)讀取客服端命令:
當(dāng)執(zhí)行完當(dāng)前的命令后,將等待客服端發(fā)來(lái)的下一個(gè)命令,并處理。這里涉及前面提及到的數(shù)據(jù)庫(kù)文件中上傳、下載、刪除等命令,都需要使用當(dāng)前file管理數(shù)據(jù)庫(kù)文件,查詢,刪除,插入等功能實(shí)現(xiàn)當(dāng)前操作。當(dāng)用戶選擇退出,結(jié)束當(dāng)前線程,重新設(shè)置剩余客服端連接數(shù)量。
4.2 客服端簡(jiǎn)要設(shè)計(jì)概述:
客服端流程圖如圖3。
如圖3所示:客服端主要有2部分:后臺(tái)數(shù)據(jù)通信部分和前臺(tái)QT圖形部分:
數(shù)據(jù)通信部分主要包含以下2部分:
4.2.1 SSL的初始化說(shuō)明:通過(guò)前面服務(wù)端對(duì)SSL的簡(jiǎn)單介紹,這里與前面略微不同的就是生成SSL上下文ctx所使用的方法,通過(guò)使用 SSL_CTX_new函數(shù)創(chuàng)建保存SSL信息的結(jié)構(gòu)體,這里使用的方法函數(shù)是SSLv23_client_method,還設(shè)置另一個(gè)SSL類型的指針保持SSL的連接結(jié)構(gòu)。
客服端流程圖 圖2
4.2.2 socket套接字的初始化:需要設(shè)置socket的服務(wù)端IP地址和客服端的端口。對(duì)于客服端套接字就不需要對(duì)其綁定和監(jiān)聽(tīng),利用SSl庫(kù)文件對(duì)其傳輸?shù)臄?shù)據(jù)實(shí)現(xiàn)封裝。同時(shí)也采用了ssl_read()和ssl_write()兩大函數(shù)實(shí)現(xiàn)了文件在傳輸和接受過(guò)程中的安全性。
4.2.3 QT圖形界面部分主要包含有:登錄界面,注冊(cè)界面,用戶管理界面。通過(guò)調(diào)用后臺(tái)的數(shù)據(jù)通信部分,實(shí)現(xiàn)了客服端與遠(yuǎn)程服務(wù)端的信息交互。
本文設(shè)計(jì)了一種基于ARM9處理器S3C2410的安全文件傳輸系統(tǒng)。在介紹了本系統(tǒng)所使用的ARM9處理器S3C2410和SSL協(xié)議的加密方法基礎(chǔ)上,依次說(shuō)明了系統(tǒng)的硬件結(jié)構(gòu)設(shè)計(jì),軟件服務(wù)端、客戶端設(shè)計(jì),并在sbc2410和PC機(jī)上進(jìn)行文件安全傳輸實(shí)驗(yàn),效果很好。該安全文件傳輸系統(tǒng)研究的實(shí)現(xiàn),有利于提高文件傳輸過(guò)程中用戶資料的安全性和保密性。
[1](美)史蒂文斯編著.Unix環(huán)境高級(jí)編程(第2版)(M). 人民郵電出版社.2006-05
[2](美)史蒂文斯編著.TCP/IP詳解(M).機(jī)械工業(yè)出版社.2002-06
[3]令曉靜 等.SSL安全傳輸協(xié)議在網(wǎng)絡(luò)通信中的應(yīng)用研究[D]. 西安電子科技大學(xué). 2006
[4] 贠睿 等.SSL協(xié)議及其安全性[D]. 電腦知識(shí)與技術(shù).2009
[5]李曉峰 等. SSL協(xié)議及其應(yīng)用[J]. 信息安全與通信保密. 2007
唐浩波 男,成都理工大學(xué)核技術(shù)與自動(dòng)化工程學(xué)院2007級(jí)碩士生,主要研究方向智能儀器。