【PBOC卡片交易日志分析】DDA+fDDA

此篇文章重点讲解使用CA证书验证9F4B中动态签名数据

国际RSA算法

  • 恢复IPK 的部分参考SDA,默认已恢复出发卡行公钥指数明文

  • 从DGI中得到tag9F46,使用发卡行公钥指数验签tag9F46得到ICC Certificate明文

  • 验证9F46明文格式

  • 在9F46明文中提取出用来计算hash的数据,并根据AFL规则追加上参与静态数据签名的DGI数据(如果DGI中存在静态数据认证标签列表Tag9F4A并且为82,再追加AIP)作为hash输入

  • 如果计算的hash与9F46明文中的hash相等,则恢复ICC公钥成功

  • 卡片使用8201~8205的卡片私钥签名DDOL列表( Tag9F49,DDOL中为LV格式 )中的数据放到9F4B中,9F4B的有不同的返回位置,其中签名数据一定包含卡片随机数9F37,fDDA一般在最后一条DGI返回

  • 终端使用ICC公钥模长验签9F4B,验签规则与验签证书规则相同

DDA中特有的证书格式:

9F46密文存储,验签后得到的明文格式:

【PBOC卡片交易日志分析】DDA+fDDA_第1张图片

【PBOC卡片交易日志分析】DDA+fDDA_第2张图片

9F4B密文发送,验签后得到的明文格式:

【PBOC卡片交易日志分析】DDA+fDDA_第3张图片

例:

从GPO返回值中取到AIP和AFL

 

AIP : 7C00 

AFL: 08010100 10010400 18010201 20010100     => DGI0101不参与签名,DGI0201~DGI0204不参与签名,DGI0301~DGI0302 1条记录参与签名,DGI0401不参与签名

取记录得到

DGI0101:703257106244680100000018D2210222000007689F1F183030303030202020202020202020203736382020202020205F2002202F

 

DGI0201:70 81FB 90 81F8 5C64AB3BBE5ECC4DD81D160E2ABA0D9BC0BB37F52A7175EEC003BC8BE2B71A17D2DF0D9612495BBDA3A518CD476B1516DC22661DD8D6C0C450886B10CDBFF87A0D3F2F1792A10CEF12FB290E08F64CF4B1A05CE3A2E5175D6C5449A26DB70CD1C29C2E03D716C014BC08D1381ECB937E487449839C490681D36D5FCED9B6F1F28C2B300D0BEDC57F3DCD528FA8D1D0F41B888CCE46B7BFFE4591DA4571675E703C0E2F8C748ACF4DCA180E6370E1FC6D624F18218634D4C7E72C5F8D909916DF18D324AC6A8F3F59CB28A554FE5625DDDC7C977A50840779A534ECDADAAF2AB94A3285C52DB0F38943056861CA35C71D19DC352489220192       --ipk certificate

 

DGI0202:70 0D 9F32 01 03 8F 01 C4 9F49 03 9F3704     --9F32 发卡行公钥指数,8F CA index 9F49 DDOL

 

DGI0203:70 81B3 93 81B0 28830B33524C4469CA91C8808115ECCDC456345B10C7A0830E29D7DAF75E134CFC54320061E43A68B9E07318D643103D7D75EA086F8B5266B8E205C7BDB0C440C12B027A0D11552A524789CF2A98C1A68D14BD2A9B529111B1B83FEAD6C186F43B4BB470593933170D2CC7466BEB8FABEC4A512F0C60926FA799D28498B6E0D558955D2D28314C99959F37257F4855E470A591AB55749ABE7DAFC56F54DD3DFB5E0A9779F2BB052348C6D5E1D828B8E0     --静态数据签名

 

DGI0204:70 81E5 9F46 81B0 125AFB8CC907E783460062927E78E99B54131B1F4BFC58B4F7E077EDB8093910A5ED653596C54A3828FA67BB2DDFD5889D7FBF105BA01878E8C1CDBC21C3A7393964586EFD7A7284E0C5D6B734D317BE4A9911BDE02D5FE66E245AF2619F409EEBAF7912257584F854BF57FCAE135F4D1E16FBC922CAE13A891D1D14FD63D747971E486C2C2FE9DAF6E43400422A426F3C24B2E1246E1DFA789AC586E5243101D9C5FC4FCB47C2A87E433C059AF26135    9F47 01 03 9F48 2A F39080F4F0F4F9A5E068DCA5C03B372BF24CBDF6D93F59B7AC991A10486BC575000C5703607CB4D69CBD  --ICC Certificate + 9F47 ICC公钥指数+9F48 ICC公钥余项

 

