【问题标题】:How can I prove to an outside party that a data file hasn't been tampered with?我如何向外界证明数据文件没有被篡改?
【发布时间】:2014-08-08 03:43:42
【问题描述】:

我们有一个基于 C# 的 Web 服务,它接收来自具有法律约束力的政治组织的文件。

目前,我们向归档人提供了一份收据,其中包含收到文件的校验和,因此我们可以在以后向归档人证明存储在我们系统中的文件与其原始提交相匹配。收据以电子邮件的形式发送给申报者。

但是,我们无法向第三方审计员证明存储在我们系统中的文件和校验和从未更改(即恶意 DBA 可以更改校验和值以匹配某些伪造替换文档的内容)。

我目前正在考虑一个只写的“日志文件”托管在云中的某个地方(可能是第三方审计员认为相当值得信赖的提供商,例如 AWS),我们可以记录每个文件id 和校验和。理想情况下,此远程日志文件的行为类似于老式会计日志——您只能用钢笔书写,因此您永远无法擦除以前的条目!

另一种选择可能是将这些电子邮件收据发送给第三方电子邮件存档提供商? (我们的消息历史量太小了,这可能不值得与存档提供商讨论)

有人有什么建议吗?

【问题讨论】:

  • 听起来你需要加密签名。
  • "我们申报人提供收据[...],以便我们可以向申报人证明在稍后文件 [...] 与他们的原始提交相匹配的时间点”——如果该收据实际上没有使用您发布的公钥进行加密签名,则此协议不起作用:任何一方都可以更改提交和伪造一张匹配的收据,反过来声称对方的收据是伪造的。
  • 您也可以在 security.stackexchange.com 上获得答案,因为他们专注于信息安全..
  • @HannoBinder 你是绝对正确的。现有流程无法防御故意恶意文件管理器。感谢您指出这一点。
  • @woliveirajr 不知道存在这个!

标签: c# file storage checksum


【解决方案1】:

对双方来说最安全的解决方案是让您的客户使用有效的加密证书签署他们的提交,这样他们就可以毫无合理怀疑地验证提交没有被篡改。

还有一些方法可以在 C# 中对它们进行程序签名和验证,这可以让您对此有所了解:http://blogs.msdn.com/b/alejacma/archive/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-certificate-c.aspx?PageIndex=1

【讨论】:

  • 经过一番阅读,这绝对是正确的路径,但我们无法要求文件管理器拥有自己的证书——这将构成“过度负担” 到文件管理器。 (这对我们没有帮助,这些申报者就是制定规范申报的法律的人!) 我认为我们的最终答案是聘请@david.pfx 推荐的安全专家。
  • 请注意,任何加密协议可能有特殊的法律要求才能被当局接受为某事的证明。这些要求通常包括通过官方各方对与流程相关的所有技术和组织措施进行认证,在大多数情况下,只有专业公司才能通过这种方式才能将其加密解决方案作为产品提供,因为这需要大量成本和努力.因此,如果您想要(有些)严肃的事情,那么没有专业的外部支持可能无法相处。
【解决方案2】:

好消息是这个问题(并且可能会喜欢它)可以通过公钥加密来解决。坏消息是设计协议是专家的工作。上次我有一个叫 Bruce Schneier 的人来帮忙,但周围有很多其他专家。

基本上你所做的就是这样。首先,您准备文档的加密摘要。这是一种校验和,但保证是唯一且牢不可破的。没有人可以创建另一个具有相同摘要的文档。

然后,您和文件管理器各自使用您自己的公钥加密此摘要并交换加密的密钥(当然还要将原始摘要保存在文件中)。如果遇到挑战,您可以生成文件管理器的加密摘要并要求他使用他的私钥对其进行解密。如果它正确解密并与您存档的摘要相匹配,那么它是正确的并且不能否认。他可以对你做同样的事情。

证书只是一种特殊的公钥,存在各种工具。您可以使用证书,也可以只使用密钥和一组工具,例如 PGP。

这是一个非常简单的版本。周围有更复杂的系统,但我认为要让一个系统运行起来会花费你一些钱。

【讨论】:

  • 谢谢,这真的有助于我想象如何构建一个流程。当然,这也表明我知道的太少了!肯定需要外部专家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多