分类目录归档:sim

stk命令交互只能在主通道

平台到平台APDU通道仅应在逻辑通道0上建立,并且当平台到平台安全通道处于活动状态时,UICC应当拒绝任何其他逻辑通道上的APDU。 加密的APDU净荷中应该可以使用逻辑信道。
同时,“应用程序对应用程序-APDU安全”通道无法保护主动命令(根据标准在逻辑通道0上发送),因为它只能保护非0逻辑通道,即除逻辑通道0之外的任何逻辑通道。

Secure Element 的访问不能使用 逻辑通道0, 因为这是给电信应用(sim/usim app)使用的

CAT会话,起始于 TERMINAL PPROFILE命令,终止于 卡的复位/去激活

在开始CAT会话时, 卡执行下面的行为:
1. 它由任意一个注册了 TERMINAL PROFILE事件的 applet的触发。
2. 如果至少有一个菜单项目注册,并被一个可选中的Toolkit Applet启用, 它就发送一个 SET UP MENU 主动命令。
3. 如果至少一个EVENT_EVENT_DOWNLOAD_*被注册,它 发送 SET UP EVENT LIST主动命令
4. 如果至少有一个applet请求轮询 interval duration, 那么,他就发送 POLL INTERVAL主动命令。 这会让ME调整 空闲时 发送STATUS命令的间隔。


Toolkit Applet 比 普通Applet多了一些功能, 也就是实现了 uicc.toolkit.ToolkitInterface的一些接口。必须实现processToolkit()方法


当sim卡收到一个APDU时, 转换器 将 它转换成 对应的事件。
触发器(Triggering Entity)向 Toolkit Registry是否有Toolkit Applet注册到这个事件,然后通过调用 ToolkitInterface对象的processToolkit()方法来 触发所有注册了该事件的Toolkit Applets.

在普通applet和Toolkit Applet之间的区别是Tookit Applet不直接处理APDU
select()方法也不会启动。 因为 Toolkit Applet自己不会被选择。

实际上,
1. CAT运行环境,调用Toolkit Applet的getShareableInterfaceObject()方法
来 取得 ToolkitInterface对象的引用。
在Toolkit Applet的第1次触发前,调用此方法。
getShareableInterfaceObject()的AID参数被设置为null, 字节参数被设置为 1

2.CAT运行环境,调用 ToolkitInterface对象的processToolkit() 来触发Applet

在Applet被触发时,如果EnvelopeHandler可用,用它来获取事件的细节。
如果 ProactiveHandler 可用,它可以请求CAT运行环境去发送几个主动命令,并通过ProactiveHandler来分析 UE(Terminall Response)响应。

对于某些特定的事件,EnvelopeResponseHandler也可用来传输applet对终端命令的响应。

FCP和FCI以及FMD

FCP (File Control Parameters)
FCI (File Control Information)
FMD (File Management Data)

在ISO7816-4中定义了一些 重要的数据对象(Data Objects)

TAG 数据对象名称 描述
62 FCP模板 FCP模板含有FCP
64 FMD模板 FMD模板含有FMD
6F FCI模板 FCI模板含有FCP和FMD

在ISO 7816标准中
P2 = 0 返回 FCI
= 4 返回 FCP
= 8 返回 FMD

但在 ETSI TS 102.221 中 只有
P2 = 4 返回 FCP
P2 = C 不返回数据

62 2F
82 02 78 (共享的DF文件) 21
84 10 A0000000871002FF86FF0389FFFFFFFF
8A 01 05
8B 03 2F060D
C6 0F
90 01 E0
95 01 00
83 01 11
83 01 01
83 01 81

62 1A
82 02 38 (不共享的DF文件) 21 文件描述符号
83 02 00 00 文件标识符 为 00 00
8A 01 00 生命周期
8C 02 20 00
C6 09 PIN状态
90 01 00
83 01 00
83 01 00

6F 0B
84(文件名称) 09 A00000015141434C00


MF/DF/ADF的FCP
82 文件描述符
83 文件标识符
84 文件名称(DF Name或者AID)
8A 生命周期状态(Life Cycle Status Integer)
8B/8C 安全属性
C6 PIN状态
81 总共的字节书

sim卡通信速率

ATR中的TA1表示速率

