FIDO2.0 认证注册流程

最近再JAVACARD上实现了FIDO2的认证和注册,

难点主要在于CBOR数据在JAVACARD中的解析和打包,其他没啥。

已经再FIDO官网测试通过。

FIDO2注册加解密主要流程
1,设备个人化写入私钥到Token中
2,用写入的私钥对数据进行签名返回,同时Token产生用户公私,公钥一起返回
3,客户端应该存有Token中私钥对应的公钥
4,客户端用公钥验证返回的签名,完成注册流程
 

注册流程解析

90100000F001
    
A4015820153AD15237F5E44892F9C82E
DAF35707CCD40374FF3CD6BC1F3BD3B6CB8EF4C202A26269646B776562617574
686E2E696F646E616D656B776562617574686E2E696F03A36269644AE4FF0800
000000000000646E616D65646669646F6B646973706C61794E616D6564666964
6F048AA263616C672664747970656A7075626C69632D6B6579A263616C673822
64747970656A7075626C69632D6B6579A263616C67382364747970656A707562
6C69632D6B6579A263616C6739010064747970656A7075626C69632D6B6579A2
63616C6739010164747970656A7075626C69632D6B6579A263616C67390102
64747970656A7075626C69632D6B6579A2
63616C67382464747970656A7075626C69632D6B6579A263616C673825647479
70656A7075626C69632D6B6579A263616C67382664747970656A7075626C6963
2D6B6579A263616C672764747970656A7075626C69632D6B6579

// clientDataHash  FIDO1 (challenge parameter [32 bytes])
153AD15237F5E44892F9C82EDAF35707CCD40374FF3CD6BC1F3BD3B6CB8EF4C2 

            
00A301667061636B65640258C474A6EA9213C99C2F74
B22492B320CF40262A94C1A950A0397F29250B60841EF041000000536D44BA9B
F6EC2E49B9300C8FE920CB730040F954EA407F260B6F6B9B9A21F28153119EF8
8299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB900723
03AEAA19D5CC9DDAE8CB6C3C93
40A5010203262001215820162B29FA8B5751F3388DB0AED7D3EFE31BB5CA0EB3
91B728B2555D38013EAF05225820465EBD28BD89E277D2C3D356D95952D36B3B
4743F72F77EA5C0928E1F2DF248103A363616C6726637369675846304402206A
C335BFD5CD0E491014BBF91757812F897A3468D7354F559E888FCD7935174102
20484A2E21660D5675C982D6AD6FE6CEFB5BEB82EFB637DA340E9C9A69FF1574
D463783563815902C1308202BD308201A5A00302010202042AE76263300D0609
2A864886F70D01010B0500302E312C302A0603550403132359756269636F2055
324620526F6F742043412053657269616C203435373230303633313020170D31
34303830313030303030305A180F32303530303930343030303030305A306E31
0B300906035504061302534531123010060355040A0C0959756269636F204142
31223020060355040B0C1941757468656E74696361746F722041747465737461
74696F6E3127302506035504030C1E59756269636F2055324620454520536572
69616C203731393830373037353059301306072A8648CE3D020106082A8648CE
3D030107034200042A03865E6043D99E11FF10AA25545784BF09AF8E6B1E3B32
1729216F55121A8CD910D399DDC768BDFE4A7BC7E3DABC62E6D2469FF5675B8F
FA890CCA74869E3FA36C306A302206092B0601040182C40A020415312E332E36
2E312E342E312E34313438322E312E313013060B2B0601040182E51C02010104
04030204303021060B2B0601040182E51C010104041204106D44BA9BF6EC2E49
B9300C8FE920CB73300C0603551D130101FF04023000300D06092A864886F70D
01010B050003820101007257D03CDCC3E115698490D6F80EF95B53072373D9E6
4732632B11DCDC778AEC6BD5926D07E17B9C5430788DE32F4E47B45876FF8C55
22029BE9387879572331E7277016828A711B39C74FD6C1258BD1E4D9E566D570
790347DA5235C03F0FFE40B1428E05C6E91799E47554716901EEB88BB0578935
88AD88AAD30D714F2F2FAC36D54DBAD7109C5B027AB0CAB8CF354EF1008A0908
6CA08696AF0CFCDBC18398FCDF02316C2622C95EE622BDD1C00A4789E4A1CCB7
49A354BA5F27604230BEFFAE06E6BF02FBC015BCD151DF35D70A98A8E42DCA44
88FCF071042188DFEA1D5F74B7EA788B2AF9C514A9BAB94FE7389CDA195190B2
B1307DBF9118E1A929F8
                