DGI0301:70 8187 5A0862446801000000185F3401008E0C00000000000000001E031F009F0D05D86004A8009F0E0500100000009F0F05D86804F8005F24032210315F280203449F0702FF005F25031706019F4A01828C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F2103          --static signed data

 

DGI0302:70 0F 5F30 0202229F080200309F42020344

 

DGI0401:70089F1401009F230100

 

得到和DDA相关的数据,已用颜色标出

根据8F寻找CA Certificate,暂时跳过从CA Certificate中恢复CA公钥的步骤,直接得到当前例子使用的CA公钥模长(P*Q )

E14E5F3B18C152E108626215AB922C933DC1C5761C5E2E08B936A88DB8AC17A32526F7AB2D7F41301F37DE994C35F768C89BA80A0496102C15BE0FF9F283F702255ED458DD9C558CE6EAE044988C7E4704045325CA24822362A4D290A398764D8552F9DB5D0A39BA6705B422F6407037EC8C69BD14382314C378D2607DE87E54AA69D979124F96A5FD6140DF197ACEFF7A69920D2AA81B1E4113C310FE4727E0661506A89EC05A9F30DA98DDF93CA6A37FFD6DBC848C5AE69C71A63D04B97779EE4057085537C41DAA9DA22EB337A3310ECCCF89038C7DD6311944936915A6C8206502B46B871443803C82F7A56E12FF5189B3C83A390525

 

CA公钥指数为03

使用RSA算法对90进行验签,得到90明文:

6A 02 624468FF 1224 000001 01 01 B0 01 C16029AD46600F0EECAE47376D89B9435B9CDECEB56D368135005264E134E78B6E3744663F12BDA020EC4A81ED922FE51F28A294F2B95B2C486F4C1F571E6F9A2B89BEF84F405381A66CA51EAD48EAFF790323E4C95403BF7DFE4ECCBFFE22EFB13E21EF360CC5D6664E9F2F03BCFA89ED8BABD2B3384E2DFD8A6D58827BD811FB27AA9B601568700B079F147235B2CE39DEFFF9F9E04A33B9BD6ED58AA0A3F56D9DA12E8D78FE3737FD98DF8EAEEF29 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB C11C08F465B009AAAD0F725718FA5DD01B47B6D2 BC

 

验证IPK Certificate明文格式正确,没有tag92,得到IPK明文C16029AD46600F0EECAE47376D89B9435B9CDECEB56D368135005264E134E78B6E3744663F12BDA020EC4A81ED922FE51F28A294F2B95B2C486F4C1F571E6F9A2B89BEF84F405381A66CA51EAD48EAFF790323E4C95403BF7DFE4ECCBFFE22EFB13E21EF360CC5D6664E9F2F03BCFA89ED8BABD2B3384E2DFD8A6D58827BD811FB27AA9B601568700B079F147235B2CE39DEFFF9F9E04A33B9BD6ED58AA0A3F56D9DA12E8D78FE3737FD98DF8EAEEF29 

 

hash输入为02624468FF12240000010101B001C16029AD46600F0EECAE47376D89B9435B9CDECEB56D368135005264E134E78B6E3744663F12BDA020EC4A81ED922FE51F28A294F2B95B2C486F4C1F571E6F9A2B89BEF84F405381A66CA51EAD48EAFF790323E4C95403BF7DFE4ECCBFFE22EFB13E21EF360CC5D6664E9F2F03BCFA89ED8BABD2B3384E2DFD8A6D58827BD811FB27AA9B601568700B079F147235B2CE39DEFFF9F9E04A33B9BD6ED58AA0A3F56D9DA12E8D78FE3737FD98DF8EAEEF29BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB03

 

