Encryption 创建不可修改的文件

Encryption 创建不可修改的文件,encryption,hash,protection,Encryption,Hash,Protection,我希望能够创建一个文件,将其分发给最终用户,但防止他们修改该文件 现在,很明显,我不能阻止任何人修改文件,所以我的方法是检测并拒绝修改后的文件 我的意图是生成一个文件内容的salt散列,并将其附加到文件中。读取时,在读取文件的其余部分之前验证哈希。这样做的缺点是,我必须在读取文件的可执行文件中分发固定的“salt”。显然,我可以在某种程度上混淆它,但这仍然感觉像是一个薄弱环节 有没有更好的方法来解决这类问题?如果你想要100%的解决方案,就没有了。看看电影和音乐产业。他们已经尝试了很多年,但失败

我希望能够创建一个文件,将其分发给最终用户,但防止他们修改该文件

现在,很明显,我不能阻止任何人修改文件,所以我的方法是检测并拒绝修改后的文件

我的意图是生成一个文件内容的salt散列,并将其附加到文件中。读取时,在读取文件的其余部分之前验证哈希。这样做的缺点是,我必须在读取文件的可执行文件中分发固定的“salt”。显然,我可以在某种程度上混淆它,但这仍然感觉像是一个薄弱环节


有没有更好的方法来解决这类问题?

如果你想要100%的解决方案,就没有了。看看电影和音乐产业。他们已经尝试了很多年,但失败了:)


我认为你的解决方案已经足够好了。为了使修改文件变得更困难,您可以对其进行加密,但这样他们就无法读取该文件,因此只有当这是一个ok限制时,它才会起作用。

根据您想要保护的文件类型,您可以使用一些文档管理工具。AdobePDF有相应的工具。 此外,如果您将应用程序托管在应用程序服务器或Web服务器上,则用户无法访问和修改代码。这样,您就可以在服务器端拥有一个哈希数据库,其中包含要保护的文件


当然,保护只有在用户愿意(或能够)投入多少时间和精力来破坏保护时才有效。

如果您的应用程序在用户的机器上运行,他们总是可以修补二进制文件,因此甚至不进行验证,使您所有的辛苦工作都变得无用:-)

即使是服务器端解决方案也可以通过嗅探流量绕过。因此,您需要将它们合并并使用SSL。然后他们像上面那样修补了二进制文件,就这样了。因此,您可以采用各种方法来混淆二进制文件,用户可以使用像IDA PRO这样的反汇编程序

如果我处在你的位置,我会问自己的问题是“如果我和我的用户进行军备竞赛,我会赢吗?”。如果答案是否定的,那么我就不会浪费时间。

您想在文档中附加一个。这是一个被广泛研究的领域。简言之,您可以相当肯定地确保文件没有被篡改,但您不能阻止用户对其进行篡改


(与音乐行业的比较并不完全相关,因为他们想防止人们复制文件,这是一个更难的问题。)

这就是md5哈希和CRC的目的,这就是为什么你要对照他们的md5文件检查从互联网下载的文件,为了确保它在途中没有被劫持


不管怎样,我认为罗迪使用C++,所以我可以建议Boo::CRC的速度非常快,开销很小,您也不需要对文件的加密方式

< p>您对散列的关注。好的做法是生成散列并使用私有公钥对其进行加密。您只需分发公钥。这样,他们可以阅读它,但不能修改它或创建新的


我建议按照JesperE的建议使用数字签名。这个过程是标准的,你会发现许多例子来演示它。

使用数字签名。签名是使用公钥-私钥加密进行加密的哈希。您的应用程序只包含公钥。此密钥用于解密哈希,然后验证哈希。要在文件修改后“更正”散列,用户必须计算新散列,用私钥加密,并在文件末尾替换旧散列。问题:他没有私钥。私钥不在你的应用程序中。私钥不随应用程序一起提供。您的应用程序只有公共应用程序。如果他用公共密码加密,它就不会用公共密码解密,所以这是没有用的。私钥在您的计算机上,没有人可以访问它。

即使用户修补自己的二进制文件以确保其编辑的文件副本正常工作,但该文件的编辑副本仍无法在未修补的计算机上工作。阻止此编辑的目的是什么


另外,与纯文本文件相比,用户不太容易编辑二进制文件。此外,如果用户有正当理由希望编辑二进制文件,并且可以通过查看该文件,告诉你,如果你没有添加校验和之类的东西,那么这样做是很容易的。

你的用户是谁,他们试图更改文件的难度有多大。如果您的用户能够找到您添加到哈希中的salt,那么他们可能会在代码中找到公钥,将其更改为他们自己生成的公钥,并使用他们的私钥计算修改文件上的签名。我要把盐弄糊涂

另一种选择是某种在线系统,它增加了巨大的复杂性,而且通常是可破解的


请看HMAC,用一种编码方法来使用盐,就像你所想的(盐被称为键)。< / P>你是对的,我用C++。但是任何人都可以生成新的MD5哈希。。。我的问题是阻止有人编辑文件,重新创建哈希,从而使文件看起来可信。数字签名方法似乎是一条可行之路。他并没有试图阻止人们复制文件,只是试图改变它。我知道,但这同样是徒劳的。