JAVA card 应用开发(六) 个人化数据的线路安全和数据安全

卡片个人化数据的线路安全和数据安全

 

说明:以下理论,基于GP2.2规范。

 

一、线路安全

1. 概念:线路安全,就是对于数据不保密,但要保证数据的完整性和防止被篡改。

2. 方法:在原有的数据基础上,加上8个字节的MAC。

3. 过程:

         a.在外部认证指令中,设定安全级别。如图1.

JAVA card 应用开发(六) 个人化数据的线路安全和数据安全

图1


         b.计算8个字节的MAC附加在后面即可。计算MAC需要注意:完成了外部认证后,除了选择应用的指令以外,都需要加入MAC,否则安全条件不满足。计算MAC以8个字节的0X00为计算的初始向量,输入数据为8个历史字节(上次计算的MAC值)+本次要发的指令。

比如,原本是:

80E40000094F07A000000333010100

算MAC过程:

MAC(0000000000000000,[8字节MACkey],[8字节上次MAC结果]+84E40000114F07A0000003330101,[8字节本次MAC结果])

就变成:

84E40000114F07A0000003330101+[8字节本次MAC结果]

 

注意:第一次的8字节MAC结果,是在“8482010010”这个指令生成的。第二个指令就开始沿用这个指令的MAC结果,作为输入了。

MAC值添加到指令后面,长度需增加。比如

80E20000299102266F24840E315041592E5359532E4444463031A5128801015F2D087A68656E667264659F110101

加上MAC后,就是:

84E20000319102266F24840E315041592E5359532E4444463031A5128801015F2D087A68656E667264659F110101(+8字节MAC)

其余长度都不变,而且还不能带有LE(期待的数据长度)。

 

二、数据安全

1. 概念:进行卡片个人化的时候,数据是保密的,比如卡片私钥。

2. 方法:把数据通过DES加密,看不到明文。

3. 过程:注意在指令的P1设定相应的数值,如图2.

JAVA card 应用开发(六) 个人化数据的线路安全和数据安全

图2


例子,原本是:(设置PIN的指令)

84E2001713801010241234FFFFFFFFFF0102030405060708

DesEn(241357FFFFFFFFFF,[DES KEY],[加密后的数据:8的倍数])

80E260170B801008+[加密后的数据]

注意,如果需要加密的数据,不是8的倍数,请填充00或者FF,Applet都可以正常解释出来。如果输入数据是8的倍数,而且个人化的DGI是 0x8101、0x8103、0x8201、0x8202、0x8203、0x8204、0x8205、0x8301、0x8302、0x8303、0x8304、0x8305 这些,还需要在后面填充80FFFFFFFFFFFF.

 

当然,是可以把个人化数据,既有线路安全也有数据安全,不过要注意,先做数据安全,再做线路安全。否则Applet无法判断数据的完整性。

JAVA card 应用开发(六) 个人化数据的线路安全和数据安全,布布扣,bubuko.com

JAVA card 应用开发(六) 个人化数据的线路安全和数据安全

上一篇:JavaLearning:日期操作类


下一篇:java ThreadLocal解读