得到hash值:C11C08F465B009AAAD0F725718FA5DD01B47B6D2与90明文中的相等

IPK恢复正确

 

使用发卡行公钥指数+发卡行公钥模长恢复9F46 ICC公钥证书,得到证书明文:

6A 04 6244XXXXXXXX0018FFFF 1022 000189 01 01 B0 01 987E9115C3BF688CEAC0FBAEDCC601D94C3F86BE8D0ECBB84A0709B4CEEBE90796209E85400526ECCF83BFFAD472CC82158523CFDD2EA72EB495C5BA0F6049DDEB3760EFD16C24A06072BB3A03D3158D576AE7E9BF737C579B263D7007FAEF5023E9AD8C7E09969673B73B3ECC2A9428D4FBDFFDBDF9A506D471B5DA0938555FBA11DEB9792C A2ACBEF8BD67D0A5ACE8DD85B284F81D6EB0D19F BC

 

验证9F46明文格式正确

 

将9F46明文中的数据+9F48中的ICC公钥余项+AFL分析出的参与静态签名的数据,作为hash输入

hash输入为:

046244680100000018FFFF10220001890101B001987E9115C3BF688CEAC0FBAEDCC601D94C3F86BE8D0ECBB84A0709B4CEEBE90796209E85400526ECCF83BFFAD472CC82158523CFDD2EA72EB495C5BA0F6049DDEB3760EFD16C24A06072BB3A03D3158D576AE7E9BF737C579B263D7007FAEF5023E9AD8C7E09969673B73B3ECC2A9428D4FBDFFDBDF9A506D471B5DA0938555FBA11DEB9792CF39080F4F0F4F9A5E068DCA5C03B372BF24CBDF6D93F59B7AC991A10486BC575000C5703607CB4D69CBD035A0862446801000000185F3401008E0C00000000000000001E031F009F0D05D86004A8009F0E0500100000009F0F05D86804F8005F24032210315F280203449F0702FF005F25031706019F4A01828C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F21037C00

 

得到hash值:A2ACBEF8BD67D0A5ACE8DD85B284F81D6EB0D19F

ICC恢复正确

 

INTERNAL AUTHENTICATE得到 签名动态数据:

7BEF6E114BC130CA3EDB6033468018B1FD87E438A025C539B8F166B82717269F9AF600B6D9021AE56715A249ADF88CBD5FF31B3430618305C50E79F7AE88DBE3EEDE903D7777A75A0F0D6101C4DDD4E1619E89BA1510E5DB584F8F948443A400CDF445E641D4A86BE628CA863103FE5FDBF81D10D68B82CE2C623797F53477D95728796302B32338A3A797AB21A27E2494B3AC822447107C7A9EF66A92A083A4190A21CA0BF43592C4CB79655EAB3C2A

 

使用ICC公钥验签得到明文:

6A 05 01 03 020001BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 45DFAE48D69142197B87D0314D8A189843B2D8DA BC

 

根据动态数据明文得到hash输入:

050103020001BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB6E25AD8D(6E25AD8D为DDOL中的tag9F37的值)

得到hash值为45DFAE48D69142197B87D0314D8A189843B2D8DA 验签成功,将动态数据明文中的IC卡动态数字存放在标签“9F4C”中。

 

国际算法的安全认证在ICC卡片规范PBOC3.0,第7部分有详细的讲解

===============================================================================================================

国密SM2算法:

 

步骤基本一致,但是由于SM2国密算法使用公钥(x,y),明文数据,s计算r,s的方式来进行验签,所以所有的证书以明文的形式保存,数据段保存公钥明文(同长度x,y)和同长度的(r,s)

DDA验签顺序同国际算法:CA公钥曲线点坐标验签Tag90,得到发卡行公钥曲线点坐标。

                                                使用发卡行公钥曲线点坐标验签Tag9F46,得到的s和Tag9F46中数字签名的s相等,则验签成功。

                                                使用Tag9F46 ICC公钥证书中的ICC公钥验签动态签名数据9F4B, 原理同证书验签办法。如果验签成功,将动态数据明文中的IC卡动态数字存放在标签“9F4C”中。

 

9F46格式(以明文形式存储在卡片中):

