c++ - 预处理器指令对敏感信息安全吗?
问题描述
我正在为我的 C++ 应用程序创建一个包含 HTML/CSS/JS 文件的存档,并且我不希望用户可以访问这些文件。所以,我决定用密码加密存档。
我的第一个想法是通过预处理器宏(通过 CMake)将密码存储在程序中。但是,安全吗?
您可以从已编译的应用程序中访问密码吗?(exe,在我的情况下)如果可以的话,如何保护它?这在技术上是可行的还是我应该放弃并保持原样?
解决方案
如果宏实际在应用程序中使用,那么是的,它可以在可执行文件中访问——它必须是程序才能使用它。
您嵌入到程序中的任何凭据都可以被有足够动机的攻击者恢复。您无法使用加密机制来防止这种情况发生,因为您需要提供解密密钥才能使程序运行。
证明很简单:如果程序本身可以在没有任何用户输入的情况下获得凭证,那么可执行文件必须包含密钥,或者生成/导出密钥所需的所有信息。因此,任何人(具有必要的专业知识)都必须能够仅使用可执行文件中的信息来生成凭证。
这可以通过检查可执行文件来完成。也可以通过在调试器的监督下运行可执行文件并观察它在做什么来完成。
这与DRM方案毫无意义的原因相同——消费者必须拥有使用该材料的密钥,并且如果他们能够拿到密钥(他们必须能够获得才能消费内容)然后他们的计划不起作用。(当然,在较新的 DRM 方案中,密钥被埋在一个芯片中,该芯片旨在在打开密钥时破坏密钥,但这只是意味着很难获得密钥,并非不可能。)
tl;dr:这从来都不是是否可以恢复嵌入式密钥的问题。总是有可能的。这是恢复该密钥需要付出多少努力的问题。
推荐阅读
- encoding - 用不同的编码覆盖后无法打开 .docx 文件
- c# - 通知所有客户有关更改
- microservices - 如何在 Git proto 存储库中发布对共享 .proto 文件的更改?
- apache-spark - 通过检查另一行的条件来更新特定行中的值,pyspark
- python - Pandas Dataframes - 从另一个数据帧的字符串列中的一个数据帧中搜索一个整数
- firefox-addon - 从外部页面上的活动选项卡获取 url
- python - Matplotlib colorbar:一些刻度出现没有标签
- mongodb - Mongo DB Change Streams - 有没有办法获取文档的关系数据?
- php - 未选择单选按钮时未定义的数组键
- c++ - C++ Eigen 执行时间差