我想要实现的是将APDU命令发送到MIFARE Classic 1K卡以更改其A和B键。
我能够与卡建立连接并使用默认密钥(FFFFFFFFFFFF
)来读取块0和块1.我使用了HID MifareSamples应用程序。
现在,我想将A键从默认更改为其他内容。我在stackoverflow(Mifare Change KEY A and B)找到了一个解决方案,它建议我必须发送这个APDU:
新密钥A = 00 11 22 33 44 55访问位未被覆盖密钥B没有被覆盖 使用(所以FF FF FF FF FF FF)
=>写入扇形拖车00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF
我找到了一个很好的工具JSmartCard Explorer,它允许你将APDU发送到卡上。然后我阅读了PCSC规范3.2.2.1.4加载密钥命令章节并理解命令应该如下所示:
FF 82 00 00 18 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF
但遗憾的是JSmartCard工具失败并且“命令不允许(没有当前的EF)”。
我做错了什么?如何更改密钥?
答案 0 :(得分:6)
首先,MIFARE Classic卡不使用APDU命令。因此,您不会将APDU发送到卡,而是发送到读卡器(将其转换为MIFARE Classic命令)。要由阅读器处理的APDU命令通常以类字节FF D6 XXYY 10 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
开始。
在MIFARE Classic卡中,密钥(A和B)以及每个扇区的访问条件都存储在扇区尾部(每个扇区的最后一个块)中。 MIFARE Classic 1K卡有16个扇区,每个扇区有4个块。
因此,如果您想设置按键和&对于扇区0的访问条件,您需要将它们写入块3(扇区0的最后一个块)。 PC / SC标准将存储卡的写命令(UPDATE BINARY)定义为:
XXYY
其中ZZ...
是块地址,<key A> | access bits | general purpose byte | <key B>
是要写入块的数据。
行业预告片的格式是(见this answer for further details):
00 11 22 33 44 55
所以为了设置
66 77 88 99 AA BB
787788
69
(扇区尾部只能使用密钥B写入;访问位/ GPB可以用密钥A或B读取;数据块只能使用密钥B写入;数据块可以用密钥读取A或B)FF D6 0003 10 001122334455 787788 69 66778899AABB
对于扇区0,您将使用以下写命令:
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get -y upgrade
RUN mkdir -p /root/.ssh
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
请注意,您无法部分更新扇区预告片,您始终需要构建和编写整个扇区预告片。