最近再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

FIDO2.0 认证注册流程相关推荐

  1. Java实现Aligenie天猫精灵OAuth2.0认证授权流程

    由于对智能家居物联网比较感兴趣,之前参考电子发烧友上 小狂的教程,加上自己的想法,完善一版基于PHP的智能家居的设备平台实现, 且天猫精灵的开放性和功能是国内智能音箱中的佼佼者,于是准备用java重构 ...

  2. Ecovadis认证注册流程

    简介 EcoVadis于2007年在法国创立.是一个在线的企业社会责任CSR审计公司,通过评估供应商的CSR表现提供改善指导,提高企业竞争力与促进企业跨国合作,因其专业的一站式云服务而备受客户推崇. ...

  3. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  4. C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决

            最近在帮人弄一个豆瓣API应用,在豆瓣的OAuth2.0认证过程中遇到了各种问题,同时自己需要一个个的尝试与解决,最终完成了豆瓣API的访问.作者这里就不再吐槽豆瓣的认证文档了,毕竟人 ...

  5. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  6. AAA企业信用认证条件!AAA企业信用认证办理流程

    AAA企业信用认证条件!AAA企业信用认证办理流程 3A信用等级证书直接反应一个企业的整体诚信形象,目前国内各省市在项目招投标.融资贷款.政府采购.企业宣传等,均要求企业提供人行备案征信机构出具的企业 ...

  7. sip 协议注册流程

    本人主要用于工作笔记,如果有什么写的不对的地方欢迎大家批评指正,如有侵权,请联系本人.我写的是IP话机在注册到SIP服务器的流程. 什么是Sip? 两个话机需要通信,但是只知道对方的号码,这就需要一个 ...

  8. Spring Security OAuth2.0认证授权知识概括

    Spring Security OAuth2.0认证授权知识概括 安全框架基本概念 基于Session的认证方式 Spring Security简介 SpringSecurity详解 分布式系统认证方 ...

  9. IMS的注册流程分析

    IMS的基础常识: https://www.cnblogs.com/moon-lights/p/7018789.html http://www.360doc.com/content/15/0624/0 ...

最新文章

  1. 测试人员的独特价值体会
  2. 从 Android 静音看正确的查找 bug 的姿势
  3. Map的4种遍历方法
  4. pwn(ctf)中常见的系统调用
  5. linux测试怎样看,linux入门篇:如何查看centos版本
  6. leetcode 507. 完美数(Java版)
  7. 表白和被表白时遇到的骚操作,最后一个天秀!| 今日最佳
  8. 《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记
  9. 结合前段修改mysql表数据_jquery实现点击文字可编辑并修改保存至数据库
  10. leetcode83,删除有序链表中的重复元素
  11. qlineedit限制输入数字_Excel单元格限制录入,实用小技巧
  12. 用诗歌描写计算机课,小班诗歌公开课教案范文【3篇】
  13. python 正则表达式学习-group
  14. RTCM协议阅读——RTCM数据解析
  15. zabbix应用之详细的拓扑图标签--链路流量
  16. 怎么选择靠谱的IP地理位置定位产品?
  17. 一个总是令人记不住的vectorvectorPoint
  18. stm32中断优先级
  19. Unity支持GIF,零卡顿,秒解码
  20. opencv调用basler简单示例

热门文章

  1. linux远程kill进程
  2. tf.meshgrid
  3. [深度学习笔记(1)]深度学习入门
  4. 防火墙技术在计算机网络安全中的应用分析,计算机网络安全中防火墙技术的应用分析...
  5. CSDN 上如何设置「关注博主」即可阅读全文
  6. golang []byte转json和json转[]byte
  7. TextBox 单行文本框,多行文本框
  8. C#关键字扫盲——Sealed 密封
  9. C语言编写数独小游戏
  10. Android Handle用法