作者归档:softsim

USIM AID分析

A000000087-1002-FF86-FFFF89-FFFFFFFF

A000000087 RID, 表示3GPP用途, 
1002 表示USIM
FF86 表示中国
FFFF89 表示电信业

A000000343-1002-FF86-FF0389-FFFFFFFF
A000000343 RID, 表示3GPP2用途
1002 表示CSIM
FF86 表示中国
FF0389 表示电信业,中国电信
================

A00000015141434C00
A000000063504B43532D3135

https://source.android.com/devices/tech/config/uicc

Android 5.1 引入了一种机制,即如果 API 与通用集成电路卡 (UICC) 所有者的应用相关,则可以向 API 授予特殊权限。Android 平台会加载存储在 UICC 上的证书,并向由这些证书签名的应用授予权限,允许其调用一些特殊的 API。

Android 7.0 对该功能进行了扩展,以支持从其他存储源(例如访问规则文件 (ARF))读取 UICC 运营商权限规则,从而大幅增加可以使用这类 API 的运营商数量

UICC 上的存储空间需兼容 GlobalPlatform 安全元件访问控制规范。卡上的应用标识符 (AID) 为 A00000015141434C00,并使用标准 GET DATA 命令来获取存储在卡上的规则。您可以通过无线 (OTA) 更新来更新这些规则。

访问规则文件 (ARF) 支持
Android 7.0 增加了对从访问规则文件 (ARF) 中读取运营商授权规则的支持。

Android 平台会首先尝试选择访问规则小程序 (ARA) 应用标识符 (AID) A00000015141434C00。如果在通用集成电路卡 (UICC) 上找不到 AID,则 Android 会通过选择 PKCS15 AID A000000063504B43532D3135 回退到 ARF。然后,Android 会读取 0x4300 处的访问控制规则文件 (ACRF),并查找具有 AID FFFFFFFFFFFF 的条目。具有不同 AID 的条目将被忽略,从而确保其他用例的规则可以同时存在。

USIM EF_DIR内容分析

USIM EF_DIR内容分析

Total Length Tag 0x61
Total Length

AID Tag
AID Length
AID

Remark Tag
Remart Length
Remark

6118 4F10 A0000003431002FF86FF0389FFFFFFFF 50044353494D 9000

备注信息为: USIM
AID为:   A0000003431002FF86FF0389FFFFFFFF

中国电信MIPUPP

Mobile IP User Profile Parameters

EF_MIPUPP (Mobile IP User Profile Parameters)
文件标识符: 6F4D

例子

F2
FD

F5
0
19343630303330373831373038303339406D7963646D612E636E8000000000000000000000000C00000008600000004

232686C606066606E70626E607060667280DAF2C6C8DAC25CC6DD0000000000000000000000001800000010C00000008864D0D8C0C0CCC0DCE0C4DCC0E0C0CCE501B5E58D91B584B98DBA00000000000000000000000030000000218000000118C9A1B181819981B9C189B981C18199CA036BCB1B236B09731B70000000000000000000000000600000004300000002419343630303330373831373038303339406D7963646D612E636E0000000000000000000000000C000000086000000040FFFFFFFFFFFFFFFFFFFFFFFFFF

解释

F2 总长度
FD
    RETRY_INFO_INCLUDED  (勾选)
    MAX_NUM_RETRY  (3)
    FIRST_RETRY_TIMEOUT (7)
    REREG_THRESHOLD     (31)
F5  NUM_NAI  (条目数5)

0   NAI_ENTRY_INDEX 索引
19  NAI长度
    343630303330333037333336343336406D7963646D612E636E
    (4 6 0 0 3 0 3 0 7 3 3 6 4 3 6 @ m y c d m a . c n)

T_BIT                  1
HOME_ADDRESS           32
PRIMARY_HOME_AGENT     32
SECONDARY_HOME_AGENT   32
MN-AAA_AUTH_ALGORITHM  4
MN-AAA-SPI_INDICATOR   1
MN-AAA_SPI             0 or 32
MN-HA_AUTH_ALGORITHM   4
MN-HA_SPI_INDICATOR    1
MN-HA_SPI              0 or 32
RESERVED               填充
==================

