短信业务是目前移动运营商提供给移动用户相互收发短文本信息的一种基本服务,由于其方便、快捷、收费低廉、服务项目不断增多使得其应用越来越广泛,而有些短消服务涉及到商业数据、个人健康情况等,显然对这些信息有加密的必要性。那么我今天就教大家设计一种基于嵌入式Linux的加密短信系统。

一、嵌入式Linux加密短信系统的构建

在构建嵌入式Linux加密短信系统所需要的软硬件平台时,需要综合考虑硬件和软件的性能要求,合理的选择硬件资源和软件资源。本系统软件平台采用的是嵌入式Linux,硬件中采用三星的S3C2410作为CPU,无线调制解调器是SIEMEN公司生产的TC35i模块。这些主流的硬件性对嵌入式Linux加密短信系统的稳定高效有保障。

1、嵌入式Linux加密短信系统硬件平台的总体构建

如何设计嵌入式Linux加密短信系统

开发平台的总框架图如图1所示。其中硬件平台主要由两部分组成:主系统和通信子系统。主系统的处理器采用的是三星公司S3C2410。其主频为200MHZ,主系统内存由32Mbyte的FLASH和64Mbyte的SDRAM构成。其高速和大容量的RAM特性,为处理短消息这样的大数据包提供了便利;同时节省了外围器件,使得硬件结构简单化,提高系统的可靠性。通信子系统采为西门子公司的TC35i,TC35i是一款高度集成的GSM模块,内嵌AT指令集。系统采用液晶显示屏来显示接收到的中英文短信。

PC机的并口与开发板的JTAG口相连,利用JTAG功能把程序映像下载到开发板上,PC机的串口与开发板的串口1相连,在开发时可以通过MINICOM观察目标板的调试信息和输入控制命令对系统进行调试。开发板的串口2和GSM模块相连。

2、嵌入式Linux加密短信系统软件平台的构建

嵌入式Linux加密短信系统采用的操作系统是嵌入式Linux2.6.9,嵌入式Linux是Linux衍变而来的嵌入式操作系统。该系统具有稳定、功能强大、模块化可裁剪等特性,非常适合嵌入式系统的开发。由于嵌入式系统硬件资源有限,因此要通过配置内核、裁减Shell和嵌入式C库对Linux进行定制,使整个系统能够存放到较小的FLASH中。采用的U-BOOT作为启动引导程序,根文件系统为RAMDISK。

嵌入式Linux加密短信系统采用交叉编译的开发方式,安装的工具链是arm-lin-ux-gcc2.95.3。

二、嵌入式Linux加密短信系统软件的实现

嵌入式Linux加密短信系统的软件部分分为4个功能模块:短信内容加密、短信的编码与发送、短信解码与接收和短信的解密。软件功能如图2所示:

如何设计嵌入式Linux加密短信系统

1、短信编解码的实现

广义上的短信息从技术和功能上可以分为三类,即SMS(短文本信息)、EMS(增强型短信)和MMS(多媒体短信)。狭义上的短信息就是指SMS。我们在没有特别说明的情况下,短信息指SMS。SMS短信业务有下面的两个特点:

第一是存储转发机制,即SMS传送数据包的工作由移动网络中的短信中心(SC)而不是终端用户来完成,如果用户不在服务区内,短信就被存储在短信中心,等用户出现之后再转发给他。

第二是传递确认机制,在电路交换数据环境中,连接是端到端的,所以用户能够知道连接是否完成,以及数据传递的情况。

在发送短消息前,首先要发送AT+CMGF命令选择短消息的格式。短消的发送和接收控制模式有三种:Block模式、Text模式和PDU模式。使用Block模式需要手机生产厂商提供驱动支持,目前国内手机基本上不支持。Test模式不支持中文。因此,为了系统的通用性,兼容中英文短消息的发送和接收,系统使用PDU模式来处理短消息。

PDU模式中,可以采用三种方式对发送的内容进行编码,分别是7-bit,8-bit和UCS2编码。7-bit编码用于发送普通的ASCII码,它将一个7bit的字符(最高位为0)编码成8bit的数据,每8个字符“压缩”成7个;8-bit编码通常用于发送数据信息,如图片和铃声等。而UCS2编码将每个字符转化为16位的Uni-code宽字符。

