CCC数字钥匙设计【NFC】--NFC卡相关基础知识

news2025/2/21 4:13:08

CCC3.0的NFC技术中,除车端,手机端需包含NFC功能外,另外一般还会配置一个NFC卡,用于备份使用。本文主要介绍NFC卡相关的基础知识。

1、NFC卡 & 智能卡

NFC卡是一种智能卡,其与信用卡大小相同,可通过嵌入到其塑料基体中硅片上的电子电路来存储和处理信息。

智能卡按使用时是否和读卡器接触可分为接触式智能卡和非接触式智能卡.

接触式智能卡上有6-8个触点,使用时插在卡座上,典型的如手机SIM卡以及以前的公用电话卡。

非接触式智能卡没有触点,卡上也没有电源,通过读卡器产生的电磁场获得能量并与读写器交换信息。

由于非接触式智能卡的无源和免接触特性,卡的使用寿命和安全性大大提高,目前应用越来越广泛。典型的如NFC卡片

根据嵌入的芯片类型,智能卡可分为存储器卡、逻辑加密卡和CPU卡

CPU卡的安全强度最高,CCC数字钥匙采用的NFC卡就是CPU卡

如下展开详细描述。

1.1 存储器卡

存储器卡:卡内的集成电路是电擦除的可编程EEPROM,只有数据存储功能,没有数据处理能力。该卡本身不提供硬件加密功能,只能存储通过系统加密的数据,很容易被破解。

1.2 逻辑加密卡

逻辑加密卡:卡内的集成电路包括加密逻辑电路和可编程EEPROM,但没有完整的微处理器。加密逻辑电路在一定程度上保护卡及卡中数据的安全,但只是低层次的保护,无法防止恶意攻击。

逻辑加密卡通常用于保护重要的机密信息,如加密密钥和数字证书等。

CPU卡和逻辑加密卡的区别在于前者具有完整的微处理器和通信能力后者则专注于加密和保护重要的机密信息。

1.3 CPU卡

CPU卡:CPU卡也称智能卡,卡内的集成电路包括中央处理器CPU、可编程EEPROM、随机存储器RAM、固化的卡内操作系统COS(Chip Operating System)和ROM等。

该卡相当于一台没有显示器和键盘的微型计算机,可以像计算机一样运行复杂的程序和算法。CPU卡可以存储大量数据,并且可以与外部设备进行通信,例如智能手机或POS终端。

卡中数据分为外部读取和内部处理两部分,以确保卡中数据的安全、可靠。

因具有安全性高、可以离线操作、可以运算编程等突出优点,因此广泛用于金融、电信、运输等领域的安全身份验证和支付应用。CCC数字钥匙采用的NFC卡也是CPU卡。

有网友将存储器卡、逻辑加密卡、CPU卡做了一些形象的比喻,有助理解,具体如下:

1) 存储器卡就像一个无人看守且大门敞开的仓库,什么人都可以随便在卡中存取数据;

2) 逻辑加密卡相当于给仓库加了一把锁,只有有钥匙(密码)的人才能打开使用。

3) CPU卡则如同安排了专人看守仓库,卡里面有CPU芯片,存储数据要验证口令,且可能不同的应用有不同口令,存取数据受到更加严格的控制,安全性最高。

2、NFC卡类型TypeA/B

ISO/IEC 14443包含物理特性、频谱功率和信号接口、初始化程序、防冲突算法、通信协议等部分内容。它定义了两种卡类型:Type A和Type B。两种卡均在13.56MHz无线频率下工作。

TypeA卡和B卡主要区分体现在物理特性上,具体如下:

2.1 Type A卡

当NFC Reader发送数据给NFC卡时,通过13.56MHz的射频载波传送信号。其采用方案为同步、改进的Miller编码方式,通过100%ASK传送;

当NFC卡发送数据给NFC Reader时,是通过调制载波传送信号。使用847kHz的副载波传送Manchester编码。​

2.2 Type B卡

