问题标签 [safetynet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
465 浏览

google-cloud-platform - “Android 设备验证”服务配额使用情况

我正在使用Android 设备验证服务(SafetyNet 的证明 api)来验证请求是否来自我构建的同一个应用程序。

对于我们可以使用 SafetyNet 的 attestation api 执行的请求数量,我们有 10,000 的配额限制(可以增加)。

现在,我想知道我的限制是否被违反,以便我可以停止使用该 API。为此,我正在研究堆栈驱动程序警报,但在其中找不到Android 设备验证服务。(即使我能够在Quotas中找到它)

0 投票
0 回答
96 浏览

android - FIDO2 MAKE_CREDENTIAL 响应问题

我正在开发 FIDO2 Android 身份验证器。我刚刚收到来自 webauthn 客户端的 MAKE_CREDENTIAL 请求。接着

  1. 创建的凭据数据包括 AAGUID、凭据长度、凭据 ID、公钥。
  2. 公钥将包含曲线名称、算法名称、密钥类型、x 和 y 坐标。
  3. 然后我形成了 Auth Data,其中包括 rpIdHash、flags、signCount 和 attested Credential 数据。
  4. 然后我将所有这些数据以 MSG、LLEN、HLEN、DATA 格式逐块发送到 webauthn 客户端卡盘。

    {“fmt”:“android-safetynet”,“authData”:“9569088f1ecee……”,“attStmt”:{“ver”:“14366019”,“响应”:“65794a68624763……”}}

我正在使用上述格式的 Android SafetyNet 证明。但是我没有得到 webauthn 服务器的任何响应。我使用 ANDROID_ID(制造商 ID)作为 AAGUID。这是对的吗?

我分析并调试了我的代码。我找不到任何问题。请帮助我继续流程。

0 投票
1 回答
128 浏览

android - Android reCaptcha 强制纵向定向

我正在开发一个需要使用 reCaptcha 验证用户的 Android 应用程序,但我遇到了奇怪的行为:如果屏幕方向为横向,则点击触发 reCaptcha API 方向的按钮将变为纵向,然后再返回横向。

有办法解决这个问题吗?我没有找到任何有关此的文档...

这是来自 SafetyNet 库的 API:

版本:

0 投票
1 回答
162 浏览

android - 从 Play 商店下载时出现安全网 Api 错误

我在启动应用程序时实施了 SafetyNet 证明检查。当我从 Android Studio 运行发布版本并正确检测(例如)来自设备的模拟器时,它工作正常。但是,当我从 Play 商店下载相同版本时,它每次都会在许多合法设备上触发失败侦听器。

它是一个受限制的 API,在这些相同的设备上本地运行时可以正常工作。

如果你检查图像,33.75% 的错误率是我在 Play 商店中使用的。 截屏 知道在从 Play 商店下载的应用程序中运行时使用相同的代码会发生什么不同吗?

0 投票
0 回答
390 浏览

android - Apple DeviceCheck 是否仍然适用于越狱的 iPhone?

简单的问题,没什么大不了的。

我正在尝试通过验证由 Android SafetyNet 和 Apple DeviceCheck 生成的后端令牌来保护 React-Native 应用程序。然后,在设备通过后端的证明/设备检查后,我创建 API 的访问令牌。

我的问题是,尽管设备已越狱,黑客是否可以绕过 Apple 的 DeviceCheck(和 Google 的 SafetyNet)并仍然从 Apple 的 API 生成有效令牌?

0 投票
1 回答
1587 浏览

node.js - 可靠地验证 JWS 证书链和域

我正在编写后端代码来验证来自 Google 的 SafetyNet API 的 JWS,在 Node.JS 中。我很惊讶没有找到一个现成的模块,所以我开始研究使用可用库对 JWS 的一些简单验证:

首先,谷歌说这些是所需的步骤:

  1. 从 JWS 消息中提取 SSL 证书链。
  2. 验证 SSL 证书链并使用 SSL 主机名匹配来验证叶证书是否已颁发给主机名 attest.android.com。
  3. 使用证书来验证 JWS 消息的签名。
  4. 检查 JWS 消息的数据以确保它与您的原始请求中的数据相匹配。特别是,确保时间戳已经过验证,并且应用签名证书的随机数、包名称和哈希值与预期值匹配。

(来自https://developer.android.com/training/safetynet/attestation#verify-attestation-response

我发现node-jose提供了一个简单的接口来验证 JWS,它有一个允许嵌入密钥的选项。我试图准确了解这个过程的作用以及它是否足以验证 JWS 的真实性?

使用嵌入式密钥是否确实使用根 CA 验证嵌入式证书链x5c,以及针对证书的签名?还是我需要从 Google 明确获取公钥来单独验证证书?

然后,一个有点相关的问题涉及 Google 用于执行此验证的 API:有一个 APIhttps://www.googleapis.com/androidcheck/v1/attestations/verify?key=...可以执行此确切操作,但它似乎已从 Google 的文档中删除,并且只能在过时的文章和关于 SafetyNet 的 SO 答案中找到参考因为这个似乎表明这个 API 仅用于测试,在生产中你应该自己执行证书验证。有谁知道这个 API 是否适合生产使用?如果每个人都打算手动验证 JWS,我觉得 Google 不会提供更多文档和代码示例有点令人惊讶,因为这个过程很容易出错,并且错误可能会产生严重影响?到目前为止,我只在 Java 中找到了一些 3rd 方示例,但没有从 Google 找到服务器端代码示例。

0 投票
2 回答
720 浏览

android - 如何计算有权访问证书的正确 apkCertificateDigestSha256?

SafetyNet 文档 ( https://developer.android.com/training/safetynet/attestation ) 指出在称为 apkCertificateDigestSha256 的证明令牌中返回的字段是Base-64 encoded representation(s) of the SHA-256 hash of the calling app's signing certificate(s)

我可能误解了它的含义,因为我的数据不匹配。如果我调查我的证书指纹,我有字段 SHA256,它有 32 个字节的长度。当我尝试在 base64 中对其进行编码时,我得到了更长的字符串。这是用字符串hello worldsha256 散列然后编码为 base64 的示例结果: Yjk0ZDI3Yjk5MzRkM2UwOGE1MmU1MmQ3ZGE3ZGFiZmFjNDg0ZWZlMzdhNTM4MGVlOTA4OGY3YWNlMmVmY2RlOQ==

同时,谷歌证明令牌返回从 base64 解码的更短的散列显示看似随机的值。例如这个: EmGH9u67SiSyLuvZCoAN+R+NU/yHP29gSmoUgvNtehk= 解码后没有任何意义。

如何根据我的证书获得与谷歌相同的结果?为什么他们的 sha256 哈希不是 32 字节长?

0 投票
1 回答
235 浏览

android - Web 身份验证:无法使用指纹进行身份验证

我已经为 android-safetynet 实现了 WebAuthn 注册。我可以在哪里使用我的指纹进行注册。但是,我没有选择使用指纹进行身份验证。

这背后的原因是什么?

这是提供给 navigator.credentials.create() 的对象

这是提供给 navigator.credentials.get() 的对象

0 投票
2 回答
1026 浏览

php - 使用 PHP 验证来自 Android SafetyNet 的 JWS 响应

概括

我能够从 Google 的服务器获取 JWS SafetyNet 证明并将其发送到我的服务器。服务器运行 PHP。

如何在我的服务器上使用 PHP“使用证书验证 JWS 消息的签名”?

我一直在做什么

我确实知道如何解码有效载荷并使用它,但我也想确保 JWS 没有被篡改。即https://developer.android.com/training/safetynet/attestation官方文档上的“验证 SafetyNet 证明响应”

我想使用一些已经制作的库/库来执行此操作,但我被卡住了。

起初我尝试使用https://github.com/firebase/php-jwt库和解码方法。问题是它需要一把钥匙,而我至今无法弄清楚它需要什么钥匙。我明白了PHP Warning: openssl_verify(): supplied key param cannot be coerced into a public key in ...。所以,它需要一些公钥……某物……

官方文档有4点:

  1. 从 JWS 消息中提取 SSL 证书链。
  2. 验证 SSL 证书链并使用 SSL 主机名匹配来验证叶证书是否已颁发给主机名 attest.android.com。
  3. 使用证书来验证 JWS 消息的签名。
  4. 检查 JWS 消息的数据以确保它与您的原始请求中的数据相匹配。特别是,确保时间戳已经过验证,并且应用签名证书的随机数、包名称和哈希值与预期值匹配。

在互联网的帮助下,我可以做 1 和 2(至少部分):

手动检查标题内容说它具有属性 alg 和 x5c。alg 可以用作解码调用的有效算法。x5c 有 2 个证书的列表,根据规范,第一个应该是第一个(https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-signature-36#section -4.1.5 )

我可以检查它匹配的证书的 CN 字段 $cert['subject']['CN'] === 'attest.android.com' 并且我还需要验证证书链(尚未处理还没有)。

但是如何使用证书来验证 jwt?

根据 如何使用公共 RSA 密钥验证 JSON Web 令牌? 该证书不是公开的,您可以:

但我使用我的 $cert 卡在第一行openssl_pkey_get_public(): key array must be of the form array(0 => key, 1 => phrase) in ...

笔记

我猜我至少需要来自 jws 数据之外的东西,比如公钥或其他东西......或者这是通过验证证书链到机器上的根证书来解决的?

我想让这项工作以生产方式进行,即在谷歌调用 api 来验证每个 jws 不是一个选项。

其他相关(?)我一直在阅读(在很多不相关的页面中):

不再存在从某些来源链接的库:

0 投票
3 回答
1118 浏览

java - android 中的 ApiException,状态码为 7,同时使用安全网认证 API

由于网络错误,出现状态代码为 7 的 Apiexception,但这似乎不是问题,因为互联网在设备上运行良好。

代码片段-