【问题标题】:Unity client / NodeJS server : how to sign and verify data?Unity 客户端/NodeJS 服务器:如何签署和验证数据?
【发布时间】:2019-02-14 10:57:34
【问题描述】:

我也在 Unity 的论坛上发布了这个帖子,但由于它更面向服务器/加密,我也会在这里提问。

正如标题中提到的,我使用 unity 作为客户端,并使用 socket.io(使用 BestHTTP 资产)连接到 nodeJS 服务器。

我想要实现的目标:user1 获得由我的服务器签名的许可证密钥(通过电子邮件或 w/e),在应用程序中输入密钥,客户端询问服务器密钥是否有效并已签名,如果是这样,用户1的计算机可以播放。 这只需要在“注册”许可证密钥时连接互联网,然后我会将密钥存储在散列文件或其他东西中,这样 user1 就可以玩而无需每次都联系服务器。 简化版:user1 只需要连接一次(他第一次启动应用程序时),但我需要在每次启动时检查他是否可以玩。

客户端(在 Unity c# 中)工作正常,我所做的基本上是对密钥进行哈希处理并将其存储在一个文件中,然后对该文件进行哈希处理以验证用户不会修改它。

但是,我不知道在服务器端做什么。是否有 API 可以实现我想做的事情?我走错方向了吗? 那是我第一次处理加密货币,我有点迷茫:confused:

任何帮助将不胜感激!

【问题讨论】:

  • 您能否将您的代码添加到问题中?你已经尝试了什么?您提出的架构的哪一部分不清楚?
  • 所有已经使用的代码都在工作,这不是问题。我正在寻找一种方法来签署数据服务器端并在客户端验证它而不需要连接到互联网,并且不知道我应该使用什么或者它是否是好方法/是否有其他方法做我想做的事。

标签: c# node.js unity3d networking cryptography


【解决方案1】:

前提

许可您的软件可能是一项简单的任务,也可能是一项相当复杂的任务:对于该请求没有“完美”的答案,主要是因为您选择的每个解决方案都将以某种(简单或困难)方式“可破解”。

另外,特别是在处理密码学时,通常增加复杂性等于增加时间。我建议您将重点放在您要保护的内容的价值上,这样您就可以决定哪些值得实施。


许可

可能最简单的方法是实施数字签名证书,其中包含有关许可软件的所有信息(包括有助于您的系统识别恶意行为的其他数据)。使用 RSA 应该是一个不错的选择。

这是我在 Stack Overflow 上找到的关于这个想法的 good answer(它是用 C# 编写的,但您可以分析架构并构建一个 nodejs 应用程序)。

【讨论】:

  • 感谢您的回答,我会调查的。
  • 很高兴它有帮助!如果是您要找的答案,请将答案标记为正确答案! :)
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多