我们常说的公安综合移动警务系统是基于移动通信网络和公安专网的信息查询与处理系统。当然我们为了达到公安信息保密性的要求,需要对传输的信息进行加密。为此我们设计并实现了一种基于AES算法和Morii-Kasahara算法的混合加密方案;该方案具有算法安全性高、运算速度快、带宽需求低、密钥管理方便、需求存储空间小等优点,可以满足公安综合移动警务系统的加密需求。

一、基于AES和Morii- Kasahara加密算法的混合加密方案设计

1、基于AES和Morii- Kasahara加密算法的混合加密、解密方案的流程

为满足公安综合移动警务系统对数据快速高效加密、解密处理的要求,解决非对称加密算法加密速度慢,对称加密算法密钥分发、管理困难的问题。该混合加密方案通过Morii-Kasahara算法传递AES密钥,用AES加密算法加密待传输的明文。首先移动终端随机生成AES密钥K,并获得服务器端的公钥Key(Morii-Kasahara算法的公钥),然后将AES密钥用公钥Key加密得CK,并用K加密明文m得到密文M,将CK和M传给服务器端。服务器端用私钥Skey解密CK得到AES密钥K,再用密钥K解密密文M得明文m,最后服务器端用密钥K加密处理信息传给客户端,客户端用K解密出处理结果,完成一次查询功能。

2、基于AES和Morii- Kasahara加密算法的混合加密、解密原理

(1)加密AES密钥

本方案在求取Morii-Kasahara算法模数时引入了大数分解问题,使Morii-Kasahara算法是一种基于离散对数和大数分解混合问题的背包加密算法,增加了算法的安全性。它将简单背包向量序列通过幂模运算生成困难背包向量序列,发送方用困难背包向量加密,接收方将密文变换后用简单背包向量解密。

1) Morii-Kasahara算法的密钥生成

首先服务器端生成简单向量序列A’<a1 ',a2',a’3…ar’>(要求A’中的元素两两互素),同时生成大素数p和q。令n=p×q且n>a,a1'×a2'×a’3…ar’,φ(n)=(p-l)×(q-l),任取gcd(e,φ(n))=1,使得ed=1mod+(φ(n))。计算A’向量序列,其中ai=(ai')emod,将素数忍和A=作为公钥发布,e、d和A’=A’<a1 ',a2',a’3…ar’>作为私钥保存用于解密使用。

2)加密密钥

加密AES密钥:设AES密钥为K,将其分为rbit一组的二进制表示为Ki =<k1,k2,…,kr>,利用困难背包向量序列A加密密钥Ki,获得密钥密文CK。

解密AES密文:接收方用密钥d变换密钥密文CK'=CKdmodn,然后用A'求解简单背包问题CK 7,求出AES密钥。

(2)加密明文

AES于2001年11月26日被列入加密标准,是基于多轮加密、密钥变换、列混淆和S盒的非线性加密原理的算法。

加密明文:首先,生成用于AES加密的128位密钥K。接着,对明文进行分组,AES加密的数据分组长度采用128位,不足128位时用空格补足,按每行4个字节排成4行,称为一个状态,数据的写入和读出均按列优先顺序,以字节为单位操作。最后,对明文进行9圈的S盒变换ByteSub、行移位变换ShiftRow、列混淆变换MixColumn、圈密钥加变换AddRoundKey等过程,在第10圈时不做列混淆变换。通过上述一系列编码过程输出密文。

解密明文:接收者从接收到的信息中解密出AES加密密钥后,按照与AES加密过程类似的步骤进行解密。首先对接收到的密文进行分组(128位),然后对分组数据进行1圈的圈密钥加变换、反行变换、反S盒变换,接着进行9圈的圈密钥加变换、反列变换、反行变换和反S盒变换。最后通过上述一系列编码过程输出明文。

3、基于AES和Morii- Kasahara加密算法的混合加密方案分析

(1)安全性分析

显然,对所有的已知攻击而言,AES是安全的。它的S盒构造中有限域逆操作的使用导致了线性逼近和差分分布表中的各项趋近于均匀分布。这就为抵御差分和线性攻击提供了安全性。线性变换MixColumns使得找到包含“较少”活动S盒的差分和差分线性攻击成为不可能事件。在设计采用的一次一密的模式下,对AES的密文的任何攻击包括穷尽密钥搜索的攻击都是无效的。

