如何設(shè)計(jì)嵌入式Linux加密短信系統(tǒng)

短信業(yè)務(wù)是目前移動(dòng)運(yùn)營商提供給移動(dòng)用戶相互收發(fā)短文本信息的一種基本服務(wù),由于其方便、快捷、收費(fèi)低廉、服務(wù)項(xiàng)目不斷增多使得其應(yīng)用越來越廣泛,而有些短消服務(wù)涉及到商業(yè)數(shù)據(jù)、個(gè)人健康情況等,顯然對(duì)這些信息有加密的必要性。那么我今天就教大家設(shè)計(jì)一種基于嵌入式Linux的加密短信系統(tǒng)。

一、嵌入式Linux加密短信系統(tǒng)的構(gòu)建

在構(gòu)建嵌入式Linux加密短信系統(tǒng)所需要的軟硬件平臺(tái)時(shí),需要綜合考慮硬件和軟件的性能要求,合理的選擇硬件資源和軟件資源。本系統(tǒng)軟件平臺(tái)采用的是嵌入式Linux,硬件中采用三星的S3C2410作為CPU,無線調(diào)制解調(diào)器是SIEMEN公司生產(chǎn)的TC35i模塊。這些主流的硬件性對(duì)嵌入式Linux加密短信系統(tǒng)的穩(wěn)定高效有保障。

1、嵌入式Linux加密短信系統(tǒng)硬件平臺(tái)的總體構(gòu)建

如何設(shè)計(jì)嵌入式Linux加密短信系統(tǒng)

開發(fā)平臺(tái)的總框架圖如圖1所示。其中硬件平臺(tái)主要由兩部分組成:主系統(tǒng)和通信子系統(tǒng)。主系統(tǒng)的處理器采用的是三星公司S3C2410。其主頻為200MHZ,主系統(tǒng)內(nèi)存由32Mbyte的FLASH和64Mbyte的SDRAM構(gòu)成。其高速和大容量的RAM特性,為處理短消息這樣的大數(shù)據(jù)包提供了便利;同時(shí)節(jié)省了外圍器件,使得硬件結(jié)構(gòu)簡單化,提高系統(tǒng)的可靠性。通信子系統(tǒng)采為西門子公司的TC35i,TC35i是一款高度集成的GSM模塊,內(nèi)嵌AT指令集。系統(tǒng)采用液晶顯示屏來顯示接收到的中英文短信。

PC機(jī)的并口與開發(fā)板的JTAG口相連,利用JTAG功能把程序映像下載到開發(fā)板上,PC機(jī)的串口與開發(fā)板的串口1相連,在開發(fā)時(shí)可以通過MINICOM觀察目標(biāo)板的調(diào)試信息和輸入控制命令對(duì)系統(tǒng)進(jìn)行調(diào)試。開發(fā)板的串口2和GSM模塊相連。

2、嵌入式Linux加密短信系統(tǒng)軟件平臺(tái)的構(gòu)建

嵌入式Linux加密短信系統(tǒng)采用的操作系統(tǒng)是嵌入式Linux2.6.9,嵌入式Linux是Linux衍變而來的嵌入式操作系統(tǒng)。該系統(tǒng)具有穩(wěn)定、功能強(qiáng)大、模塊化可裁剪等特性,非常適合嵌入式系統(tǒng)的開發(fā)。由于嵌入式系統(tǒng)硬件資源有限,因此要通過配置內(nèi)核、裁減Shell和嵌入式C庫對(duì)Linux進(jìn)行定制,使整個(gè)系統(tǒng)能夠存放到較小的FLASH中。采用的U-BOOT作為啟動(dòng)引導(dǎo)程序,根文件系統(tǒng)為RAMDISK。

嵌入式Linux加密短信系統(tǒng)采用交叉編譯的開發(fā)方式,安裝的工具鏈?zhǔn)莂rm-lin-ux-gcc2.95.3。

二、嵌入式Linux加密短信系統(tǒng)軟件的實(shí)現(xiàn)

嵌入式Linux加密短信系統(tǒng)的軟件部分分為4個(gè)功能模塊:短信內(nèi)容加密、短信的編碼與發(fā)送、短信解碼與接收和短信的解密。軟件功能如圖2所示:

如何設(shè)計(jì)嵌入式Linux加密短信系統(tǒng)

