GP SCP02协议 - 实例计算详解

一、概述

    在智能卡中,卡和卡外实体都可以作为安全消息的发送实体和接受实体。因此,SCP02是卡和卡外实体之间,用于保证实体认证,传输数据完整性和数据来源认证,传输数据的机密性的安全通道协议。

    在SCP02中,卡将至少支持以下由“i”定义的实现选项中的一个:
“i” = ‘04’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,1个安全通道基本密钥,未指定卡Challenge生成方法,无R-MAC。
“i” = ‘05’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,3个安全通道密钥,未指定卡Challenge生成方法,无R-MAC。
“i” = ‘0A’,隐式发起模式,未修改的APDU的C-MAC,ICV设置为AID的MAC值,无ICV加密,1个安全通道基本密钥,无R-MAC。
“i” = ‘0B’,隐式发起模式,未修改的APDU的C-MAC,ICV设置为AID的MAC值,无ICV加密,3个安全通道密钥,无R-MAC。
“i” = ‘14’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C_MAC会话加密ICV,1个安全通道基本密钥,未指定卡Challenge生成方法,无R-MAC。
“i” = ‘15’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C_MAC会话加密ICV,3个安全通道密钥,未指定卡Challenge生成方法,无R-MAC。
“i” = ‘1A’,隐式发起模式,未修改的APDU的C-MAC,ICV设置为AID的MAC值,为C_MAC会话加密ICV,1个安全通道基本密钥,无R-MAC。
“i” = ‘1B’,隐式发起模式,未修改的APDU的C-MAC,ICV设置为AID的MAC值,为C_MAC会话加密ICV,3个安全通道密钥,无R-MAC。
“i” = ‘24’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,1个安全通道基本密钥,未指定卡Challenge生成方法,支持R_MAC。
“i” = ‘25’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,3个安全通道密钥,未指定卡Challenge生成方法,支持R_MAC。
“i” = ‘2A’,隐式发起模式,修改后APDU的C-MAC,ICV设置为AID的MAC值,无ICV加密,1个安全通道基本密钥,支持R_MAC。
“i” = ‘2B’,隐式发起模式,修改后APDU的C-MAC,ICV设置为AID的MAC值,无ICV加密,3个安全通道密钥,支持R_MAC。
“i” = ‘34’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,1个安全通道基本密钥,未指定卡Challenge生成方法,支持R_MAC。
“i” = ‘35’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,3个安全通道密钥,未指定卡Challenge生成方法,支持R_MAC。
“i” = ‘3A’,隐式发起模式,修改后APDU的C-MAC,ICV设置为AID的MAC值,为C-MAC会话加密ICV,1个安全通道基本密钥,支持R_MAC。
“i” = ‘3B’,隐式发起模式,修改后APDU的C-MAC,ICV设置为AID的MAC值,为C-MAC会话加密ICV,3个安全通道密钥,支持R_MAC。
“i” = ‘44’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,1个安全通道基本密钥,众所周知的伪随机数算法(卡Challenge),无R-MAC。
“i” = ‘45’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,3个安全通道密钥,众所周知的伪随机数算法(卡Challenge),无R-MAC。
“i” = ‘54’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,1个安全通道基本密钥,众所周知的伪随机数算法(卡Challenge),无R-MAC。
“i” = ‘55’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,3个安全通道密钥,众所周知的伪随机数算法(卡Challenge),无R-MAC。
“i” = ‘64’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,1个安全通道基本密钥,众所周知的伪随机数算法(卡Challenge),支持R-MAC。
“i” = ‘65’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,无ICV加密,3个安全通道密钥,众所周知的伪随机数算法(卡Challenge),支持R-MAC。
“i” = ‘74’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,1个安全通道基本密钥,众所周知的伪随机数算法(卡Challenge),支持R-MAC。

“i” = ‘75’,显式发起模式,修改后APDU的C-MAC,ICV设置为0,为C-MAC会话加密ICV,3个安全通道密钥,众所周知的伪随机数算法(卡Challenge),支持R-MAC。

    本文讨论 i = ‘55’(伪随机数卡Challenge)的情况。

二、SCP02协议两条重要APDU

    SCP02协议以两条指令体现。分别是:

1、INITIALIZE UPDATE Command


2、EXTERNAL AUTHENTICATE Command


不赘述以上两条指令,直接上实例,了解如何计算session key,Card Authentication Cryptogram,Host Authentication Cryptogram,Card Challenge(伪随机数)等。

三、实例

No.1
Command = 00A4040000
(Received)   SW: 6C12	Data: 
================================================================
================================================================
No.2
Command = 00A4040012
(Received)   SW: 9000	Data: 6F108408A000000003000000A5049F6501FF
Cmd RSW Results: 命令执行成功
================================================================
================================================================
No.3
Command = 80500000080102030405060708
(Received)   SW: 611C	Data: 
Cmd RSW Results: 回送数据有1C字节等待返回
================================================================
================================================================
No.4
Command = 00C000001C
(Received)   SW: 9000	Data: 00000000000000000000200200072ECCEBB6BA1FDF88B64A3B75C058
Cmd RSW Results: 命令执行成功
================================================================
================================================================
No.5
Command = 8482000010B59940DCDE10EC7E625C0BA49051C6C9
(Received)   SW: 9000	Data: 
Cmd RSW Results: 命令执行成功