TA1 = 11, 13440 bps
TA1 = 91, 9765 bps
TA1 = 94 78.125kbps 中国电信/中国联通的卡片默认速率
TA1 = 95 156.25kbps 中国移动/淘宝买的华虹COS的USIM/CSIM卡
TA1 = 96 312.5kbps Sysmocom USIM SJS1

以上是 fMax for Fi = 5 MHz,情况下,卡片可支持的最高速率

参考资料:
https://ludovicrousseau.blogspot.com/2016/04/atr-statistics-ta1-global-encodes-fi.html

中国电信 起始速率 12.9kbps (12903 bps), 协商后为 75 kbps
TA(1) = 94 –> Fi=512, Di=8, 64 cycles/ETU^M
62500 bits/s at 4 MHz, fMax for Fi = 5 MHz => 78125 bits/s^M

75k*64=4.8M


中国移动,协商速率 150 kbps

150k*32=4.8M 说明Modem(EC20 R2)给SIM的时钟频率是 4.8MHz的
其实默认速率是 4800000/372=12903

TA(1) = 95 –> Fi=512, Di=16, 32 cycles/ETU
125000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 156250 bits/s


TA(1) = 96 –> Fi=512, Di=32, 16 cycles/ETU
250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s

读卡器跑到 300kbps

GlobalPlatform Device Access API

  1. AID
    Executable Load File AID ‘A000000151444143’
    Executable Module AID ‘A00000015144414300’
    Application AID ‘A00000015144414300’

但是,如果 ARA-D (Access Rule Application for Device API Access Control)
与 ARA-M (Access Rule Application Master) 一起部署,并且 ARA-D与 ARA-M用同一个可执行加载文件, 那么 它将 共享 ARA-M 的Executable Load File AID, 也就是’A00000015141434C’

  1. 三种权限
    仅MNO
    仅OEM
    MNO/OEM共享

  2. DeviceAppID
    在Android上,就是 证书的签名 + 包名

  3. 用 GET DATA 的APDU命令,来获取访问规则

Call control by SIM

通过SIM激活此服务时,所有拨出的数字字符串,补充服务控制字符串和USSD字符串在ME建立呼叫,补充服务操作或USSD操作之前,首先将这些数据传递给SIM。ME还应同时将其当前服务小区传递给SIM。 SIM卡具有允许,禁止或修改呼叫,补充服务操作或USSD操作的能力。 SIM卡还可以替换呼叫请求,补充服务操作或USSD操作操作。 例如,呼叫请求可以由补充服务操作或USSD操作代替。
在ME的TERMINAL PROFILE中 第2个字节中,表明 ME是否支持这个功能

—————
ETSI TS 102 223 V15.3.0 (2019-07)
Call control by network access application
如果在NAA的服务表(SST或者UST)中,”call control”服务可用, 那么ME应该遵循如下几点:
1)对于所有的呼叫建立(call set-up)尝试(即使是 SETUP CALL主动SIM命令,使用CSD的BIP(承载无关协议)主动SIM卡命令, , 或 另外的呼叫在处理, 或者自动重拨), ME应该首先传递呼叫建立细节(拨打的号码和相关的参数)给SIM卡。方法是通过 ENVELOPE(呼叫控制)命令。
即使是自动重拨号,也还要带上 位置信息(基站信息)
注意下面的例外:当用户拨打ECC紧急呼叫号码时,终端会创建一个紧急呼叫,并且不会将呼叫建立的细节发送给UICC。
2) UICC 响应 90 00 时, 终端 应当 用 它发送给UICC的 拨打的数据和其他参数 建立呼叫
3) UICC响应 93 00 时,终端不应改建立呼叫,但是可以以后重试这个命令
4) 如果

给用户的指示:
UICC 在给ENVELOPER(Call Control)消息的响应数据中,可选地包含 字符标识符。这样,就可以通知用户,响应数据已经被终端接收了。(因为终端会把标识符提取出来给展示给用户看)
终端使用的字符标识符有:
1. 如果UICC回应”允许,不修改”, 那么 :
1) 如果 标识符由UICC提供,并且不是null, 在呼叫建立时,终端应该用来这个标识符来通知用户
2) 如果 标识符由UICC提供, 但是是一个null(也就是leng=0,没有value部分)。 这也是一个指示,终端不应该修改 对应于初始用户请求的显示响应。
3) 如果 标识符不是有UICC提供,终端可能给出一些信息给用用户,到底发生了什么事情。
2. 如果UICC回应“不允许”, 那么
1) 如果 标识符 由UICC提供,且不为null, 终端应该用它来通知用户。
这也是一个提示,终端不应该给用户任何关于被阻止的原因的任何信息
2) 由UICC提供,为NULL.

