我当前的商业模式是先在硬件上亏损,希望服务能够持续得到支付。当服务未得到支付时,就会向客户硬件发送指令,使其停止运行。
我想找到一种方法来减少有人设置流氓服务器以保持客户端硬件正常运行(即使它没有付费)的可能性。这还有一个额外的好处,即确保流氓服务器不会仅仅为了恶意目的而接管客户端计算机。
为了使事情顺利进行,我进行了非常简单的尝试,设置了以下“系统”:
基于硬件的序列号在部署之前从客户端机器收集,并通过加密与服务器已知的 2 条信息相结合。
加密值存储在客户端机器上。2a. 服务器始终知道这两条信息。
当客户端第一次连接到服务器时,它会将硬件序列传递给服务器。
该序列与信息结合在一起并进行加密。
加密值被传回给客户端,以查看其是否与存储的值匹配。
这个系统似乎有效,但如果我认为这是我的问题的最佳解决方案,我就不会在这里询问它是否有效。
答案1
硬件序列号很容易被伪造,因此这不是一种可靠的身份验证方法。
我认为你想得太多了——已经有非常成熟的方法可以做到这一点,即 SSL,或者更广泛地说,RSA 公钥身份验证。如果您使用严格的密钥指纹验证,那么这就是您建立客户端和服务器身份所需的全部内容。
答案2
我想找到一种方法让客户端机器验证它们正在与正确的服务器通信,而不是被劫持的服务器,或者只是错误的产品服务器。
客户和服务器证书认证可以做到这一点。
这可以防止恶意指令吗?
您不清楚这是什么意思。“恶意指令”不是行业标准术语。如果您问的是它是否会阻止受信任的计算机运行意外命令,那么答案是否定的。强化您的应用程序以丢弃危险/恶意命令。
如果客户端一直在等待服务器发来的“goodboy”消息,这是否足以防止硬件被盗?
不。如果你的服务如此敏感,请进行客户端证书认证和将其置于需要双因素身份验证的 VPN 后面,除了使用 @EEAA 推荐的公钥加密之外。除了登录凭据之外,诸如 RSA 令牌或智能卡之类的东西应该可以防止被盗的笔记本电脑连接到您的服务。还请考虑对易受盗窃的移动计算机进行全盘加密,这样小偷根本无法进入计算机。