基于GSM的无线抄表系统安全性的设计
2 系统加密算法和分析
2.1 数据加密算法
GSM通信网络的安全保障离不开加密理论的支持。从应用角度看,信息的安全需要保密、防篡改、防伪造等保障目标。而对应到数据加密理论,这些目标可由对称加密、非对称加密、散列等算法结合应用来实现。
对称加密算法的加密和解密使用同一个密钥,相对非对称加密算法密码长度较短(56 b,64 b或128 b)、加密速度快。最为普及和典型的是DES算法;非对称加密算法有两个密钥,一个公开,一个保密,因此一个做公钥,一个做密钥,该算法运算量大,与对称加密算法相比,加解密速度慢,不适合大量数据加解密,只适合小量数据加解密。典型的算法有RSA算法、椭圆函数加密算法等;散列函数是对明文运算后,可以生成一个定长的摘要,明文发生改变后摘要值变化很大,该函数是一个单向函数,从明文计算出摘要是很容易的,但从摘要计算出明文是不可能的。典型的算法有MD5,SHA等。
2.2 系统加密分析
上面提到的几种算法已经得到了广泛应用,但是在以微控制器为处理器的系统中,他们就显得很复杂,CPU运算速度不能满足其要求,占用ROM和RAM的资源较多,影响系统的响应速度。因此,针对以ARM7为控制器,数据发送时间短,安全性要求不是很高的系统,很有必要设计一种简单适用的加密方法提高系统的安全性。根据系统要求,考虑用对称加密的方法来实现对数据短信的加密。它的两个基本要素为加密算法和加密密钥。加密算法主要由插入随机数、字符置换、字符映射和异或等组成。加密密钥由计算机终控端生成,而且密钥可以随时改变,通过GSM模块发送。
3 系统加密过程
该设计对短信加密的思路为:首先根据短信原始内容计算出16位CRC校验码,16位校验码用其十六进制值对应的四字节ASCII表示,放在原始内容末尾,然后对包含原始内容和校验码的字符串再进行加密,根据生成的密文再次生成CRC校验码,置于密文末尾,最后发送出去。主要包括插人随机数、字节置换、异或和字节映射四个过程。
3.1 密钥
该系统使用对称加密的方法,加密算法和密钥只需保密其一即可使密文无法解读。但由于加密算法需要精心设计并经过大量分析验证,因此实际应用中优秀的算法并不多,而且越是大量应用且公开的加密算法,越能表明更高的安全性。因此只要妥善保密好有限长度的密钥,就能使无限长度的通信数据得到保密。对称加密双方使用同一个密钥加密解密,此密钥由计算机终端通过GSM模块发送。对于本来就存在安全隐患的GSM网络来说,最好的方法就是随时改变密钥。因此考虑用32 B随机数作为密钥,此密钥可以由计算机管理员随机输入或者用PC机采用随机数生成算法生成。
3.2 加密算法
(1)CRC校验码
CRC循环校验码主要用来校验发送的数据是否可靠,如果不可靠就丢弃重发或修复。CRC校验码主要由信息码和校验码组成。如果CRC校验码长度为nb,信息码长为kb,就称(n,k)码。它的编码规则为:首先将信息码左移(n-k)位,然后用一个生成多项式g(x)(二进制数)用模2除移位后的式子,余数就作为校验码。该设计中GSM模块的一条短信最长为160个ASCII字符,加上短信明文的长度,考虑到长度太长延时较为严重,因此选择标准CRC生成算法CRC-CCITT,其多项式为:CRC-CCITT=X16+X12+X5+1。
(2)插入随机数
从原始明文中依次取出一个字节,若该字节的ASCII值模3余0,则在该字节后插入3个随机数;若该字节的ASCII值模3余2,则在该字节后插入2个随机数;若该字节的ASCII值模3余1,则在该字节后插入1个随机数,随机数种子选取各种与当前系统状态相关的数值。插入的随机数对应的ASCII的平均值应尽量与原明文内容的平均值相近,以增加破解的难度。根据系统短信的格式,如前缀、读表数据、读表时间、CRC校验码等,长度为20 B,那么经过这一步操作之后,字符串最短长度为40 B,最长为80 B,这样字符串的长度在40~80 B之间,不确定性大大增加。
(3)字节置换
将上一步生成的字符串第一个字节的高四位和最后一个字节的低四位交换,第二字节高四位和倒数第二字节低四位交换,依次类推,生成字符串;此时,若字符串长度为偶数,将相邻两字节高四位与高四位交换,低四位与低四位交换,生成新字符串。若字符串为奇数,将第一个字节的高四位、低四位和最后一个字节高四位,低四位对应交换,将第二个字节的高四位、低四位和倒数第二个高四位、低四位对应交换,依次类推,最中间一个高四位与低四位交换,生成字符串,此时字符串长度不变。
(4)异或
先将32 b密钥与12 b硬件ID号循环异或,即密钥的第n个字节与ID号的第n%12个字节异或,得到长度为32 b的字符串密钥。然后再将上一步产生的字符串与这个32 b的字符串密钥再做同样的循环异或,即字符串的第n个字节与32 b字符串的第n%32个字节异或。经过两次双层循环异或,生成更加混乱的字符串,此时字符串长度仍然不变。
(5)字节映射
依次取出上步生成字符串的一个字节,若该字节对应的ASCII值小于32或者大于95,例如0x1A,则将该字节拆分为两字节,两字节的低四位分别为该字节的高四位和低四位,两字节的高四位分别为0110,0111,即生成0x61,0x7A;这里的两个字节的高四位取值要尽量接近,但应满足与低四位组合后他们的ASCII值与不拆分字节对应的值不在一个范围之内;若该字节值在32~95B之间,则保留不变,经过此种映射后,字符串长度范围由原来的40~80 B变为40~160 B,字符长度的不确定性进一步增加,系统的安全性进一步提高。
最后根据生成的字符串计算16位校验码,置于字符串末尾,生成最终的密文发送出去。以上所有加密的过程均可逆,所以解密过程为上述过程的逆过程,首先根据CRC校验码判断密文传输是否有误,然后解密,根据解密后的明文获得水表数据。
- 解析对云计算的十大误解(06-30)
- 融合是实现新一代门禁及电脑桌面登录安全性的关键(02-26)
- 电力无线应急通信网络的方案及安全性研究(09-07)
- 物联网安全性能分析及相关的安全措施(04-10)
- 云计算的安全性到底如何?(03-07)
- 直接变频接收机设计可实现多标准/多频带运行(10-11)