——————–
ETSI TS 131 102 V16.8.0 (2021-09)
SIM卡启用FDN(固定拨号,也就是白名单), 但ME不支持FDN功能,那么ME应该允许紧急拨号(打110,120)
,并且不允许外呼任何电话,发送任何短信.
SIM卡启用BDN(禁止拨打号码,也就是黑名单),但ME不支持呼叫控制,那么 ME应该允许紧急呼叫(110,120)
,并且不需要外呼任何电话。
SIM卡启用了ACL, 但ME不支持ACL,那么ME不应该发送任何apn给网络。

如果ME在TERMINAL PROFILE命令中表示自己可以执行呼叫控制,那么SIM卡应该
——————–

ETSI TS 131 111 V16.4.0 (2021-04)
如果在 USIM服务表(参看TS 31.102)中存在 call control 服务, 那么ME应该遵循 ETSI TS 102.223 中描述的过程

…..

2) 如果SIM卡响应 90 00, 那么ME应该用发送给SIM卡的拨号数字和其他参数建立呼叫
3) 如果SIM响应 9300, 不建立呼叫,但可以重试
4)如果UICC提供响应数据,那么 UICC来的响应数据应该表明 终端是否按照预期建立了呼叫, 或者没有建立, 或者建立呼叫使用的是UICC提供的数据。终端在能力范围内必须按照UICC提供的数据来建立呼叫请求。如果SIM卡要求的操作,超越了ME的能力(比如 映射一个语音呼叫到一个数据呼叫, 但ME不支持数据呼叫).那么终端不应该执行呼叫请求。 在UICC响应的数据里,可以提供112这样的紧急呼叫号码,让终端来执行呼叫。

UICC主动通过SETUP CALL命令发起呼叫:
1)如果呼叫控制的结果是“不允许”,那么终端应该用 TERMINAL RESPONSE 来通知UICC: interaction with call control by NAA, permanent problem; action not allowed(与呼叫控制应用交互过,永久问题:行为不允许)


ETSI TS 131 111

7.3 Call Control and MO SMS control by USIM

7.3.1 呼叫控制

7.3.1.1 主叫过程

如果Usim服务表(7FFF-4F38)中的”call control”(30号服务), 那么 ME应该遵循 ETSI TS 102. 223 第 7.3.1.1节的过程,并加上下面的规则:

1) 当用户拨打112或者EF_ECC里保存的紧急呼叫代码时, ME应该直接建立紧急呼叫,而不受呼叫控制的限制

2)如果UICC提供了响应数据,

….

此过程,也适用于呼叫通过IMS发起, 且USIM服务表中的”communication control for IMS by USIM”服务标志没有设置的情况。

但是,如果该服务标志设置了,那么应该用 7.1.3.9节中定义的 IMS communications establishment 过程。


7.3.1.9 IMS通信建立过程

如果 “communication control for IMS by USIM” 服务标志设置,
ME应该传递 SIP INVITE消息里的 IMS Request-URI 给UICC
这个过程,应该代替普通的呼叫控制过程


7.3.2 短消息控制过程

5G SIM卡文件

DF_5GS
ID:5FC0
其下有
4F01(5GS 3GPP location information)
4F02 (5GS non-3GPP location information)
4F03 (5GS 3GPP Access NAS Security Context)
4F04 (5GS non-3GPP Access NAS Security Context)
4F05 (5G authentication keys)
4F06 (UAC Access Identities Configuration)
4F07 (Subscriber Concealed Identifier Calculation Information)
SUCI计算信息
4F08 (5GS Operator PLMN List)
4F09 (Network Specific Identifier)
4F0A (Routing Indicator)

如果 EF_IMSI文件被改变,那么UICC应该发出REFRESH命令给modem,要求刷新卡片文件
并且,更新EF_5GS3GPPLOCI 和 EF_5GSN3GPPLOCI


EF_UST (USIM Service Table) ID: 6F38
有关5G的部分
122: 5GS Mobility Management Information
123: 5G Security Parameters
124: Subscription identifier privacy support
125: SUCI calculation by the USIM
126: UAC Access Identities support
127: Control plane-based steering of UE in VPLMN
128: Call control on PDU Session by USIM
129: 5GS Operator PLMN List
130: Support for SUPI of type network specific identifier
131: 3GPP PS Data Off separate Home and Roaming lists

