java card 更新密钥(put key command)

460 阅读5分钟

第一步准备数据

Initial Key: 404142434445464748494A4B4C4D4E4F
New Key: 101112131415161718191A1B1C1D1E1F

第二步计算过程

1.发送apdu 指令 8050000008 86866C36D5B7C3B8
result = 0000EB5A87688768EB5A01020004D9D83827232277B1DB6B68A45837
VSeqCounter = 0004
IV: 0000000000000000
ENCSessionKey = 3DES_CBC("0181" + VSeqCounter + "000000000000000000000000") with inital Key
ENCSessionKey = 662D9905E05BC32564438EB82E28EE52

encrypted Key  = 3DES_ECB(new key) with ENCSessionKey
encrypted Key =C7E9B29D8F122420939C66FD24CFF343

KeyCheckValue - 3DES_CBC("0000000000000000") with new key =8BAF47
 
PutKey APDU = "80D8008143 + 01 + 8010 + C7E9B29D8F122420939C66FD24CFF343 + 03 + 8BAF47 + 8010 + C7E9B29D8F122420939C66FD24CFF343 + 03 + 8BAF47 + 8010 + C7E9B29D8F122420939C66FD24CFF343 + 03 + 8BAF47"
 
 注意 如果 enc ,mac ,dek 三个可以不同,重新 每个新key 重复上面的过程
 old_keyenc = 404142434445464748494A4B4C4D4E4F
//old_keymac = 404142434445464748494A4B4C4D4E4F
//old_keydek = 404142434445464748494A4B4C4D4E4F
//key_new_enc = 504142434445464748494A4B4C4D4E4F
//key_new_mac = 604142434445464748494A4B4C4D4E4F
//key_new_dek = 704142434445464748494A4B4C4D4E4F

0000EB5A87688768EB5A010200072B9F98DBAB23205D4F28855899E0
VSeqCounter  = 0007
80D8018143 01
8010  2B08C1A1DF1C9922CEABC760468B7EFF 03 65A861

check value = 3DES_CBC(0000000000000000) with 504142434445464748494A4B4C4D4E4F = 65A861 5966453E56
ENCSessionKey = 3DES_CBC("0181" + VSeqCounter + "000000000000000000000000") with inital Key
ENCSessionKey = 3DES_CBC(01810007000000000000000000000000) with  404142434445464748494A4B4C4D4E4F = F39FCFB2383B09578723B8C2E03B2729
 encrypted Key  = 3DES_ECB(504142434445464748494A4B4C4D4E4F) with ENCSessionKey = 2B08C1A1DF1C9922CEABC760468B7EFF 

8010  E5122B21840D0047CEABC760468B7EFF 03 2B8A48 

check value = 3DES_CBC(0000000000000000) with 604142434445464748494A4B4C4D4E4F = 2B8A48 683ADECA19
ENCSessionKey = 3DES_CBC("0181" + VSeqCounter + "000000000000000000000000") with inital Key
ENCSessionKey = 3DES_CBC(01810007000000000000000000000000) with  404142434445464748494A4B4C4D4E4F = F39FCFB2383B09578723B8C2E03B2729
encrypted Key  = 3DES_ECB(604142434445464748494A4B4C4D4E4F) with ENCSessionKey = E5122B21840D0047CEABC760468B7EFF 



8010 4CA1FE759D545F48CEABC760468B7EFF 03 FD68C2

check value = 3DES_CBC(0000000000000000) with 704142434445464748494A4B4C4D4E4F = FD68C2 9A1B946179 
ENCSessionKey = 3DES_CBC("0181" + VSeqCounter + "000000000000000000000000") with inital Key
ENCSessionKey = 3DES_CBC(01810007000000000000000000000000) with  404142434445464748494A4B4C4D4E4F = F39FCFB2383B09578723B8C2E03B2729
encrypted Key  = 3DES_ECB(704142434445464748494A4B4C4D4E4F) with ENCSessionKey = 4CA1FE759D545F48CEABC760468B7EFF