当NFC Reader发送数据给NFC卡时,也是通过13.56MHz的射频载波信号,但采用的是异步、NRZ编码方式,通过用10%ASK传送的方案;

当NFC卡发送数据给NFC Reader时,则是采用的BPSK编码进行调制。

2.3 Type A与Type B对比

对比两种卡型,可以看出,Type B有以下优势:

1) 芯片具有更高的安全性。接收信号时,不会因为能量损失而使芯片内部逻辑及软件工作停止。

2) 支持更高的通讯速率。Type A最大的数据通讯速率为150Kbit/s -200Kbit/s ,应用10%ASK技术的Type B至少可支持400Kbit/s 的速率。

3) 外围电路设计简单。读写机具到卡以及卡到读写机具的编码方式均采用NRZ方案,电路设计对称,设计时可使用简单的UARTS。

4) 抗干扰能力强负载波采用BPSK调制技术,较Type A方案降低了6dB的信号声。

3、NFC标签 Type 1/2/3/4

NFC的基本标签类型有四种,以1至4来标识,各有不同的格式与容量。

这些标签类型格式的基础是:ISO 14443的A与B类型、FeliCa,前者是非接触式智能卡的国际标准,而后者符合ISO 18092被动式通讯模式标准

Type1 Tag:

基于ISO14443A标准,具有可读、重新写入的能力,用户可将其配置为只读。存储能力为96字节,内存可被扩充到2k字节。此类NFC标签的通信速度为106 kbit/s。

此类标签简洁,故成本较优,适用于许多NFC应用。

Type2 Tag:

基于ISO14443A标准,具有可读、重新写入的能力,用户可将其配置为只读。其基本内存大小为48字节,但可被扩充到2k字节。通信速度也是106 kbit/s。

Type3 Tag:

基于Sony FeliCa体系,目前具有2k字节内存容量,数据通讯速度为212 kbit/s。此类标签适合较复杂的应用。

Type4 Tag:

此类标签被定义为与ISO14443A、B标准兼容。

制造时被预先设定为可读/可重写、或者只读。内存容量可达32k字节,通信速度介于106 kbit/s和424 kbit/s之间。

具体总结如下表:

CCC规范要求车端和手机端均必须支持Type A格式,而对Type B和Type F的支持都是可选的

结合Type1没有数据冲突保护,Type 2安全性较低,个人分析认为CCC数字钥匙一般应该采用Type4的标签

4、Miller码简介

当NFC Reader发送数据给NFC Type A卡时,采用的是Miller编码方式,之前没用过Miller码,所以专门研究了下,具体如下。

Miller码也称延迟调制码,是一种变形双相码。其编码规则:

对原始符号“1”码元起始不跃变,中心点出现跃变来表示,即用10或01表示。

对原始符号“0”则分成单个“0”还是连续“0”予以不同处理。

1)单个“0”时,保持0前的电平不变,即在码元边界处电平不跃变,在码元中间点电平也不跃变。

2)对于连续“0”,则使连续两个“0”的边界处发生电平跃变。

示例:

NRZ:   1  0   0    0   0   1  1

Miller:10 00 11 00 11 10 01

自己总结成如下三句话:

1) 每个逻辑位包含两个原始位

2) 逻辑0:中心不跳变;逻辑1:中心跳变

3) 单个0,保持0前电不变;连续0,两个0的边界跃变

5、卡操作距离

虽都是免接触,但不同卡的有效操作距离是不一样的。

1) 有些卡操作距离非常短,只有0-2厘米,被称为CICC卡(Close-Couple ICC),中文称密耦合卡

2) 有些卡的操作距离远一点,可以达到10厘米,被称为PICC卡(Proximity ICC),中文称接近卡

3) 还有一种更远的,至少可以达到半米或更远,被称为VICC卡(Vicinity ICC),中文称疏耦合卡

6、NFC卡软件实现相关

目前常见的NFC卡通常采用Java Card是一种能运行Java 程序的智能卡

