让我们说我有一个用VB.Net编写的程序,加密代码依赖于设置加密和解密的密钥。如何将密钥安全地存储在程序中?如果它是代码中的纯文本,则可以进行逆向工程。如果它是一个设置,那么它将作为纯文本存储在x.exe.config
文件中,甚至更容易找到。
x.exe.config
文件可以设置为encypt吗?如果没有,那么将密钥硬编码到程序中最安全的方法是什么?
我使用的方法是使用不同的方法加密,然后对其进行编码(因为它是非ascii文本)并将其存储在设置中,但如果程序可以对其进行解码是逆向工程。
其他人在这种情况下做了什么?
答案 0 :(得分:0)
你已经完成了一项不可能完成的任务。问题是,通过将密钥硬编码到程序中,正如您所指出的,用户仍然可以通过逆向工程获取密钥。如果你把它放在某个地方的文件中,程序需要能够读取它,因此用户也可以以相同的方式访问它。
您遇到的根本问题是软件需要访问密钥,为此,密钥必须存储在用户可以访问的某个位置。它可以在二进制文件或计算机中,但可以分析二进制文件并检查文件系统。加密文件可以保护密钥,但只需使用新密钥重新创建问题。
这也是所有DRM计划面临的同样问题。它们允许用户访问完整的软件,但希望以某种方式限制它,但是用户在他的计算机中拥有运行该软件的所有内容。这就是为什么如果付出足够的努力,它总是可以盗用每个桌面软件。你只能通过混淆密钥来使它变得更加困难。
另一种方法是让用户根本没有DB凭据。或者让它们对任何有意义的东西都没用。我可以在这里想到两种方法: