0

我正在构建一个 iOS ble fido2 身份验证器。收到注册请求后,将以下注册响应(NONE 证明)作为 3 个块(块大小 101)发送。还确保成功接收到块但是 webauthn 客户端没有发送任何错误/确认/没有 ui 更改发生。

被这个问题困扰了很久。无法找出以下响应出了什么问题。

[131、0、237、0、163、1、100、110、111、110、101、2、88、224、116、166、234、146、19、201、156、47、116、178、36 , 146, 179, 32, 207, 64, 38, 42, 148, 193, 169, 80, 160, 57, 127, 41, 37, 11, 96, 132, 30, 240, 69, 217, 93, 96 , 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 51, 85, 191, 68, 43, 240, 76 , 144, 137, 91, 65, 40, 160, 206, 219, 169, 96, 183, 153, 21, 21, 63, 46, 204, 106, 131, 137, 30, 106, 102, 13, 92 , 99, 165, 1, 2, 3, 38, 32, 1, 33, 152, 32, 24, 138, 24, 231, 24, 213, 24, 124, 24, 203, 24, 71, 24, 212 , 24, 46, 16, 24, 184, 24, 207, 24, 210, 24, 170, 24, 59, 24, 99, 24, 39, 24, 250, 24, 81, 24, 98, 24, 27 , 24, 25, 24, 39, 24, 75, 24, 202, 24, 62, 24, 163, 24, 64, 24, 126, 24, 214, 24, 63, 24, 247, 24, 197, 34 , 152, 32, 12, 24, 214, 24, 121, 24, 78, 24, 132, 24, 152, 24, 104, 12, 18, 24, 120, 24, 156, 24, 177, 24, 101 , 24, 45, 24,227、24、177、24、213、24、151、24、76、24、136、24、121、24、39、24、47、24、153、24、196、24、24、24、100、 24、82、24、163、24、83、24、193、24、38、3、160]

[131, 0, 237, 0, ......] 131 => msg 0 => LLen 237 => HLen 0 => 成功后跟 authData ....

AUTHDATA (224 字节) [116, 166, 234, 146, 19, 201, 156, 47, 116, 178, 36, 146, 179, 32, 207, 64, 38, 42, 148, 193, 169, 80, 160, 57, 127, 41, 37, 11, 96, 132, 30, 240, 69, 217, 93, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 51, 85, 191, 68, 43, 240, 76, 144, 137, 91, 65, 40, 160, 206, 219, 169, 96, 183, 153, 21, 21, 63, 46, 204, 106, 131, 137, 30, 106, 102, 13, 92, 99, 165, 1, 2, 3, 38, 32, 1, 33, 152, 32, 24, 138, 24, 231, 24, 213, 24, 124, 24, 203, 24, 71, 24, 212, 24, 46, 16, 24, 184, 24, 207, 24, 210, 24, 170, 24, 59, 24, 99, 24, 39, 24, 250, 24, 81, 24, 98, 24, 27, 24, 25, 24, 39, 24, 75, 24, 202, 24, 62, 24, 163、24、64、24、126、24、214、24、63、24、247、24、197、34、152、32、12、24、214、24、121、24、78、24、132、 24, 152, 24, 104, 12, 18, 24, 120, 24, 156, 24, 177, 24, 101, 24, 45, 24, 227, 24, 177, 24, 213, 24, 151, 24,76, 24, 136, 24, 121, 24, 39, 24, 47, 24, 153, 24, 196, 24, 24, 24, 100, 24, 82, 24, 163, 24, 83, 24, 193, 24, 38]

1. RPID => [116, 166, 234, 146, ..., 240] position: {0 - 31} 32 BYTES
2. Flags => [69] position: {32} 1 BYTE
3. Counter => [217, 93, 96, 1] position: {33 - 36} 4 BYTES
4. Attestation Cred Data=> below

