1
3
我想你要找的是 non-repudiation PKI . 这是一个相当广泛的领域,我想说你需要认证和完整性验证(例如。 皮斯科沃 他做到了,他做到了 完全 那个 时间)。 从鸟瞰的角度来看,主要流程如下:
当然,这会让你进入一个复杂而美妙的世界,那就是公钥基础设施;但是如果做得正确,您将有一个相当好的保证,事件实际上是按照您的日志显示的方式发生的。 |
2
3
我把你的一条评论贴在这里,因为它触及了问题的核心:
所以基本上,我们要保护的威胁是懒惰的用户,他们将无法运行进程,只需说“是的,安迪,我运行了它!”。这不是很难解决,因为这意味着我们不需要一个加密的牢不可破的系统(这是幸运的,因为这在这种情况下是不可能的!)我们所需要的只是一个系统,在这个系统中,打破它比仅仅遵循规则和运行流程更重要。
再说一遍,这个 不是吗 密码安全-任何知道算法的人都可以伪造答案-但只要这样做比实际运行过程更麻烦,你就应该没事。包含系统日期/时间可以防止幼稚的重放攻击(只发送与上次相同的答案),这应该足够了。 |
3
2
你把程序的输出(或者是“yes”或者“no”)和一个随机数连接起来,然后包含这个字符串的散列,怎么样? 因此,最终用户会向您发送以下内容:
这意味着,尽管只有两种可能的输出,但仍会有大量独特的散列。
那你可以核实一下
如果用户没有足够的技术来解决如何生成md5散列,这就足够了。 一个稍微好一点的解决方案是串联 另一个 (硬编码,“secret”)salt以生成散列,但将此salt保留在输出之外。 现在您有:
这意味着,即使用户足够聪明,能够生成自己的md5散列,他也不能在不知道秘密salt的情况下伪造输出。 当然,如果他足够聪明,他可以从你的程序中提取盐。 如果需要更加防弹的东西,那么您将看到正确的加密签名生成,我将向您介绍 Piskvor's answer ,因为我没有什么有用的补充:) |
4
1
用户将其结果和程序生成的签名发送给您。所以你现在可以通过检查
实际上这几乎是不可能的,因为你不能对用户隐藏盐。基本上和这个问题讨论的问题是一样的: How do you hide secret keys in code? |
5
1
一旦用户手中有一个可执行程序,那么任何东西都可能被伪造。 |
6
1
加密 “不可否认”的答案几乎是金钱,但你真正需要保证的是你的信息从哪里来的安全 签名 信息。有人能不能拦截并阅读你的信息并不重要,只要他们不能在你不知情的情况下篡改。 在明文发送信息之前,我已经实现了类似的功能——因为它不是机密信息——但是一个模糊的签名机制意味着我们可以(合理地)确信消息是由我们的客户端软件生成的。 请注意,基本上永远 安全如果应用程序安装在其他人的硬件上-但安全性从来不是“确定性”,而是“信心”-你有信心吗 足够地 为了您的业务需要,邮件没有被篡改? |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |