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

时间:2011-06-23 09:41:19

标签: security aes encryption-symmetric rijndael

我的软件使用的是AES Rijndael。

我使用SHA-256哈希从具有任意长度的字符串生成密钥,然后将其作为私钥和公钥传递,因为在这种情况下我不需要区分这两者。

如何保护我的密钥不被可执行文件侵入?

我知道不要使用文字,而是在运行时使用一些预定的步骤生成密钥,但所有相同的密钥在发送到AES初始化函数之前仍然在内存中,因此可以非常容易地检索然后。

AES显然非常安全,但如果有人破坏了可执行文件,那对我有什么好处呢?

解决这个问题时有一些常见的做法吗?

2 个答案:

答案 0 :(得分:5)

这不可能。这是例如基本问题。 PC上的DRM方案:它们需要在内存中使用密钥,因此可以将其提取出来。你可以在它不使用的时候掩盖它,但那就是它。如果您的应用程序很受欢迎并且分发,那么将会破解您的美味方案。这就是为什么有些公司使用加密狗或TPM芯片进行高价值应用的原因。

答案 1 :(得分:3)

有些东西 - 数学理论中非常复杂 - 称为“白盒密码术”。在这种情况下,AES算法以某种方式被修改,它在加密期间建立秘密。我不知道究竟是怎么实现的,但是这个不需要有一个初始化的秘密,但秘密是算法的一部分。 攻击者可能会看到,您的AES实现有点“不同”,但在执行过程中,密钥在内存中是可见的。攻击者唯一的机会就是复制整个白盒代码,但很难对其进行逆向工程 - 他只能使用它。无论如何,根据您使用AES的方式,这可能足以让您入侵。