eto*_*lov 1 c++ security software-design
我正在为我的 C++ 应用程序创建一个包含 HTML/CSS/JS 文件的存档,我不希望用户访问这些文件。所以,我决定用密码加密存档。
我的第一个想法是通过预处理器宏(通过 CMake)将密码存储在程序中。但是,安全吗?
您可以从编译的应用程序中访问密码吗?(exe,就我而言)如果可以的话,如何保护它?技术上可行还是我应该放弃并保持原样?
如果宏实际在应用程序中使用,那么是的,它可以在可执行文件中访问——它必须由程序使用。
您嵌入到程序中的任何凭据都可以被有足够动机的攻击者恢复。您无法使用加密机制来防止这种情况发生,因为您需要提供解密密钥才能使程序正常运行。
证明很简单:如果程序本身可以在没有任何用户输入的情况下获得凭证,那么可执行文件必须包含密钥,或生成/导出密钥所需的所有信息。因此,任何人(具有必要的专业知识)都必须可以仅使用可执行文件中的信息生成凭证。
这可以通过检查可执行文件来完成。也可以通过在调试器的监督下运行可执行文件并观察它正在做什么来完成。
这与DRM方案毫无意义的原因相同——消费者必须拥有使用材料的密钥,并且如果他们可以拿到密钥(他们必须能够使用这些内容)那么他们的计划不起作用。(当然,在较新的 DRM 方案中,密钥被埋在一个芯片中,该芯片旨在在打开密钥时破坏密钥,但这只是意味着很难获得密钥,并非不可能。)
tl;dr:是否可以恢复嵌入的密钥从来都不是问题。总是有可能的。这是一个需要多少努力才能恢复该密钥的问题。