因此,破解该加密方法的人手点只能通过获得AES密钥,也就在于能否破解Morii-Kasahara算法。到目前为止,Morii-Kasahara算法是安全的。这里对Morii- Kasahara算法的改进是引入了大数分解的NP问题,即当,n较大时试图从n分解出p/q是不可行的,这正是RSA算法保密性的原理,因此无法获得φ(n)=p×q,增加了求取密钥e和d的复杂程度。又因为e、d都是随机选取的,所以在模数相同的情况下,计算密钥e和d要比计算RSA密钥复杂。该算法的安全性高于RSA加密算法,满足了公安综合移动警务系统的安全要求。

(2)运算速度分析

因为移动终端的内存较小,处理速度较慢,所以我们根据AES加密算法安全性高、速度快的优点,对大量的明文采用AES算法加密,而用改进的Morii-Kasahara算法加密AES密钥。Morii- Kasahara算法加密过程只进行乘模运算,而ECC算法要将明文映射到椭圆曲线上,计算量大,RSA算法的密钥长度较长,因此该算法比RSA、ECC等算法计算量小、加密速度快,并且通过查表和并行处理的方法可以提高加解密的速度。

二、公安综合移动警务系统加密解密方案实现

公安综合移动警务系统采用的是基于C/S结构的网络模型,手持移动设备(PDA)作为系统的客户端,而在系统服务中心搭建服务器。C/S是一种开放系统结构网络模型,即客户端向服务器提出请求,服务器对请求作相应的处理并执行被请求的任务,然后将结果返回给客户端。客户端和服务器在每次发送请求或响应信息前,首先应用如上所述的基于AES和Morii-Kasahara的混合加密算法的加解密功能模块对要发送的信息进行加密,然后将加密后的信息通过网络传输模块发送给服务器端;服务器端通过网络传输模块接收到信息后,由加解密功能模块对信息进行解密,最后将相应处理信息加密后发送回发送方。

1、加密解密系统功能模块

加密系统有两个主要功能模块:Morii-Kasahara加密解密模块、AES加解密模块等。

Morii-Kasahara加解密模块:主要完成公私密钥对的生成以及Morii-Kasahara的加密和解密,其中包含数据编码模块(将数据编码成定长的二进制码串和解码成数据)和Morii-Kasahara加密和解密。AES加解密模块:主要完成AES密钥的生成以及AES的加密和解密。

2、加密算法的实现

在Embedded VC++环境下,基于AES和Morii-Kasahara混合数据加密方案的公安综合移动警务系统的编程实现方法。首先,定义一个加解密的基类Crypto,定义三个成员函数,分别实现密钥生成SetKey()、加密EnCrypto()和解密DeCrypto()操作。再从这个基类派生出两个类AESCrypto和MKCrypto分别实现AES和Morii- Kasahara加密体制的具体算法,在各自的算法里重写基类的成员函数,实现加密解密功能。

下面简要给出基于AES和ECC混合数据加密的无线数据传输主要程序:

BOOL CreatSocket(BSTR sendData, BSTR* precvData, int ServerIP, int Port, BSTR szError)

{//其中sendData为待发送的明文.precvData为接收到的数据经过解密后得到的明文。

//ServerIP与Port分别为服务器的IP地址与端口号,szError为错误信息。

int Status , iReturn;

///lnitialize Winsock. And assign the socket IP address and Port.

//Establish a connection to the server socket.

connect (ServerSock, (PSOCKADDR) &destination_ sin, sizeof

( destination_sin)) ;

///Send a string to the server.

SetKey(key, 128)///密钥生成128位

EnCrypto(cryptograph, sendData)///数据加密BYTE* pSendData;

int len - Encoding: : UnocodeToBytes(cryptograph, &pSendDatasend ( ServerSock, ( char * ) pSendData, len, 0);

free( pSendData) ,

///Receive data from the server socket.

BYTE* pRecvData ;

iReturn- recv (ServerSock, (char * ) pRecvData, len, 0) }

DeCrypto( MingWen, pRecvData)///数据解密

Encoding:BytesUnocode( MingWen, len, &str ) ;

* precvData = str. ALlocSysString() ;

///Disable ServerSock.

}

以上混合加密方案实现了公安综合移动警务系统信息的加密传输。

小知识之C/S 结构

C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。