问题描述
我正在为我的C ++应用程序创建一个包含HTML / CSS / JS文件的档案,我不希望用户有权访问这些文件。因此,我决定使用密码对存档进行加密。
我的第一个想法是通过预处理器宏(通过CMake)在程序内部存储密码。但是,安全吗?
您可以从已编译的应用程序访问密码吗? (以我为例) 如果可以的话,如何保护它呢?在技术上是否可行,还是我应该放弃并保持原状?
解决方法
如果该宏实际上是在应用程序中使用的,则可以,它可以在可执行文件中访问-必须供程序使用。
有足够动机的攻击者可以恢复您嵌入在程序中的任何凭据。没有可以用来防止这种情况的加密机制,因为您需要提供解密密钥才能使程序正常运行。
证明非常简单:如果程序本身可以在没有任何用户输入的情况下获得证书,那么可执行文件必须包含密钥,或者包含生成/派生密钥所需的所有信息。因此,任何人(具有必要的专业知识)必须仅使用可执行文件中的信息来生成证书。
这可以通过检查可执行文件来完成。也可以通过在调试器的监督下运行可执行文件并观察其执行来完成此操作。
这与DRM方案毫无意义的原因相同-消费者必须拥有一把钥匙才能使用该材料,并且如果他们能够使用该钥匙(他们必须能够按顺序进行)让他们消费内容),那么他们的方案就行不通了。 (当然,在较新的DRM方案中,密钥被埋在芯片中,该芯片设计为在打开密钥时会销毁它,但这仅意味着难以获取,并非不可能)。 / p>
tl; dr:绝对不可能恢复嵌入式密钥。总是有可能的。这是需要花费多少精力来恢复该密钥的问题。