在胖客户端应用程序中保护API密钥

时间:2020-03-05 18:44:39  来源:igfitidea点击:

在一个应用程序中,我使用了Secret Keys来计算API调用的哈希值。在.NET应用程序中,使用Reflector之类的程序从程序集中提取信息以包含这些键非常容易。

使装配模糊不清是固定这些钥匙的好方法吗?

解决方案

回答

可能不是。

查看加密技术和Windows内置的信息隐藏机制(例如,DPAPI并将密钥存储在ACL受限的注册表项中)。这与获得安全性和将应用程序保持在同一系统上一样好。

如果我们正在寻找一种方法来阻止有人坐在机器旁来获取信息,那就算了。如果确定某人并且可以不受限制地访问不受我们控制的计算机,则不可能100%确定在所有情况下数据都受到保护。有决心的人会愿意的。

回答

我不会这样认为,因为混淆(至少据我所知)会简单地弄乱方法名称,以使(但并非不可能)难以理解代码。这不会更改实际密钥的数据(我猜我们已将其存储在某个常量中)。

如果只是想让它变得更难看,可以对纯文本(例如ROT-13之类)运行简单的密码,这样至少不会将其以明文形式存储在代码本身中。但这当然不会阻止任何坚定的黑客访问密钥。强大的加密方法无济于事,因为我们仍然需要在代码中存储THAT的密钥,因此没有任何保护措施。

我能想到的唯一真正安全的事情是将密钥以某种方式保留在应用程序之外,然后限制对密钥的访问。例如,我们可以将密钥保存在单独的文件中,然后通过基于操作系统级别的基于用户的限制来保护文件;那可能会工作。我们可以对数据库连接执行相同的操作(同样,依靠基于用户的访问限制将未经授权的用户拒之门外)。

我曾想过要为我的应用程序执行此操作,但是我从未实现过。

回答

DannySmurf是正确的,我们不能向运行应用程序的人员隐藏密钥;这是对的。如果应用程序可以获取密钥,那么该人也可以。

但是,我们到底想完成什么?

根据它的含义,通常有很多方法可以实现目标,而不仅仅是依靠在用户的计算机上保留秘密的"秘密"。