预处理器指令对敏感信息安全吗?
Are preprocessor directives safe for sensitive information?
我正在为我的 C++ 应用程序创建一个包含 HTML/CSS/JS 文件的存档,我不希望用户访问这些文件。所以,我决定用密码加密存档。
我的第一个想法是通过预处理器宏(通过 CMake)将密码存储在程序中。但是,它安全吗?
你能从已编译的应用程序中取回密码吗? (exe,在我的例子中)
如果可以,如何防范?技术上可行还是我应该放弃并保持原样?
如果在应用程序中实际使用了宏,那么是的,它可以在可执行文件中访问 -- 必须 供程序使用它。
您在程序中嵌入的任何凭据都可以被 sufficiently-motivated 攻击者恢复。没有可以用来防止这种情况的加密机制,因为您需要提供解密密钥才能使程序运行。
证明很简单:如果程序本身可以在没有用户输入的情况下获得凭证,那么可执行文件必须包含密钥,或者produce/derive密钥所需的所有信息。因此,必须 任何人(具有必要的专业知识)都可以生成仅包含可执行文件中的信息的凭据。
这可以通过检查可执行文件来完成。它也可以通过 运行 可执行文件在调试器的监督下观察它在做什么来完成。
这与 DRM 方案毫无意义的原因相同——消费者必须拥有一把钥匙才能使用 material,并且如果他们能够拿到钥匙(他们必须能够让他们消费内容)那么他们的计划就不起作用了。 (当然,在较新的 DRM 方案中,密钥被埋在芯片中,该芯片设计用于在密钥被打开时销毁密钥,但这只是意味着很难获得密钥,并非不可能.)
tl;dr:这绝不是是否可以恢复嵌入式密钥的问题。总是有可能的。问题是需要多少努力才能恢复该密钥。
我正在为我的 C++ 应用程序创建一个包含 HTML/CSS/JS 文件的存档,我不希望用户访问这些文件。所以,我决定用密码加密存档。
我的第一个想法是通过预处理器宏(通过 CMake)将密码存储在程序中。但是,它安全吗?
你能从已编译的应用程序中取回密码吗? (exe,在我的例子中) 如果可以,如何防范?技术上可行还是我应该放弃并保持原样?
如果在应用程序中实际使用了宏,那么是的,它可以在可执行文件中访问 -- 必须 供程序使用它。
您在程序中嵌入的任何凭据都可以被 sufficiently-motivated 攻击者恢复。没有可以用来防止这种情况的加密机制,因为您需要提供解密密钥才能使程序运行。
证明很简单:如果程序本身可以在没有用户输入的情况下获得凭证,那么可执行文件必须包含密钥,或者produce/derive密钥所需的所有信息。因此,必须 任何人(具有必要的专业知识)都可以生成仅包含可执行文件中的信息的凭据。
这可以通过检查可执行文件来完成。它也可以通过 运行 可执行文件在调试器的监督下观察它在做什么来完成。
这与 DRM 方案毫无意义的原因相同——消费者必须拥有一把钥匙才能使用 material,并且如果他们能够拿到钥匙(他们必须能够让他们消费内容)那么他们的计划就不起作用了。 (当然,在较新的 DRM 方案中,密钥被埋在芯片中,该芯片设计用于在密钥被打开时销毁密钥,但这只是意味着很难获得密钥,并非不可能.)
tl;dr:这绝不是是否可以恢复嵌入式密钥的问题。总是有可能的。问题是需要多少努力才能恢复该密钥。