证明凭证数据(187 字节) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 51, 85, 191, 68, 43、240、76、144、137、91、65、40、160、206、219、169、96、183、153、21、21、63、46、204、106、131、137、30、106、 102, 13, 92, 99, 165, 1, 2, 3, 38, 32, 1, 33, 152, 32, 24, 138, 24, 231, 24, 213, 24, 124, 24, 203, 24, 71, 24, 212, 24, 46, 16, 24, 184, 24, 207, 24, 210, 24, 170, 24, 59, 24, 99, 24, 39, 24, 250, 24, 81, 24, 98, 24, 27, 24, 25, 24, 39, 24, 75, 24, 202, 24, 62, 24, 163, 24, 64, 24, 126, 24, 214, 24, 63, 24, 247, 24, 197, 34, 152, 32, 12, 24, 214, 24, 121, 24, 78, 24, 132, 24, 152, 24, 104, 12, 18, 24, 120, 24, 156, 24, 177、24、101、24、45、24、227、24、177、24、213、24、151、24、76、24、136、24、121、24、39、24、47、24、153、 24、196、24、24、24、100、24、82、24、163、24、83、24、193、24、38]

1. AAGUID => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] position: {0 - 15} 16 BYTES
2. CredID len => [32] position: {17} 2 BYTES
3. CredID => [51, 85, 191, ... 92] position: {18....48} 32 BYTES
4. PubKey => [99, 165, ..., 38] position: {18....48} 138 BYTES
4

1 回答 1

2

我相信你在蓝牙通信中遇到了MTU问题

假设这是从身份验证器到客户端的凭据响应

8303F300A301667061636B65640258A4C46CEF82AD1B546477591D008B08759EC3E6D2ECB4F39474BFEA6969925D03B7450000000000112233445566778899AABBCCDDEEFF0020C04206F5430D6A902F2BFBDD063BD9FCE9FB68B10FC99DA93A01A51268D8E690A501020326200121582016B52F38710D6C002E47F8A7DF3AFA388C784F1A336B4182C004E16C137F9C992258209504397DCD350EFEC42AB01AE39ABE64B7B7C52531B470D0FE10C1FEDBFB2E7203A363616C67266373696758473045022100ADF472CC5BAB76EF5A8E23155525C74496C3E91EA81F0CFDDF2D353C2159BC78022052AC7BB3F403BE90C76BF7021FBE4FF909DB6319FE397C9897B4571172405CDE63783563815902E6308202E2308201CAA0030201020209009FA732A3246276C3300D06092A864886F70D01010B0500306B310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310E300C060355040A0C05562D6B6579310B3009060355040B0C0250533121301F06035504030C184174746573746174696F6E20497373756572202D2042414F301E170D3139303631343034333132385A170D3239303631313034333132385A308183310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310C300A060355040A0C0342414F31223020060355040B0C1941757468656E74696361746F72204174746573746174696F6E3124302206035504030C1B4174746573746174696F6E20636572746963617465202D2042414F3059301306072A8648CE3D020106082A8648CE3D0301070342000470E8468E66B1234C67E7BC5348CA5B9F47CA321B0D2D367376C6DAFFB6283B7C7AF8E05B05784A1ABE7273AD77C6655E2BC86AD491A89F284FC72007A07592EEA33B3039301F0603551D230418301680145D556C2CC12DCD2D0EAB8A62A01F875F5E499BDA30090603551D1304023000300B0603551D0F0404030204F0300D06092A864886F70D01010B050003820101004FD8C7397DAA3BA23987282466F10CA754A2CE6ADD223F70C0977D672A36CD9A15B6476077C31B5E3E7BFFEB42D0EBCE819272A503B2710A1501B91E063B3DBAC79B3532AB063CA00EF7A644BE57BF2781710D93C50974CB209629135B1AE7904C56E6858FC3BD2F3DBBD90034D8A2B85E1A6EADCED52E62482B77739F1AB63391F1658E7BF3F7101C2665E2735E68635F0DBC70BE50E519503D4739FAB1D424AF966BCCD1A1098756A4B2E91CA37B38777FE1394E2BC007248B4317FA90E72760A4BCC45A7F9A9BC79B2012F67EF7FEC3899A52B816D5BFD42CA47E8EAF58FDD5F873D4CD1C9B32CD0AD7392E8046712E9007E1D7FEFBD3D0EF91A5B20A2E19

