如何保护加密密钥不受逆向工程的影响?

问题描述

| 我的软件正在使用AES Rijndael。 我正在使用SHA-256哈希从任意长度的字符串生成密钥,然后将其作为私钥和公钥进行传递,因为在这种情况下,我不需要在两者之间进行区分。 如何保护我的密钥不被可执行文件入侵? 我知道不使用文字,而是在运行时通过一些预定步骤生成密钥,但是所有相同的密钥仍会在将其发送到AES初始化函数之前保留在内存中,因此可以很容易地进行检索。 AES显然非常安全,但是如果有人破坏了可执行文件,那对我有什么好处呢? 解决此问题时有一些惯例吗?     

解决方法

        无法做到这一点。这是例如DRM方案位于PC上:他们需要将密钥存储在内存中,以便可以将其提取出来。您可能会在不使用它时将其遮盖,但这仅是关于它。而且,如果您的应用程序很流行且分布广泛,那么有人会破解您的美味方案。这就是为什么某些公司将加密狗或TPM芯片用于高价值应用的原因。     ,        在数学理论中,有一种非常复杂的东西叫做“白盒密码术”。在这种情况下,以某种方式修改了AES算法,以便在加密过程中建立秘密。我不确切知道这是如何实现的,但是这个并不需要有一个初始化的密码,但是密码是算法的一部分。 攻击者可能会看到,您的AES实现有点“不同”,但是在执行的任何时间都无法在内存中看到密钥。攻击者唯一的机会就是复制整个白盒代码,但是很难对其进行反向工程-他将只能使用它。无论如何,取决于您使用AES的方式,这可能足以破解。