Проблема с ответом регистратора iOS Fido2 BLE - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю аутентификатор iOS ble fido2.После получения запроса на регистрацию отправьте приведенный ниже ответ от регистра (аттестация NONE) в виде 3 блоков (размер фрагмента 101).Также удостоверился, что чаны принимаются успешно, но клиент webauthn не отправляет никаких ошибок / ack / никаких изменений пользовательского интерфейса не происходит.

В течение долгого времени сталкивался с этой проблемой.Не удалось выяснить, что не так с ответом ниже.

[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, 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, 16324, 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

1 Ответ

2 голосов
/ 24 сентября 2019

Я полагаю, что у вас MTU проблема с Bluetooth-связью

Допустим, это ответ на запрос аутентификации от клиента к аутентификатору

Размер составляет 1014 байтов, в то время как MTU составляет всего 101 байт (например).

Вам нужно разделить его на множество пакетов с размером пакета, равным 101 байту

8303F300A301667061636B65640258A4C46CEF82AD1B546477591D008B08759EC3E6D2ECB4F39474BFEA6969925D03B7450000000000112233445566778899AABBCCDDEEFF0020C04206F5430D6A902F2BFBDD063BD9FCE9FB68B10FC99DA93A01A51268D8

1017 * 00E690A501020326200121582016B52F38710D6C002E47F8A7DF3AFA388C784F1A336B4182C004E16C137F9C992258209504397DCD350EFEC42AB01AE39ABE64B7B7C52531B470D0FE10C1FEDBFB2E7203A363616C67266373696758473045022100ADF472
1019 * 01CC5BAB76EF5A8E23155525C74496C3E91EA81F0CFDDF2D353C2159BC78022052AC7BB3F403BE90C76BF7021FBE4FF909DB6319FE397C9897B4571172405CDE63783563815902E6308202E2308201CAA0030201020209009FA732A3246276C3300D06092A
1021 * 02864886F70D01010B0500306B310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310E300C060355040A0C05562D6B6579310B3009060355040B0C0250533121301F06035504030C184174746573
1023 * 03746174696F6E20497373756572202D2042414F301E170D3139303631343034333132385A170D3239303631313034333132385A308183310B3009060355040613025347310B300906035504080C025347310F300D06035504070C064C6F6E646F6E310C30
1025 * 040A060355040A0C0342414F31223020060355040B0C1941757468656E74696361746F72204174746573746174696F6E3124302206035504030C1B4174746573746174696F6E20636572746963617465202D2042414F3059301306072A8648CE3D02010608
1027 * 052A8648CE3D0301070342000470E8468E66B1234C67E7BC5348CA5B9F47CA321B0D2D367376C6DAFFB6283B7C7AF8E05B05784A1ABE7273AD77C6655E2BC86AD491A89F284FC72007A07592EEA33B3039301F0603551D230418301680145D556C2CC12DCD

062D0EAB8A62A01F875F5E499BDA30090603551D1304023000300B0603551D0F0404030204F0300D06092A864886F70D01010B050003820101004FD8C7397DAA3BA23987282466F10CA754A2CE6ADD223F70C0977D672A36CD9A15B6476077C31B5E3E7BFF

1031 * 07EB42D0EBCE819272A503B2710A1501B91E063B3DBAC79B3532AB063CA00EF7A644BE57BF2781710D93C50974CB209629135B1AE7904C56E6858FC3BD2F3DBBD90034D8A2B85E1A6EADCED52E62482B77739F1AB63391F1658E7BF3F7101C2665E2735E68
1033 * 08635F0DBC70BE50E519503D4739FAB1D424AF966BCCD1A1098756A4B2E91CA37B38777FE1394E2BC007248B4317FA90E72760A4BCC45A7F9A9BC79B2012F67EF7FEC3899A52B816D5BFD42CA47E8EAF58FDD5F873D4CD1C9B32CD0AD7392E8046712E9007
1035 * 09E1D7FEFBD3D0EF91A5B20A2E19

Обратите внимание, что есть порядковый номер в каждом пакете, то первые байты.

Для каждого пакета вы можете использовать этот метод:

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

Пожалуйста, проверьте результат, если он ЛОЖЬ, этот метод должен называться

func peripheralManagerIsReady(toUpdateSubscribers peripheral: CBPeripheralManager)

Продолжайте отправлять остальные пакеты

...