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

智能推荐

c语言中图形驱动程序功能_C / C ++中的图形:一些更有趣的功能_cumtb2002的博客-程序员秘密

c语言中图形驱动程序功能In this Advance Learning Tutorial of C / C ++ today, we are going to tell you about some of the functions that can be used to make the program more attractive. This works on both text and ...

【蓝桥杯】2015初赛 加法变乘法_YFR718的博客-程序员秘密

题目描述我们都知道:1+2+3+ … + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+…+1011+12+…+2728+29+…+49 = 2015 就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交。(对于示例,就是提交10)。输出注意:需要你提交的是一个整数,不要填写任何多余的内容。无脑枚举即可for i in range(1,49): for j in range(i+2,49):

恶意代码分析实战6-1_lab06.exe_Elwood Ying的博客-程序员秘密

本次实验我们将会分析lab06-01.exe,lab06-04.exe两个文件。先来看看lab06-01.exe要求解答的问题Q1由main函数调用的唯一子过程中发现的主要代码结构是什么Q2位于0x40105f的子过程是什么Q3这个程度的目的是什么尝试运行会发现程序一闪而过载入peview分析,查看其导入表​可以看到WININET.dll,其中其中的InternetGetConnectState函数。利用Windows Internet(WinINet)API,应用程序可以使用http协议访问

No valid crumb was included in the request 问题定位与解决_洒脱的智障的博客-程序员秘密

背景生产环境Jenkins版本进行了升级,发现代码中直接使用http调用Jenkins REST API的方法失效了,都是同样的错误,No valid crumb was included in the request。百度的结果搜索了具体的错误信息,发现都是一样的,就是说把Jenkins的CSRF给关闭了,但是我在Jenkins上面没有找到关闭CSRF的入口。就像下面这张图。然后百度得知,Jenkins高版本关闭了页面上面取消CSRF防护的入口,本来也不推荐关闭。解决方法一这边我当时是

spring-boot集成jpa封装个通用的Dao_jpa通用dao 封装_yinbucheng的博客-程序员秘密

先定义分页用的PageBean和反射用的ReflectUtils工具类import java.lang.reflect.Field;import java.lang.reflect.Modifier;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map...

python12306自动抢票为什么进入个人中心_Python自动测试之12306APP自动抢票_甜甜不加糖的博客-程序员秘密

import aircv as acimport uiautomator2 as u2import timeimport randomd=u2.connect('172.21.236.63')def run(img):while(True):d.screenshot("qp.jpg")imobj=ac.imread('C:\Users\bj\Desktop\qp\'+img+'.jpg')imsr...

随便推点

vue.js使用JSX语法扩展_彭世瑜的博客-程序员秘密

JavaScript XMLJSX 是一个看起来很像 XML 的 JavaScript 语法扩展vue 4.2.3 可以直接使用jsx语法vue [email protected]/cli 4.2.3vue create vue-jsx-demosrc/App.vue<template> <div id="app"> <HelloWorld /&g...

ubuntu18.04中Docker安装、命令、部署软件、Dockerfile、docker-compose、docker私有仓库_安安csdn的博客-程序员秘密

Docker概述Dcoker可以解决软件跨环境迁移的问题Docker安装参考链接为了避免每次命令都输入sudo,可以设置用户权限,注意执行后须注销重新登录sudo usermod -a -G docker $USER例如:当前用户为ningansudo usermod -a -G docker ningan安装完成之后,查看docker版本命令:docker -vdocker --versionDocker架构菜鸟教程Docker 包括三个基本概念:镜像(Image):D

Golang后端开发学习之路_十年~的博客-程序员秘密

这篇文章是我的Golang后端开发学习成长路线,从0开始学习go语言,我目前是大三,学校教过基本的C语言、C++、java、python,还有408的四个计算机核心课程。希望我的学习路线对你有帮助。

满足一列的情况下,自动填充另一列单元格的内容_excel如何输入一列另一列自动填上数据_ttlily萝的博客-程序员秘密

如图所示,第一幅图片是Sheet1,第二幅图片是Sheet2,要根据1中的矿床名称将2的第一行自动填充为类型(因为2与1的数据大不相同,所以不可直接复制粘贴,数据量大),要用到VLOOKUP函数,将鼠标放在Sheet2的A2单元格上,输入=VLOOKUP(B2,Sheet1!A1:B403,2,0),这个B2是目标表格所查找的内容,就是矿床名称,在Sheet1中去寻找依据,向下自动填充并可得到所有...

php 数组的相关处理函数 - 坚持更新,保证文章的实用性_戴国进的博客-程序员秘密

一、键、值接作函数1.array_values($contact):不保留键名,按照索引,对数组排列2.array_keys($contact,'可选参数',‘可选参数true/false’):若设置可选参数,则按照可选参数返回键名,若不设置,直接返回数组的键名,false为不依赖默认参数类型3.in_array(‘value’,'$contact','可选参数true/false'):检查数组中是否存在某值,true类型必须完全一致,搜索值若为字符串,设置true后,则区分大小4.a

Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】_普通网友的博客-程序员秘密

哈喽,大家好 我是xy???。 从我最初接触vue3版本到现在已经有一年的时间。由于 vue3.2 版本的发布,<script setup> 的实验性标志已经去掉,已经陆陆续续有不少公司开始使用 vue3.2开发项目了。这篇文章就来帮助大家如何快速使用 vue3.x,typeScript, vite 搭建一套企业级的开发脚手架 ??。废话不多说,直接上手开搞 ??搭建前准备Vscode: 前端人必备写码神器Chrome:对开发者非常友好的浏览器(反正我是很依赖它的)Nodejs&a.

推荐文章

热门文章

相关标签