我正在制作一个允许任何第三方“设备”与之通信的网络服务。每个设备都有一个相当不寻常的字符串来标识自己,并使用Web服务来存储针对此id的数据。但是,这允许希望游戏服务的人扫描并猜测设备ID并存储恶意数据。
使用此Web服务的设备本身相对“愚蠢”,并且不提供合适的数据输入界面,因此无法在客户端上输入密码或任何形式的条目。
由于此Web服务对任何希望生产此类设备的人开放,我无法通过使用私钥来提高安全性,因为这将在规范中公开定义。此外,由于设备的简单性和IP / HTTP堆栈,HTTPS不适用于此实现。
据我所知,我无法在此操作中看到使用私有共享密钥的方法。在这种程度上,我认为确保这种性质的系统是不可能的,但我想知道我还没有找到的其他一些方法可以帮助我保护这个系统吗?
答案 0 :(得分:2)
您是否有理由不能使用公钥/私钥对?
您可以使用规范发布服务器的公钥,并要求每个设备为自己生成随机的公钥/私钥对。设备可以使用服务器的公钥加密其公钥并将其发送到服务器。服务器可以使用其私钥来解密设备的公钥,然后假设没有其他人可以解密服务器使用该公钥加密的任何消息。因此,服务器将该公钥注册为设备的ID。
如果您设置了某种会话,则服务器可以保留与该会话关联的设备的公钥。如果没有,从设备发送到服务器的任何消息的某些定义部分必须包括以这种方式加密的设备的公钥,以便服务器可以知道哪个设备发送了消息。
发送到服务器的任何消息都将使用客户端的私钥(因此服务器知道此设备发送它)和服务器的公钥(因此只有服务器可以读取它)进行加密。发送到设备的消息将使用服务器的私钥(因此客户端知道服务器发送它)和客户端的公钥(因此只有客户端可以读取它)进行加密。只有你知道你的私钥,只有他们知道他们的私钥,所以只要你(和他们)使用良好的播种和加密算法,一切都是安全的。
这有意义吗?
答案 1 :(得分:1)
您可以尝试一些简单的质询 - 响应系统,其中服务器向设备发送随机字节串。设备使用一些已知的ID(理想情况下不是公共ID)和一些类似哈希的算法来产生响应。
但这只会保护您免受无法访问您设备的人的侵害。
答案 2 :(得分:0)
如果“猜测”设备ID是您唯一关注的问题,请将设备ID设为不可取的?例如,使用HMAC-SHA256的结果,其中供应商私有密钥和序列号作为有效负载。甚至你都不需要供应商密钥的副本。
虽然这不是非常有用,因为设备的网络连接可能是可以嗅探的,因此它的ID可以通过线路轻易捕获。因此,设备上必须存在密钥元素 。但这是我有点困惑的地方 - 你对使用共享私钥的担忧似乎是后勤的,而不是设备是否能真正支持它(暗示它确实有一些加密) - 但你不能使用HTTPS?设备有哪些限制(内存/ CPU /存储)?
答案 3 :(得分:0)
有两件事情浮现在脑海中。
首先,使用不可猜测的设备ID。像base64编码guid这样简单的东西可以工作。
其次,您应该要求使用公钥加密传递给您的Web服务的数据。然后,您的私钥将被要求解密数据。
这将确保即使他们有一个监听器观看数据,他们也无法获取不同的设备ID。此外,使用不可猜测的ID,他们将无法影响其他设备帐户。