大小为 1014 字节,而 MTU 仅为 101 字节(例如)。

您要做的就是将其拆分为多个数据包大小为 101 字节的数据包

8303F300A301667061636B65640258A4C46CEF82AD1B546477591D008B08759EC3E6D2ECB4F39474BFEA6969925D03B7450000000000112233445566778899AABBCCDDEEFF0020C04206F5430D6A902F2BFBDD063BD9FCE9FB68B10FC99DA93A01A51268D8

00E690A501020326200121582016B52F38710D6C002E47F8A7DF3AFA388C784F1A336B4182C004E16C137F9C992258209504397DCD350EFEC42AB01AE39ABE64B7B7C52531B470D0FE10C1FEDBFB2E7203A363616C67266373696758473045022100ADF472

01CC5BAB76EF5A8E23155525C74496C3E91EA81F0CFDDF2D353C2159BC78022052AC7BB3F403BE90C76BF7021FBE4FF909DB6319FE397C9897B4571172405CDE63783563815902E6308202E2308201CAA0030201020209009FA732A3246276C3300D06092A

02864886F70D01010B0500306B310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310E300C060355040A0C05562D6B6579310B3009060355040B0C0250533121301F06035504030C184174746573

03746174696F6E20497373756572202D2042414F301E170D3139303631343034333132385A170D3239303631313034333132385A308183310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310C30

040A060355040A0C0342414F31223020060355040B0C1941757468656E74696361746F72204174746573746174696F6E3124302206035504030C1B4174746573746174696F6E20636572746963617465202D2042414F3059301306072A8648CE3D02010608

052A8648CE3D0301070342000470E8468E66B1234C67E7BC5348CA5B9F47CA321B0D2D367376C6DAFFB6283B7C7AF8E05B05784A1ABE7273AD77C6655E2BC86AD491A89F284FC72007A07592EEA33B3039301F0603551D230418301680145D556C2CC12DCD

062D0EAB8A62A01F875F5E499BDA30090603551D1304023000300B0603551D0F0404030204F0300D06092A864886F70D01010B050003820101004FD8C7397DAA3BA23987282466F10CA754A2CE6ADD223F70C0977D672A36CD9A15B6476077C31B5E3E7BFF

07EB42D0EBCE819272A503B2710A1501B91E063B3DBAC79B3532AB063CA00EF7A644BE57BF2781710D93C50974CB209629135B1AE7904C56E6858FC3BD2F3DBBD90034D8A2B85E1A6EADCED52E62482B77739F1AB63391F1658E7BF3F7101C2665E2735E68

08635F0DBC70BE50E519503D4739FAB1D424AF966BCCD1A1098756A4B2E91CA37B38777FE1394E2BC007248B4317FA90E72760A4BCC45A7F9A9BC79B2012F67EF7FEC3899A52B816D5BFD42CA47E8EAF58FDD5F873D4CD1C9B32CD0AD7392E8046712E9007

09E1D7FEFBD3D0EF91A5B20A2E19

请注意,每个数据包中都有一个序列号,即第一个字节。

对于每个数据包,您可以使用以下方法:

result = peripheralManager.updateValue(packet, for: <...>, onSubscribedCentrals: <...>)

请务必检查结果,如果为 FALSE,则应调用此方法

func peripheralManagerIsReady(toUpdateSubscribers peripheral: CBPeripheralManager)

继续发送其余数据包

于 2019-09-24T08:19:31.900 回答