• 社保系列5《基本指令》


    本部分的指令是ISO/IEC 7816定义的基本指令,包括:


    Ø  APPLICATION BLOCK(应用锁定)

    Ø  CARD BLOCK(卡片锁定)

    Ø  CHANGE PIN(修改个人密码)

    Ø  EXTERNAL AUTHENTICATION(外部鉴别)

    Ø  GET RESPONSE(获取响应)

    Ø  GET CHALLENGE(获取随机数)

    Ø  INTERNAL AUTHENTICATION(内部鉴别)

    Ø  PIN CHANGE/UNBLOCK(个人密码修改/解锁)

    Ø  READ BINARY(读取二进制数据)  

    Ø  READ RECORD(读取记录内容)

    Ø  SELECT(选择文件)

    Ø  UPDATE BINARY(更新二进制数据)

    Ø  UPDATE RECORD(更新记录内容)

    Ø  VERIFY(校验个人密码)

     

    1. 内部认证

      INTERNALAUTHENTICATE 命令要求卡向接口设备提供认证数据,以使接口设备对卡进行认证。

      用途:使用IRK对发卡方进行验证,IC卡有效性检查

      随机数1(终端)||随机数2(终端)||密钥版本号(如果有)


    1. CPURESET()  
    2. 00A4000002DDF1  
    3. IRK=00000000000000000000000000000000//主内部认证密钥:00  
    4. 0084000008(RAM+9000)  
    5. ECB_3DES_EN(RAM,IRK,PROCESSK)//过程密钥  
    6. ECB_SDES_EN(0102030405060708,PROCESSK,AUTHD)//产生鉴别数据  
    7. 0088000010+RAM+0102030405060708   
    8. 0088000011+RAM+0102030405060708+01 //密钥版本号(如果有)  
    9. 00C0000008(AUTHD_+9000)  

    If( AUTHD == AUTHD_) 校验成功,否则IRK错误。

     


    2. PIN修改,解锁

     PIN CHANGE/UNLOCK命令为发卡者提供了修改PIN、重装PIN和解锁PIN的功能。重装后PIN文件的错误限制数恢复到建立时的初值。

     CHANGE PIN命令允许持卡人将当前个人密码修改为新的密码。


    1. //个人PIN码解锁,修改,首先需要认证PUK,然后用STK计算过程密钥进行解锁,修改  
    2. CPURESET()  
    3. 00A4000002DDF1  
    4. //认证PUK  
    5. PUK=00000000012430000000000888011100  
    6. 0084000008(RAMD+9000)  
    7. ECB_3DES_EN(RAMD,PUK,ENDATA)  
    8. ECB_SDES_EN(0102030405060708,ENDATA,ENDATA1)  
    9. 0082000610+ENDATA1+0102030405060708 //标识:06  
    10.    
    11. //修改PIN  
    12. 0084000008(RAMDOM+9000)  
    13. STK=0002200001243000 //PIN信息中STK-KID指向密钥STK  
    14. ECB_SDES_EN(RAMDOM,STK,SESSIONK) //产生过程密钥  
    15. ECB_SDES_EN(03888888+80000000,SESSIONK,ENCDATA)//计算密文  
    16. 3DES_MAC(0000000000000000+842400010C+ENCDATA+800000,SESSIONK,MAC)  
    17. 842400010C+ENCDATA+MAC(9000) //P2:01更改PIN,尝试计数器重置,同时修改PIN  
    18. //认证PIN  
    19. 0020000003888888  
    20.    
    21. //解锁PIN  
    22. ECB_SDES_EN(RAMDOM,STK,SESSIONK) //产生过程密钥  
    23. 3DES_MAC(0000000000000000+8424000004+800000,SESSIONK,MAC)  
    24. 8424000004+MAC(9000) //P2:00解锁PIN,尝试计数器重置,但不修改PIN  
    25.    
    26. //CHANGE PIN  
    27. 00A4000002DDF1  
    28. 805E010007+888888FF123456  //当前PIN ||FF|| 新的PIN  
    29. //认证PIN  
    30. 0020000003888888  



    3. 应用锁定 

       APPLICATION BLOCK命令使当前被选择的应用失效。失效后的应用仍可以选择(选择后返回SW1_SW2_6A81),但是该应用下的文件则是不可访问的,任何试图的访问都将返回SW1SW2=6A81。对失效的应用在返回6A81后,仍然可以用GetResponse命令来得到应用的FCI信息。对永久锁定的应用返回9303。

        注:如果BL-KID为00h,则使用主控密钥(用途为00h)验算MAC;如果BL-KID不为00h,则使用传输密钥(用途为01h)验算MAC。

        例如:80E0000213DF0205DB000000000039000208D15600000501(9000)BL-KID:用途01,标识02------->STK

        STK:100102010100DD0000Access-Right:DD

        LK,BK:1800030100000003DD  SSB:DD

    CARD BLOCK命令后,卡被锁定,除GET INFO命令外,卡拒绝执行任何命令,返回状态信息?6A81


    1. //首先认证LK,然后用STK计算过程密钥计算MAC  
    2. 00A4000002DDF1  
    3. 00A4000002DF04  
    4. //认证LK,BK   
    5. LK=00000000000000000000000000000000  
    6. 0084000008(RAM+9000)  
    7. ECB_3DES_EN(RAM,LK,ENDATA)  
    8. ECB_SDES_EN(0102030405060708,ENDATA,ENDATA1)  
    9. 0082008310+ENDATA1+0102030405060708(9000)// 标志03  
    10. //用STK锁应用  
    11. STK=0000000000000000  
    12. 0084000008(RAMD+9000)  
    13. ECB_SDES_EN(RAMD,STK,SSK)  
    14. 3DES_MAC(0000000000000000+841E000104+800000,SSK,MAC)  
    15. 841E000104+MAC //8416000104(BK)  



    4. 外部认证

    EXTERNAL AUTHENTICATE命令的目的是IC卡验证外部接口设备的有效性,使接口设备对IC卡获得某种操作授权。

    例如:更新文件信息UK(UPDATAKEY),读取文件信息RK(READKEY)

    1. 0084000008(RAM+9000)  
    2. ECB_3DES_EN(RAM,00000000000000000000000000000000,ENDATA)  
    3. ECB_SDES_EN(0102030405060708,ENDATA,ENDATA)  
    4. 0082000111+ENDATA+0102030405060708+VERSION(9000)  
    5. P2:  
    6. 0  x  x x  x  x  x  x  全局密钥标识(认证MF或DDF下的密钥)  
    7. 1  x  x x  x  x  x  x  局部密钥标识 (ADF下的密钥)  
    8. 0  0  0 0  0  0  0  0  当前DF下的MK  
    9. Lc:  
    10. 金融环境:08  
    11. 社保环境:10,11,00(检验P2参数所指密钥是否存在(6A88[NO]),计数器当前的值(63Cx))  
    12.    


    5. 读写记录文件

    READ RECORD(00B2或04B2)命令读记录文件中指定的记录。

    UPDATE RECORD(00DC或04DC)命令用给定的数据代替记录文件中指定的纪录。


    1. CPURESET()  
    2. 00A4000002DDF1  
    3. 00A4000002DF04  
    4. 00A4000002EF05  
    5. 0084000008(RAM+9000) //满足读权限  
    6. ECB_3DES_EN(RAM,88657368201020122336060719830728,ENDATA) ECB_3DES_EN(0102030405060708,ENDATA,ENDATA)  
    7. 0082008510+ENDATA+0102030405060708(9000)  
    8. //读记录 01(第一条记录)+04(P1记录号)+01(期望返回值长度)  
    9. 00B2+01+04+03 //满足写权限  
    10. 0084000008(RAM+9000)  
    11. ECB_3DES_EN(RAM,88657368201020122336060719830728,ENDATA) ECB_SDES_EN(0102030405060708,ENDATA,ENDATA) 0082008811+ENDATA+0102030405060708+01(9000)  
    12.  //更新记录 01(第一条记录)+04(P1记录号)+03(更新记录的长度,必须和之前写的长度一致,如果之前未写入数据,可以任意更新)  
    13.  00DC010403+C1011


    文/闫鑫原创   转载请注明出处http://blog.csdn.net/yxstars/article/details/38389289

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    自己写个pager控件
    再忙也不能忽视的东西
    ACE_Reactor学习2 Reactor类API的功能分类
    ACE_Reactor学习3 ACE_Reactor初始化相关的实现分析
    ACE_Reactor学习1 总体计划
    windows下信号机制的学习
    咋了
    C#编写Window服务
    Javascript引用类型小结,及字符串处理
    .NET调用控制台下生成的exe文件,传参及获取返回参数
  • 原文地址:https://www.cnblogs.com/iplus/p/4467139.html
Copyright © 2020-2023  润新知