1、短信編解碼的實(shí)現(xiàn)

廣義上的短信息從技術(shù)和功能上可以分為三類,即SMS(短文本信息)、EMS(增強(qiáng)型短信)和MMS(多媒體短信)。狹義上的短信息就是指SMS。我們在沒有特別說明的情況下,短信息指SMS。SMS短信業(yè)務(wù)有下面的兩個(gè)特點(diǎn):

第一是存儲(chǔ)轉(zhuǎn)發(fā)機(jī)制,即SMS傳送數(shù)據(jù)包的工作由移動(dòng)網(wǎng)絡(luò)中的短信中心(SC)而不是終端用戶來完成,如果用戶不在服務(wù)區(qū)內(nèi),短信就被存儲(chǔ)在短信中心,等用戶出現(xiàn)之后再轉(zhuǎn)發(fā)給他。

第二是傳遞確認(rèn)機(jī)制,在電路交換數(shù)據(jù)環(huán)境中,連接是端到端的,所以用戶能夠知道連接是否完成,以及數(shù)據(jù)傳遞的情況。

在發(fā)送短消息前,首先要發(fā)送AT+CMGF命令選擇短消息的格式。短消的發(fā)送和接收控制模式有三種:Block模式、Text模式和PDU模式。使用Block模式需要手機(jī)生產(chǎn)廠商提供驅(qū)動(dòng)支持,目前國內(nèi)手機(jī)基本上不支持。Test模式不支持中文。因此,為了系統(tǒng)的通用性,兼容中英文短消息的發(fā)送和接收,系統(tǒng)使用PDU模式來處理短消息。

PDU模式中,可以采用三種方式對(duì)發(fā)送的內(nèi)容進(jìn)行編碼,分別是7-bit,8-bit和UCS2編碼。7-bit編碼用于發(fā)送普通的ASCII碼,它將一個(gè)7bit的字符(最高位為0)編碼成8bit的數(shù)據(jù),每8個(gè)字符“壓縮”成7個(gè);8-bit編碼通常用于發(fā)送數(shù)據(jù)信息,如圖片和鈴聲等。而UCS2編碼將每個(gè)字符轉(zhuǎn)化為16位的Uni-code寬字符。

PDU格式的短消息數(shù)據(jù)分為兩種,一種為SMS-SUBMIT用于發(fā)送,即從MS(信息發(fā)送者)發(fā)送者)發(fā)送到SC。另一種是SMS-DELIVER用于接收。

即從SC發(fā)送到MS(信息接收者)。兩者結(jié)構(gòu)不完全相同如圖3所示:

如何設(shè)計(jì)嵌入式Linux加密短信系統(tǒng)

其中SMS-SUBMIT中的TP-UDHI、TP-SRR、TP-RD、TP-VP和SMS-DELIVERY中的TP-UDHI、TP-SRI為可選單元。TP-MTI為消息類型,TP-RD請求拒絕復(fù)制消息,TP-SRR請求狀態(tài)報(bào)告、TP-RP請求回復(fù)路徑、TP-MMS有多少個(gè)消息等待接收。各字段詳細(xì)信息請參見GSM03.04。

PDU是由“0-9”及“A-F”組成。表面上看起來就是一組16進(jìn)制的數(shù)所組成的。實(shí)際上不僅包含了要顯示的用戶數(shù)據(jù)本身,還包含了很多其他信息,如SMS服務(wù)中心號(hào)碼,目標(biāo)號(hào)碼等,是依據(jù)SMS-SUBMIT和SMS-DELIVER指定的格式進(jìn)行編碼的。下面用兩個(gè)例子分別說明PDU串的編碼格式。

例1:向服務(wù)中心號(hào)碼SMSCA為+8613800100500,手機(jī)號(hào)碼為13522321936,發(fā)送內(nèi)容為“中國加油”的短消息。發(fā)送的PDU串如下列所示:

0891683108100005F011000D91683125321239F9000800084E2D56FD52A06C89

這組代碼的含義如下:

(1)0891:短信中心地址字段08表示中心地址長度為8字節(jié),為(0x91683108100005F0)的長度,8個(gè)字節(jié)。

91表示地址類型:二進(jìn)制表示為:10010001

Bits7:1始終為1

