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

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

技术上你要如何实现?

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

  1. 数据初始化

  2. 数据传输

  3. 数据处理

image

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

一、常见卡片

1、卡片种类

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

image

2、卡片介绍

  • ID卡:是一种不可写入的感应式卡,有一个固定卡号,卡号在封卡前写入后不可再更改,封卡后只能读卡号。

  • M1卡:含有存储器,数据读写需要秘钥,数据直接读写在存储器上。

  • 普通CPU卡:以复旦微电子的FM1208卡为例,含有cpu,ram和rom,内置一个cos系统,内置多个文件,每个文件读写需要密钥(内外两重验证)。

  • JavaCard:同样含有cpu,ram和rom,内置一个cos系统,在系统上安装JCVM虚拟机,可以部署多个java applet应用;

3、卡片的供电方式

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

  • 接触式:芯片向外暴露有6个触点,插入机器后,手机卡槽的探针接触芯片供电;

  • 非接触式:通过读卡器发出电磁波,切割铜线生电;

工作原理:读写器向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、主要指标

  • 分为16 个扇区,每个扇区为4 块,每块16 个字节,以块为存取单位

  • 每个扇区有独立的一组密码及访问控制

  • 每张卡有唯一序列号,为32 位

  • 具有防冲突机制,支持多卡操作

  • 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路

  • 数据保存期为10 年,可改写10 万次,读无限次

  • 工作温度:-20℃~50℃(温度为90%), PET 材料封装得M1 卡,温度可达100℃。

  • 工作频 :13.56MHZ

  • 通信速 :106KBPS

  • 读写距离:10cm 以内(与读写器有关)

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;/**

  • Get random number from JavaCard.

*/

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卡通用错误码

  • 6200 “警告 信息未提供”

  • 6281 “警告 回送数据可能”

  • 6282 “警告 文件长度小于Le”

  • 6283 “警告 选中的文件无效”

  • 6284 “警告 FCI格式与P2指定的不符”

  • 6300 “警告 鉴别失败”

  • 63Cx “警告 校验失败(x-允许重试次数)”

  • 6400 “状态标志位没有变”

  • 6581 “内存失败”

  • 6700 “长度错误”

  • 6882 “不支持安全报文”

  • 6981 “命令与文件结构不相容,当前文件非所需文件”

  • 6982 “操作条件(AC)不满足,没有校验PIN”

  • 6983 “您的卡已被锁定”

  • 6984 “随机数无效,引用的数据无效”

  • 6985 “使用条件不满足”

  • 6986 “不满足命令执行条件(不允许的命令,INS有错)”

  • 6987 “MAC丢失”

  • 6988 “MAC不正确”

  • 698D “保留”

  • 6A80 “数据域参数不正确”

  • 6A81 “功能不支持;创建不允许;目录无效;应用锁定”

  • 6A82 “该文件未找到”

  • 6A83 “该记录未找到”

  • 6A84 “文件预留空间不足”

  • 6A86 “P1或P2不正确”

  • 6A88 “引用数据未找到”

  • 6B00 “参数错误”

  • 6Cxx “Le长度错误,实际长度是xx”

  • 6E00 “不支持的类:CLA有错”

  • 6F00 “数据无效”

  • 6F01 “连接中断”

  • 6D00 “不支持的指令代码”

  • 9301 “您的卡余额不足”

  • 9302 “MAC2错误”

  • 9303 “应用被永久锁定”

  • 9401 “您的卡余额不足”

  • 9402 “交易计数器达到最大值”

  • 9403 “密钥索引不支持”

  • 9406 “所需MAC不可用”

  • 6900 “不能处理”

  • 6901 “命令不接受(无效状态)”

  • 61xx “正常 需发GET RESPONSE命令” 读取指令00C00000xx

  • 6600 “接收通讯超时”

  • 6601 “接收字符奇偶错”

  • 6602 “校验和不对”

  • 6603 “警告 当前DF文件无FCI”

  • 6604 “警告 当前DF下无SF或KF”

  • 6E81 “卡片已离开”

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

1、POS机的选型

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

  • 只能读取M1卡

  • 能读取M1和CPU卡

2、读写M1卡数据

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

image

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

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

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

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

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

  • web端技术栈推荐springboot+vue,开发成本低但是兼容性欠佳;

  • 客户端目前技术潮流推荐JavaFx,可以兼顾性能、开发成本和兼容性三个问题。

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 标签(空格分隔): Java 智能卡 我们将从原理上理解Java Card开发中一些关键的技术信息。 名词解释 A...
    dacf13a4e779阅读 3,563评论 0 0
  • 最近因为工作需要进行一卡通项目的整合,原来对于IC卡这块基本是个小白,经过一段时间的学习,简单整理一下资料。现在生...
    暴走的初号机阅读 7,653评论 0 1
  • M1卡就是Mifare非接触式感应卡,M1卡数据保存期为10年,可改写10万次,读无限次。无电源,自带天线,工作频...
    guanalex阅读 15,497评论 2 7
  • 姓名:张童 学号:20021210845学院:电子工程学院转载自https://blog.csdn.net/wei...
    ztztztt阅读 1,333评论 0 0
  • 本文只作技术交流分享研究之用,请勿用于非法用途,否则后果自负。 0.开端 高中一次偶然原因,在网上看到IC卡的破解...
    anodern阅读 48,907评论 14 74