1. 相关名词解释
NFC | Near Field Communication,近场通信,一种基于13.56 MHz 的短距离通信技术。 |
NFCC | NFC Controller,NFC 控制器,负责 NFC 无线信号的调制解调 |
SE | Secure Element,安全芯片,拥有独立的内存、ROM、CPU,可以认为是一种微型计算机。 |
eSE | Embedded Secure Element,焊在主板上的安全芯片,与主CPU独立 |
applet | SE 中的应用程序 |
TEE | Trusted Execution Environment,可信执行环境,存在于主 CPU 中的一块安全运行环境 |
REE | Rich Execution Environment,富执行环境,普通 Android 运行环境,区别于 TEE |
I2C | 一种总线, 连接 REE 和 NFCC 之间 |
SPI | Serial Protocol Interface,一种总线,用于连接 TEE 和 eSE |
APDU | 特指发送给 SE 的指令 |
TSM | Trusted Service Management,可信服务管理,接收来自客户端的关于管理 SE 内容的请求,包括在 SE 安装、个人化、删除 applet 等操作,生成相应的 APDU |
CAP | 特指 applet 的安装文件,类似 PC 上的 jar 包 |
AID | Application Id,SE 中对象的标识符,类似 java 语言中的类名。 |
OMA | Open Mobile API,由 simalliance 组织定义的一套访问 SE 的接口 |
JCOP | Java Card Open Platform,泛指 SE 中的 Java 操作系统 |
2. ESE 简要介绍
什么是SE?
安全元件(Secure Element)简称SE,通常以芯片形式提供。为防止外部恶意解析攻击,保护数据安全,在芯片中具有加密/解密逻辑电路。SE是一个CPU卡,可以运行智能卡应用程序。SE可封装成各种形式,常见的有智能卡和嵌入式安全模块(eSE)等。
什么是ESE?
嵌入式安全元件(embedded Secure Element)简称ESE,焊在主板上的安全芯片,与主CPU独立。eSE能实现银行卡的作用,可在手机中模拟实现一张或多张智能卡,简单的说,就是可以将按GP(GlobalPlatform)卡片规范编写的Java卡应用程序Applet运行在手机的eSE环境中,实现一机替代多张传统物理卡片,每个Applet由唯一的AID标识符来识别,可以是银行卡、储值卡、公交卡等。
ESE与SE的关系?
ESE是SE的一种实现形式,一般由手机制造厂商在手机出厂前集成在手机内部。
还有两种常见的实现为:一种是UICC 通用集成电路卡,就是我们平时所使用的手机SIM卡;另外一种是Micro SD 以SD存储卡的形式存在,通过插入SD卡槽集成到手机上。由独立的SE制造商制造和销售。
ESE与NFC的关系?
嵌入式安全模块(eSE)是针对NFC终端产品开发的产品,采用了满足CCEAL5+安全等级要求的智能安全芯片, 内置安全操作系统,满足终端的安全密钥存储、数据加密服务等需求。可广泛应用于金融、移动支付、城市交通、医疗、零售等领域,既能保护线上支付的安全,又能配合NFC作为线下支付的钱包使用。
ESE与TEE(Trusted Execution Environment)的关系?
SE千般好,但受限于硬件隔离,独立的计算和存储资源,导致SE的计算性能差、数据传输速度慢,限制了SE的应用场景。而当今移动互联网发展迅速,迫切需要一个更好的安全生态。因此TEE应运而生。TEE OS是一个硬件安全执行环境,提供了代码和数据的安全防护、外置设备的安全访问等功能,可以安装和卸载执行其中的安全应用TA(TEE Application)。跟SE相比,是一个相对不那么安全,但运行速度更快、功能更丰富的安全环境。如Android手机中的指纹访问,起指纹存储和校验就在运行速度更快的TEE OS中完成。
3. ESE 框架介绍
2.1 Android app 到 SE applet调用流程整体框架
带有NFC功能的Android设备大多都支持NFC卡仿真,在Android设备中加入eSE安全芯片也就是为了给模拟卡提供更高级别的安全保障;另外移动运营商提供的SIM卡中大多也有集成支持安全元件;且在Android4.4版本开始引入了另一种HCE(基于主机的卡仿真)安全元素,这允许Android通过应用程序模拟卡并直接与NFC读卡器对话。
当用户使用安全元件提供NFC卡仿真时,手机中的NFC控制器将来自读卡器的所有数据直接路由到安全元件SE中,SE本身执行与NFC终端读卡器通信,并且交易中根本不涉及Android应用程序。事务完成后,Android应用程序可以直接查询安全元素以获取事务状态并通知用户,app可以通过OMAPI发送APDU指令来与SE中的Applet通信交互。
当用户使用HCE模拟NFC卡时,数据将路由到直接运行Android应用程序的主机CPU。相比SE卡仿真,使用HCE需要在手机屏幕亮起时才能进行刷卡操作,因为当设备的屏幕关闭时HCE服务是不起作用的。
2.2 OMAPI的整体框架及接口定义
早在Android2.3.4中就已经引入了访问内置SE的API,但这些API在SDK中一直是隐藏状态的,而且使用需求系统级权限,这就意味着只有手机制造商才能发布使用SE的应用程序,限制了SE应用程序的发展。
在Android 9中Google将GlobalPlatform OpenMobile API的实现添加至平台中,统一了SE的相关访问接口。在支持的设备上,应用可以使用OMAPI API访问安全元素(SE),以启用智能卡支付等安全服务。硬件抽象层(HAL)提供了必要的API,用于枚举多种可用的Secure Elements(如eSE,UICC等)。
2.3 Transport API的框架
具体关系类图如下:
4. ESE初始化流程