A3                                      # map(3)
   01                                   # unsigned(1)
   66                                   # text(6)
      7061636B6564                      # "packed"
   02                                   # unsigned(2)
   58 C4                                # bytes(196)
      74A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29250B60841EF041000000536D44BA9BF6EC2E49B9300C8FE920CB730040F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C9340A5010203262001215820162B29FA8B5751F3388DB0AED7D3EFE31BB5CA0EB391B728B2555D38013EAF05225820465EBD28BD89E277D2C3D356D95952D36B3B4743F72F77EA5C0928E1F2DF2481 # "t\xA6\xEA\x92\x13\xC9\x9C/t\xB2$\x92\xB3 \xCF@&*\x94\xC1\xA9P\xA09\x7F)%\v`\x84\x1E\xF0A\x00\x00\x00SmD\xBA\x9B\xF6\xEC.I\xB90\f\x8F\xE9 \xCBs\x00@\xF9T\xEA@\x7F&\vok\x9B\x9A!\xF2\x81S\x11\x9E\xF8\x82\x99\xA0\x95&`V\"\xB7N\xAF\xB3\xF0 R\xB1\xDB\xE6\x01I\xC4Us\xCDUV\xDE\xCB\xEB\x90\a#\x03\xAE\xAA\x19\xD5\xCC\x9D\xDA\xE8\xCBl<\x93@\xA5\x01\x02\x03& \x01!X \x16+)\xFA\x8BWQ\xF38\x8D\xB0\xAE\xD7\xD3\xEF\xE3\e\xB5\xCA\x0E\xB3\x91\xB7(\xB2U]8\x01>\xAF\x05\"X F^\xBD(\xBD\x89\xE2w\xD2\xC3\xD3V\xD9YR\xD3k;GC\xF7/w\xEA\\\t(\xE1\xF2\xDF$\x81"
   03                                   # unsigned(3)
   A3                                   # map(3)
      63                                # text(3)
         616C67                         # "alg"
      26                                # negative(6)
      63                                # text(3)
         736967                         # "sig"
      58 46                             # bytes(70)   //sign = perso ecc private key {00 + application parameter [32 bytes] +  clientDataHash  FIDO1 (challenge parameter [32 bytes]) + //key handle + user public key(65 bytes)}
         304402206AC335BFD5CD0E491014BBF91757812F897A3468D7354F559E888FCD793517410220484A2E21660D5675C982D6AD6FE6CEFB5BEB82EFB637DA340E9C9A69FF1574D4 # "0D\x02 j\xC35\xBF\xD5\xCD\x0EI\x10\x14\xBB\xF9\x17W\x81/\x89z4h\xD75OU\x9E\x88\x8F\xCDy5\x17A\x02 HJ.!f\rVu\xC9\x82\xD6\xADo\xE6\xCE\xFB[\xEB\x82\xEF\xB67\xDA4\x0E\x9C\x9Ai\xFF\x15t\xD4"
      63                                # text(3)
         783563                         # "x5c"
      81                                # array(1)
         59 02C1                        # bytes(705)
            308202BD308201A5A00302010202042AE76263300D06092A864886F70D01010B0500302E312C302A0603550403132359756269636F2055324620526F6F742043412053657269616C203435373230303633313020170D3134303830313030303030305A180F32303530303930343030303030305A306E310B300906035504061302534531123010060355040A0C0959756269636F20414231223020060355040B0C1941757468656E74696361746F72204174746573746174696F6E3127302506035504030C1E59756269636F205532462045452053657269616C203731393830373037353059301306072A8648CE3D020106082A8648CE3D030107034200042A03865E6043D99E11FF10AA25545784BF09AF8E6B1E3B321729216F55121A8CD910D399DDC768BDFE4A7BC7E3DABC62E6D2469FF5675B8FFA890CCA74869E3FA36C306A302206092B0601040182C40A020415312E332E362E312E342E312E34313438322E312E313013060B2B0601040182E51C0201010404030204303021060B2B0601040182E51C010104041204106D44BA9BF6EC2E49B9300C8FE920CB73300C0603551D130101FF04023000300D06092A864886F70D01010B050003820101007257D03CDCC3E115698490D6F80EF95B53072373D9E64732632B11DCDC778AEC6BD5926D07E17B9C5430788DE32F4E47B45876FF8C5522029BE9387879572331E7277016828A711B39C74FD6C1258BD1E4D9E566D570790347DA5235C03F0FFE40B1428E05C6E91799E47554716901EEB88BB057893588AD88AAD30D714F2F2FAC36D54DBAD7109C5B027AB0CAB8CF354EF1008A09086CA08696AF0CFCDBC18398FCDF02316C2622C95EE622BDD1C00A4789E4A1CCB749A354BA5F27604230BEFFAE06E6BF02FBC015BCD151DF35D70A98A8E42DCA4488FCF071042188DFEA1D5F74B7EA788B2AF9C514A9BAB94FE7389CDA195190B2B1307DBF9118E1A929F8 # "0\x82\x02\xBD0\x82\x01\xA5\xA0\x03\x02\x01\x02\x02\x04*\xE7bc0\r\x06\t*\x86H\x86\xF7\r\x01\x01\v\x05\x000.1,0*\x06\x03U\x04\x03\x13#Yubico U2F Root CA Serial 4572006310 \x17\r140801000000Z\x18\x0F20500904000000Z0n1\v0\t\x06\x03U\x04\x06\x13\x02SE1\x120\x10\x06\x03U\x04\n\f\tYubico AB1\"0 \x06\x03U\x04\v\f\x19Authenticator Attestation1'0%\x06\x03U\x04\x03\f\x1EYubico U2F EE Serial 7198070750Y0\x13\x06\a*\x86H\xCE=\x02\x01\x06\b*\x86H\xCE=\x03\x01\a\x03B\x00\x04*\x03\x86^`C\xD9\x9E\x11\xFF\x10\xAA%TW\x84\xBF\t\xAF\x8Ek\x1E;2\x17)!oU\x12\x1A\x8C\xD9\x10\xD3\x99\xDD\xC7h\xBD\xFEJ{\xC7\xE3\xDA\xBCb\xE6\xD2F\x9F\xF5g[\x8F\xFA\x89\f\xCAt\x86\x9E?\xA3l0j0\"\x06\t+\x06\x01\x04\x01\x82\xC4\n\x02\x04\x151.3.6.1.4.1.41482.1.10\x13\x06\v+\x06\x01\x04\x01\x82\xE5\x1C\x02\x01\x01\x04\x04\x03\x02\x0400!\x06\v+\x06\x01\x04\x01\x82\xE5\x1C\x01\x01\x04\x04\x12\x04\x10mD\xBA\x9B\xF6\xEC.I\xB90\f\x8F\xE9 \xCBs0\f\x06\x03U\x1D\x13\x01\x01\xFF\x04\x020\x000\r\x06\t*\x86H\x86\xF7\r\x01\x01\v\x05\x00\x03\x82\x01\x01\x00rW\xD0<\xDC\xC3\xE1\x15i\x84\x90\xD6\xF8\x0E\xF9[S\a#s\xD9\xE6G2c+\x11\xDC\xDCw\x8A\xECk\xD5\x92m\a\xE1{\x9CT0x\x8D\xE3/NG\xB4Xv\xFF\x8CU\"\x02\x9B\xE98xyW#1\xE7'p\x16\x82\x8Aq\e9\xC7O\xD6\xC1%\x8B\xD1\xE4\xD9\xE5f\xD5py\x03G\xDAR5\xC0?\x0F\xFE@\xB1B\x8E\x05\xC6\xE9\x17\x99\xE4uTqi\x01\xEE\xB8\x8B\xB0W\x895\x88\xAD\x88\xAA\xD3\rqO//\xAC6\xD5M\xBA\xD7\x10\x9C[\x02z\xB0\xCA\xB8\xCF5N\xF1\x00\x8A\t\bl\xA0\x86\x96\xAF\f\xFC\xDB\xC1\x83\x98\xFC\xDF\x021l&\"\xC9^\xE6\"\xBD\xD1\xC0\nG\x89\xE4\xA1\xCC\xB7I\xA3T\xBA_'`B0\xBE\xFF\xAE\x06\xE6\xBF\x02\xFB\xC0\x15\xBC\xD1Q\xDF5\xD7\n\x98\xA8\xE4-\xCAD\x88\xFC\xF0q\x04!\x88\xDF\xEA\x1D_t\xB7\xEAx\x8B*\xF9\xC5\x14\xA9\xBA\xB9O\xE78\x9C\xDA\x19Q\x90\xB2\xB10}\xBF\x91\x18\xE1\xA9)\xF8"


