【发布时间】:2026-01-07 17:20:03
【问题描述】:
所以,首先,我想指出,我知道这些事情从来都不是万无一失的,如果付出足够的努力,任何事情都可能被打破。
但是:假设我将一个软件交给某人(我编写的)并让他们运行它。我想验证他们得到的结果。我正在考虑使用某种加密/哈希来验证他们是否已经运行它并获得了令人满意的结果。
我也不希望结果是“可伪造的”(尽管我知道,如果有足够的努力来打破它等等......)。因此,这意味着,如果我使用散列,我不能只使用“是”的散列和“否”的散列(因为这意味着散列将只是 2 个选项之一 - 很容易伪造)。
我希望该工具的用户将一些东西交还给我(例如,可能是一封电子邮件),一些尽可能小的东西(例如,我不想在一行又一行的日志中拖网) .
您将如何实施?我可能没有解释最伟大的事情,但希望你能明白我想做的事情的要点。
如果有人以前实现过这种东西,任何指针都将不胜感激。
这个问题更多的是关于“如何实现”而不是专门询问代码,所以如果我错过了一个重要的标签,请随时编辑!
【问题讨论】:
-
什么是阻止恶意用户反汇编你的程序,编辑它以产生他们想要的任何结果,然后你的加密逻辑向你发送加密选择的明文?如果您的前提是客户端不可靠,那么不要编写一个依赖来自客户端的数据的安全系统。
-
另外,请注意,在未经客户同意和不知道消息内容的情况下,使用有关客户的加密信息“打电话回家”的软件可能是非法的。我不是律师;隐私法因国家/地区而异。在进一步深入之前,您可能应该咨询国际隐私问题专家。
-
最后,我要指出的是,您已经声明要使用加密,但没有明确说明威胁。加密是一种用于减轻威胁的漏洞的技术。 威胁到底是什么? 是窃听,还是敌对用户,还是什么?如果加密实际上并不能减轻您所面临的威胁,请不要使用加密;使用一些有效的技术。
-
嗨,埃里克。我应该指出,该工具不会公开发布,它将进入受信任用户的选择列表。被拆卸的工具不是问题。我对加密并不在意,我需要做的就是能够验证他们是否运行了特定的进程并得到了合法的结果。该工具会验证东西,所以我不希望他们只是假设某些东西工作正常而不运行该工具。
-
关于打电话回家,它不一定必须这样做,我可能不想每次运行时都检查结果(而是每隔一段时间)。当我要求时,用户可以通过电子邮件将其发送给我(这是一个工作环境)。发送的数据不会是敏感的(显然),所以虽然我提到加密也许我不应该有,但我真的只是写下我脑海中可能有远程帮助的所有内容,以获得尽可能多的批评和尽可能的想法(比如你现在给出的):)
标签: c# encryption verification