如果UST中有122,123,124,125,126,127,129,130的Service, 那么 ADF USIM下面应该存在 DF_5GS


EF_5GS3GPPLOCI (5GS 3GPP location information)
这个文件包含:
5G-Globally Unique Temporary Identifier (5G-GUTI); 13个字节
Last visited registered Tracking Area Identity in 5GS (TAI) 6个字节
5GS update status (5GS 更新状态) 1个字节

EF_NSI (Network Specific Identifier)
NAI格式的NSI, 也就是SUPI, 这个值 不应该等于 IMSI


GET IDENTITY命令
INS=’78’
P1=00

为了计算SUCI, USIM中必须存在
home network identifier(也就是MCC和MNC)
routing indicator (配置在EF_Routing_Indicator中)
home network public key
home netowkr public key identifier
protection scheme identifier
SUPI

3GPP TS 23.003
3GPP TS 31.102
3GPP TS 33.501

5G sim卡

SUPI(SUbscription Permanent Identifier,类似4G IMSI),
通过公钥加密后的密文称为SUCI(SUbscription Concealed Identifier)
SUCI传送给基站后,基站直接上传至核心网

核心网的SEAF(SEcurity Anchor Function)收到信令后解析后看是GUTI还是SUCI,若是GUTI就匹配到对应的SUPI,若为SUCI则不解密,继续向AUSF(Authentication Server Function)发起鉴权申请Nausf_UEAuthentication_Authenticate Request,并携带对应的网络服务信息SN-Name,方便AUSF调用对应鉴权算法AV(Authentication Vector,包含RAND, AUTN, HXRES*和 K_seaf)

在UDM(Unified Data Management)中调用SIDF(Subscription identifier de-concealing function)将SUCI解密得到SUPI,然后通过SUPI来配置手机对应所需的鉴权算法

手机端用来加密SUPI的公钥存放在UICC的USIM中
SUCI的解密算法(SIDF)只会被执行一次,放置在核心网的UDM中
当手机身份临时身份GUTI无法识别时,由AMF向手机发起Identity Request请求;若手机在注册Emergency Service时收到Identity Request可以发送Null-Scheme的SUCI,即不加密的SUPI

SUCI的生成算法可以采用椭圆曲线集成加密方案(ECIES,elliptic curve integrate encrypt scheme),运营商也可以根据自己需求单独采用个体方案,甚至可以采用Null-Scheme;

5G AKA流程归属网络鉴权中心也是给访问网络的安全锚点(SEAF,和AMF在一起)一组5G鉴权向量和对应的HXRES*,访问网络用这些参数对UE鉴权后,还需要将UE的鉴权响应发给归属网络鉴权中心做进一步的鉴权,归属网络再将鉴权结果发给访问网络,可见5G下归属网络会参与鉴权做出最后的鉴权结果。

参考标准
3GPP TS 31.102
3GPP TS 33.501

UDR:部署于归属网络,融合存储多种结构化数据,2G/3G/4G/5G签约数据,PCRF策略数据,用户鉴权数据等。
UDM:支持5G网络的UDM功能,实现5G网络的统一接入、鉴权功能(鉴权证书计算、生成5G HE Avs、重同步鉴权证书计算等)。
AUSF:提供5G鉴权架构5G AKA流程支持;提供EAP AKA’流程支持;服务网络授权检查;鉴权算法,生成5G AKA AVs;增强归属网络控制;支持SUCI等。

管理Java卡工具

GlobalPlatformPro

java -jar gp.jar -info

支持 PC/SC 读卡器

支持  SCP01, SCP02 和 SCP03 安全通道协议

支持 GlobalPlatform所有版本的规范

java -jar gp.jar -acr-list
Warning: no keys given, using default test key 404142434445464748494A4B4C4D4E4F
Read more from https://github.com/martinpaljak/GlobalPlatformPro/wiki/Keys
STRICT WARNING: Card cryptogram invalid!
Card: 95C64148BAF3A1B4
Host: 4FA77C59F1AE0187
!!! DO NOT RE-TRY THE SAME COMMAND/KEYS OR YOU MAY BRICK YOUR CARD !!!

关于key