根据以上实例计算如下:

前提条件:

已知SCP02的static keys,分别为:

    STATIC ENC KEY: 404142434445464748494A4B4C4D4E4F

    STATIC MAC KEY: 404142434445464748494A4B4C4D4E4F

    STATIC DEK KEY: 404142434445464748494A4B4C4D4E4F

解析INITIALIZE UPDATE Command返回的响应数据:

Key diversification data Key information Sequence Counter Card challenge Card cryptogram
00000000000000000000 2002 0007 2ECCEBB6BA1F DF88B64A3B75C058

1、第一步由SCP02 static keys计算SESSION KEY:

(1)ENC SESSION KEY计算方法:
使用算法:3DES - CBC模式加密(输入数据不再补位,icv为0)
使用key:static ENC key (404142434445464748494A4B4C4D4E4F)
输入数据:2字节S-ENC常量 + 2字节Sequence Counter + 12字节‘00’填充 (01820007000000000000000000000000)
ENC SESSION KEY: A2268F71917EFE0F33CC6166E1154E27
(2)C-MAC SESSION KEY计算方法:
使用算法:3DES - CBC模式加密(输入数据不再补位,icv为0)
使用key:static ENC key (404142434445464748494A4B4C4D4E4F)
输入数据:2字节C-MAC常量 + 2字节Sequence Counter + 12字节‘00’填充 (01010007000000000000000000000000)
ENC SESSION KEY: 7A227D376A9DBE23AB50B7DCB45B2093
(3)R-MAC SESSION KEY计算方法:
使用算法:3DES - CBC模式加密(输入数据不再补位,icv为0)
使用key:static ENC key (404142434445464748494A4B4C4D4E4F)
输入数据:2字节R-MAC常量 + 2字节Sequence Counter + 12字节‘00’填充 (01020007000000000000000000000000)
ENC SESSION KEY: EF14C57DB4BB9015E88963D9D920A588
(4)DEK SESSION KEY计算方法:
使用算法:3DES - CBC模式加密(输入数据不再补位,icv为0)
使用key:static ENC key (404142434445464748494A4B4C4D4E4F)
输入数据:2字节DEK常量 + 2字节Sequence Counter + 12字节‘00’填充 (01810007000000000000000000000000)

ENC SESSION KEY: F39FCFB2383B09578723B8C2E03B2729

2、Card Challenge(伪随机数)计算方法:
使用算法:DES CBC运算输入数据(length - 8)字节(数据前半段),icv为0;
3DES CBC运算输入数据剩余的8字节(数据后半段),icv为第一步单DES CBC运算的结果。
使用key:C-MAC SESSION KEY (7A227D376A9DBE23AB50B7DCB45B2093)
输入数据:安全域AID(如前面log)并填充(A0000000030000008000000000000000)。
(1)首先DES CBC计算:
       key为:7A227D376A9DBE23
       输入数据为:A000000003000000
       结果为:445899189F7FC692
(2)最终3DES CBC剩余数据计算:
     key为:7A227D376A9DBE23AB50B7DCB45B2093
     数据为:8000000000000000
     icv为:445899189F7FC692
     结果为:2ECCEBB6BA1FD866

最终Card Challenge(伪随机数)为上述结果取前6个字节:2ECCEBB6BA1F。

3、Card Authentication Cryptogram计算方法:
使用算法:3DES CBC运算,icv为0
使用key: ENC SESSION KEY(A2268F71917EFE0F33CC6166E1154E27)
输入数据:8字节host challenge + 2字节Sequence Counter + 6字节Card Challenge,数据需要‘80’方式填充(010203040506070800072ECCEBB6BA1F8000000000000000)
结果:2078A1B45A0F1B9DB7DB67B6DEC50224DF88B64A3B75C058
Card Authentication Cryptogram为取上述结果的后8字节:DF88B64A3B75C058
4、Host Authentication Cryptogram计算方法:
使用算法:3DES CBC运算,icv为0
使用key: ENC SESSION KEY(A2268F71917EFE0F33CC6166E1154E27)
输入数据:2字节Sequence Counter + 6字节Card Challenge + 8字节host challenge,数据需要‘80’方式填充(00072ECCEBB6BA1F01020304050607088000000000000000)
结果:F25DE6478BCC3DD9B3A9D4EE7199BB13B59940DCDE10EC7E
Host Authentication Cryptogram为取上述结果的后8字节:B59940DCDE10EC7E


至此,SCP02相关的数据已经计算得出。以上计算仅供参考。


猜你喜欢

转载自blog.csdn.net/cycad__/article/details/80907492
GP