Bits6:5:4為號(hào)碼類型,001表示國際號(hào)碼,即號(hào)碼前需要加“+”。Bits3:2:1:0為號(hào)碼鑒別,0000表示位置,0001表示ISDN/電話號(hào)碼,1111留作擴(kuò)展,一般默認(rèn)為0001,表示電話號(hào)碼類型。

(2)683108100005F0:短信中心號(hào)碼。

一個(gè)字節(jié)內(nèi)需反轉(zhuǎn),如果長度為計(jì)數(shù)則需要加“F”補(bǔ)齊。

(3)1100:FirstOctet字段。

11:包含了TP-MTI(2bits),TP-RD(1bit),TP-VPF(2bits),TP-RP(1bit)等。二進(jìn)制表示00010001,其中TP-MTI(Bits1:0)為00表示讀出(DELIVER);為01表示提交(SUBMIT)。

00:TP-MR=0用于SMSC確定消息狀態(tài)。由SMSC返回。

(4)0D91683125321239F9:對(duì)方手機(jī)號(hào)碼。

OD:為對(duì)方手機(jī)號(hào)碼個(gè)數(shù),共13個(gè)十進(jìn)制數(shù),不包括91和‘F’。

3125321239F9:為對(duì)方手機(jī)號(hào)碼

(5)00:TP-PID字段。一般設(shè)置為00,表示普通的GSM,點(diǎn)對(duì)點(diǎn)通信。

(6)08:TP-DCS字段。00表示7-bit編碼,08:表示Unicode編碼。

(7)00:TP-VP字段。一般用00,其他值很少用。

(8)08:TP-UDL字段。用戶數(shù)據(jù)實(shí)際長度。7-bit編碼時(shí)單位是7-bit,其他編碼方式以字節(jié)為單位。這里以字節(jié)為單位。

(9)4E2D56FD52A06C89:TP-UD字段。

2、短信加密的實(shí)現(xiàn)

在加密短信通信過程中,需要對(duì)SMS-SUBMIT格式的PDU數(shù)據(jù)包進(jìn)行加密,對(duì)接收的SMS-DELIVER格式的PDU數(shù)據(jù)包進(jìn)行解密,整個(gè)加密與解密操作只能對(duì)TP-UD部分,即用戶數(shù)據(jù)部分,不可對(duì)PDU數(shù)據(jù)包中的其他數(shù)據(jù)操作,以免造成數(shù)據(jù)格式不正確,無法正常發(fā)送短信。

短消息常用的加密算法是DES、AES或RSA加密算法。嵌入式Linux加密短信系統(tǒng)采用的是DES加密算法為基礎(chǔ)。

采用接收方手機(jī)號(hào)碼的前8個(gè)字節(jié)作為加密密鑰。這樣使用變動(dòng)的密鑰,提高了可靠性。由于DES加密算法中數(shù)據(jù)以64位分組進(jìn)行加密,當(dāng)用戶部分?jǐn)?shù)據(jù)不足64位時(shí),必須需要進(jìn)行算法改良??梢圆捎锰畛鋽?shù)據(jù)的方法來克服這個(gè)問題。

短消息用戶部分,在加密前簡稱明文字符串,記為m={m0,m1......mp-1},明文的長度#(m)=l,其中,mi={d8i,d8i+1,......d8i+7},i=0,1,2,當(dāng)l=8,16時(shí),最后一組字符串mp有8個(gè)字符,否則將不足8個(gè)字符。在加密后短消息用戶部分簡稱密文字符串,記為c=c1,c2......cl,字符串的長度#(c)=l。當(dāng)#(m)≠8,16時(shí),因DES加密算法是以64位為基本加密分組,可先填充若干無用的字符,把明文長度擴(kuò)大到8的整數(shù)倍。

本文提供了嵌入式Linux下加密短信收發(fā)系統(tǒng)的設(shè)計(jì)方法。短信收發(fā)采用PDU模式,能夠處理中文、英文和中英文短信。其創(chuàng)新之處在于對(duì)短信進(jìn)行改進(jìn)的DES算法加密,并對(duì)信息文件加密內(nèi)容不足8字節(jié)的情況,提供了一種解決方法。

小知識(shí)之嵌入式 Linux

嵌入式 Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng),它被廣泛應(yīng)用在移動(dòng)電話、個(gè)人數(shù)字助理(PDA)、媒體播放器、消費(fèi)性電子產(chǎn)品以及航空航天等領(lǐng)域中。