【发布时间】:2016-11-18 19:56:48
【问题描述】:
假设我有一个用 VB.Net 编写的程序,其加密代码依赖于设置的密钥来加密和解密。如何在程序中安全地存储密钥?如果它是代码中的纯文本,则可以对其进行逆向工程。如果是设置,那么它会以纯文本形式存储在 x.exe.config 文件中,并且更容易找到。
x.exe.config 文件可以设置为加密吗?如果不是,将密钥硬编码到程序中的最安全方法是什么?
我使用的方法是使用不同的方法加密的,然后对其进行编码(因为它是非 ascii 文本)并将其存储在设置中,但如果程序被逆向工程,则反过来可以解码。
其他人在这种情况下会怎么做?
【问题讨论】:
-
这取决于您加密的内容以及您的加密方式。 Windows 有一个加密密钥存储系统,并且有使用它的 API。是否有用取决于上下文和用法。
-
您需要数据的可移植性也很重要。这些数据是否需要由另一台计算机解密?如果您遇到系统故障并需要将整个程序移动到另一台机器(可能使用不同的机器密钥)怎么办?
-
与往常一样,您希望保护此密钥免受谁的侵害?您的威胁模型是什么?
-
该位的目的是存储客户端用来访问数据库的密码。密码被加密并作为文件存储在共享目录中。这很好用,但我担心的是用于创建加密数据的密钥的安全性。所有客户端上的密钥都相同,因此它们都可以解密存储的文件并访问数据库。如果密钥在设置中是纯文本,那么它是什么很明显。如果代码中是纯文本,则可以进行逆向工程。
-
即使使用像msdn.microsoft.com/en-us/library/bb397867(v=vs.110).aspx 这样的东西也可能是个问题。由于解密的是客户端,因此他们需要完整的密钥。如您所知,我对此很陌生...
标签: vb.net encryption