1

我必须与两个以上与 Google NearbyAPI Connections 完美配合的设备进行通信。现在我需要保护限制对集群网络的访问的连接。API 公开了一种对设备进行身份验证的方法,该方法与库提供的令牌一起使用,但是,此令牌旨在由 UI 中的两个用户授权。我需要以编程方式执行此操作,用户不应该这样做。

有一种方法可以获取以编程方式进行身份验证的令牌,可以在docs中找到,但它在库中不可用。

我试图做的事情:

因为我没有看到文档声明的方式来执行此操作而不要求用户接受我尝试过的连接:

  • 在端点的末尾放置一个秘密

    id-secret所以每个设备都应该解密这个秘密并验证信息是否与注册的信息匹配,然后接受连接。但是使用 AES 加密会消耗很长的有效载荷,这会导致设备未被发现。我没有尝试过使用 TDES,因为它应该提供更小的有效负载,但我不确定这是否会成为可行的方法。

  • 接受连接发送秘密,如果无效则断开连接。我认为这不是一个好的选择,因为网络会暴露给任何人,并且会产生不稳定的行为。

您认为验证设备的好方法是什么?作为我看到的唯一信息入口点是端点。

4

1 回答 1

1

目前,您必须先接受连接,然后立即进行质询/响应。它不是最干净的,但它仍然是安全的。

广播身份

我建议在端点名称/信息中添加一个唯一 ID。例如。“12345:威尔”。这样,设备就有了一个可以参考的稳定 ID。为了使这更加安全,您可以对 ID 进行加盐。例如。“12:54321:Will”或“${salt}:${hashedId}:${name}”。要解析散列 ID,您必须遍历设备上的所有已知 ID 并运行 sha(salt + id).limit(5) 直到其中一个与 hashId 匹配。这样,每次盐旋转时广告都会发生变化,并且更难跟踪设备。如果您也混淆名称,则可以加分。

保护连接

立即接受连接,无需验证身份验证令牌。暂时不要发送私人信息,因为连接不安全。两个设备都应该启动一个计时器(1~5 秒),并向对方发出挑战。挑战应该以某种方式包含身份验证令牌。例如。privateKey.sign(authToken)。您可能还想双向验证,因此您也可以包含公钥。例如。localPrivateKey.sign(sharedAuthToken + remotePublicKey)。如果双方在时限内验证,则认为连接是安全的。

免责声明:我在附近的连接上工作

于 2020-12-12T21:51:42.317 回答