Android SE的多种集成形态:eSE、UICC、SD Card


SE(Secure Element)即安全单元,是一个可以运行Applet(智能卡应用程序)的CPU卡。应用程序要进行支付、身份验证等操作时,一般要先访问SE里的Applet,由Applet实现交易处理、认证等功能。

SE在Android设备中有多种集成形态,分别是eSE、UICC和SD Card。下面将分别对这些形态进行介绍。

一、eSE(Embedded Secure Element)

eSE是嵌入式安全芯片,也称为内置SE。它是焊接在手机主板上的安全芯片,不能从主板上移除。
物理连接方式:eSE只和NFC Controller连接,它使用NFC Controller作为通向外部世界的网关。
Embedded secure element in a mobile device
在外部卡模拟模式下,eSE通过NFC Controller的ISO/IEC 14443接口进行访问,NFC Controller作为射频调制解调器,并将通信从射频天线路由到eSE中。
在内部卡模拟模式下,应用程序是通过NFC Controller将通信转发给eSE的。
eSE通常是通过NFC Controller的标记来区分是外部卡模拟模式还是内部卡模拟模式。

二、UICC(Universal Integrated Circuit Card )

UICC是通用集成电路卡,也就是手机的SIM(但称作SIM好像不够专业,因为涉及到网络技术,感兴趣的可以去百度一下),它是将SE集成到了SIM卡中。
物理连接方式:UICC通过ISO/IEC 7816接口和基带处理器连接;另外,UICC通过SWP接口直接连接到NFC Controller
UICC-based secure element in a mobile device
在外部卡模拟模式下,UICC的SE通过NFC Controller的ISO/IEC 14443接口进行访问,NFC Controller作为射频调制解调器,通过SWP连接将通信从射频天线路由到UICC。
在内部卡模拟模式下,应用程序通过RIL访问基于UICC的SE,使用基带处理器作为网关,通过ISO/IEC 7816接口将通信转发到UICC。
由于NFC Controller不使用UICC进行内部卡仿真,所以,也适用于没有NFC控制器的设备。因此,即使设备不支持NFC,应用程序仍然可以利用UICC作为安全存储和可信执行环境。

三、SD Card(Secure Digital Memory Card)

SD卡在手机内存不大的那个年代还是十分常用的一种存储卡,作为扩展存储卡使用。而现在的手机内存动辄64g、128g,人们对SD卡的需求也就越来越小了。但早期SE也集成在SD中使用过,这里也对其进行讲解。
SD卡是安全数码卡,它将SE集成到了SD卡中。
物理连接方式如下图所示。
第一种:SD card with SWP support in a mobile device
SD card with SWP support in a mobile device
第二种:SD card with SWP support in a mobile device
SD card with direct RF interface in a mobile device
涉及到的专有名词释义:
NFC-WI(NFC Wired Interface):NFC有线接口
S2C(NXP’s proprietary predecessor of NFC-WI):SignalIn和SignalOut接口
SWP(Single Wire Protocol):单线协议
DCLB(Digital Contact Less Bridge):数字非接触式桥
ISO/IEC 7816(standard smartcard interface):国际标准化组织/国际电工委员会 7816(标准智能卡接口)
SPI( Serial Peripheral Interface):串行外设接口
I2C(Inter-Integrated Circuit Bus):集成电路间总线
RIL(Radio Interface Layer):无线电接口层

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现门禁卡写入SE卡需要涉及到安卓系统的SE API和门禁卡的读写操作。以下是一个Android 10上实现门禁卡写入SE卡的代码示例,供参考: 1. 添加权限 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="com.android.permission.USE_SE" /> ``` 2. 初始化SE API 在Activity中初始化SE API: ```java NfcManager nfcManager = (NfcManager) getSystemService(Context.NFC_SERVICE); NfcAdapter nfcAdapter = nfcManager.getDefaultAdapter(); SecureElement se = nfcAdapter.getSecureElement("eSE"); ``` 3. 获取门禁卡数据 通过读取门禁卡的UID,可以获取到门禁卡的数据。以下是一个获取门禁卡UID的代码示例: ```java public void onNewIntent(Intent intent) { String action = intent.getAction(); if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] uid = tag.getId(); // TODO: 通过uid获取门禁卡数据 } } ``` 4. 写入门禁卡数据到SE卡 将门禁卡的数据写入SE卡需要使用SE API。以下是一个将门禁卡数据写入SE卡的代码示例: ```java // 打开SE连接 se.connect(); // 创建SE文件 byte[] aid = "com.example.myapp".getBytes(); se.createAid(aid, null, null, 0); // 写入门禁卡数据到SE文件 byte[] data = "door123".getBytes(); se.updateBinary(aid, data, 0, data.length); // 关闭SE连接 se.close(); ``` 在上述示例中,首先通过`connect()`方法打开SE连接,然后使用`createAid()`方法创建一个SE文件,用于存储门禁卡数据。最后使用`updateBinary()`方法将门禁卡数据写入该SE文件。写入完成后,使用`close()`方法关闭SE连接。 注意:在Android 10中,SE API只能在系统签名的应用程序中使用。因此,必须要在应用程序中申请系统签名,或者在系统中安装应用程序并授予相应的权限才能使用SE API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值