IC卡安全操作基本命令-取随机数(GET CHALLENGE)


 出处: https://www.mianbaoban.cn/blog/post/38652

  1、命令功能描述
    该命令从卡片中取得一个任意长度(小于256Byte)的随机数,用于安全相关过程。
    除非发生掉电、进行了文件(应用)选择操作或者又发生了一条取随机数命令,取得的随机数保存在卡内一直有效。
  2、命令报文格式
    命令的APDU内容如下所示:
      代码              值
       CLA                 0x00
       INS                 0x84
       P1                  0x00
       P2                  0x00
       Lc                  不存在
       Data                不存在
       Le                  随机数长度
    其中:Le指定了要取得的随机数的长度,用字节表示。
  3、响应报文数据
    如果命令执行成功以后,响应报文数据域给出来卡片产生的随机数,长度为Le字节。
  4、响应报文状态码
    此命令执行成功的状态码为0x9000。
    对于异常情况,IC卡可能回送的错误码如下所示:
       SW1     SW2      含义
       0x6A     0x81        不支持此功能
       0x6A     0x86        P1、P2不正确
       0x6D     0x00        INS错误
       0x6E     0x00        CLA错误
  5、命令实现的其他要求
    在IC卡的安全应用中,随机数一般用于命令安全报文的计算,临时密钥的分散等操作中,通常需要的长度为4Byte。较长的随机数生成一般用于PKI卡中的密钥生成,如果卡片不支持PKI功能的话,可以选择只实现4Byte随机数生成。
  6、命令实现设计
    由于随机数在卡片安全体系中发挥了非常重要的作用,应用对卡片生成的随机数的随机性和安全性要求非常高。
    一般的,卡片的芯片都带有硬件实现的随机数发生器,可以使用芯片这个功能得到一个固定长度的随机数,如果应用要求的随机数长度较长的话可以通过芯片重复取随机数拼接而成。在利用硬件随机数发生器之前需要检查产生随机数的质量,如果质量较高的话(随机性能较好,具体的评价指标可以参考相关文档)可以直接利用,否则可以选择将产生的随机数作为随机数种子,利用软件进行二次随机处理。
    随机数在卡内产生以后需要进行缓存,并且由COS来维护该随机数的有效性。
  7、命令使用示例
   (1)预设环境
    无使用环境要求。
   (2)命令报文
    取4Byte随机数的APDU。
    00 84 00 00 04
    其中:
    * 80 表示GET CHALLENGE命令的CLA。
    * 84 表示GET CHALLENGE命令的INS。
    * 00 表示GET CHALLENGE命令的P1。
    * 00 表示GET CHALLENGE命令的P2。
    * 04 表示GET CHALLENGE命令的Lc,即要取得的随机数的长度。
   (3)GET CHALLENGE响应报文
    卡片处理以后,GET CHALLENGE的响应报文为取得的4Byte随机数值。

猜你喜欢

转载自blog.csdn.net/lyx_win/article/details/78684693