Command line samples assume default test keys of 404142434445464748494A4B4C4D4E4F. If you need a custom key, specify it with -key (you can give separate keyset components with -key-mac, -key-enc and -key-kek. You need to know the details or ask your card provider. Some cards require key diversification with -emv or -visa2 (ask your vendor if unsure). A Key Check Value can be given with -kcv option.

另外一个工具

中国联通PKCS15

中国联通基于UICC平台的Java卡互操作技术规范 v3.0 第二部分:SWP卡

附录D 卡片安全访问控制机制

SIM卡访问控制机制涉及以下实体:
1) SIM卡:存储访问控制主文件,访问控制规则文件及访问控制条件文件,文件结构定义需遵循PKCS#15规范
2) 手机终端:需提供终端专有访问控制模块,以实现手机客户端对SIM卡的访问控制功能。
3) 手机钱包客户端:提供应用下载和规则管理的管理界面。
4) 手机钱包平台:对卡片内手机钱包相关应用、安全域以及访问控制规则进行管理操作。
5) 终端专有访问控制模块:是集成在手机终端操作系统I中的一个模块,此模块能够从PKCS#15应用的规则文件中读取访问规则文件,并且依据这些客户端的证书判断客户端程序是否可以访问SIM卡。如果支持APDU过滤列表功能,客户端与SIM卡applet程序之间通讯的APDU指令会被检查。终端专有访问控制模块本身不存储规则,所有的规则储存在SIM卡的PKCS#15规则文件中。
6) PKCS#15应用:此应用下属的文件系统用于存储访问控制数据,这些数据包含了一个被授权的客户端应用发布者证书的SHA1算法的HASH值,及其对应的SIM卡程序的AID。

当手机客户端访问SIM卡端程序时,终端专有访问控制模块从PKCS#15应用下属文件系统中读取访问控制记录,此记录的标识为客户端程序所访问的SIM卡applet的AID值。如果所读取的访问控制条件文件中的客户端应用发布者证书的HASH值与当前客户端的证书HASH值匹配,客户端对此Applet的访问被允许,否则被拒绝。
若支持APDU过滤列表功能,如果客户端发往Applet的APDU命令与APDU过滤列表中的指令匹配,则允许客户端程序与此Applet之间的通讯。

PKCS#15应用AID
PKCS#15应用的AID为:A0 00 00 00 63 50 4B 43 53 2D 31 35。
开机后,读取EF DIR内容,解析出PKCS#15应用AID和对应的文件路径。
举例(EF DIR的第二条记录内容):
61 1C 4F 0C A0 00 00 00 63 50 4B 43 53 2D 31 35 50 06 50 4B 43 53 31 35 51 04 3F 007F 50 FF FF
其中:
• A0 00 00 00 63 50 4B 43 53 2D 31 35为PKCS#15应用的AID
• 3F 00 7F 50为对应的路径

PKCS#15 DF的文件ID为7F50。

ODF文件
此文件ID为5031,文件结构参照PKCS#15中PKCS#15Objects对象的定义,采用dataObjects属性。指向DODF文件。

DODF文件
此文件ID为5207,文件结构参见PKCS#15规范。指向ACMF文件。

DODF文件为访问控制数据读写入口,此入口采用GP定义的OID规则生成的

CMF文件
此文件为访问控制主文件(Access Control Main File),文件ID定义为4200。指向ACRF文件。

ACMF文件包含着刷新的tag以及指向ACRF文件的路径(支持访问安全规则)。
二进制内容举例:0x301004080000000000000001300404024300
• 排序编码 0x3010
0x30 = tag “sequence”
0x10 接下来数据的长度
• 刷新的tag在ASN.1 中以0x04080000000000000001格式编码.
0x04 = tag
0X08 = 数据长度
0x0000000000000001 = 刷新的tag值 (示例数据,可以为任何值)

• ACRF文件路径 0x300404024300
0x30 = tag “排序” (ASN.1路径是一种排序)
0x04 = 数据长度
0x04 = tag “路径”
0x02 = 长度
0x4300 = 文件标识符 (示例标识符)

远程公交卡

http://frankmorgner.github.io/vsmartcard/ACardEmulator/README.html

就是将公交卡放在家里,插在读卡器上,读卡器通过usb连接到电脑
电脑连着internet
电脑上运行一个服务

android应用将自己的nfc手机,模拟成这张公交卡

是不是很折腾?