| |
|
开发:
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之间的关系,请参考以下链接。 0. DESFire卡上电后默认选择AID 0x00,也就是选择卡片级别(PICC level)。修改PICC主密钥,不需要再执行SelectApplication(0x5A,选择应用)命令。 1. 读卡器发送Authenticate(0x0A,认证)命令,卡片返回ek(RndB),状态字0xAF Rdr: 90 0A 00 00 01 00 00 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 卡片应答状态字0x00,表示卡片认证读卡器成功(卡片认为读卡器是合法的)。 命令0xAF对应卡片上一个状态字0xAF,0xAF表示Additional Frame(额外的数据帧)。这些额外的帧也是认证命令(0x0A)的一部分。 4. 读卡器进行运算: 解密后的RndA' =?0203040506070801 rot(RndA) = RndA',三次握手认证成功(也是读卡器认证卡片成功,读卡器认为卡片是合法的)。 生成过程密钥(Session Key):01020304DB926FFE? 实际使用的过程密钥: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发送模式和接收模式,参考以下链接: 注:读卡器始终执行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 欲修改的密钥编号并不包括在Cryptogram内,它是一个独立的参数,本例中为0x80。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |