嵌入式技术
0 引言
在当今互联网时代的大背景之下,互联网技术迅猛发展,手机上网的网民也日趋增长。同样,用户在境外出行时的移动上网需求也日益强烈,移动用户出国活动频繁,国际漫游业务量明显增加[1],传统的实体SIM卡用户需要在出国之前办理国际漫游业务后,能够使用漫游地网络服务。然而,国际漫游资费高是困扰消费者的一大难题。为了解决上述所提出问题,基于智能终端的虚拟SIM卡技术得到重视和发展。通过支持虚拟SIM技术的终端消费者可以在全球覆盖范围内,以接近目的地价格水平使用数据上网服务。本文根据虚拟卡平台架构,结合Android Telephony框架结构,研究虚拟卡在Android终端中的应用以及相关的技术。针对虚拟卡参数在下载以及保存阶段可能出现的用户信息被攻击,设计基于ARM TrustZone技术实现虚拟卡的安全运行及数据安全。最后通过测试表明可以通过虚拟卡APP完成上网操作。
1 平台架构
虚拟SIM卡平台架构如图1所示,平台由三部分组成:支持虚拟SIM卡技术的终端、用户管理中心和SIM云端服务提供商。

(1)虚拟SIM卡终端:支持虚拟SIM技术,能从云端下载虚拟SIM卡参数,可用虚拟SIM卡参数接入相应的网络。
(2)用户管理中心:目的是与终端虚拟SIM APP进行交互,提供用户管理,开启或终止用户使用虚拟SIM卡参数。
(3)虚拟SIM卡云端服务供应商:提供运营商参数IMSI、Ki等网络鉴权所必须的虚拟卡参数。本方案与二六三移动通信有限公司合作,开发支持虚拟卡技术的终端。
本方案的目的是设计实现支持虚拟SIM卡的终端,支持虚拟SIM卡技术的终端可以通过WiFi或者移动运营商网络请求从动态IMSI分配服务器下载虚拟SIM卡参数。参数包括国际移动用户识别码(International Mobile Subscriber Identification Number,IMSI)、鉴权密钥(Key identifier,Ki)等登录网络时用于用户身份认证的关键参数。
2 终端软件架构与设计
2.1 Android Telephony框架结构
Android Telephony[2]采用了分层结构的设计,共跨越了三层:Java Application(应用层)、Java Frameworks(框架层)和RIL(Radio Interface Layer,无线接口层)。Telephony结构与Android框架结构一致。Android Telephony的业务应用跨越了AP和BP。AP与BP相互通信是目前智能手机的基本硬件架构。Android系统在AP上运行,而Telephony运行在Linux Kernel之上的User Space空间。BP侧负责射频控制,包括信号调制、编码、射频移位等高度时间相关的操作。对于不同的安卓厂商,他们的AP侧允许相同,但是Modem侧可能会有差异。因此,Android在AP与Modem之间设计了RILC框架,不同的芯片厂商就可以将其协议连接到AP侧。本虚拟卡方案基于高通平台。对于高通平台来说,它的RILC就是QCRIL。
2.2 终端软件架构
虚拟SIM卡终端架构如图2所示,其软件架构与Android Telephony整体分层结构保持一致,包括应用层、框架层、无线通信接口层。

其中处于应用层的APP与框架层的service通信是基于Binder机制实现进程间通信,通过安卓接口描述语言(Android Interface Definition Language,AIDL)技术定义进程间通信接口。虚拟卡是在Frameworks中单独添加的一个服务,为了使其他的应用程序也可以访问本应用程序提供的服务,Android提供了AIDL来自动生成用于进程间通信的代码。RILJ与RILC的交互是基于rild端口的Socket连接,RILJ接收到Telephony Frameworks发出的请求后,通过Socket连接向RILC发起RIL请求。最后,高通平台通过高通消息接口(Qualcomm Messaging Interface,QMI)作为AP与Modem之间的通信接口。采用IDL_QCSI_QCCI的方式实现。QCCI(QMI Common Client Interface)封装客户端进行通信的C库,主要是注册client,用于发送和接收message。QCSI(QMI Common Service Interface)封装服务端进行通信的C库,提供服务注册,发送和接收message,根据消息ID查找回调函数实现消息响应。至此,从应用软件到Telephony Frameworks到RIL再到BP的Modem全线贯通,之后应用软件就可以处理相关通信业务了。
传统SIM卡是插在Modem中的,终端与SIM卡的交互必须要经过Modem。而虚拟卡相当于在模块侧虚拟了两个卡槽,虚拟卡槽和物理卡槽的连接是互斥的。当虚拟卡激活时,表示当前模块连接的是Softslot,此时模块无法上报物理卡槽slot信息。当无虚拟卡或者虚拟卡去激活时,模块连接到物理的slot上,此时可以通过接口获取物理slot的信息。当发生了物理卡和虚拟卡切换时,相当于发生了一次热插拔,模块将会将原有的卡信清除,并上报新的卡信息。
2.3 流程设计
虚拟SIM卡流程设计如图3所示。
虚拟SIM APP提供与用户交互的界面,可供用户登录、订购虚拟卡套餐、激活以及去激活虚拟卡。合法用户登录用户中心后就可以进行虚拟卡的相关操作。用户订购虚拟卡套餐后会在后台执行虚拟卡参数下载以及保存的流程,保存的虚拟卡参数会在用户到达漫游地后由用户选择启用虚拟SIM卡套餐。启用的虚拟SIM卡经鉴权认为合法就可以使用相应的套餐,连接相应的网络,使用目的地数据服务了。
2.4 虚拟SIM卡安全框架设计
本系统基于ARM TrustZone[3]技术实现虚拟卡用户数据的安全传输与保存。目前主流的安全防范措施包括SoC设计外置硬件安全模块、SoC设计内置硬件安全模块、软件虚拟化技术以及ARM TrustZone技术,TrustZone是保护系统安全的比较好的解决方案。把Virtual SIM运行在TEE环境里面,以确保SIM数据的安全存储和运行安全。系统框架如图4所示,其中主要包含REE、TEE、硬件平台。

REE指的是普通执行环境,也就是常说的Android或者iOS操作系统,其中运行普通应用,本系统基于Android 4.4系统进行开发。TEE指的是可信执行环境,其中运行可信程序,执行安全操作,为REE提供安全服务。硬件平台指的是支持ARM TrustZone技术的芯片。
虚拟卡安全的实现主要涉及图中灰色部分,下面描述各部分详细的功能。
(1)运行在REE中的Virtual SIM应用(CA)
虚拟卡应用运行在普通执行环境中,以下简称CA。CA是对安全要求较高的一类应用,通过CA,用户可以与虚拟卡进行交互,实现业务购买、业务激活以及业务关闭等操作。
(2)TEE Client API
TEE Client API是运行于REE中的CA与运行于TEE中的TA之间进行通信的接口。通过该标准接口实现TEE环境的初始化。CA通过接口调用建立CA 与TA之间的联系,实现安全服务的调用。
(3)TrustZone驱动
TrustZone驱动位于Linux内核,是一个虚拟的TrustZone硬件驱动程序。CA调用TEE Client API时,TEE Client API会调用TrustZone驱动,由TrustZone驱动生成smc指令,进入Monitor模式,完成系统切换。
全部0条评论
快来发表一下你的评论吧 !