1

我想确保我从服务器收到的内容实际上来自服务器并且在传输过程中没有被篡改。我有一个将命令从服务器发送到移动设备的应用程序。出于电源效率的目的,将这种有效负载包含在 GCM 消息中会很好。但是,如果有人试图冒充服务器并发送不正确或恶意的命令,那就太糟糕了。我想知道 GCM 是否提供了这方面的机制,是否仅对消息进行签名就足够了,或者是否最好使用 GCM 唤醒应用程序,然后使用另一个通道来接收命令,即使它消耗少量额外的能量。

4

1 回答 1

1

如果要验证消息是否来自服务器,则应使用公钥/私钥对中的私钥对其进行签名。然后,您可以使用公钥验证客户端中的签名。这样你就知道请求来自服务器(假设你的私钥没有被泄露。保持安全!)。这就是 Windows 更新以及 APT 和 YUM 的工作方式。

但请注意,这只会防止有人冒充您的服务器。它不会加密数据,也不会保证有关客户端的任何信息。您不能反过来做同样的事情(使用客户端私钥签署客户端原始数据),因为来自客户端的任何内容都可能被篡改/欺骗或以其他方式恶意。如果您希望对客户端信息进行加密,您可以使用服务器公钥对其进行加密,并且只有服务器的私钥才能对其进行解密。

于 2013-03-13T03:38:00.543 回答