【PBOC卡片交易日志分析】DDA+fDDA_第4张图片

9F4B格式(以明文形式发送给pos终端):

【PBOC卡片交易日志分析】DDA+fDDA_第5张图片

 

例:

 

得到GPO命令返回值开始:

8016 7C00 0801020010010101100404002001020020050500

AIP : 7C00

AFL: 08010200 10010101 10040400 20010200 20050500   => DGI0101~DGI0102,DGI0201参与签名,DGI0204,DGI0401~DGI0402,DDGI0405

 

读DGI数据,得到:

DGI0101:

703C9F61182020202020202020202020202020202020202020202020209F6201005F201A2020202020202020202020202020202020202020202020202020

 

DGI0102:

703C9F61182020202020202020202020202020202020202020202020209F6201005F201A2020202020202020202020202020202020202020202020202020

 

DGI0201:

7081865F24032902285F25032402145A0A6217856200004385964F9F0702FF009F080200305F280201568E0C000000000000000002031F009F0D05D86004A8009F0E0500109800009F0F05D86804F8008C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F2103                     --静态签名数据

 

DGI0204:

70175F30020220 9F49 03 9F3704 5F3401019F1401009F230100              --9F49 DDOL

 

DGI0401:

70 8198 9F46 8194 146217856200004385964F123004A765040011407AF39195408C515AFC7F1DDE1520F246D184402554B60504FA6DF12D61EB6F64044817F2AFF054C70DF520CC8792006362E09B21700E6666AEF5F4C68CCDFEF1F5359AD36C405D8EB5F77F75F932F09F26D88B8D6BC9FB697683BE20AB35092169440EA902444010771B4FB9D0AB8195075DBF84AA3DF0B31D616FB835D816DF         --动态签名数据

 

DGI0402:

705C934313888874F4BC0D295425B47131445930B3DF7ACF8CEAA6F859AFAE6AD2B993E67A95825EFA25E7B3253A1113C0D0D4296585B33404B4EC7CB314371CA82E564F6FDDF2 9F4A 01 82 9F631030313034333332300000000000006000

 

DGI0405:

70 8194 90 818E 12621785FF1230000227040011407427A0CDF4EF9900662D719DC7701F2FBE12D505A58E35871D02C21CB45A0495191B65B7F3C253670EE30F75E2B84ED0DD4C04CABCB2FA9BCC8A0F44D8ECB16D183FB5A8584E3122DD82164052D1767A3516D1B225033706A35103095E172D05E59FE9F8C59361FA60B6F3DBC111FA75BE47CBC45B17115821CFD71EF4556825 8F 01 18             --90 IPK Certificate +8F CA index

 

参与DDA的tag已经用颜色标出

 

 

CA公钥RIDA000000333

从tag8F中得到CA公钥模长index为18

CA公钥曲线点x,y为(37710FEB7CC3617767874E85509C268E8F931D68773E93A89F39A4247DFE2D28,0FC5BC838353885B6DAD447C8F90116BD9D314047591989F67F319544D42A48B)

 

验证发卡行公钥证书90格式:(r||s长度 == CA x||y长度 )

12 621785FF 1230 000227 04 00 11 40 7427A0CDF4EF9900662D719DC7701F2FBE12D505A58E35871D02C21CB45A0495191B65B7F3C253670EE30F75E2B84ED0DD4C04CABCB2FA9BCC8A0F44D8ECB16D 183FB5A8584E3122DD82164052D1767A3516D1B225033706A35103095E172D05E59FE9F8C59361FA60B6F3DBC111FA75BE47CBC45B17115821CFD71EF4556825

 

使用CA公钥曲线点坐标,s:E59FE9F8C59361FA60B6F3DBC111FA75BE47CBC45B17115821CFD71EF4556825,待签名数据12621785FF1230000227040011407427A0CDF4EF9900662D719DC7701F2FBE12D505A58E35871D02C21CB45A0495191B65B7F3C253670EE30F75E2B84ED0DD4C04CABCB2FA9BCC8A0F44D8ECB16D

计算出R' = 183FB5A8584E3122DD82164052D1767A3516D1B225033706A35103095E172D05

与90证书中的数字签名r相等,验签成功

 

