IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> DESFire EV1修改默认TDES密钥为AES密钥 -> 正文阅读

[系统运维]DESFire EV1修改默认TDES密钥为AES密钥

空白DESFire EV1 8K卡,默认PICC主密钥为16个0x00。

APDU采用7816-4形式。DESFire Native APDU和7816-4 APDU之间的关系,请参考以下链接。

DESFire的7816-4 APDU封装及查看卡片版本信息_robur的博客-CSDN博客在成功进入ISO 14443-4后,DESFire卡片收到的第一个APDU类型,决定了卡片后续使用的APDU类型。如果收到的是符合7816-4的APDU,则卡片后续的命令都使用7816-4。DESFire卡支持7816-4规定的如下INS:A4(SELECT)D0(Read Binary)D6(Update Binary)还支持经过封装的原生DESFire APDU。CLAINSP1P2LcDataLe90DESFirhttps://blog.csdn.net/robur/article/details/122417165

0. DESFire卡上电后默认选择AID 0x00,也就是选择卡片级别(PICC level)。修改PICC主密钥,不需要再执行SelectApplication(0x5A,选择应用)命令。

1. 读卡器发送Authenticate(0x0A,认证)命令,卡片返回ek(RndB),状态字0xAF

Rdr: 90 0A 00 00 01 00 00
Tag: 26 E1 33 1B A0 03 F6 C0 [91 AF]

ek()表示DES加密(encipher),卡片永远执行DES加密操作。

2. 读卡器进行运算:

解密得到RndB =?DB926FFE5066E1FE

读卡器生成RndA = 0102030405060708

rot(RndB) = RndB' =?926FFE5066E1FEDB(rot()表示执行8位闭合左循环,即最高字节变为最低字节)

dk(RndA + RndB') =?CEAD373DB80EABF8?E5F0066DE13C575E

dk()表示DES解密(decipher),读卡器永远执行DES解密操作。

3. 读卡器发送响应和它自己的挑战,卡片应答ek(RndA'),状态字0x00

Rdr: 90 AF 00 00 10 CE AD 37 3D B8 0E AB F8 E5 F0 06 6D E1 3C 57 5E 00
Tag: FB 79 6C 9A AF BF 71 D3 [91 00]

卡片应答状态字0x00,表示卡片认证读卡器成功(卡片认为读卡器是合法的)。

命令0xAF对应卡片上一个状态字0xAF,0xAF表示Additional Frame(额外的数据帧)。这些额外的帧也是认证命令(0x0A)的一部分。

4. 读卡器进行运算:

解密后的RndA' =?0203040506070801

rot(RndA) = RndA',三次握手认证成功(也是读卡器认证卡片成功,读卡器认为卡片是合法的)。

生成过程密钥(Session Key):01020304DB926FFE? 050607085066E1FE

实际使用的过程密钥:01020304DB926FFE(16字节长度表达形式为:01020304DB926FFE? 01020304DB926FFE,前后8字节相同)

请注意:

因为默认TDES密钥的前后8字节相同,所以它实际上是一个单DES密钥。对于使用单DES密钥通过的认证,过程密钥也必须是单DES密钥。按照过程密钥生成算法得到的后8字节密钥不予使用,仅使用前(高)8字节。(如果需要16字节长度的过程密钥,就把前8字节复制一遍。)

5. 确定欲更改的密钥编号、新密钥的值和版本

密钥编号:0x80。实际上的密钥编号是0x00(PICC主密钥),但因用于AES密钥,密钥编号的前2个bit必须为10b,1000 0000 = 0x80。

新密钥的值:0000000000000000?0000000000000000(16字节0x00)

新密钥的版本(只有AES密钥有额外1字节的版本):0x00

6. 读卡器为新密钥计算CRC,并组成Cryptogram

CRC的算法取决于先前通过的认证方式(TDES/AES)。参与CRC运算的元素取决于先前通过的认证方式,以及认证的密钥与欲修改的密钥是否相同。

本例中认证为TDES,认证使用的密钥与欲修改的密钥相同。因此算法使用CRC16,参与运算的元素为:

新密钥的值+密钥版本,一共是17字节0x00。

使用DESFire专用的CRC16算法,得到结果为0x75 45。(算法参考以下链接)

VB.NET实现DESFire ISO14443A CRC16_robur的博客-CSDN博客Public Shared Function CRC_ISO14443A(ByVal InputBytes() As Byte) As UShort If InputBytes Is Nothing OrElse InputBytes.Length < 1 Then Return &H0 End If Dim Data As UShort Dim CRC As UShort = &H63...https://blog.csdn.net/robur/article/details/122589564Cryptogram是包含了密钥+[密钥版本]+CRC+[填充字节]的字节序列。其中密钥和CRC是必须的。额外的密钥版本只有AES密钥需要 (本例中为00)。长度不够时需要填充字节(本例中为5字节)。

Cryptogram =?00000000000000000000000000000000 00 7545 0000000000

7. 读卡器解密Cryptogram

使用先前认证生成的过程密钥(01020304DB926FFE),对Cryptogram进行DES-CBC解密操作(CBC发送模式,IV = 全零)。关于CBC发送模式和接收模式,参考以下链接:

DESFire中的CBC发送模式与CBC接收模式_robur的博客-CSDN博客DESFire中对于数据加密,有两种模式:1. CBC发送模式(CBC Send Mode);2. CBC接收模式(CBC Receive Mode)。但是厂家文档中对这两种模式的具体操作没有进行详细的解释。笔者通过查阅多个项目的源代码,现详细说明如下:一、CBC发送模式1. (输入数据的)第一个数据块,与IV进行异或;2. 异或的结果进行ECB密码学运算(加密/解密),得到第一个数据块的输出;3. 复制第一个数据块的输出到IV;4. 第二个数据块,与IV进行异或(此https://blog.csdn.net/robur/article/details/124045496

注:读卡器始终执行DES解密,卡片始终执行DES加密。

dk(Cryptogram) =?003F0CCD3B65F44F?81FFDF2E6C9FC2D6?9E7E5D279D2D5B94

8. 读卡器发送ChangeKey(0xC4,修改密钥)命令,卡片应答状态字0x00,修改密钥成功

Rdr: 90 C4 00 00 19 80 00 3F 0C CD 3B 65 F4 4F 81 FF DF 2E 6C 9F C2 D6 9E 7E 5D 27 9D 2D 5B 94 00
Tag: [91 00]

欲修改的密钥编号并不包括在Cryptogram内,它是一个独立的参数,本例中为0x80。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:25:00  更:2022-04-18 18:29:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:54:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码