Android 9.0 SecureElementService 初始化流程分析_0冰糖土豆0的博客-程序员秘密

技术标签: Android开发笔记  ESE  Android 9.0  NFC  SecureElement  

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是一个硬件安全执行环境,提供了代码和数据的安全防护、外置设备的安全访问等功能,可以安装和卸载执行其中的安全应用TATEE 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初始化流程

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hello_gson/article/details/95498900

智能推荐

微信小程序Code怎么获取_wx.login获取code_乐编小易的博客-程序员秘密

1.官方开发文档 wx.login 可以获取code2.微信PC端内存HOOK获取小程序Code3.抓PC包{微信小程序基本都是基于HTTPS的,在开发调试小程序时,普通的抓包软件是抓不到的,所以我们想要抓包首先需要配置证书 SSL推荐软件 fiddler 或 Charles1.fiddler配置抓取Https包1.下载最新版fiddler2.下载并安装Fiddler证书生成器3打开Fiddler,点击工具栏中的Tools—>Options4.点击https设置选项,勾选选择项5

程序员应该知道的操作系统知识--基础篇(三)_程序员操作系统基础知识_赤耳小永的博客-程序员秘密

程序员应该知道的操作系统基础知识在多线程并发环境下,经常出现一些意想不到的错误,例如数值的累加,错的原因可能涉及到计算机原理以及JAVA方面的一些知识。下面我们就先从CPU的多级缓存开始说起;CPU缓存缓存存在的意义:CPU缓存存在的意义分两点(局部性原理):时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问。空间局限性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问。我们先来认识一下整体结构,看一张图片,如下:CPU Core : CPU核心Cache :

关于ThreadPool.RegisterWaitForSingleObject和WaitHandle的应用介绍_mlzboy的博客-程序员秘密

 最近在学习线程相关的内容,所以把学习过程中的心得记录下来,相信大家常用            ThreadPool.QueueUserWorkItem()或者Thread thd=new Thread(new ThreadStart(test)))但是应该很少人知道用ThreadPool.RegisterWaitForSingleObject(高手除外啦),我也是最近才知道。让我来给各位看官解...

小白都能看懂的java虚拟机内存区域划分_土豆是我的最爱的博客-程序员秘密

目录一、虚拟机二、虚拟机组成1.栈栈帧2.程序计数器3.方法区对象组成4.本地方法栈5.堆GCGC案例一、虚拟机​同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的。同一个java代码在windows上生成的机器码可能是0101.......,在linux上生成的可能是1100.......

DEDECMS不调用指定栏目或隐藏栏目下的文章_平哥SEO的博客-程序员秘密

在织梦DEDECMS建站过程中,调用全站的最新文章时,程序会自动调用网站中所有已发布的文档,如果我们不想调用某个栏目下的文章时,应该如何操作呢?下面讲一下如何让DEDECMS不调用指定栏目下的文章的方法。设置DEDE屏蔽某个栏目的方法首先把不需要调用的栏目设置为“隐藏”;用FTP软件打开自己网站的空间,找到以下文件:/include/taglib/arclist

ADO.NET的最佳实践技巧[引用]_weixin_34175509的博客-程序员秘密

简介本文为您提供了在 Microsoft ADO.NET 应用程序中实现和获得最佳性能、可伸缩性以及功能的最佳解决方案;同时也讲述了使用 ADO.NET 中可用对象的最佳实践;并提出一些有助于优化 ADO.NET 应用程序设计的建议。本文包含: • 有关 .NET 框架包含...

随便推点

软件熵(Software entropy)_Lambda程序员的博客-程序员秘密

软件熵(Software entropy)是指软件的无序程度。软件熵可用来说明软件在经过不断修改后,无序程度提高的现象。尽管软件开发几乎不受任何物理定律的约束,熵(entropy)对我们的影响却很大。熵是一个来自物理学的概念,指的是某个系统中的 “无序” 的总量,遗憾的是,热力学定律保证了宇宙中的熵倾向于最大化,当软件中的无序增长时,程序员们称之为 “软件腐烂(softwar...

华为mate30 完全卸载google套件_华为手机google怎么卸载_SpongeZhuang的博客-程序员秘密

华为mate30可以成功安装google服务,但是需要认证机型。一般都是会失败的,即使偶尔会成功,果断时间也会失效,估计是google的封杀吧清除google服务,不需要重制手机,用adb也可以完全卸载;删除google 部分服务Google play service1 adb uninstall com.google.android.gmsGoogle Play Store2.ad...

chrome跨域_谷歌跨域_尜尜alp的博客-程序员秘密

降低chrome浏览器安全性,可以让其实现跨域,在环境变量后面添加这一句就可以实现:--args --disable-web-security

JPA快速入门,包括ORM的概述以及对JPA和hibernate的简介,搭建JPA的入门案例、增删查改、复杂查询等操作。_coderxz的博客-程序员秘密

文章目录ORM的概述JAP的概述JAP与hibernate的关系JPA入门案例的搭建JPA中的API介绍JPA中的增删查改JPA中的复杂查询maven坐标ORM的概述ORM(Object-Relational Mapping)表示对象关系映射。基于面向对象的思想,将对象与关系型数据库进行映射。简单而言,ORM就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的。...

线性不可分到线性可分--低维空间映射到高维空间_weixin_30670965的博客-程序员秘密

二维平面上的点无法用一条直线分开,可以将其按照一定规则映射到三维空间中,用超平面将其分开 转载于:https://www.cnblogs.com/yan456jie/p/5369522.html...

如何参与开源_milk_and_bread的博客-程序员秘密

入手查找issue选择label:“start:contributions welcome”issue说明提出PR(Pull Respose)遵守规范

推荐文章

热门文章

相关标签