得到发卡行公钥曲线点坐标

 

x:7427A0CDF4EF9900662D719DC7701F2FBE12D505A58E35871D02C21CB45A0495

y:191B65B7F3C253670EE30F75E2B84ED0DD4C04CABCB2FA9BCC8A0F44D8ECB16D

 

验证ICC公钥证书9F46格式:

14 6217856200004385964F 1230 04A765 04 00 11 40 7AF39195408C515AFC7F1DDE1520F246D184402554B60504FA6DF12D61EB6F64044817F2AFF054C70DF520CC8792006362E09B21700E6666AEF5F4C68CCDFEF1 F5359AD36C405D8EB5F77F75F932F09F26D88B8D6BC9FB697683BE20AB35092169440EA902444010771B4FB9D0AB8195075DBF84AA3DF0B31D616FB835D816DF

 

使用发卡行公钥曲线点坐标,9F46中的数字签名S:69440EA902444010771B4FB9D0AB8195075DBF84AA3DF0B31D616FB835D816DF,

待签名数据(证书数据+静态签名数据):

146217856200004385964F123004A765040011407AF39195408C515AFC7F1DDE1520F246D184402554B60504FA6DF12D61EB6F64044817F2AFF054C70DF520CC8792006362E09B21700E6666AEF5F4C68CCDFEF15F24032902285F25032402145A0A6217856200004385964F9F0702FF009F080200305F280201568E0C000000000000000002031F009F0D05D86004A8009F0E0500109800009F0F05D86804F8008C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F21037C00加7C00是因为DGI中存在静态数据认证标签列表Tag9F4A)

验签得到R' = F5359AD36C405D8EB5F77F75F932F09F26D88B8D6BC9FB697683BE20AB350921

与9F46中恢复出来的数字签名r相等,验签成功

得到ICC公钥曲线点坐标:

x:7AF39195408C515AFC7F1DDE1520F246D184402554B60504FA6DF12D61EB6F64

y:044817F2AFF054C70DF520CC8792006362E09B21700E6666AEF5F4C68CCDFEF1

 

INTERNAL AUTHENTICATE得到 动态签名数据:

15 03 020005 0C578501A32F16BA70EFBD0BD38506453B89790830BE15E931E1CFE33D9EEC977DD1132AD48DF3AA2A8D393CE4567D7FE388DD3FEF570F8A8BFD51D9B1D1F8A9

 

使用ICC公钥曲线点坐标,动态签名数据中的数字签名S:7DD1132AD48DF3AA2A8D393CE4567D7FE388DD3FEF570F8A8BFD51D9B1D1F8A9

待签名数据:1503020005 4CC04CC0(追加部分为DDOL中数据)

眼前得到R'=0C578501A32F16BA70EFBD0BD38506453B89790830BE15E931E1CFE33D9EEC97,与动态签名数据中的数字签名r相等。

 

动态数据认证DDA成功

将ICC动态数字0005写入标签9F4C中

 

国密的安全认证(脱机数据认证,国密算法等)在ICC卡片规范PBOC3.0,第17部分有详细的讲解)

 

 

================================================可能需要注意的部分=========================

fDDA中大部分情况会在最后一条返回9F37(卡片随机数)

需要注意不要在最后一条数据中写入参与签名的静态数据,会将9F37也认为是需要参与签名的静态数据,9F46计算hash失败

BCTC建议q(fDDA时)最后一条DGI只返回9F74和9F37的数据,所以写入数据时最后一条DGI只存储tag9F74的数据

 

支持online ODA的qUICS应用,

对于申请联机授权请求(ARQC)时,使用SM算法的DDA hash算法算法计算签名所使用的签名数据格式设为A5

对于申请脱机授权接受(TC)时,使用SM算法的DDA hash算法计算签名所使用的签名数据格式为15

 

对于标准借贷记:

 

对于申请联机授权请求(ARQC)时,使用SM算法的DDA hash算法算法计算签名所使用的签名数据格式设为95

对于申请脱机授权接受(TC)时,使用SM算法的DDA hash算法计算签名所使用的签名数据格式为05

 

 

 

你可能感兴趣的:(PBOC,DDA,fDDA)