如何使用APDU命令设置和更新ICC卡密码

How to set and update ICC card PIN with APDU command

我有一张接触式智能卡。(我不知道上面安装了哪种小程序。但我可以使用标准 APDU 命令验证、读取、更新和验证 pin。)我想对 PIN 做一些更改. 所以,我的问题是:

标准更新命令不适用于 PIN 文件。我从 ICC 卡收到 6982 响应消息。那么,在上述情况下成功的途径是什么。 我在互联网上搜索过它,但没有找到任何有用的文档和文章。

错误6982代表"Security condition not satisfied"。

PIN 永远不会像您在数据包中提到的那样明文传输。对于用户和 ICC 之间涉及的软件,它们始终是加密的,可以偷看数据包。 public 密钥必须使用 GET_CHALLENGE 命令获得并用于加密 PIN。

根据 EMV 规范,PIN 更改的 APDU 是

CLA = 8C or 84;
INS = 24
P1 = 00
P2 = 01/ 02
Lc = Number of data bytes
Data = Enciphered PIN data component, if present, and MAC data component; 
  • CLA 和数据将根据 EMV Book 2 中指定的安全消息进行编码
  • P2 = 01 => 使用当前 PIN 生成的 PIN 数据
  • P2 = 02 => 在不使用当前 PIN 的情况下生成 PIN 数据
  • 新 PIN 封装在数据字段中

我终于找到了解决方案,我把答案放在这里。

首先,我们需要 select PIN 文件。为此

  • Select MF(主文件)
  • Select DF(专用文件)
  • Select PIN EF(基本文件)

Select App Master File : 00 A4 00 00 02 XX XX

Select App Dedicated File : 00 A4 00 00 02 XX XX

Select App Pin File : 00 A4 00 00 02 XX XX

Change Pin coommand: 00 24 [TM] [KN] [LN] XX XX .. ..

TM: Transfer Mode (Clear Transfer) : 00 KN: Key Number: 10 LN: Total Pin Length(Every time 16 bytes): 10

For example (Old pin is “1234” and we want to change pin to “5678”:

Change Pin : 00 24 00 10 10 31 32 33 34 FF FF FF FF 35 36 37 38 FF FF FF FF (FF: padding value)