我在answering提出了一个问题,建议使用.NET的加密库(例如AesManaged),当我想知道:“但是应该放置应用程序所使用的密钥? ”
我有一个秘密,我需要存储在我的应用程序中,应该由应用程序使用,但用户不知道,我不知道该怎么做。
我所谈论的那种秘密不是与用户相关的东西(例如,用户对第三方服务的密码),而是与应用程序或开发人员相关的东西,而不应该是用户(例如,如果用户知道应用程序的OAuth客户端密钥,他可以模仿开发人员对抗第三方服务)。
我知道Window的Credential Manager,Data Protection API等等,但他们在这种情况下没有帮助,因为他们的目的是保护用户'秘密,而且大多数是运行时解决方案,而我需要保护的是“常量”和“编译时”。
我完全知道我将采取的任何行动只会延迟熟练和确定的用户访问秘密,因为如果应用程序必须以明文形式访问它,用户也可以以某种方式访问它。我正在寻找的是防止临时用户“在记事本中”打开应用程序并获取秘密。
我完全清楚任何一种措施只会暂时阻止熟练和坚定的用户访问此类秘密,我不会要求解决问题的防弹解决方案,我是除了编写var myClientSecret = "MySuperSecretClientSecretKey";
以存储此类信息之外,我还对我有哪些选择感兴趣。
var myClientSecret = Encoding.UTF8.GetBytes("MySuperSecretClientSecretKey")
是唯一的选择吗?
框架是否提供了帮助我完成此任务的任何内容?
答案 0 :(得分:1)
将秘密存储在智能卡中。购买软件时,请向用户发送智能卡。
无法读取或克隆存储在智能卡中的密钥。