NUM_NAI occurrences of the following fields: (长度以bits为单位)

NAI_ENTRY_INDEX   4
NAI_LENGTH        8
NAI               8*NAI_LENGTH


T_BIT                 1
HOME_ADDRESS           32
PRIMARY_HOME_AGENT     32
SECONDARY_HOME_AGENT   32
MN-AAA_AUTH_ALGORITHM   4
MN-AAA-SPI_INDICATOR    1
MN-AAA_SPI               0 or 32
MN-HA_AUTH_ALGORITHM     4
MN-HA_SPI_INDICATOR      1
MN-HA_SPI                0 or 32


RESERVED 0 to 7 (as needed)


对应于测试IMSI为460036591141482
NAI为 460036591141482@mycdma.cn 五组完全相同

只有一组的情况

32FDF1019343630303338333030343131343037406D7963646D612E636E8000000000000000000000000C00000008600000004
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000

NAI: 460038300411407@mycdma.cn

————————–
FCP: 6216
82 02 4121
83 02 6F4D
8A 01 05
8B 03 6F0606
80 02 0100
88 00
——————————————

3.5.8.6 Mobile IP User Profile Parameters (3GPP2 C.S0016-D v2.0 )

Retry Info Included(Yes)
Retry Info:
Max Retry: 3
First Retry Timeout: 7
Re-Registeration: 31

Security Settings
AAA: 2 AAA-Auth: MD5
HA: 2 HA-Auth: MD5

Entry 0:
NAI: 460030781708039@mycdma.cn
Home: 0.0.0.0
Primary Home:0.0.0.0
Secondary Home: 0.0.0.0
————————————

32
FD
F1

0
19343630303338333030343131343037406D7963646D612E636E8000000000000000000000000C00000008600000004
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000
-------------------------------------------
62
FD
F2

0
19343630303338333030343131343037406D7963646D612E636E8000000000000000000000000C00000008600000004
032686C6060667066606068626268606E80DAF2C6C8DAC25CC6DD0000000000000000000000001800000010C00000008
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000

------------------------------------------------------

92
FD
F3
0
19343630303338333030343131343037406D7963646D612E636E8000000000000000000000000C00000008600000004
232686C6060667066606068626268606E80DAF2C6C8DAC25CC6DD0000000000000000000000001800000010C0000000
8864D0D8C0C0CCE0CCC0C0D0C4C4D0C0DD01B5E58D91B584B98DBA000000000000000000000000300000002180000001
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000

1.可以不存在
2.可以为全0 或者 全F

如何通过ATR来分辨LTE usim和GSM sim

从history字节可以判断

Historical bytes 的  Category indicator byte为 0x80,
   且存在  (card capabilities)  一般是 就是USIM

深圳产 CDMA+LTE 复合卡

