Mifare Classic Crypto1加密流程
No.1 PCD Reader 发送认证命令
首次认证加密
当Reader准备进行密钥认证时,发送 auth命令 + 认证地址addr
至NFC卡片。
非首次认证加密
当Reader准备进行密钥认证时,将 auth命令 + 认证地址addr
使用当前的密钥流加密后,发送至NFC卡片。
No.2 PICC Card 收到认证命令,计算并发送 tag_clg
首次认证加密
- 生成随机数
Nt
,使用Nt
计算生成Ar
和At
。 - 使用待认证地址的密钥初始化密钥流,生成
tag_clg
,使用tag_uid ^ tag_clg
滚动密钥流,校验位为正常奇校验。
非首次认证加密
- 生成随机数
Nt
,使用Nt
计算生成Ar
和At
。 - 使用待认证地址的密钥初始化密钥流,生成
tag_clg
,使用tag_uid ^ tag_clg
滚动密钥流,并加密后生成tag_clg
,加密校验位。
No.3 PCD Reader 收到 tag_clg,计算并发送 reader_clg 和 reader_rsp
- 初始化密钥流,解密随机数
Nt
,已加密需要使用密钥流输出,恢复原本Nt
,使用Nt
计算生成Ar
和At
。 - 生成随机数
Nr
,加密为reader_clg
。 Ar
加密为reader_rsp
,At
加密为tag_rsp
。- 同时发送
reader_clg
和reader_rsp
,共8字节。
No.4 PICC Card 收到 reader_clg 和 reader_rsp,计算并发送 tag_rsp
- 解密
reader_clg
,恢复Nr
。 - 解密
reader_rsp
,恢复Ar
,如果Ar
和自己原本计算的相等,进行下一步,否则失败。 - 加密
At
为tag_rsp
,发送给读卡器。
No.5 PCD Reader 收到 tag_rsp
和自己本身生成的进行比较,如果相等,则认证通过。后续通讯直接使用密钥流加解密。