【PBOC卡片交易日志分析】SDA

来源:互联网 发布:oracle大数据查询优化 编辑:程序博客网 时间:2024/05/18 02:03

此篇文章重点讲解使用CA证书验证93中的静态签名数据

国际RSA算法

从GPO返回开始

  • 终端得到卡片AIP和AFL,通过AIP判断卡片行为,根据AFL读取卡片中的DGI。
  • 在读取的DGI中寻找Tag8F(CA index),9F32 CA公钥指数
  • 终端在CA列表中寻找index匹配的CA,从证书中恢复出CA公钥模长(文章之后有可能统一习惯简称为公钥)
  • 使用CA公钥验签Tag90(IPK Certificate),得到90明文
  • 验证90明文格式(如数据头,证书格式等)
  • 去掉90明文中前1字节和最后21字节(hash+数据结尾),追加Tag92(IPK reminder,如果存在)的value和公钥指数,计算SHA1,和90明文中的hash比较,不同的失败,相同则可以在90明文中得到IPK明文
  • 使用IPK验签tag93,得到93明文,验证93明文格式,并得到20字节的hash值
  • 将93明文去掉数据头(1字节),hash结果和恢复数据结尾(最后21字节),追加参与签名的卡片静态数据(在恢复出的DGI中,根据AFL判断)作为hash输入。使用sha1算法计算hash与93明文中的20字节hash比较,相同则SDA成功。
  • 注:AFL计算方法:AFL以4byte为一个单位,前两个字节表示SFI,3,4字节表示StartRecord,5,6字节表示EndRecord,7,8字节表示几条Record参与签名

90恢复出的明文的数据格式为:

93中恢复出的明文证书格式为:


例:
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

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

DGI0204:70 81E5 9F46 81B0 125AFB8CC907E783460062927E78E99B54131B1F4BFC58B4F7E077EDB8093910A5ED653596C54A3828FA67BB2DDFD5889D7FBF105BA01878E8C1CDBC21C3A7393964586EFD7A7284E0C5D6B734D317BE4A9911BDE02D5FE66E245AF2619F409EEBAF7912257584F854BF57FCAE135F4D1E16FBC922CAE13A891D1D14FD63D747971E486C2C2FE9DAF6E43400422A426F3C24B2E1246E1DFA789AC586E5243101D9C5FC4FCB47C2A87E433C059AF26135 9F47 01 03 9F48 2A F39080F4F0F4F9A5E068DCA5C03B372BF24CBDF6D93F59B7AC991A10486BC575000C5703607CB4D69CBD

DGI0301:70 8187 5A0862446801000000185F3401008E0C00000000000000001E031F009F0D05D86004A8009F0E0500100000009F0F05D86804F8005F24032210315F280203449F0702FF005F25031706019F4A01828C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F2103          --static signed data

DGI0302:700F5F300202229F080200309F42020344

DGI0401:70089F1401009F230100

得到和SDA相关的数据,已用颜色标出
根据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恢复正确

使用恢复出的发卡行公钥模长,发卡行公钥指数9F32 03验签93,得到93明文:
6A 03 01 DAC6 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB FB20A33DA2E8253A72FC4947BF9ABEE3F5B1AD09 BC

验证93明文格式正确,
hash输入为:03 01 DAC6 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB5A0862446801000000185F3401008E0C00000000000000001E031F009F0D05D86004A8009F0E0500100000009F0F05D86804F8005F24032210315F280203449F0702FF005F25031706019F4A01828C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F21037C00(追加7C00是因为DGI中存在静态数据认证标签列表Tag9F4A)

得到hash值为FB20A33DA2E8253A72FC4947BF9ABEE3F5B1AD09与93明文中hash值相等,SDA验证成功

将93明文中恢复得到的数据验证代码DAC6存放在标签9F45中


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

SM2国密算法

步骤基本一致,但是由于SM2国密算法使用公钥(x,y),明文数据,s计算r,s的方式来进行验签,所以90 IPK Certificate以明文的形式保存,数据段保存公钥明文(同长度x,y)和同长度的(r,s)
没有现成SM-SDA,验签证书的规则参考DDA文章:
SDA验签顺序同国际算法:CA公钥曲线点坐标验签Tag90,得到发卡行公钥曲线点坐标。
                                                使用发卡行公钥曲线点坐标验签Tag93,得到的s和Tag93中数字签名的s相等,则验签成功。将Tag93中的数据验证代码写到标签9F45中。
90中数据格式为:

93中数据格式为:



==================================================================================================================================
国密算法和国际算法的区别:
国密算法证书以明文形式存储,为标志位+公钥曲线点坐标明文(x,y)+数字签名(r,s),标志位+公钥曲线点坐标明文作为加密原数据输入,使用验签的公钥曲线点坐标和r,s作为输入进行验签,验签规则为新计算出来的R’=r,则验签成功(具体规则参考算法简介的文章,链接:http://blog.csdn.net/rachel_92/article/details/77318857),得到证书中的公钥曲线点坐标。

国际算法证书为密文形式存储,使用公钥模长和公钥指数恢复出证书明文,并通过验签hash值验证数据正确性,从而从得到证书中的公钥模长。

=================================================================================================================================
RSA算法下CA证书格式:
一半签名,一半不签名,从一半不签名的数据中获取N1(公钥模长)和E(公钥指数),用来对另外一半签名的数据进行验签,得到CA证书的所有明文,从而得到完整的公钥模长的公钥指数



阅读全文
0 0
原创粉丝点击