如果支持脱机的加密方式的PIN校验,终端使用基于非对称的加密机制来执行对PIN的加密,以确保从PINPAD到IC卡之间传输PIN的安全。
更明确地说,IC卡必须拥有一个和PIN加密相关的公钥对。PINPAD或终端的一个安全的组件(非PINPAD)使用公钥加密PIN,私钥则被IC卡用来校验PIN。
7.1密钥和证书如果支持脱机PIN加密,IC卡必须拥有一个唯一的公钥对,这个公钥对由一个加密用的公钥和对应的解密用的私钥组成。本规范允许以下两种可能性。
1. IC卡拥有一对专门的IC卡PIN加密私钥和公钥。IC卡PIN加密公钥存放在IC卡上的一张公钥证书中,存放的方式和第六章中指明的动态数据认证用的IC卡公钥完全相同。IC卡PIN加密公钥对有一个NPE字节的IC卡PIN加密公钥模,满足NPE≤NI≤NCA≤248, NI为发卡行公钥模,长度见6.1。如果NPE>(NI-42),那么IC卡PIN加密公钥模被分成两部分,一部分包含了模最高位的NI-42个字节(IC卡PIN加密公钥的最左边字节),另一部分包含了剩余的,模最低位的NPE-( NI-42)个字节(IC卡PIN加密公钥的剩余字节)。IC卡PIN加密公钥指数必须等于3或216+1。IC卡PIN加密公钥证书通过使用发卡行私钥并将附录A2.1中指明的数字签名方案应用于表19中的数据而获得。
字段名 |
长度 |
描述 |
格式 |
证书格式 |
1 |
十六进制,值为‘04’ |
b |
应用主帐号 |
10 |
主帐号(在右边补上十六进制数‘F’) |
cn 20 |
证书失效日期 |
2 |
MMYY,在此日期后,这张证书无效 |
n4 |
证书序列号 |
3 |
由发卡行分配给这张证书的,唯一的二进制数 |
b |
哈什算法标识 |
1 |
标识用来在数字签名方案中产生哈什结果的哈什算法1 |
b |
IC卡PIN加密公钥算法标识 |
1 |
标识使用在IC卡PIN加密公钥上的数字签名算法1 |
b |
IC卡PIN加密公钥长度 |
1 |
标识IC卡PIN加密公钥的模的字节长度 |
b |
IC卡PIN加密公钥指数长度 |
1 |
标识IC卡PIN加密公钥指数的字节长度 |
b |
IC卡PIN加密公钥或IC卡PIN加密公钥的最左边字节 |
NI–42 |
如果NPE≤NI–42,这个字段包含了在右边补上了NI–42–NPE 个值为‘BB’的字节的整个IC卡PIN加密公钥。 如果NPE>NI -42,这个字段包含了IC卡PIN加密公钥最高位的NI–42个字节[1] |
b |
IC卡PIN加密公钥的余项 |
0 或 NPE–NI+42 |
这个字段只有在NPE >NI –42时才出现。它包含了IC卡PIN加密公钥最低位的NPE–NI+42个字节 |
b |
IC卡PIN加密公钥指数 |
1或3 |
IC卡PIN加密公钥指数等于3或216+1 |
b |
表19 – 需发卡行签名的IC卡PIN加密公钥数据(即哈什算法的输入)
2. IC卡没有专门的IC卡PIN加密公钥对,但拥有如6.1节所指明的用于动态数据认证的IC卡公钥对。IC卡公钥如第6章的详细说明存放在IC卡上的一张公钥证书中。
PIN加密的第一步是取得终端用以加密PIN的公钥。步骤如下。
1. 如果终端已经从IC卡获得表20中指明的所有数据对象,那么终端用取得用于动态数据认证的IC卡公钥完全相同的方法取得IC卡PIN加密公钥(见第6章)。
2. 如果终端没有获得表20中指明的所有数据对象,但已经获得表8中指明的所有数据对象,那么终端按第6章的描述取得IC卡公钥。
3. 如果上面的1,2两点没有满足,那么PIN加密失败。
标签 |
长度 |
值 |
格式 |
- |
5 |
RID |
b |
‘8F’ |
1 |
认证中心公钥索引 |
b |
‘90’ |
NCA |
发卡行公钥证书 |
b |
‘92’ |
NI–NCA+36 |
发卡行公钥的余项(如果有) |
b |
‘9F32’ |
1或3 |
发卡行公钥指数 |
b |
‘9F2D’ |
NI |
IC卡PIN加密公钥证书 |
b |
‘9F2E’ |
1或3 |
IC卡PIN加密公钥指数 |
b |
‘9F2F’ |
NPE–NI+42 |
IC卡PIN加密公钥的余项(如果有) |
b |
表20 – 取得IC卡PIN加密公钥所需的数据对象
的加密与校验终端和IC卡之间对加密的PIN的交换和校验按以下的步骤进行。
1. PIN以明文格式在PINPAD中输入并按本规范第三册的第I部分中的定义构造PIN 块。
2. 终端发出GET CHALLENGE命令给IC卡,从IC卡获得一个8字节的不可预知数。
3. 终端生成一个由N-17个字节组成的随机填充字节,N是按照7.1节的详细说明取得的用来加密PIN的公钥的字节长度(N = NPE 或 N = NIC)。
4. 使用按照7.1节指明的PIN加密公钥或IC卡公钥,终端将附录B2.1.3中指明的RSA恢复函数应用到表21指明的数据上,以获得加密PIN数据。
字段名 |
长度 |
描述 |
格式 |
数据头 |
1 |
十六进制,值为‘7F’ |
b |
PIN块 |
8 |
以PIN块方式存在的PIN |
b |
IC卡不可预知数 |
8 |
通过GET CHALLENGE命令从IC卡获得的不可预知数 |
b |
随机填充字节 |
NIC–17 |
由终端生成的随机填充字节 |
b |
表21 - PIN加密需加密的数据
5. 终端发出一个验证(VERIFY)命令,其中包含了上一步得到的加密PIN数据。
6. 使用IC卡私钥,IC卡将附录B2.1.2中指明的RSA签名函数应用到加密PIN数据,以恢复出表21中指明的明文数据。
7. IC卡检验恢复的不可预知数是否等于由IC卡在收到(GET CHALLENGE)命令时生成的不可预知数。如果不相等,那么PIN校验失败。
8. IC卡检验恢复的数据头是否等于‘7F’。如果不相等,那么PIN校验失败。
9. IC卡校验恢复的PIN块中的PIN与存放在IC卡中的PIN是否相同,如果不同,那么PIN校验失败。
如果所有以上的步骤都成功执行,那么加密PIN校验成功。
为了保证这套机制安全,步骤3和4必须在安全的环境下执行。安全的环境可以是
l PINPAD本身。
l 终端的一个安全组件。这种情况下,PIN从PINPAD到安全组件的传输必须根据11.1节中的规定以确保安全。
[1] 正如附录A2.1中所见,签名的数据的NI–22个字节可以从签名中恢复。因为在表7中的第一个到第八个数据元素的长度是20个字节,在签名中还剩下NI–22–20 = NI–42个字节来存放数据