非CPU卡的访问一般是通过调用函数直接完成的。而CPU卡除了设备命令(测卡、上下电、选卡座等)和卡的复位命令以外,所有卡命令都是通过通用的命令函数执行的。

当两台计算机彼此进行通信时,它们交换根据一系列协议构造的数据包。类似地,NFC卡也使用自己的数据包---称作APDU 

APDU包含一条指令或响应信息。在智能卡的世界里采用的是主从模式,而智能卡永远扮演从动的角色

换句话说,智能卡总是在等待来自终端(如手机)的命令APDU。随后,它执行APDU规定的动作,并以一个 应答APDU向终端作出回答。

智能卡与终端(如手机)之间互相交换命令APDU(终端发送)应答APDU(智能卡发送)

卡操作命令有统一的格式:CLA(命令类别Class)、INS(命令指令Instruction)、P1(参数1)、P2(参数2)、Lc(命令数据域Data长度)、Data和Le(应答数据域长度)。

关于Java Card及APDU,后面再另外文章研究说明。

7、总结

1) 智能卡可分为:存储器卡、逻辑加密卡和CPU卡

2) NFC是一种智能卡,CCC数字钥匙采用的NFC卡是CPU卡

3NFC卡从物理特性可分为TypeA、TypeB、TypeF等类型

4) NFC标签从格式和容量上可分为Type1、Type2、Type3、Type4

5) NFC卡通常采用Java Card,是一种能运行Java 程序的智能卡。

6) NFC采用APDU数据包进行通信交互。

7) CCC规范要求车端和手机端均必须支持Type A格式,而对Type B和Type F的支持都是可选的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

删除所有出现次数最少的字符

题意: 假设字符串中出现次数最少的字母是x, 出现次数为y, 删除所有出现次数为y的字符 思路&#xff1a;用unordered_map统计出出现次数最少的x出现的次数y 再遍历字符串&#xff0c;删除所有出现次数为y的字符 代码&#xff1a; #include <iostream> #include <uno…

stm32外部时钟为12MHZ,修改代码适配

代码默认是8MHZ的&#xff0c;修改2个地方&#xff1a; 第一个地方是这个文件的这里&#xff1a; 第二个地方是找到这个函数&#xff1a; 修改第二个地方的这里&#xff1a;

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…

Xubuntu16.04系统中安装create_ap创建无线AP

1.背景说明 在Xubuntu16.04系统的设备上安装无线WIFI模块后&#xff0c;想通过设备自身的无线AP&#xff0c;进行和外部设备的连接&#xff0c;需要安装create_ap软件&#xff0c;并设置无线AP的名称和密码&#xff0c;并设置为开机自启动。 create_ap是一个用于在Linux系统上创…

LeetCode58——最后一个单词的长度

自己的解&#xff1a; public static int lastLength(String s){//返回通过围绕给定正则表达式的匹配拆分此字符串计算的字符串数组String[] str s.split(" ");//将数组最后一个元素 即最后一个单词通过toCharArray方法拆分到char数组中char[] last str[str.lengt…

【JavaEE重点知识归纳】第10节:Object类和String类

目录 一&#xff1a;Object类 1.概念 2.获取对象信息 3.对象比较equals方法 4.hashCode方法 二&#xff1a;String类 1.String类的重要性 2.常用方法 3.StringBuilder和StringBuffer 一&#xff1a;Object类 1.概念 &#xff08;1&#xff09;Object类是Java默认提供…

剑指Offer || 052.递增顺序搜索树

题目 给你一棵二叉搜索树&#xff0c;请 按中序遍历 将其重新排列为一棵递增顺序搜索树&#xff0c;使树中最左边的节点成为树的根节点&#xff0c;并且每个节点没有左子节点&#xff0c;只有一个右子节点。 示例 1&#xff1a; 输入&#xff1a;root [5,3,6,2,4,null,8,1,n…

hackbar基于插件的网络渗透测试工具

