1

我们创建了一个像 adobe reader 这样的应用程序来读取一种特殊的加密文档文件格式,这种格式只能由我们的应用程序识别。

我们要做的是让用户使用他/她的帐户从网站购买应用程序,然后我们将让他/她使用该程序下载该文档并开始阅读。

这是我们的担忧:

1) 不应在另一台用户计算机上读取文档文件,这意味着如果用户 1 将原始下载文件提供给用户 2,用户 2 在他/她自己的计算机上安装了我们的应用程序,则第二个用户必须无法读取该文件

2)用户下载文件后,可以离线阅读这些文件(不是一直在线才能阅读)

3)这种安全性不能轻易破坏,因为这些文档数据至关重要,并且用户信息和应用程序不得被黑客攻击和破解!

4)也许以后我们想要我们的android/IOS版本所以解决方案必须是跨平台的

5) 像为每个文档提供登录机制这样的解决方案将不起作用,因为用户能够将他们自己的文件的副本连同他们的用户名和密码一起提供给其他用户。

6)文件加密机制不能被破解者破坏,以便他们只是解密文件并在互联网上发布免费版本

您有什么编程方法、安全机制或建议吗?

4

3 回答 3

4

您可以使用公钥(或非对称)密码术。您使用用户的公钥加密文档。然后只有有权访问私钥的人(理想情况下:只有用户)才能解密它。

但是,如果用户可以访问自己的密钥(他应该),那么没有什么可以阻止用户解密文档并与他人共享(或与他人共享他的私钥)。

最后:如果用户或程序需要访问未加密的产品,并且用户对保持文档安全没有兴趣,那么机密性可以并且 - 如果产品足够有趣 - 将被破坏。

于 2013-04-12T17:56:44.237 回答
1

这是 .NET 的问题,它很容易被逆转,因为可执行文件存储了大量的元数据,并且它不会编译为本地 (asm),而是编译为 IL。您最好的选择是使用混淆器和.NET Seal 之类的东西(但是,如果我是正确的,它需要用户上网)http://forum.elitevs.net/

同样,您想跨平台使用 C#,您必须使用 Mono 之类的东西: http ://www.mono-project.com/Main_Page

虽然这需要最终用户也有单声道。

现在回答你的“观点”。

1) 使每个文件和应用程序共享某种对每个文件和应用程序都是唯一的加密,确保该文件仅与一个用户拥有的应用程序匹配。

用户 X 下载应用程序。用户 Y 下载应用程序。

两种下载都是独一无二的,具有某种加密算法或加密密钥。

用户 X 下载文档 A。文档 A 将与用户 X 的应用程序共享相同的算法/密钥,这使得它只对他唯一。

用户 X 将文档 A 提供给用户 Y。由于用户 Y 的应用程序与用户 X 不共享相同的算法/密钥,因此该文档不可读。

2)我会参考我在回答中首先说的话。

3)我会参考我在回答中首先说的话。

4)我会参考我在回答中首先说的话。不过我想指出,这并非完全是一个坏主意,但如果 C# 真的是为此选择的语言,则应该考虑到这一点。

5)我会在这里回答#1。

6)我会在这里回答#1。

于 2013-04-12T17:48:47.033 回答
0

如果您要允许用户下载文件,那么就没有办法 100% 保护它。原因是,必须有一种方法来解密它,以便用户可以阅读它。这个解密过程必须发生在用户的机器上,因为读取它的程序必须解密它并在他们的机器上打开它。

一旦解密程序在用户的机器上运行,他就可以对其进行逆向工程并破解它(假设他足够聪明)。

话虽如此,有很多方法可以使您的解密变得困难。现在,如果您取消离线阅读的能力,您将拥有更多控制权。黑客无法在您的远程服务器上运行反汇编程序或反编译程序。

希望这些信息有帮助

于 2013-04-12T18:04:02.770 回答