运营商芯片技术-超级SIM卡

2022-04-07  本文已影响0人  taojian

给你一张SIM卡,你可以用作校园卡,也可用作羊城通,技术上你要如何实现?
业界给的答案:超级SIM卡(一张可以通过nfc刷卡的电话卡,简称nfc-sim)

技术上你要如何实现?

在实际场景的应用中,可以简化成简单的三个步骤:

  1. 数据初始化

  2. 数据传输

  3. 数据处理

image

技术上你要如何实现?只需要关注下这三个问题:1. SIM卡数据怎么初始化?2. SIM卡数据怎么传输?3. 一卡通系统怎么处理数据?

一、常见卡片

1、卡片种类

(注意:超级SIM卡是双面卡,同时支持接触式和非接触式来交互数据)

image

2、卡片介绍

3、卡片的供电方式

主要分为接触式和非接触式:

工作原理:读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存。当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。

二、超级SIM卡的物理特性

1、物理特性

缺少总部的超级SIM卡技术文档,目前对超级SIM卡的物理特性了解不多

  1. 卡片实现:默认是JavaCard的CPU卡,在CPU卡区域模拟了一个1K大小的M1卡;

  2. 容量大小:480K左右,能安装15个java applet应用;

  3. 供电方式:手机接触式充电,驱动手机NFC模块以对外交互数据。因此手机没电关机后,剩余的电量还能支撑驱动NFC模块使用(并无评测数据,为总部反馈数据)

  4. 工作频率:13.56MHz

  5. 数据交互:支持手机系统通过本地oma调用,利用sim卡的两个触点传输数据;也支持手机用NFC模块驱动超级SIM卡,在13.56MHz频率下与POS读写器通过电磁波交互数据。

2、物理结构

CPU:处理器单元

RAM:用于存放临时数据

ROM:用于存放系统程序,用户不可修改

EEPROM:用于号码、短信等数据,可擦写的程序等(超级SIM卡的M1模式就是使用这块区域)

image

三、M1卡的技术实现

M1卡是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,目前都有国产芯片与其兼容,属于非接触式IC卡。最为重要的优点是可读可写并且安全性高的多功能卡。这些优点与其自身的结构密不可分。

1、主要指标

2、存储结构

M1 卡分为16 个扇区,每个扇区由4 块 (块0、块1、块2、块3)组成,(我们也将16 个扇区的64 个块按绝对地址编号为0~63,存贮结构如下图所示:

image
  1. 第0扇区的块0 (即绝对地址0 块),它用于存放厂商代码,已经固化,不可更改。

  2. 每个扇区的块0、块1、块2 为数据块,可用存贮数据,可以进行初始化值、加值、减值、读值操作;

  3. 每个扇区的块3 为控制块,包括了密码A、存取控制、密码B。具体结构如下:

image

3、密码机制

M1卡通过密码A、存取控制、密码B三者共同控制数据块的读写权限,极为巧妙。

(1)控制位定义

表:控制位定义"CXxy" (大写X=控制位序号,每块共3个控制位; y=块0,块1,块2)

image

例如:C1x0中的C代码这是控制位,1代表第一位,0代表是块0的控制位。

(2)控制位在存储控制中的存放位置

image

(3)三个控制位的权限控制表

一个扇区的三个数据块,我们可以利用密码机制对它们分别进行权限控制

数据块(块0、块1、块2)的存取控制如下:

image

控制块(块3)的存取控制与数据块(块0、1、2)不同,它的存取控制如下:

image

四、JavaCard卡的技术实现

1、什么是JAVA卡?

JAVA卡是一种可以运行JAVA程序的智能卡。该智能卡由CPU、EEPROM(存储)、RAM(内存)、加密协处理等组成,很像一台小型的PC,主要用于安全服务场景。

2、工作模型

JAVA卡上电以后系统就会自动运行,主机通过发送APDU访问JAVA卡的功能。JAVA卡只接受2种APDU:选择应用APDU(系统实现),应用功能APDU(应用实现)。

典型工作流:

  1. JAVA卡上电

  2. 发送APDU选择应用1 –> JAVA卡调度应用1 –> 发送功能APDU -> 应用1响应功能APDU

  3. 发送APDU选择应用2 –> JAVA卡调度应用2 –> 发送功能APDU -> 应用2响应功能APDU

  4. JAVA卡下电

image

JAVA卡虚拟机:解释执行JAVA字节码指令。

JAVA卡标准API:是J2SE的一个子集,详情请参考下面:1. java.lang,定义Object和Throwable等基础类

2. javacard.framework,核心框架类(应用框架、消息传输、瞬时内存、事务处理等)

3. javacard.security,定义安全框架基础类

4. javacardx.crypto,定义了Cipher和KeyEncryption等基础类

5. org.globalplatform,GP规范的应用编程接口

JAVA卡私有API:卡商自定义的API,提供提供附加实用功能。

JAVA卡应用:系统自带的应用或用户编写的应用,系统自带的应用必须有Card Manager(AID=A000000003000000),负责上传应用、安装应用、删除应用、其他管理功能等。

APDU:定义了主机和JAVA卡之间交互的数据格式,JAVA卡由process方法处理APDU。

3、编写、生成JAVA卡应用

1、利用JAVA卡的API编写JAVA应用代码。

2、编译JAVA应用代码为Class字节码(注意必须使用JDK1.5编译,或在eclipse中设置,因为转换工具只支持这个版本)。

3、利用converter.bat(参见java_card_kit-2_2_2使用介绍,JCOP支持自动生成)将Class文件和Export文件(链接信息)转换为CAP应用文件。

说明:因为JAVA卡平台CPU主频比较低,存储和内存都很受限,所以要转换为CAP文件提高资源效率。

image

4、JavaCard应用代码样例

package random;/**

*/

import javacard.framework.;import javacard.security.;

public class RandomNumberApplet extends Applet {

private RandomData randomData; public RandomNumberApplet() { randomData = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM); } public static void install(byte[] bArray, short bOffset, byte bLength) { // GP-compliant JavaCard applet registration

new RandomNumberApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]); }

public void process(APDU apdu) { // Good practice: Return 9000 on SELECT

if (selectingApplet()) { return; }

byte[] buf = apdu.getBuffer(); switch (buf[ISO7816.OFFSET_INS]) { case (byte) 0x84: short randomLen = buf[4]; randomData.generateData(buf, (short)0, randomLen); apdu.setOutgoingAndSend((short)0, randomLen); break; default: // good practice: If you don't know the INStruction, say so:

ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } }

}

5、CPU卡通用错误码

五、如何用POS机读写卡数据

1、POS机的选型

M1、CPU卡都是13.56MHz,但是POS机不一定都能读取,这个要看POS机的固件是否支持。一般市面上分2种,后者价格更高。

2、读写M1卡数据

1.手机安装SIM卡并设置好NFC选项为SIM

image

2. 打开电脑客户端,连接读卡器

image
  1. 调用C++ SDK(读卡器厂商负责封装),向读卡器发出读数指令
image
  1. 正确获取指定块的数据
image

六、一卡通系统如何处理数据?

一卡通系统通过POS机获取到返回数据,后台执行处理。

一卡通管理后台一般分为web端和客户端:

image
上一篇 下一篇

猜你喜欢

热点阅读