+ Historical bytes: 80 31 E0 73 FE 21 13 57 86 8C 02 86 98 E0 43
  Category indicator byte: 80 (compact TLV data object)
    Tag: 3, len: 1 (card service data byte)
      Card service data byte: E0
        - Application selection: by full DF name
        - Application selection: by partial DF name
        - BER-TLV data objects available in EF.DIR
        - EF.DIR and EF.ATR access services: by GET RECORD(s) command
        - Card with MF
    Tag: 7, len: 3 (card capabilities)
      Selection methods: FE
        - DF selection by full DF name
        - DF selection by partial DF name
        - DF selection by path
        - DF selection by file identifier
        - Implicit DF selection
        - Short EF identifier supported
        - Record number supported
      Data coding byte: 21
        - Behaviour of write functions: proprietary
        - Value 'FF' for the first byte of BER-TLV tag fields: invalid
        - Data unit in quartets: 2
      Command chaining, length fields and logical channels: 13
        - Logical channel number assignment: by the card
        - Maximum number of logical channels: 4
    Tag: 5, len: 7 (card issuer's data)
      Card issuer data: 86 8C 02 86 98 E0 43

esim不是softsim

嵌入式SIM卡(eSim) 和远程配置( Remote Provisioning) SIM卡不是”软SIM卡(SoftSim)”

嵌入式SIM卡和远程配置的最新演变 不能认为是要成为”软SIM卡” .

术语”软SIM”不应用于描述任何eSim解决方案

在esim方案中,物理硬件元素始终存在并作为一个不可或缺的安全层。

“软SIM”将是一种没有SIM硬件且所有SIM功能都在由软件层执行的解决方案。

SIM卡扮演两个主要角色,这些好处今天仍然有效:

1.身份:
SIM卡包含标识SIM卡的唯一参考数值来辨识SIM和相关的移动服务订购.
移动网络可以识别参考编号并确保产生的相关费用分配正确

2.鉴权:

为了确保身份有效,移动网络使用允许访问网络的安全机制。 这是通过网络实现的发出挑战(类似于安全问题),只有那个特定的SIM卡可以
从它存储在其内存中的信息中回答。 一旦验证,访问网络被授权.

Soft SIM这个术语是什么意思?

“软SIM” 将是执行所有SIM卡的功能 的软件应用程序和数据的集合, 但不存在于任何类型的安全数据存储中。

相反,它将存储在通信设备本身的存储器和处理器中(即没有SIM硬件层)。

不管SIM本身是可拆卸,还是嵌入在设备中,它仍然是加密的硬件和软件的组合,来
支持蜂窝数据网的连接以及其他功能.

通过使用Soft SIM可能会降低安全性,如果不用TEE环境保护Ki的话。

MTK IMEI

IMEI: 35 67 20 08 89 26 75 6

  45 93 d4 51 89 ff 33 f0 74 79 49 4c
  45 93 f6 51 70 08 15 f6 74 79 34 5b

  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72  
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72  
  e9 1a 0b 2e 17 95 bd 0f 8b 86 53 72
  e9 1a 0b 2e  17 95 bd 0f  8b 86 -- 53 72  

校验算法
 奇数字节 相加  (0xE9 + 0x0B + 0x17 + 0xBD + 0x8B) & 0xFF = 0x53 (奇数字节校验)
 偶数字节 相加  (0x1A + 0x2E + 0x95 + 0x0F + 0x86) & 0xFF = 0x72 (偶数字节校验)

16 E5 F4 D1 E8 6A 42 F0 74 79
E9 1A 0B 2E 17 95 BD 0F 8B 86
异或结果
FF FF FF FF FF FF FF FF FF FF

16 E5 F4 D1 E8 6A 42 F0 74 79
异或(53 76 02 80 98 62 57 06 00 00)
——————————————
45 93 F6 51 70 08 15 f6 -74 79- 49 4c

>>> ‘%x’ % (0x16 ^ 0x53)
’45’
>>> ‘%x’ % (0xE5 ^ 0x76)
’93’
….

LD0B_001

  4c 44 49 00 10 ef 0a 00  0a 00 00 00 0a 40 00 00  
  00 20 00 00 00 00 00 00  00 00 00 00 00 00 a2 44  
 7e 00 00 00 00 00 00 00  00 00 83 1a 01 00 00 00  
 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  


 27 10 40 e4 f5 1e f3 57  3a f9 2f cb 69 a6 8f 1a  49 4a 5d f6 53 4a f7 c0  ad 1c 45 f3 a5 4d bf f2  
 05 ed 3b a5 12 c4 97 9f  be c3 d4 9c e5 e8 8b 57  c6 ff 8c fa 70 cd 0e 52  c7 b6 27 d1 d9 f5 9b 7f 

 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7  
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7  
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7 
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7 
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7  
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7 
 4a b9 6d 2f 1a 79 25 c7  00 db 7e 7f 21 77 56 79  3f 08 6b ad d5 6d 9f a3  8e bf 88 56 d4 ae a0 a7 

基于Android平台虚拟SIM卡的设计与实现

2018年电子技术应用第7期
张 刚,徐 鑫
(重庆邮电大学 通信与信息工程学院,重庆400065)

摘要: 为了满足移动用户境外出行时的上网需求,设计实现了一种基于Android智能终端的虚拟SIM卡软件,支持用户通过终端下载漫游地SIM卡信息,并且可以通过使用下载的卡参数鉴权入网,以接近漫游地当地水平的价格为用户提供数据上网服务。首先介绍了Android Telephony架构,分析了各层的通信交互方式。针对虚拟卡可能出现的安全问题,基于ARM TrustZone技术实现虚拟卡参数的安全管理。测试结果表明,可以通过终端应用实现产品订购、订单激活,通过虚拟SIM卡可以使用上网业务,上网资费低于运营商资费。

关键词: 国际漫游 Android 智能终端 虚拟SIM卡
中图分类号: TP311
文献标识码: ADOI:10.16157/j.issn.0258-7998.174303
中文引用格式: 张刚,徐鑫. 基于Android平台虚拟SIM卡的设计与实现[J].电子技术应用,2018,44(7):122-126.
英文引用格式: Zhang Gang,Xu Xin. Design and implementation of virtual SIM card based on Android platform[J]. Application of Electronic Technique,2018,44(7):122-126.

Design and implementation of virtual SIM card based on Android platform

Zhang Gang,Xu Xin
(School of Communication and Information Engineering,Chongqing University of Posts and Telecommunications, Chongqing 400065,China)

Abstract: In order to meet the demand of surfing Internet of users when traveling abroad, a virtual SIM card is designed and implemented based on Android smart phone. It allows the user download information of the virtual SIM through the terminal in the destination area. After an authentication with the download card parameters, it can also provide data network service with the price similar to the destination area by accessing to the Internet. Firstly, the Android Telephony architecture is introduced, and then the method of communication interaction of each layer is analyzed. For security issues that may arise from the virtual card, this article achieves the security management of virtual card parameters based on ARM TrustZone technology. Experimental results show that users could achieve the order to products and the activation to orders by the application. By using the virtual SIM card, users can enjoy the Internet service in which the cost is lower than operators.

Key words :international roaming;Android;intelligent terminal;virtual SIM card

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.

串口改7816接口


上图中, 三极管Q1 由上拉电阻R1驱动,运行在集电极开路模式。
晶体管Q1会反转信号,所以在基极前面加了一个反相器A1。

实际上,在Q1的集电极,我们看到一个TX-UART信号的复制品。SIM卡的IO脚(它只是一个集电极开路的IO脚), 能够
将信号按照自己的意愿拉低, 而不会引起TX-UART的短路。

RX-UART能够拾取信号, 回放来自TX-UART或者SIM卡IO脚的信号。 两个引脚都没没有拉起信号。
这就是R1电阻正在做的事情。

所以,电路可以改成

ISO-7816
当TX-UART发送数据时, SIM卡的IO脚 监听 通过R1传递过来的信号。当TX-UART停止发送时,UART将进入idle状态
(逻辑高电平). 这将有效地将R1绑定到Vcc. 这个行为与上面的复杂电路完全一样。

如果 SIM卡要发送数据, SIM卡的IO脚将会拉低到地,就会有一些电流从TX-UART流出。但是没关系, 相对于驱动一个LED而言,
驱动GPIO根本算不了什么。

简单步骤:
1. 在MCU那边配置UART的速率为9600bps, 8位数据位, 两位停止位,偶校验。
2. 给SIM卡Vcc管脚上电, 复位为低电平
3. 提供时钟信号为波特率的372倍,也就是3.57MHz
4. 等待一小会,让SIM卡稳定
5. 拉升复位线, 让SIM卡脱离复位状态。
6. 然后在MCU的UART-RX管脚观察,是否有ATR签名信号到达。
7. ….

R1的建议取值
3.6k for 1.8V supply
6.6k for 3.3V supply
10k for 5V supply.


实践中通常还有这样的电路,也能实现类似的功能

SIM卡管脚定义的记忆方法


0) 缺口对着的脚  Data I/O
1) 跟I/O 同侧, 最上面的是 GND
2) 在I/O 另一侧中间的脚 是 RST

我只关心这3个脚


2023年10月31日 补充
贴片sim卡



芯片左下角 打圆点的那个管脚是 管脚1, 也就是GND, 对应原SIM卡管脚定义中的C5