//authData   
rpid sha256(RPId)  =   application parameter [32 bytes] 
74A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29250B60841EF0

//Falg
41

//counter
00000053

//aaguid 16bytes perso data
6D44BA9BF6EC2E49B9300C8FE920CB73

//A key handle length byte [2 byte],
0040

//key handle 
F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C9340 

/A user public key [].  here is X Y format
A5010203262001215820 162B29FA8B5751F3388DB0AED7D3EFE31BB5CA0EB391B728B2555D38013EAF05 225820 465EBD28BD89E277D2C3D356D95952D36B3B4743F72F77EA5C0928E1F2DF2481

sign = perso ecc private key {00 + application parameter [32 bytes] +  clientDataHash  FIDO1 (challenge parameter [32 bytes]) + //key handle + user public key(65 bytes)}
0074A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29250B60841EF0153AD15237F5E44892F9C82EDAF35707CCD40374FF3CD6BC1F3BD3B6CB8EF4C2F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C9340304402206AC335BFD5CD0E491014BBF91757812F897A3468D7354F559E888FCD793517410220484A2E21660D5675C982D6AD6FE6CEFB5BEB82EFB637DA340E9C9A69FF1574D4
 

FIDO2认证流程:

1,输入clientDataHash和credentialId

2,Token返回credentialId 和签名数据的明文,签名数据


2,认证流程

801000009002
A4016B776562617574686E2E696F025820620C587F03F86FED4F69CC04D12BFC57F79A8AB3E07B350E9A60DB3E64D8BF560381A26269645840F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C934064747970656A7075626C69632D6B657905A1627570F400

A4                                      # map(4)
   01                                   # unsigned(1)
   6B                                   # text(11)
      776562617574686E2E696F            # "webauthn.io"
   02                                   # unsigned(2)
   58 20                                # bytes(32)  // clientDataHash     FIDO1 (challenge parameter [32 bytes]).  
      620C587F03F86FED4F69CC04D12BFC57F79A8AB3E07B350E9A60DB3E64D8BF56 
   03                                   # unsigned(3)
   81                                   # array(1)
      A2                                # map(2)
         62                             # text(2)
            6964                        # "id"
         58 40                          # bytes(64)  //A key handle    credentialId
            F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C9340 
         64                             # text(4)
            74797065                    # "type"
         6A                             # text(10)
            7075626C69632D6B6579        # "public-key"
   05                                   # unsigned(5)
   A1                                   # map(1)
      62                                # text(2)
         7570                           # "up"
      F4                                # primitive(20)
    
00A301A26269645840F954EA407F260B6F6B9B9A21F2
8153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DE
CBEB90072303AEAA19D5CC9DDAE8CB6C3C934064747970656A7075626C69632D
6B657902582574A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29
250B60841EF0 00 00000054 035846304402204E37B0090281324E0F67A6DCD647
E9203621F94B22AC832A78F62FFDFA12B7A302201EFE9DC5EBFE5269F4BBE881
669881FEF4D457C19BEBF5323A77006C6F4B509E  9000
    

A3                                      # map(3)
   01                                   # unsigned(1)
   A2                                   # map(2)
      62                                # text(2)
         6964                           # "id"
      58 40                             # bytes(64)   //A key handle    credentialId
         F954EA407F260B6F6B9B9A21F28153119EF88299A09526605622B74EAFB3F02052B1DBE60149C45573CD5556DECBEB90072303AEAA19D5CC9DDAE8CB6C3C9340 
      64                                # text(4)
         74797065                       # "type"
      6A                                # text(10)
         7075626C69632D6B6579           # "public-key"
   02                                   # unsigned(2)
   58 25                                # bytes(37)    //rpid sha256(RPId)  =   application parameter [32 bytes] + flag + counter
      74A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29250B60841EF0 00 00000054 
   03                                   # unsigned(3)
   58 46                                # bytes(70)   // sign = user private { signature=rpid sha256(RPId) application parameter [32 bytes] + user present + counter + // clientDataHash     FIDO1 (challenge parameter [32 bytes]).}
      304402204E37B0090281324E0F67A6DCD647E9203621F94B22AC832A78F62FFDFA12B7A302201EFE9DC5EBFE5269F4BBE881669881FEF4D457C19BEBF5323A77006C6F4B509E 
    
    signature input data :rpid sha256(RPId) application parameter [32 bytes] + user present + counter + clientDataHash FIDO1 (challenge parameter [32 bytes]).}
   74A6EA9213C99C2F74B22492B320CF40262A94C1A950A0397F29250B60841EF0 + 00 + 00000054 + 620C587F03F86FED4F69CC04D12BFC57F79A8AB3E07B350E9A60DB3E64D8BF56
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值