我的软件使用的是 AES Rijndael。
我使用 SHA-256 哈希从任意长度的字符串生成密钥,然后将其作为私钥和公钥传递,因为在这种情况下我不需要区分两者。
如何保护我的密钥不被从可执行文件中窃取?
我知道不要使用文字,而是在运行时通过一些预先确定的步骤生成密钥,但是在发送到 AES 初始化函数之前,密钥仍然会在内存中,因此可以很容易地检索到。
AES 显然非常安全,但是如果有人破坏了可执行文件,那对我有什么好处呢?
解决这个问题时有一些常见的做法吗?
我的软件使用的是 AES Rijndael。
我使用 SHA-256 哈希从任意长度的字符串生成密钥,然后将其作为私钥和公钥传递,因为在这种情况下我不需要区分两者。
如何保护我的密钥不被从可执行文件中窃取?
我知道不要使用文字,而是在运行时通过一些预先确定的步骤生成密钥,但是在发送到 AES 初始化函数之前,密钥仍然会在内存中,因此可以很容易地检索到。
AES 显然非常安全,但是如果有人破坏了可执行文件,那对我有什么好处呢?
解决这个问题时有一些常见的做法吗?
这是做不到的。这是PC上例如DRM方案的基本问题:它们需要在内存中拥有密钥,以便可以提取它。您可以在它不使用时隐藏它,但仅此而已。而且,如果您的应用程序很受欢迎并且是分布式的,那么有人会破解您的美味方案。这就是为什么一些公司将加密狗或 TPM 芯片用于高价值应用的原因。
有一种东西——在数学理论中非常复杂——叫做“白盒密码学”。在这种情况下,AES 算法被修改了,它在加密期间建立了秘密。我不确切知道,这是如何实现的,但是这个不需要有一个初始化的秘密,但秘密是算法的一部分。攻击者可能会看到,您的 AES 实现有点“不同”,但在执行过程中,密钥在内存中是不可见的。攻击者唯一的机会是复制整个白盒代码,但很难对其进行逆向工程——他只能使用它。无论如何,根据您使用 AES 的方式,这可能足以闯入。