DESFire 学习之AUTH

本文详细介绍了DESFire认证过程,包括读卡器与卡片之间的交互步骤。从读卡器发送认证请求开始,到卡片响应并完成认证的全过程,涉及3DES加密及CBC解密等关键技术。

DESFire 的认证过程如下:

1.    CM:0A00
读卡器向卡片发送0A00(0A—AUTH,00-key no.)

2.    RE:AF ek(RndB)
卡片返回AF+DA22830A94D260EC,计算过程:卡片取随机数RndB=34B57355568DC23A,用主密钥key=00000000000000000000000000000000对RndB进行3DES加密得ek(RndB)=DA22830A94D260EC.

3.    CM:AF dk(RndA+RndB’)
发送指令AF+74F4AE777AA431E8B76A9BA260335F17,AF-认证指令。计算过程:用主密钥对ek(RndB)进行解密得到RndB=34B57355568DC23A,对RndB进行闭合字节左循环得到RndB’=B57355568DC23A34,取随机数RndA=0011223344556677,得到RndA+RndB’=0011223344556677B57355568DC23A34,用主密钥对RndA+RndB’进行3DES+CBC解密得到dk(RndA+RndB’)= 74F4AE777AA431E8B76A9BA260335F17.

4.    RE: 00 ek(RndA’)
卡片返回:00 F181F7326DCD86A6,00-状态字,表示操作成功。计算过程:卡片对dk(RndA+RndB’)进行加密得到RndA+RndB’,对RndB’进行闭合字节右循环验证是否等于RndB,若等于则卡片认证成功,并对RndA进行封闭字节左循环得到RndA’,用主密钥对其进行3DES加密得到ek(RndA’).
5.    验证RndA’闭合右循环后是否等于RndA。

notes:本文参考“http://blog.sina.com.cn/s/blog_9ed067ad01012db9.html”处学习得知。

 

NFC卡的格式化操作通常指的是对NFC卡中的数据进行清除或初始化,以便重新使用。这一过程可能因卡片类型(如Mifare Classic、Mifare DESFire、ISO/IEC 14443 Type A/B等)和所使用的设备或开发平台(如Android、PC端工具等)而有所不同。以下将从命令和操作方法两个角度进行说明。 ### NFC卡格式化命令 #### 1. Mifare Classic卡 Mifare Classic卡是一种常见的NFC卡,广泛用于门禁、交通卡等领域。由于其加密机制较为简单,格式化操作通常需要使用特定工具或命令,如`libnfc`或`Proxmark3`等。 - **使用Proxmark3格式化Mifare Classic卡**: ```bash # 进入Mifare Classic模式 hf mf # 读取卡片信息 hf mf info # 使用默认密钥进行格式化 hf mf format ``` - **使用libnfc执行格式化**: ```bash # 列出连接的NFC设备 nfc-list # 格式化Mifare Classic卡(需自定义脚本) nfc-mfclassic W A 0 A 0 000000000000 ``` #### 2. Mifare DESFire卡 Mifare DESFire卡支持更高级别的加密机制,格式化通常需要使用特定的APDU命令进行操作。 - **格式化Mifare DESFire卡的APDU命令**: ```bash # 建立与卡片的连接 SELECT APPLICATION (DF) # 发送格式化命令 FORMAT PICC ``` #### 3. ISO/IEC 14443 Type B卡(如部分CPU卡)[^4] ISO/IEC 14443 Type B卡通常用于金融、安全场景,格式化命令较为复杂,需使用符合标准的APDU指令。 - **格式化ISO/IEC 14443 Type B卡的APDU命令**: ```bash # 选择卡片文件系统 SELECT FILE (MF) # 发送格式化命令 INITIALIZE UPDATE # 执行格式化 EXTERNAL AUTHENTICATE ``` ### NFC卡格式化操作方法 #### 1. 使用Android设备进行格式化 在Android设备上,可以使用NFC API结合特定的NFC标签类型进行格式化操作。例如,对于Mifare Classic卡,可以使用`MifareClassic`类进行操作[^3]。 - **Android代码示例**: ```java MifareClassic mifareClassic = MifareClassic.get(tag); try { mifareClassic.connect(); boolean auth = false; // 尝试使用默认密钥进行认证 auth = mifareClassic.authenticateSectorWithKeyA(0, MifareClassic.KEY_DEFAULT); if (auth) { // 选择数据块 int blockIndex = mifareClassic.sectorToBlock(0); // 写入空数据 byte[] emptyData = new byte[16]; mifareClassic.writeBlock(blockIndex, emptyData); } } finally { mifareClassic.close(); } ``` #### 2. 使用PC端工具进行格式化 PC端可以通过USB NFC读卡器(如ACR122U、Proxmark3、ChameleonMini等)配合工具进行NFC卡的格式化操作。 - **使用ACR122U工具**: - 使用PC/SC工具(如`winscard`或`libpcsclite`)发送APDU命令。 - 示例APDU命令格式化Mifare DESFire卡: ```bash # 选择DESFire应用 FF A4 04 00 07 A0 00 00 00 04 00 00 # 格式化卡片 FF FE 00 00 00 ``` #### 3. 使用开源工具进行格式化 - **Proxmark3**:支持多种NFC卡的格式化和读写操作,适合高级用户。 - **Mifare Tools**:提供图形化界面,支持Mifare Classic卡的格式化、备份、写入等操作。 - **NFC Tools for Android**:提供NFC卡的读写、格式化、备份等功能,适合普通用户。 ### 注意事项 - **权限要求**:大多数NFC卡格式化操作需要有效的认证密钥,尤其是Mifare Classic卡,默认密钥为`FF FF FF FF FF FF`。 - **安全风险**:格式化NFC卡可能导致数据丢失,操作前请确保已备份重要数据。 - **兼容性问题**:不同类型的NFC卡支持的命令和操作方式不同,需根据卡片类型选择合适的工具和命令。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值