我正在使用 C# 编写一个系统。我的程序生成了一条我想存储在硬盘上的小消息(文件的散列摘要)——但我不希望用户能够读取它。我打算加密此消息,但有人建议这是一个坏主意。
所以我正在寻找替代方案 - 如何保护一条 secret 信息免受完全信任的用户的侵害?
最佳答案
退后一步;您得到的解决方案根本无法解决您遇到的问题。不要试图敲打它直到它起作用,而是停下来,退后一步,解决真正的问题。
涉及真钱的安全问题是最难解决的问题之一;坏人有真正的经济动机来攻击您的系统。多管齐下的方法通常最适合这类事情。
首先,编写威胁模型:
- 确定需要保护的每一种资源(您的资源和良性客户的资源,例如他们的私有(private)财务数据)
- 估计它对你的值(value)
- 估计它对攻击者的值(value)
- 想想哪些漏洞会使资源受到攻击
- 描述威胁的特征——谁是攻击者,他们的动机是什么?
了解资源、威胁和漏洞后,才开始考虑如何缓解这些威胁。为每项缓解措施分配成本和效果。
例如:
- 资源:我的电视机
- 对我来说值(value):400 美元
- 对攻击者的值(value):40 美元
- 漏洞:未上锁的浴室 window
- 威胁:小偷或破坏者利用 window 进入电视
好的,既然我知道了攻击是什么,我就可以开始考虑缓解措施了:
- 锁上 window
- 安装报警系统
- 狗
- 守卫
这些按费用递增的顺序排列。最终缓解的成本大于资源的损失,花钱是没有意义的。
还有一些方法可以将缓解成本外部化:
- 以起诉威胁攻击者——纳税人为此买单
- 确保电视不会被盗,从而降低成功攻击我的成本。
- 等等。
加密用户机器上包含用户数据的文件并不能缓解任何攻击。弄清楚攻击是什么以及什么实际上减轻了它们,包括像切断攻击者的联邦调查局这样的选项,然后实现一个实际减轻您的漏洞并消除威胁的系统。
您建议的缓解措施是:将 key 交给小偷,并要求小偷在试图偷走电视之前锁上 window 。这不是漏洞的缓解措施。 没有任何涉及将 key 交给小偷的提案可以缓解未锁定的窗口漏洞,因此请停止尝试寻找一个。
有关更多以“软件”为中心的威胁建模示例,请参阅:
http://www.owasp.org/index.php/Threat_Risk_Modeling
http://msdn.microsoft.com/en-us/library/aa302419.aspx
等等;您可以在 Web 上找到很多关于我们如何在 Microsoft 进行威胁建模的资料。
最后:
请安全专家参与。
说真的,您正在完成软件实现中最艰巨的工作之一,小错误的后果会产生重大的财务影响。将您的实现预算花在拥有该领域专业知识的一流专家顾问身上,他们可以帮助您找到制定安全解决方案所需的现成和定制部件。推出自己的安全系统听起来既有趣又便宜;两者都不是。把这类事情留给那些在整个职业生涯中都在研究这个领域的人吧。
关于c# - 什么技术可以保护 secret 免受完全信任的用户的侵害?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150912/