什么技术可以保护完全信任的用户的秘密?

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

所以我正在寻找替代方案 – 您如何保护完全信任的用户的一些秘密信息?

退后一步; 你有一个解决方案,从根本上不适用于你所遇到的问题。 而不是试图锤击它直到它工作,停止,退后一步,并解决真正的问题。

涉及真钱的安全问题是一些最难解决的问题; 坏人有一个真正的金融动机来攻击你的系统。 对于这些类型的事情,多管齐下的方法通常是最好的。

首先, 编写威胁模型

  • 识别需要保护的每个资源(您的资源和您的良性客户资源,例如他们的私人财务数据)
  • 估计它对你的价值
  • 估计它对攻击者的价值
  • 想一想哪些漏洞会让资源受到攻击
  • 威胁的特征 – 谁是攻击者,他们的动机是什么?

一旦了解了资源,威胁和漏洞,就会开始考虑缓解这些威胁。 为每个缓解措施分配成本和有效性。

例如:

  • 资源:我的电视机
  • 对我有价值:400美元
  • 对攻击者的价值:40美元
  • 漏洞:未锁定的浴室窗户
  • 威胁:小偷或破坏者使用该窗口访问电视

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

  • 锁上窗户
  • 得到一个报警系统
  • 小狗
  • 卫士

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

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

  • 以起诉威胁袭击者 – 纳税人为此付出代价
  • 确保电视免遭盗窃,降低成功攻击我的成本。
  • 等等。

加密包含用户计算机上的用户数据的文件并不能减轻任何攻击。 弄清楚攻击是什么以及实际缓解攻击的内容,包括攻击者对攻击者的影响,然后实施一个实际缓解漏洞并消除威胁的系统。

你提出的缓解措施是:给小偷钥匙,并要求小偷在他试图窃取电视之前锁上窗户。 这不是缓解漏洞。 没有涉及将密钥交给小偷的提议是缓解解锁窗口漏洞,因此请不要试图找到一个。

有关威胁建模的更多“软件”重点示例,请参阅:

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

等等; 你可以在网上找到很多关于我们如何在微软进行威胁建模的东西。

最后:

让安全专业人士参与其中

说真的,你正在咬掉软件实施中最困难的工作之一,其中小错误的后果会产生重大的财务影响。 将您的实施预算花在具有该领域专业知识的顶尖专家顾问身上,可以帮助您找到制定安全解决方案所需的现成和定制部件。 滚动自己的安全系统可能听起来既有趣又便宜; 它既不是。 把这种事情留给那些在职业生涯中学习这个空间的人。

我的程序生成一个我想要存储在硬盘上的小消息(文件的哈希摘要) – 但我不希望用户能够读取它。

用户可以完全控制他们的机器。 如果您的软件可以读取它,那么用户也可以通过一点点努力来阅读它。

而不是与客户打一场失败的战斗,最好接受“它是用户机器,而不是我的机器”,并且不要为任何过多的事情烦恼 – 只需Base64对它进行编码即可。

为什么你需要阻止用户读取哈希摘要呢?

这是DRM问题,无法完成。 通过提出新的和新颖的方法来混淆数据,你可以使它变得非常不方便和令人沮丧,但是当加密和解密的机器都被托管在系统中时,认为可以保护数据是一个根本上有缺陷的想法“完全控制。

不,这是不可能的。 如果此人具有对机器的物理/完全访问权限,则无法在不加密的情况下保护其上的硬盘。

我能看到的唯一方法是将此消息存储在用户无权访问的远程服务器上。

如果没有,那么文本就没有任何用处,例如,文本的另一半不会靠近用户的计算机。

换句话说:将价值从秘密中移除,因此它不再是秘密,客户也无权获得它。

如果你不能,你可能在设计你的应用程序时犯了一个错误,并试图找到一种廉价的方法来解决它。 但那里没有免费的午餐 。 同样,在这种情况下,安全性是平衡可用性,实施难度和秘密价值的另一个例子。

如果您仍想这样做,请不要依赖单一技术。 使用many:使用存储在内存中并从存储库中获取的公钥加密磁盘上的数据; 不要将数据作为“明文”存储在内存中,而是阻止加密; 经常洗牌; 混淆使用,模式,延迟等

看看如何实现skype:通过代码混淆,调试检测(在可执行文件上运行调试器,执行路径发生变化),以及取消实现的实际值。 即使你了解skype如何工作,它已经是一个标准; 如果你想对它进行逆向工程以使你的软件“使用skype”,那么,他们永远不会授权你使用他们的品牌。

在另一个答案的评论中,你写道:

这是尝试使某个日志文件防篡改。

如果确实如此,那么也许你应该采取不同的方法并将日志文件移动到用户完全信任的地方(即:其他系统)。

否则,您无法保证文件的安全性(正如其他人所提到的)。