Encryption 您是否曾经从代码中提取存储的加密密钥

Encryption 您是否曾经从代码中提取存储的加密密钥,encryption,obfuscation,Encryption,Obfuscation,我一直在研究如何最好地在代码中存储加密密钥。许多人给出的答案和建议是,不要这样做,因为它可以从代码中获得。例如 所以我的问题是,你曾经这样做过吗?或者至少你做过这样做所需的技术,但可能是为了其他目的?到底是如何做到的,这样,如果决定在代码中隐藏加密密钥,人们就可以更好地做好准备(如果有的话) 谢谢 jose我曾经为我们的Suite-B密钥协商与微软的密钥协商做过兼容性测试,结果就是某些密码套件的密钥不匹配 使用WinDBG,我能够分步完成反汇编,识别DLL中的关键入口点,找到各种关键组件的来源,

我一直在研究如何最好地在代码中存储加密密钥。许多人给出的答案和建议是,不要这样做,因为它可以从代码中获得。例如

所以我的问题是,你曾经这样做过吗?或者至少你做过这样做所需的技术,但可能是为了其他目的?到底是如何做到的,这样,如果决定在代码中隐藏加密密钥,人们就可以更好地做好准备(如果有的话)

谢谢
jose

我曾经为我们的Suite-B密钥协商与微软的密钥协商做过兼容性测试,结果就是某些密码套件的密钥不匹配

使用WinDBG,我能够分步完成反汇编,识别DLL中的关键入口点,找到各种关键组件的来源,并准确地找出它们的代码与rfc的不同之处。(奇怪的是,结果证明rfc是错误的。)

您当然希望避免将密钥放在代码中。我建议使用一些其他数据的散列作为密钥

在那之后,我担心的是一个有调试器的人


我肯定还有其他人花时间思考如何使事情不可调试,但就我个人而言,我发现难以调试的是在不同环境中发生的操作:每次执行都会有一点进展的状态机、不同的进程、中断处理程序、,等等。当你无法在源代码中插入调试中断时,很难在其中找到调试器。

我向你保证,如果你将密钥放在可执行文件的任何地方,它都会被找到。如果你使用Linux或类似的系统,
字符串
通常已经起到了作用。。。更“复杂”的技术可以通过调试器打破。不要硬编码键。@emboss,你知道这种情况吗?我担心的是,人们往往只是重复他们在互联网上听到的东西,而不是真正的权威来源。你知道一篇好的文章、一本好的书、任何涉及细节或例子的东西吗?我记得读过一篇关于这方面的非常好的博客文章,但不幸的是,我没有把它加入书签。但是使用
strings
并不需要太多说服力,例如,尝试在Jar文件或其他某种可执行文件中硬编码“密钥”,然后在其上运行
strings
——就是这样。调试器的事情并没有复杂得多——只要监视应用程序的内存访问,在某个时候它就必须重构并读取机密信息。我打赌在破解游戏密钥/密码的场景中会发现很多东西,我从这里开始。@emboss,谢谢你的反馈,非常感谢。通过异常抛出密钥是否符合这些要求?…或者这会让攻击者更容易,因为攻击者可以在异常上设置断点?你的第一个问题,如何闯入,我可以回答。如何保护它会陷入困惑,这是我没有资格解决的一个领域。