发明内容
本发明以确保公网对讲数据的机密性、完整性,防止被窃听和窃取为目的,提供了一种公网对讲机加密通信方法及公网对讲系统。
为达此目的,本发明采用以下技术方案:
提供一种公网对讲机加密通信方法,步骤包括:
S1,利用鉴权中心AuC对对讲终端是否有访问系统服务器MSC的权利进行鉴权;
S2,鉴权通过后,贴附在所述对讲终端的流量卡上的贴膜卡对所述对讲终端的通信数据进行加密后传输。
优选地,步骤S1中,利用所述鉴权中心AuC进行鉴权的方法步骤具体包括:
S11,系统服务器MSC向鉴权中心AuC转发对讲终端发起的鉴权请求;
S12,所述鉴权中心AuC接收到所述鉴权请求后生成随机数RAND1和鉴权种子RS并通过所述系统服务器MSC转发给所述对讲终端;
S13,所述对讲终端根据接收到的所述随机数RAND1和所述鉴权种子RS生成鉴权结果res1,并生成随机数RAND2,然后将所述鉴权结果res1和所述随机数RAND2通过所述系统服务器MSC转发给所述鉴权中心AuC;
S14,所述鉴权中心AuC根据所述随机数RAND1和所述鉴权种子RS生成鉴权结果xres1,并根据所述随机数RAND2生成鉴权结果res2,并比较所述鉴权结果xres1与所述鉴权结果res1数据是否一致,
若是,则通过所述系统服务器MSC向所述对讲终端返回中心侧鉴权成功消息并转入步骤S15,所述中心侧鉴权成功消息中包含所述鉴权结果res2和所述随机数RAND1;
若否,则通过所述系统服务器MSC向所述对讲终端返回中心侧鉴权失败消息并终止鉴权流程;
S15,所述对讲终端根据所述随机数RAND2生成鉴权结果xres2,并比较所述鉴权结果xres2与所述中心侧鉴权成功消息中携带的所述鉴权结果res2数据是否一致,
若是,则生成双向鉴权成功消息发送给所述对讲终端的终端应用MS;
若否,则生成双向鉴权失败消息发送给所述终端应用MS。
优选地,所述步骤S13中,所述对讲终端响应所述鉴权中心AuC的鉴权过程具体包括步骤:
S131,所述对讲终端中的终端应用MS接收所述系统服务器MSC转发的所述随机数RAND1和所述鉴权种子RS并传递给安装在所述对讲终端中的鉴权模块AuMS;
S132,所述鉴权模块AuMS根据所述随机数RAND1和所述鉴权种子RS,通过PA1算法计算生成所述鉴权结果res1,并生成所述随机数RAND2;
S133,所述鉴权模块AuMS将所述鉴权结果res1和所述随机数RAND2发送给所述终端应用MS;
S134,所述终端应用MS将所述鉴权结果res1和所述随机数RAND2发送给所述系统服务器MSC;
S135,所述系统服务器将所述鉴权结果res1和所述随机数RAND2发送给所述鉴权中心AuC。
优选地,所述步骤S14中,所述鉴权中心AuC根据所述随机数RAND1和所述鉴权种子RS并通过PA1算法计算生成所述鉴权结果xres1,根据所述随机数RAND2并通过PA2算法计算生成所述鉴权结果res2。
优选地,所述步骤S15中,所述对讲终端确认所述系统服务器MSC的鉴权结果的方法步骤包括:
S151,所述对讲终端的终端应用MS接收所述系统服务器MSC转发的所述中心侧鉴权成功消息;
S152,所述终端应用MS将所述中心侧鉴权成功消息发送给安装在所述对讲终端中的鉴权模块AuMS;
S153,所述鉴权模块AuMS根据所述随机数RAND2并通过PA2算法生成所述鉴权结果xres2;
S154,所述鉴权模块AuMS比较所述鉴权结果xres2与所述中心侧鉴权成功消息中携带的所述鉴权结果res2的数据是否一致,
若是,则生成双向鉴权成功消息发送给所述终端应用MS;
若否,则生成双向鉴权失败消息发送给所述终端应用MS。
优选地,步骤S2中,鉴权通过后,安装在所述对讲终端中的鉴权模块AuMS将所述系统服务器MSC从所述鉴权中心AuC处获取的通信密钥、和/或组密钥、和/或短信密钥写入到所述贴膜卡中后,所述贴膜卡对所述对讲终端的通信数据进行加密传输。
本发明还提供了一种加密通信的公网对讲系统,可实现所述的公网对讲机加密通信方法,所述公网对讲系统包括安装有鉴权模块AuMS和终端应用MS的对讲终端、系统服务器MSC以及鉴权中心AuC,所述系统服务器MSC利用所述鉴权中心AuC对所述对讲终端是否有访问所述系统服务器MSC的权利进行鉴权,鉴权通过后,贴附在所述对讲终端的流量卡上的贴膜卡对所述对讲终端的通信数据进行加密后传输。
优选地,所述鉴权模块AuMS中包括:
鉴权请求发起模块,用于发起鉴权请求;
鉴权消息接收模块,用于接收所述系统服务器MSC从所述鉴权中心AuC处转发的鉴权消息;
鉴权结果生成模块,连接所述鉴权消息接收模块,用于根据所述鉴权消息中包含的随机数RAND1和鉴权种子RS生成鉴权结果res1;
随机数生成模块,连接所述鉴权消息接收模块,用于在接收到所述鉴权消息后生成随机数RAND2;
鉴权结果发送模块,连接所述鉴权结果生成模块,用于将所述鉴权结果res1发送给所述系统服务器MSC;
随机数发送模块,连接所述随机数生成模块,用于将所述随机数RAND2发送给所述系统服务器MSC;
鉴权结果接收模块,用于接收所述鉴权中心AuC通过所述系统服务端MSC转发的中心侧鉴权成功消息或中心侧鉴权失败消息,所述中心侧鉴权成功消息中包含所述鉴权中心AuC生成的鉴权结果res2和所述随机数RAND1;
所述鉴权结果生成模块,还连接所述随机数生成模块和所述鉴权结果接收模块,用于在接收到所述中心侧鉴权成功消息后根据所述随机数RAND2生成鉴权结果xres2;
数据比对模块,分别连接所述鉴权结果接收模块和所述鉴权结果生成模块,用于比较所述中心侧鉴权成功消息中携带的所述鉴权结果res2与生成的所述鉴权结果xres2数据是否一致,
若是,则生成双向鉴权成功消息发送给所述终端应用MS;
若否,则生成双向鉴权失败消息发送给所述终端应用MS。
本发明具有以下有益效果:
1、利用鉴权中心AuC对对讲终端(公网对讲机)是否有访问系统服务器MSC的权利进行鉴权,实现了对对讲终端和系统服务器MSC双方身份合法性的有效认证,提高了对讲终端的通话安全性。
2、采用目前加密级别最高的贴膜卡使用国产商用密码算法对对讲终端的通信数据高级别的加密保护,极大降低了通信数据被窃听、窃取的风险,进一步提升了对讲终端的通话安全性。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本专利的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若出现术语“上”、“下”、“左”、“右”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
在本发明的描述中,除非另有明确的规定和限定,若出现术语“连接”等指示部件之间的连接关系,该术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个部件内部的连通或两个部件的相互作用关系。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
本发明实施例提供的一种公网对讲机加密通信方法,如图1所示,包括:
步骤S1,利用鉴权中心AuC(Authentication Center,简称AuC)对对讲终端(公网对讲机)是否有访问系统服务器MSC的权利进行鉴权;鉴权中心AuC(用于鉴权算法的计算)与系统服务器MSC(负责对讲终端与鉴权中心通信的专用服务器,对讲终端和鉴权中心交互数据都需通过该服务器处理)之间采用udp Socket通信,接口数据采用json格式,json数据格式比较简单,易于读写,占用带宽小。
步骤S2,鉴权通过后,贴附在对讲终端的流量卡上的贴膜卡(加密卡/TF卡)对对讲终端的通信数据进行加密后传输。对讲终端中安装有鉴权模块AuMS用于鉴权算法的计算。鉴权模块AuMS与安装在对讲终端中的终端应用MS之间通过AIDL接口提供访问贴膜卡的方法。
以下结合图2-5对利用鉴权中心AuC对对讲终端访问系统服务器MSC的权利进行鉴权的过程、原理进行详细阐述:
如图2和图5所示,利用鉴权中心AuC进行鉴权的方法包括如下步骤:
步骤S11,系统服务器MSC向鉴权中心AuC转发对讲终端发起的鉴权请求;
步骤S12,鉴权中心AuC接收到鉴权请求后生成随机数RAND1(RAND1为鉴权中心AuC生成的挑战值)和鉴权种子RS(RS为公安一所提供的国密算法生成的随机数)并通过系统服务器MSC转发给对讲终端;
步骤S13,对讲终端根据接收到的随机数RAND1和鉴权种子RS生成鉴权结果res1,并生成随机数RAND2(挑战值),然后将鉴权结果res1和RAND2通过系统服务器MSC转发给鉴权中心AuC;
步骤S14,鉴权中心AuC根据随机数RAND1和鉴权种子RS生成鉴权结果xres1,并根据随机数RAND2生成鉴权结果res2,并比较鉴权结果xres1与将鉴权结果res1数据是否一致,
若是,则通过系统服务器MSC向对讲终端返回中心侧鉴权成功消息并转入步骤S15,中心侧鉴权成功消息中包含鉴权结果res2和随机数RAND1;
若否,则通过系统服务器MSC向对讲终端返回中心侧鉴权失败消息并终止鉴权流程;
步骤S15,对讲终端根据随机数RAND2生成鉴权结果xres2,并比较鉴权结果xres2与中心侧鉴权成功消息中携带的鉴权结果res2数据是否一致,
若是,则生成双向鉴权成功消息发送给对讲终端的终端应用MS;
若否,则生成双向鉴权失败消息发送给终端应用MS。
这里需要说明的是,RAND1、RAND2、鉴权种子RS的长度都是80比特,鉴权结果res1、res2、xres1、xres2的长度都是32比特,RAND1、RAND2、res1、res2、xres1、xres2的长度为公安一所提供的国密算法的固定长度取值。
更加具体地,上述的利用鉴权中心AuC进行鉴权包括以下四个过程:
一、系统服务端的鉴权发起过程
系统服务端的鉴权发起又包括以下4个过程:
1、系统服务器MSC向鉴权中心AuC转发对讲终端的鉴权请求;
2、鉴权中心AuC接收到鉴权请求后生成随机数RAND1;
3、鉴权中心AuC接收到鉴权请求后生成鉴权种子RS(64bit+一个递增的int);
4、鉴权中心AuC将随机数RAND1和鉴权种子RS发送给系统服务器MSC。
二、对讲终端的鉴权响应过程
图3以附图形式对对讲终端响应鉴权中心AuC鉴权的过程作了表达。简而言之,对讲终端的鉴权响应包括以下3个过程:
1、安装在对讲终端上的终端应用MS接收到系统服务器MSC转发的来自于鉴权中心AuC的随机数RAND1和鉴权种子RS后,传递给安装在对讲终端中的鉴权模块AuMS;
2、AuMS利用公安一所提供的算法PA1(RAND1+authkey(机器生成的auth码)+RS)计算得到鉴权结果res1,并生成新的随机数RAND2;
3、鉴权模块AuMS将鉴权结果res1和RAND2传递给终端应用MS,MS将res1、RAND2发送给系统服务器MSC。
对讲终端的鉴权响应过程的软件实现方法简述如下:
MS调用方法:public String authorize(String rs,String rand)
MS先将byte[]类型的Rand1和RS通过byte2base64转化为String,再传递给AuMS,AuMS
返回数据为:{rand2:xxx,res1:xxxxx}
AuMS将byte[]类型的Rand2和res1通过byte2base64转化为String类型,再传递给MS。
以下AuMS和MS之间的接口参数采用相同的处理方式。
三、系统服务器MSC的鉴权验证过程
系统服务器MSC的鉴权验证包括以下4个过程:
1、系统服务器MSC接收来自终端应用MS的RAND2和res1,MSC将RAND2和res1转发给鉴权中心AuC;
2、鉴权中心AuC利用PA1算法(RAND1+authkey+RS)计算得到鉴权结果xres1;
3、AuC利用PA2算法(RAND2+authkey)计算得到鉴权结果res2;
4、AuC比较xres1与接收到的res1,
如果不一致,则AuC向系统服务器MSC返回鉴权失败消息,MSC向MS返回该鉴权失败消息;
如果一致,则AuC向系统服务器MSC返回鉴权成功消息。
四、对讲终端确认MSC的鉴权结果的过程
图4示出了对讲终端确认MSC的鉴权结果的实现步骤图。简而言之,对讲终端对鉴权结果的确认包括以下3个过程:
1、对讲终端的终端应用MS接收来自系统服务器MSC的鉴权成功消息,该鉴权成功消息中包含RAND1和res2,MS将res2传递给AuMS;
2、AuMS利用PA2算法(RAND2+authkey)计算出鉴权结果xres2;
3、AuMS比较xres2和接收到的res2数据是否一致,
如果不一致,则AuMS向MS传递(code:400),表示MS与系统服务器MSC的双向鉴权失败;
如果一致,则AuMS向MS传递(code:200),表示MS与系统服务器MSC的双向鉴权成功。
以下对本发明加密对讲终端通信数据的方法进行具体阐述。
加密对讲终端通信数据主要包括以下五五块内容:
一、MSC向密钥管理中心获取鉴权密钥、通信密钥、组密钥、短信密钥流程
系统服务器MSC和密钥管理中心(SEC)之间的交互通过局域网,SEC为公安一所提供的密钥管理中心,负责各种密钥的管理和分发。
MSC与SEC/AuMS的身份验证过程请见图6。MSC可以根据需要向SEC发起udp socket密钥请求,发起请求前需要先使用用户名和密码登录。登录成功后,密钥管理中心利用RSA算法,使用私钥加密用户ID,生成token响应给MSC。
MSC携带username和password发起注册请求
SEC验证用户名和密码,如果成功则返回验证成功并携带token,token为以下所有接口提供统一身份验证。
注册成功后的MSC携带token向SEC/AuC发起获取鉴权密钥接口、获取通信密钥接口、获取某个终端的组密钥流程接口、获取某个终端的短信密钥接口等接口。
MSC可以根据需要向SEC发起udpsocket密钥请求,请求头部需要携带token,验证通过响应请求的信息。
MSC从SEC获取鉴权密钥、通信密钥、组密钥(对讲机通讯基于群组通话,一个群组一个组密钥)、短信密钥的流程请见图7,具体为:
1、获取鉴权密钥接口
MSC将鉴权密钥Base64解码,变成一个byte[]传递给对讲终端,终端做Base64编码后,调用接口传递给鉴权模块AuMS。AuMS将密钥写入加密卡(贴膜卡)中,写入成功或者失败都会返回一个结果,格式是json字符串{status:200,content:xxxxx},终端应用MS解析字符串读取属性status的值,并需要把{status:200,content:xxxxx}字符串上报给系统服务器MSC,系统服务器MSC收到反馈消息需要把这个消息反馈给密钥管理中心SEC。
鉴权密钥是否成功分发给对应的对讲终端,需要MSC给密钥管理中心反馈分发情况,下发成功反馈’distributestatus’:’200’,下发失败反馈’distributestatus’:’400’。
密钥管理中心SEC收到上报的信令,返回一个信令‘receivestatus’:’200’。
2、获取通信密钥接口
MSC将通信密钥Base64解码,变成一个byte[]传递给对讲终端,终端做Base64编码后,调用接口传递给鉴权模块AuMS。将密钥写入加密卡中,写入成功或者失败都会返回一个结果,格式是json字符串{status:200,content:xxxxx},终端应用MS解析字符串读取属性status的值,并需要把{status:200,content:xxxxx}字符串上报给系统服务器MSC,系统服务器MSC收到反馈消息需要把这个消息反馈给密钥管理中心SEC。
通信密钥是否成功分发给对应的对讲终端,需要MSC给密钥管理中心SEC反馈分发情况,下发成功’distributestatus’:’200’,下发失败’distributestatus’:’400’。
密钥管理中心SEC收到上报的信令,返回一个信令‘receivestatus’:’200’。
3、获取指定对讲终端的组密钥流程接口
MSC将组呼密钥Base64解码,变成一个byte[]传递给对讲终端,对讲终端做Base64编码后,调用接口传递给鉴权模块AuMS,鉴权模块AuMS将密钥写入加密卡中,写入成功或者失败都会返回一个结果,格式是json字符串{status:200,content:xxxxx},终端应用MS解析字符串读取属性status的值,并需要把{status:200,content:xxxxx}字符串上报给系统服务器MSC,系统服务器MSC收到消息需要把这个消息反馈给密钥管理中心SEC。
组密钥是否成功分发给对应的对讲终端,需要MSC给密钥管理中心SEC反馈分发情况,反馈消息的形式为:下发成功’distributestatus’:’200’,下发失败’distributestatus’:’400’。
密钥管理中心SEC收到上报的信令,返回一个信令‘receivestatus’:’200’。
4、获取指定对讲终端的短信密钥接口
MSC将短信密钥Base64解码,变成一个byte[]传递给对讲终端,终端做Base64编码后,调用接口传递给鉴权模块AuMS,鉴权模块AuMS将密钥写入加密卡中,写入成功或者失败都会返回一个结果,格式是json字符串{status:200,content:xxxxx},终端应用MS解析字符串读取属性status的值,并需要把{status:200,content:xxxxx}字符串上报给系统服务器MSC,系统服务器MSC收到反馈消息需要把这个消息反馈给密钥管理中心SEC。
短信密钥是否成功分发给对应的对讲终端,需要MSC给密钥管理中心SEC反馈分发情况,反馈形式为:下发成功’distributestatus’:’200’,下发失败’distributestatus’:’400’。
密钥管理中心SEC收到上报的信令,返回一个信令‘receivestatus’:’200’。
获取各个密钥接口后,鉴权模块AuMS调用加密模块接口向加密卡中写入鉴权密钥、通信密钥、组密钥、短信密钥。
(1)写入鉴权密钥的方法
public String writeAuthKey(String authkey,String version)
返回值{status:200,content:xxxxx}
(2)写入通信密钥的方法
public String writeTekKey(String tek,String version)
返回值{status:200,content:xxxxx}
(3)写入组密钥的方法:
publicString writeGroupKey(List<GroupKey>groupkey)
新建一个GroupKey类
classGroupKey implements Parcelable{
private String groupid;//组名
private String secretkey;//组密钥
private String version;//组密钥版本号
private String enable;//是否启用
}
返回值{status:200,content:xxxxx}
(4)写入短信密钥的方法:
public String writeMessageKey(String messagekey,String version)
返回值{status:200,content:xxxxx}
三、密钥管理控制平台向MSC发出下发密钥指令的流程接口(下发的密钥包括鉴权密钥、通信密钥、组密钥、短信密钥)
方式一:对讲终端初始化时,主动向系统服务器MSC发起密钥获取请求,系统服务器MSC向密钥管理中心SEC请求终端组密钥信息。这种方式的交互接口就是MSC向密钥管理中心SEC获取鉴权密钥、通信密钥、组密钥、短信密钥流程接口。
方式二:管理员利用用户操作密钥管理控制平台,从密钥管理控制平台向MSC发起(下发、变更)密钥的通知指令,MSC收到通知指令后向密钥管理中心SEC请求终端的对应密钥信息。
以下对管理员操作密钥管理控制平台通知下发密钥的方法进行简要阐述:
1、通知下发鉴权密钥
管理员点击图8中的“导出列表”,将鉴权密钥列表导出到文件;
然后管理员点击“下发鉴权密钥”后,控制台向系统服务器MSC发送通知指令,指令使用udp传输,MSC收到指令后,根据指令中携带的TF卡号(贴膜卡号)和设备号码(对讲终端的设备号)主动请求相应的鉴权密钥,密钥管理中心SEC收到请求后,使用加密卡的公钥加密鉴权密钥后发送给MSC。
通知下发鉴权密钥的功能实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainAuthKey’,’numbers’:[‘1800’,’1801’],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainAuthKey’,’numbers’:[‘1800’,’1801’],‘code’:’200’}”
numbers:[]表示需要给选定的所有终端下发通信密钥,每个终端号码是数组里的一个元素。
2、通知下发通信密钥
同样地,管理员首先点击图9中的“导出列表”,将通信密钥列表导出到文件;
然后,管理员点击下发通信密钥后,控制台向MSC发送通知指令,指令使用udp传输,MSC收到指令后,根据指令中携带的TF卡号和设备号码主动请求相应的通信密钥,密钥管理中心SEC收到请求后,使用TF卡的公钥加密通信密钥后发给SMC。
通知下发通信密钥的功能实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainTekKey’,’numbers’:[‘1800’,’1801’],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainTekKey’,’numbers’:[‘1800’,’1801’],‘code’:’200’}”
numbers:[]表示需要给选定的所有终端下发通信密钥,每个终端号码是数组里的一个元素。
3、通知下发组密钥
密钥管理控制平台向MSC通知下发组密钥,如果MSC收到指令,返回code:200。
(1)下发组密钥的接口有两个,其中一种情况是当某一个组的组秘钥发生变化,那么需要属于这个组的所有对讲终端都重新向密钥管理中心申请对应的组秘钥。
首先,管理员先点击图10中的“生成组密钥”,后台根据组号码,对应生成组密钥,组密钥使用根密钥加密后存储在数据库中;
然后,管理员点击下发组密钥后,控制台向MSC发送通知指令,指令使用udp传输,MSC收到指令后,主动请求所有或部分终端设备对应的组秘钥,秘钥管理中心SEC收到请求后,查询到相关的组秘钥使用通信密钥加密后发送给MSC。
或者,组秘钥也可在每次组呼建立前下发给对应的对讲终端。
通知下发组密钥的功能实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainGroupKeyG’,’groupname:[’组1’,’组2’],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainGroupKeyG’,’groupName’:[’组1’,’组2’],‘code’:’200’}”。
(2)另一种情况就是指定某几个对讲终端重新获取它们对应的组密钥,比如重新更新密钥。
管理员首先通过图11中的“信息导入”“单个添加”“删除”三个按钮操作数据库,删除原有密钥信息;然后通过操作图11中的“生成鉴权密钥”“生成通信密钥”重新生成鉴权密钥和通信密钥,并存储到鉴权密钥列表和通信密钥列表,以便下次查询和下发。
指定的对讲终端获取对应的组密钥的功能实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainGroupKeyS’,’numbers’:[‘1800’,’1801’],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainGroupKeyS’,’numbers’:[‘1800’,’1801’],‘code’:’200’}”。
密钥管理控制平台向MSC通知下发短信密钥,如果MSC收到指令,返回code:200。
(3)组密钥下发成功后,需要决定是否都启用组密钥,功能通过以下代码实现:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyEnableGroupKeyG’,’groupname:[’组1’,’组2’],,’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyEnableGroupKeyG’,’groupName’:[’组1’,’组2’],,‘code’:’200’}”
当MSC收到启用组密钥的指令后,需要向密钥管理中心SEC发起获取组密钥的请求。
4、通知下发短信密钥
管理员通过点击图12中的“生成短信密钥”按钮,调用加密卡生成硬件随机数,然后使用加密卡根密钥进行加密,将加密后的随机数存储到鉴权密钥列表和通信密钥列表。然后管理员点击图12中的“下发短信密钥”按钮,控制台向MSC发送指令,指令使用udp传输,MSC收到指令后,携带终端号码主动请求相应的短信密钥,密钥管理中心收到请求后,使用此设备号码对应的加密卡的公钥加密短信密钥后发送给MSC。
通知下发短信密钥的功能实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainMsgKey’,’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyObtainMsgKey’,‘code’:’200’}”。
另外,当某一个终端没有收到下发的短信密钥的情况下,需要密钥管理中心SEC针对这个终端再次下发密钥,管理员通过按下图13中的“下发短息密钥”按钮再次下发短信密钥,短息密钥下发的实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’
notifyObtainMsgKeyS’,’numbers’:[‘1800’,’1801’],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’
notifyObtainMsgKeyS’,’numbers’:[‘1800’,’1801’],‘code’:’200’}”。
短信密钥下发成功后,需要点击启用短信密钥(此接口为扩展接口,目前暂时不实现),实现代码如下:
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyEnableMsgKey’,’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’notifyEnableMsgKey’,‘code’:’200’}”。
四、个呼密钥下发流程
系统服务器MSC具备将个呼密钥下发的能力,在呼叫建立过程中,MSC向密钥管理中心SEC请求个呼密钥,并将主叫的密钥交给主叫,被叫的密钥交给被叫。
个呼密钥下发流程如图14所示,当MSC收到主叫的呼叫请求,首先向密钥管理中心SEC请求一个个呼密钥。
个呼密钥获取接口:
Udp socket
requestbody:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’obtainSKey’,‘peers’:[{‘name’:’1800’},{‘name’:’1801’}],’token’:’xxxx’}”
response body:
“{‘version’:’1.0’,’tid’:’xxx’,’method’:’obtainSKey’,‘peers’:[{‘name’:’1800’,’key’:’xxxx’},{‘name’:’1801’,’key’:’xxxx’}]}”
MSC收到个呼密钥后,将个呼密钥Base64解码,变成一个byte[]传递给对讲终端,终端选择接听后,终端将密钥设置到终端的SecMSS(终端中使用的公安一所提供的加密模块)中。
被叫选择接听后,将个呼主叫的密钥发送给主叫MS,MS将密钥发送给SECMS。
通话连接建立后,两端MS调用个呼加密接口,加解密语音流。加解密语音流时应先将个呼密钥和语音流Base64解码后再调用接口。
对讲终端向加密卡(TF卡)写入个呼密钥的接口方法:需要将个呼密钥Base64编码后转成一个String传入接口中。
public String writeSKey(String skey)
返回值是json格式的字符串。
密钥设置成功通话才能建立。
五、手机终端利贴膜卡进行组呼加密、个呼加密、短信加密流程接口
对讲终端调用贴膜卡(加密卡)进行个呼加密接口,语音数据作为参数传入,由于Android AIDL不支持byte[]数组作为参数传递,所以讲byte[]使用base64方法转化为String类型,并且要求每一个语音包byte[]小于1024个字节。返回的加密后的语音包也使用base64编码,编码格式采用UTF-8。
本发明还提供了一种加密通信的公网对讲系统,可实现上述的公网对讲机加密通信方法,如图15所示,该公网对讲系统包括安装有鉴权模块AuMS和终端应用MS的对讲终端、系统服务器MSC以及鉴权中心AuC,系统服务器MSC利用鉴权中心AuC对对讲终端是否有访问系统服务器MSC的权利进行鉴权,鉴权通过后,贴附在对讲终端的流量卡上的贴膜卡对对讲终端的通信数据进行加密后传输。
具体地,如图16所示,鉴权模块AuMS中包括:
鉴权请求发起模块,用于发起鉴权请求;
鉴权消息接收模块,用于接收系统服务器MSC从鉴权中心AuC处转发的鉴权消息;
鉴权结果生成模块,连接鉴权消息接收模块,用于根据鉴权消息中包含的随机数RAND1和鉴权种子RS生成鉴权结果res1;
随机数生成模块,连接鉴权消息接收模块,用于在接收到鉴权消息后生成随机数RAND2;
鉴权结果发送模块,连接鉴权结果生成模,用于将鉴权结果res1发送给系统服务器MSC;
随机数发送模块,连接随机数生成模块,用于将随机数RAND2发送给系统服务器MSC;
鉴权结果接收模块,用于接收鉴权中心AuC通过系统服务端MSC转发的中心侧鉴权成功消息或中心侧鉴权失败消息,中心侧鉴权成功消息中包含鉴权中心AuC生成的鉴权结果res2和随机数RAND1;
鉴权结果生成模块,还连接随机数生成模块和鉴权结果接收模块,用于在接收到中心侧鉴权成功消息后根据随机数RAND2生成鉴权结果xres2;
数据比对模块,分别连接鉴权结果接收模块和鉴权结果生成模块,用于比较中心侧鉴权成功消息中携带的鉴权结果res2与生成的鉴权结果xres2数据是否一致,
若是,则生成双向鉴权成功消息发送给终端应用MS;
若否,则生成双向鉴权失败消息发送给终端应用MS。
综上,本发明利用鉴权中心AuC对对讲终端(公网对讲机)是否有访问系统服务器MSC的权利进行鉴权,实现了对对讲终端和系统服务器MSC双方身份合法性的有效认证,提高了对讲终端的通话安全性。采用目前加密级别最高的贴膜卡使用国产商用密码算法对对讲终端的通信数据高级别的加密保护,极大降低了通信数据被窃听、窃取的风险,进一步提升了对讲终端的通话安全性。
需要声明的是,上述具体实施方式仅仅为本发明的较佳实施例及所运用技术原理。本领域技术人员应该明白,还可以对本发明做各种修改、等同替换、变化等等。但是,这些变换只要未背离本发明的精神,都应在本发明的保护范围之内。另外,本申请说明书和权利要求书所使用的一些术语并不是限制,仅仅是为了便于描述。