【学术论文】基于Android平台虚拟SIM卡的设计与实现
摘要: 为了满足移动用户境外出行时的上网需求,设计实现了一种基于Android智能终端的虚拟SIM卡软件,支持用户通过终端下载漫游地SIM卡信息,并且可以通过使用下载的卡参数鉴权入网,以接近漫游地当地水平的价格为用户提供数据上网服务。首先介绍了Android Telephony架构,分析了各层的通信交互方式。针对虚拟卡可能出现的安全问题,基于ARM TrustZone技术实现虚拟卡参数的安全管理。测试结果表明,可以通过终端应用实现产品订购、订单激活,通过虚拟SIM卡可以使用上网业务,上网资费低于运营商资费。
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模式,完成系统切换。
(4)Monitor
Monitor用于控制系统的安全状态,通过NS位修改来达到TEE与REE之间的相互切换,以及在换过程中保存和恢复TEE和REE的状态。
(5)Trusted APP(TA)
系统设计将Virtual SIM运行于TEE环境中,这部分可信应用为运行在REE环境中的CA提供相应的安全服务。这些安全服务包括数据的访问安全、数据存储安全以及数据的传输安全。
(6)TEE Internal API
TEE Internal API也叫TEE内部API,它提供程序开发者用于快速开发TA的一组API。安全芯片标准定义组织GlobalPlatform定义了TEE Internal API 为TA的开发提供的标准化的接口。
(7)安全文件系统(SFS)
SFS提供的安全文件系统基于ARM TrustZone技术,运行在安全可执行环境中。其主要功能是为普通区域存储用于加密虚拟卡数据的RSA公钥、为隔离区提供对加密后的虚拟卡数据的安全存储。使用SFS可以保护敏感的系统硬件或校准数据免受意外或恶意攻击,以及保护用户敏感数据被盗用。
3 虚拟SIM卡数据安全实现
3.1 卡参数安全下载实现
在移动通信系统中,实体SIM卡的主要功能是进行用户身份认证以及通信过程加密。文献[4]指出用于身份认证的鉴权密钥不会通过空口进行传输。但是,虚拟SIM卡的根密钥、IMSI等核心数据会在运营商网络和终端之间传输,这些传输的参数在传输的路径中存在被攻击的可能性。并且,下载的虚拟卡参数在终端处理时也会在应用、RIL、Modem之间传输,也有可能从终端获取卡参数,从而造成虚拟卡数据泄露或者失效,损害消费者利益。因此,虚拟卡参数的安全下载是需要解决的一大问题。本方案采用RSA[5](Rivest,Shamir,Adleman)公钥加密算法加密虚拟SIM卡参数。RSA2048公钥加密算法是一种比较典型的非对称加密算法,也是理论上相较于其他非对称加密算法比较成熟、使用比较广泛的一种算法[6]。TrustZone可以提供一个与普通环境(Android)隔离的安全执行环境,在隔离环境中专门处理安全任务。在执行安全操作时通过smc指令进入安全世界,执行安全操作,保证信息的安全。TrustZone提供一个安全的框架,在该框架下,嵌入式设备能够抵御它将遇到的许多的特定攻击[7],避免了攻击者获取敏感信息。其加密流程如图5所示。
TZ生成公私钥对,提供给AP侧RSA加密公钥,应用通过getRsaKey()方法获取加密公钥,应用将获取的加密公钥发给服务器,服务器将卡数据中的Ki和OPc用公钥加密返回给应用,用于后续的激活。终端和服务器都有一套基于RSA非对称加密算法机制,通过对用户数据的加密下载,从而确保虚拟SIM卡数据的安全。最后,通过调用operateSotfSim()携带IMSI信息来激活相应的虚拟卡。
3.2 卡参数安全保存实现
SIM卡中存储着运营商网络用于鉴权用户身份的关键信息,如IMSI、Ki等。如果这些信息被盗用,就可以复制出相应的卡,导致出现克隆卡,造成用户财产损失。所以保证数据安全是SIM卡需要关注的核心问题。传统SIM数据都保存在相应的文件中,对于SIM卡的访问都有严格的限制,保证了卡数据的完整,防止攻击者的破坏和盗用。制造商在产线阶段将运营商数据直接写入卡中,在整个生产环节和SIM卡本身的硬件架构方面使其安全性可以得到保障[8]。对于虚拟卡参数的安全存储关系到用户的通信安全和切身利益。
为了防止非法从终端获取到虚拟卡参数,本方案将虚拟卡参数加密存储在安全文件系统(Secure File System,SFS)。通过RSA公钥加密下载的虚拟卡数据在执行存储阶段跳转到安全执行环境中进行,保证用户信息存储的安全。通过这种方式存储用户数据,不用针对存储数据专门设计安全存储硬件,一方面减少了芯片面积和功耗,另一方面也降低了产品的开发成本[9]。
3.3 虚拟SIM鉴权实现
SIM卡是独立的硬件,它是终端中重要的组成部分,用户要获取运营商服务必须通过SIM卡认证,合法的SIM卡才能够使用运营商网络。身份认证(也就是用户鉴权)则是通过在SIM卡内部执行相关的鉴权算法来完成[10]。下载的虚拟卡数据同样需要经过鉴权才能入网。虚拟卡要求支持数据漫游,本方案采用基于Milenage算法的鉴权算法,高通提供了Milenage[11]算法的相关功能,可取代SIM卡的Milenage。所有的USIM鉴权都有统一的入口:mmgsdi_uicc_auth()。在函数中判断是否启用了虚拟卡,如果启用了虚拟卡则调用相关处理函数mmgsdi_uicc_onchip_auth(),在该函数中完成AKA_milenage_f2345()软件算法的调用,使用软件鉴权算法替代实体SIM卡进行鉴权操作。Ki和OPc作为鉴权算法传入参数,为了安全在使用时从SFS文件系统读取KEY到局部变量,使用完成后通过memset()对局部变量清零,预防从内存中泄露。
4 测试结果
4.1 测试用例
测试分为无卡、单卡、双卡测试,相关的测试用例如表1所示。
启用虚拟卡会占用一个物理卡槽。默认情况下会占用空卡槽,如果没插卡或者插入两张物理卡,则需要用户手动设置占用哪个卡槽激活虚拟卡。经测试,测试结果满足预期要求,终端能够通过虚拟卡接入网络。
测试选用大陆测试套餐,测试套餐只在测试阶段使用内部账号登录才会使用。投入市场不会有大陆套餐选项,成功购买的套餐会在“我的订单”中列出来。到达漫游地后用户可以选择需要启用虚拟卡,激活成功会提示用户当前处于国际漫游状态。经过激活后可以使用漫游地数据服务。激活成功后的虚拟卡会在状态栏信号处显示状态为3G并且带有R(Roaming,漫游)标识,提醒用户当前终端处于数据漫游状态。相关实现结果如图6所示。
4.2 资费对比
由于各服务商之间提供漫游服务的覆盖区域不同,因此选取比较热门出行的国家及地区进行漫游资费对比,对比结果如表2所示。套餐选择是包天不限流量。
通过对比发现虚拟卡提供的漫游资费水平明显低于中国移动、中国电信提供的国际漫游资费,给消费者带来方便的数据漫游服务的同时也降低了漫游资费。
5 结论
本文设计实现了基于Android平台的虚拟SIM卡功能,实现用户通过支持虚拟卡技术的终端方便地订购、激活、使用漫游地套餐;无需SIM卡即可连接当地运营商网络;使用户摆脱了目的地购买当地SIM卡,历经沟通、购买、换卡以及激活的繁琐流程,以及运营商高昂的国际漫游资费,降低了国际漫游资费。虚拟SIM卡的发展反映了用户需求下的市场发展。不过,虚拟SIM卡仍有很长的路要走。首先,虚拟SIM卡服务商必须获得网络运营商的合作授权,能否得到运营商的广泛支持,成为了虚拟SIM卡能否生存的关键所在[12]。此外,虚拟SIM卡的技术标准、产业推广等其他方面,也仍有很大的发展空间。
参考文献
[1] 傅剑峰,蒋静,李方,等.降低国际漫游费的方法及可行性研究[J].移动通信,2015,39(24):71-76.
[2] 杨青平.深入理解Android Telephony原理剖析与最佳实践[M].北京:机械工业出版社,2013.
[3] 郑显义,李文,孟丹.TrustZone技术的分析与研究[J].计算机学报,2016,39(9):1912-1928.
[4] 杨红梅.eUICC的关键技术及相关标准[J].电信网技术,2015(6):58-62.
[5] 陈健.几种常用数据加密算法的比较[J].福建商业高等专科学校学报,2003(5):45-47.
[6] 石井,吴哲,谭璐,等.RSA数据加密算法的分析与改进[J].济南大学学报(自然科学版),2013,27(3):283-286.
[7] 魏兰.基于ARM TrustZone的安全存储研究与实现[D].成都:电子科技大学,2015.
[8] 仇剑书,康建雄,严斌峰.eSIM安全性分析及实现方案研究[J].互联网天地,2016(11):5-9.
[9] 陈书义,闻英友,赵宏.基于可信计算的移动平台设计方案[J].东北大学学报(自然科学版),2008,29(8):1096-1099.
[10] 李从容.SIM卡及其最新应用[J].现代通信,2003,8(12):13-14.
[11] 3GPP TS 35.206 v14.0. 0 3G security;specification of the MILENAGE algorithm:an example algorithm set for the 3GPP authentication and key generation functionsfl,fl*,f2,f3,f4,f5andf5*;Document2:Algorithm Specification[S].2017.
[12] 王海天,宋帆.虚拟SIM卡发展影响及取证新挑战[J].中国新通信,2016(21):66.
作者信息:
张 刚,徐 鑫
(重庆邮电大学 通信与信息工程学院,重庆400065)