2

我有两个关于 Android FIDO U2F API 中的 appID 的问题。

是否可以使用 facetID 直接识别我的应用程序,或者它是否需要是指向包含有效 facetID 的 JSON 的 HTTPS URL?我怀疑可能无法直接使用 facetID 作为 appID(尽管官方 FIDO 规范应该允许这样做)。

我的另一个问题是关于识别我的应用程序的 facetID。官方 FIDO 规范为 Android 应用定义了 facetID ,如下所示:

在 Android [ANDROID] 案例中,FacetID 必须是从 APK 签名证书 [APK-Signing] 的 Base64 编码 SHA-1 哈希派生的 URI:

android:apk-key-hash:<base64_encoded_sha1_hash-of-apk-signing-cert>

当我查看 Google Samples 中的一个工作示例时,使用的 facetID 似乎包含其他内容。

有问题的 facetID(绝对不是 base64):

android:apk-key-hash:bkHnlWEV_jRCPdYGJfwOl7Sn_CLC_2TE3h4TO1_n34I

这是包含相关 facetID的JSON 。

如果 API 不期望 base64 编码的哈希,它期望什么格式(以及如何生成它)?

4

2 回答 2

0

正如已经指出的:谷歌使用 SHA256 哈希。

从您的密钥库中获取签名密钥的编码版本。

keytool -list -v -keystore <your.keystore> | grep "SHA256: " | cut -d " " -f 3 | xxd -r -p | openssl base64 | sed 's/=//g'
于 2019-12-10T04:59:50.247 回答
0

解决方案:

出于某种原因,Google 没有遵循 FIDO U2F 规范。计算 apk-signing-cert 的 SHA-256(不是每个 FIDO 规范的 SHA-1),然后计算 base64。然后删除最后的 = 字符。

于 2019-10-04T01:17:07.140 回答