国密PSAM卡与CPU(用户卡)操作过程 小结

版权声明: https://blog.csdn.net/xiaoxilang/article/details/86490580

1-终端+PSAM+CPU用户卡 常规的操作过程

PSAM 卡是作为秘密密钥的载体,专门执行加密和数字签名等任务;                                                                                           所有它常常跟一个MCU或者终端设备组在一起构成一个整体;

CPU用户卡作为一个从设备;psam也是一个载体,两者都是卡片,或者说都是从设备。它们之间是无法相互访问的

     比如:从应用的角度来看,终端设备比如说 ATM 机,我们可以把他看作包含 PSAM 才构成整体。而CPU用户卡,对 ATM 机来说,则是外部设备。当需要对用户卡片(CPU卡)进行操作的时候,实际上终端设备是交替地访问cpu用户卡和 PSAM,按协议流程来完成安全协议规定的操作。

比如说外部认证,是要让psam卡片确认终端设备的合法性(实质上是检验它(终端设备)是否持有共享的密钥):
1 终端设备向cpu用户卡发送取随机数命令,得到一个卡片生成的随机数(获得卡片的随机数)。
2 终端设备向 PSAM 卡发送一个加密命令,使其对上述随机数加密(获得密文)。
3 终端设备向cpu用户卡片发送带有上述加密结果(密文)的外部认证命令。CPU用户卡片进行验证后,确定认证是否成功。如果成功,则可以进行后续的安全操作。(用获得的密文来进行认证

     当然,实际的过程还要复杂一些,因为要抗御暴力攻击每一次外部认证是要生成一个过程密钥的。上述简化过程是仅仅是为了说明这种交替访问的情景。

通过认证来正确访问到用户卡里的内容,接下来我自己归纳一下这一步骤。
假定我已经写好了ISO7816协议和ISO14443协议,通过这两个协议分别给PSAM卡和用户卡发送APDU指令。
如果我要查看用户卡中某应用文件的内容时,其详细步骤伪代码

(相关指令查看我博客:智能卡操作(非接触CPU卡又称智能卡) 总结)

/* 参考连接:https://bbs.csdn.net/topics/390652402?page=1
*  a)给用户卡发送选择应用文件的APDU命令===========================00 a4=======
*/
void CPU_SelectFile(void);
/*
*  b) 向用户卡发送获取随机数的APDU命令。返回值:R(得到的随机数)=====00 84======
*  @Return R:产生的随机数
*/
R CPU_GetChallenge(void);  
/*
*  c) 向PSAM卡发送加密命令,对随机数进行加密。=====================00/04 d6===
*  @Param  R:随机数
*  @Return Re:加密后的随机数
*/
Re PSAM_Encode(R);
/*
*  d) 向用户卡发送外部认证命令。===================================00 82=======
*  @Param  Re:加密后的随机数
*          Ki:秘钥标识符 
*/
void CPU_External_Authentication(Re, Ki);
 
/*
*  外部验证成功后,用户卡内状态机改变为所用秘钥的后续状态, 下面可以对应用文件进行操作...
   -------------接下来对应用文件进行操作---------
*/

2-

(待续)

猜你喜欢

转载自blog.csdn.net/xiaoxilang/article/details/86490580