PDU格式的短消息数据分为两种,一种为SMS-SUBMIT用于发送,即从MS(信息发送者)发送者)发送到SC。另一种是SMS-DELIVER用于接收。

即从SC发送到MS(信息接收者)。两者结构不完全相同如图3所示:

如何设计嵌入式Linux加密短信系统

其中SMS-SUBMIT中的TP-UDHI、TP-SRR、TP-RD、TP-VP和SMS-DELIVERY中的TP-UDHI、TP-SRI为可选单元。TP-MTI为消息类型,TP-RD请求拒绝复制消息,TP-SRR请求状态报告、TP-RP请求回复路径、TP-MMS有多少个消息等待接收。各字段详细信息请参见GSM03.04。

PDU是由“0-9”及“A-F”组成。表面上看起来就是一组16进制的数所组成的。实际上不仅包含了要显示的用户数据本身,还包含了很多其他信息,如SMS服务中心号码,目标号码等,是依据SMS-SUBMIT和SMS-DELIVER指定的格式进行编码的。下面用两个例子分别说明PDU串的编码格式。

例1:向服务中心号码SMSCA为+8613800100500,手机号码为13522321936,发送内容为“中国加油”的短消息。发送的PDU串如下列所示:

0891683108100005F011000D91683125321239F9000800084E2D56FD52A06C89

这组代码的含义如下:

(1)0891:短信中心地址字段08表示中心地址长度为8字节,为(0x91683108100005F0)的长度,8个字节。

91表示地址类型:二进制表示为:10010001

Bits7:1始终为1

Bits6:5:4为号码类型,001表示国际号码,即号码前需要加“+”。Bits3:2:1:0为号码鉴别,0000表示位置,0001表示ISDN/电话号码,1111留作扩展,一般默认为0001,表示电话号码类型。

(2)683108100005F0:短信中心号码。

一个字节内需反转,如果长度为计数则需要加“F”补齐。

(3)1100:FirstOctet字段。

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

00:TP-MR=0用于SMSC确定消息状态。由SMSC返回。

(4)0D91683125321239F9:对方手机号码。

OD:为对方手机号码个数,共13个十进制数,不包括91和‘F’。

3125321239F9:为对方手机号码

(5)00:TP-PID字段。一般设置为00,表示普通的GSM,点对点通信。

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

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

(8)08:TP-UDL字段。用户数据实际长度。7-bit编码时单位是7-bit,其他编码方式以字节为单位。这里以字节为单位。

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

2、短信加密的实现

在加密短信通信过程中,需要对SMS-SUBMIT格式的PDU数据包进行加密,对接收的SMS-DELIVER格式的PDU数据包进行解密,整个加密与解密操作只能对TP-UD部分,即用户数据部分,不可对PDU数据包中的其他数据操作,以免造成数据格式不正确,无法正常发送短信。

短消息常用的加密算法是DES、AES或RSA加密算法。嵌入式Linux加密短信系统采用的是DES加密算法为基础。

采用接收方手机号码的前8个字节作为加密密钥。这样使用变动的密钥,提高了可靠性。由于DES加密算法中数据以64位分组进行加密,当用户部分数据不足64位时,必须需要进行算法改良。可以采用填充数据的方法来克服这个问题。

短消息用户部分,在加密前简称明文字符串,记为m={m0,m1......mp-1},明文的长度#(m)=l,其中,mi={d8i,d8i+1,......d8i+7},i=0,1,2,当l=8,16时,最后一组字符串mp有8个字符,否则将不足8个字符。在加密后短消息用户部分简称密文字符串,记为c=c1,c2......cl,字符串的长度#(c)=l。当#(m)≠8,16时,因DES加密算法是以64位为基本加密分组,可先填充若干无用的字符,把明文长度扩大到8的整数倍。

本文提供了嵌入式Linux下加密短信收发系统的设计方法。短信收发采用PDU模式,能够处理中文、英文和中英文短信。其创新之处在于对短信进行改进的DES算法加密,并对信息文件加密内容不足8字节的情况,提供了一种解决方法。

小知识之嵌入式 Linux

嵌入式 Linux是以Linux为基础的嵌入式作业系统,它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。