c# - 什么技术可以保护 secret 免受完全信任的用户的侵害?

标签 c# security

我正在使用 C# 编写一个系统。我的程序生成了一条我想存储在硬盘上的小消息(文件的散列摘要)——但我不希望用户能够读取它。我打算加密此消息,但有人建议这是一个坏主意。

所以我正在寻找替代方案 - 如何保护一条 secret 信息免受完全信任的用户的侵害?

最佳答案

退后一步;您得到的解决方案根本无法解决您遇到的问题。不要试图敲打它直到它起作用,而是停下来,退后一步,解决真正的问题。

涉及真钱的安全问题是最难解决的问题之一;坏人有真正的经济动机来攻击您的系统。多管齐下的方法通常最适合这类事情。

首先,编写威胁模型:

  • 确定需要保护的每一种资源(您的资源和良性客户的资源,例如他们的私有(private)财务数据)
  • 估计它对你的值(value)
  • 估计它对攻击者的值(value)
  • 想想哪些漏洞会使资源受到攻击
  • 描述威胁的特征——谁是攻击者,他们的动机是什么?

了解资源、威胁和漏洞后,才开始考虑如何缓解这些威胁。为每项缓解措施分配成本和效果。

例如:

  • 资源:我的电视机
  • 对我来说值(value):400 美元
  • 对攻击者的值(value):40 美元
  • 漏洞:未上锁的浴室 window
  • 威胁:小偷或破坏者利用 window 进入电视

好的,既然我知道了攻击是什么,我就可以开始考虑缓解措施了:

  • 锁上 window
  • 安装报警系统
  • 守卫

这些按费用递增的顺序排列。最终缓解的成本大于资源的损失,花钱是没有意义的。

还有一些方法可以将缓解成本外部化:

  • 以起诉威胁攻击者——纳税人为此买单
  • 确保电视不会被盗,从而降低成功攻击我的成本。
  • 等等。

加密用户机器上包含用户数据的文件并不能缓解任何攻击。弄清楚攻击是什么以及什么实际上减轻了它们,包括像切断攻击者的联邦调查局这样的选项,然后实现一个实际减轻您的漏洞并消除威胁的系统。

您建议的缓解措施是:将 key 交给小偷,并要求小偷在试图偷走电视之前锁上 window 。这不是漏洞的缓解措施。 没有任何涉及将 key 交给小偷的提案可以缓解未锁定的窗口漏洞,因此请停止尝试寻找一个。

有关更多以“软件”为中心的威胁建模示例,请参阅:

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineNovember2006en-us.chm

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/

相关文章:

c# - 如何遍历正在修改的列表?

asp.net - 如何测试ASP.NET成员身份密码是否满足配置的复杂性要求?

security - Google 如何通过新的 Webfonts 服务绕过 Firefox 中的跨站点字体使用安全?

php - 我如何使用 PHP 的各种 XML 库来获得类似 DOM 的功能并避免 DoS 漏洞,如 Billion Laughs 或 Quadratic Blowup?

c# - 如何从 wpf/windows c# 中的 Web 浏览器控件获取滚动宽度

c# - List<T> 所有行更新

c# - 图像模式识别 - 建议的环境?

c# - 将一些属性复制到新的构造函数中

java - 如何从部署到 Websphere 6.1 的 EJB 访问身份验证别名

security - 在 Windows 上安装 git-secrets