我想确保从服务器收到的内容实际上来自服务器并且在传输过程中没有被篡改。 我有一个应用程序,可以将命令从服务器发送到移动设备。出于功率效率的目的,将这种有效载荷包含在GCM消息中会很好。但是,如果有人试图模拟服务器并发送错误或恶意命令,那将会很糟糕。我想知道GCM是否提供了这方面的机制,如果只是签名消息就足够了,或者只是使用GCM唤醒应用程序然后使用另一个通道接收命令更好,即使它消耗少量的额外的能量。
答案 0 :(得分:1)
如果要验证邮件是否来自服务器,则应使用公钥/私钥对中的私钥对其进行签名。然后,您可以使用公钥验证客户端中的签名。这样您就知道请求来自服务器(假设您的私钥没有受到损害。保持安全!)。这是Windows更新的工作方式,以及APT和YUM。
但请注意,这只会阻止某人冒充您的服务器。它不会加密数据,也不保证客户端的任何信息。您不能反向执行相同的操作(使用客户端私钥对客户端发起数据进行签名),因为来自客户端的任何内容都可能被篡改/欺骗或恶意。如果您希望加密客户端信息,可以使用服务器公钥对其进行加密,只有服务器的私钥才会对其进行解密。