Регистрация FIDO UAF для Android
Я пытаюсь проверить возможности FIDO ( https://fidoalliance.org/) моего устройства Galaxy S6 с помощью приложения Android PoC. До сих пор мне удалось получить доступные аутентификаторы FIDO с помощью намерения DISCOVER, и он успешно возвратил аутентификатор отпечатков пальцев.
Однако, когда я пытаюсь зарегистрировать аутентификатор с помощью операции REGISTER FIDO, я всегда получаю код ошибки UNKNOWN (0xFF) и не знаю, в чем причина. В документации FIDO говорится, что этот код будет возвращен, если он не описан другими кодами ошибок 1-7. Я получил код ошибки 5 (Нет подходящего средства проверки подлинности), 6 (Ошибка протокола) и 7 (Идентификатор ненадежного фасета) во время проб и ошибок, но, в конце концов, после устранения причины их появления у меня остается только Неизвестная ошибка.
Я проверил несколько раз, но синтаксис в порядке с документами FIDO; оставив это и здесь:
Intent intent = new Intent();
intent.setAction("org.fidoalliance.intent.FIDO_OPERATION");
intent.setType("application/fido.uaf_client+json");
intent.putExtra("UAFIntentType", "UAF_OPERATION");
intent.putExtra("message", "{"additionalData":"Registration","uafProtocolMessage":"[{\"header\":{\"upv\":{\"major\":1,\"minor\":0},\"op\":\"Reg\",\"appID\":\"android:apk-key-hash:AcX+251ZfGFOzVVk1uQzgP16e2I\",\"serverData\":\"063de11c-153c-4cbe-ac74-fbe282feffac\"},\"challenge\":\"H9iW9yA9aAXF_lelQoi_DhUk514Ad8Tqv0zCnCqKDpo\",\"username\":\"joe\",\"policy\":{\"accepted\": [[{\"userVerification\": 2,\"keyProtection\": 6,\"tcDisplay\": 2,\"authenticationAlgorithms\":[1],\"assertionSchemes\":[\"UAFV1TLV\"]}]]}}]"}");
intent.putExtra("channelBindings", "{\"serverEndPoint\":null,\"tlsServerCertificate\":null,\"tlsUnique\":null,\"cid_pubkey\":null}");
Компонент попытался разрешить намерение следующим образом: ComponentInfo{com.sec.android.fido.uaf.client/com.sec.android.fido.uaf.client.OxygenActivity}, который, по-видимому, экспортируется в свой манифест:
<activity android:exported="true" android:label="@string/title_activity_oxygen" android:name="com.sec.android.fido.uaf.client.OxygenActivity" android:permission="org.fidoalliance.uaf.permissions.FIDO_CLIENT" android:screenOrientation="portrait" android:theme="@style/AppTheme">
<intent-filter>
<action android:name="org.fidoalliance.intent.FIDO_OPERATION"/>
<data android:mimeType="application/fido.uaf_client+json"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Кто-нибудь еще сталкивался и нашел решение для этого?
Примечание. То же самое было протестировано на Xperia Z5, и компонент пытался решить намерение "com.noknok.android.mfac.service". Однако на Z5 я всегда получаю код ошибки 6 (ошибка протокола), а не неизвестный.
2 ответа
Вы можете найти полезную информацию о FIDO и паролях на сайте passkeys.com . Я использовал его, и мне не потребовалось много времени, чтобы внедрить FIDO на свой веб-сайт. Я думаю, что их метод, описанный там, является самым простым и подробным. Я предполагаю, что на большинство ваших вопросов есть ответы там.
Вот образцы, которые я нашел для реализации FIDO с Android https://github.com/OwnID/ownid-android-sdk.
Я полагаю, что ваша заявка является клиентом Fido в соответствии со спецификациями.
Действительно, в galaxy S6 уже существует ASM + Authenticator, но его нельзя вызвать из вашего приложения. При создании Аутентификатора ASM + вы можете решить отвечать только определенному клиенту Fido. Именно так Samsung реализовал свой аутентификатор Galaxy S6. (вероятно, то же самое для Xperia).