如何向外界证明数据文件未被篡改?

时间:2014-06-18 00:51:12

标签: c# file storage checksum

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

目前,我们向文件管理器提供收据,其中包含收到的文件的校验和,因此我们可以在稍后的时间点向文件管理器证明存储在我们系统中的文件与其原始提交的文件匹配。收据将作为电子邮件发送给文件管理器。

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

我目前正在考虑只写"日志文件"在某个地方托管在云端(可能是第三方审核员认为合理值得信赖的提供商,如AWS),我们可以记录每个文件ID和校验和。理想情况下,这个远程日志文件的行为就像一个老式的会计日志 - 你只能用笔写,所以你永远不能删除以前的条目!

另一种选择可能是将这些电子邮件收据发送给第三方电子邮件存档提供商? (我们的消息历史记录量非常小,这可能不值得与归档提供者进行对话)

有人有建议吗?

2 个答案:

答案 0 :(得分:26)

双方最安全的解决方案是让您的客户使用有效的加密证书对其提交的内容进行签名,以便他们可以毫无疑问地验证提交内容是否未被篡改。

还有一些方法可以在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

答案 1 :(得分:2)

好消息是,这个问题(可能会喜欢)可以用公钥密码学解决。坏消息是设计协议是专家的工作。我最后一次遇到其中一个,我问了一个名叫Bruce Schneier的家伙,但是还有很多其他的专家。

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

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

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

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