一、安装 安装&#xff1a;通过Firefox在插件扩展里面找到hackbar v2进行安装(注意hackerbar是收费的&#xff1b;v2不是) 安装成功示例&#xff1a; 二、基本使用 1.Load URL 解释&#xff1a;将当前网页的url自动填充到多行文本框里面 2.Split URL 解释&#xff1a;自动…

22下半年下午题

声明&#xff1a;哔哩哔哩视频笔记 源地址 第一大题题目 第一大题解答 第一小问 根据0层数据流图来找&#xff0c;看数据流向和相应的处理模块匹配。并且这个第一问&#xff0c;肯定是能在说明中找到对应短语作为答案的。 第二小问 搞清楚具体存储数据的信息名字&#xff…

数据结构:二叉树(3):相关oj题目

二叉树oj题的续 目录 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 方法1 方法2 105. 从前序与中序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 106. 从中序与后序…

图论03-【无权无向】-图的深度优先DFS遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 6. 二分图6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 递归判断相邻两点的颜色是否一致…

java--Consumer的使用

一、目的 因为代码中用到了Consumer &#xff0c;所以特地来梳理其对应的用法以及总结。 二、介绍 Consumer 是一个函数式接口&#xff0c;它位于java.util.function 包中&#xff0c;它定义了一个名为accept 的抽象方法&#xff0c;该方法接受一个参数并且不返回任何结果。 …

【C++和数据结构】模拟实现哈希表和unordered_set与unordered_map

目录 一、哈希的概念与方法 1、哈希概念 2、常用的两个哈希函数 二、闭散列的实现 1、基本结构&#xff1a; 2、两种增容思路 和 插入 闭散列的增容&#xff1a; 哈希表的插入&#xff1a; 3、查找 4、删除 三、开散列的实现 1、基本结构 2、仿函数Hash 3、迭代器…

sealos 部署halo

首先创建数据库 postgresql 找到连接数据库&#xff0c;点击详情查看数据库的参数 部署halo应用 halohub/halo:2.5 高级配置里设置环境变量 本地存储 配置 Halo 环境变量环境变量 spring.sql.init.platformpostgresql spring.r2dbc.urlr2dbc:pool:postgresql://postgres:4w…

在 Python 中使用 Pillow 进行图像处理【3/4】

第三部分 一、腐蚀和膨胀 您可以查看名为 的图像文件dot_and_hole.jpg&#xff0c;您可以从本教程链接的存储库中下载该文件&#xff1a; 该二值图像的左侧显示黑色背景上的白点&#xff0c;而右侧显示纯白色部分中的黑洞。 侵蚀是从图像边界去除白色像素的过程。您可以通过使用…

运算符重载的三种实现方法

一、重载为一般函数 格式&#xff1a;返回类型 operator 运算符(参数列表) struct Complex{//定义一个复数结构&#xff1a;包括实部与虚部两部分 double real;//实部 double imag;//虚部 }; Complex operator(Complex c1,Complex c2){//对加法运算的重载&#xff1a;将运算符…

扩展字符串(acwing周赛第三题)

代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL; const int N 1e510; const LL INF 2e18; LL len[N];string s"DKER EPH VOS GOLNJ ER RKH HNG OI RKH UOPMGB CPH VOS FSQVB DLMM VOS QETH SQB"; string a"DKER …

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件&#xff0c;吃瓜视频&#xff0c;或其他资源内容&#xff0c;通过用户付费买会员来变现&#xff0c;用户需要付费&#xff0c;有些人喜欢白嫖&#xff0c;所以会流失一部分用户&#xff0c;所以就写了这个系统…

TCP--滑动窗口

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 接收端和发送端通过窗口来实现流量的控制。发送端维护一个发送窗口&#xff0c;接收端维护一个…

Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒&#xff0c;同样可以通过Spider获取网站内容&#xff0c;最近学习了SeleniumPhantomjs后&#xff0c;准备利用它们获取百度百科的旅游景点消息盒&#xff08;InfoBox&#xff09;&#xff0c;这也是毕业设计实体对齐和属…