【发布时间】:2016-03-19 17:53:17
【问题描述】:
当我想知道“但是应用程序使用的密钥应该放在哪里?”时,我在这里向answering 提出了一个建议使用 .NET 加密库(例如 AesManaged)的问题。
我有一个秘密需要存储在我的应用程序中,它应该由应用程序使用但用户不知道,我不知道该怎么做。
我所说的那种秘密不是与用户相关的东西(例如,用户对第三方服务的密码),而是与应用程序或开发人员相关的东西,用户不应该知道(例如,如果用户知道应用程序的 OAuth 客户端机密,他可以冒充开发人员对抗第三方服务)。
我知道 Window 的 Credential Manager、Data Protection API 等,但它们在这种情况下无济于事,因为它们旨在保护用户的秘密,而且它们中的大多数都是运行时解决方案,而我需要的是要保护的是“常量”和“编译时”。
我完全清楚,我将采取的任何行动都只会延迟熟练且有决心的用户访问机密,因为如果应用程序必须以明文形式访问它,那么用户也可以以某种方式访问它。我正在寻找的是防止临时用户“在记事本中”打开应用程序并获取秘密。
我完全清楚,任何一种措施都只是暂时阻止熟练且坚定的用户访问此类机密,我并不是要求解决问题的防弹解决方案,我对我有哪些选择感兴趣除了写var myClientSecret = "MySuperSecretClientSecretKey";来存储这些信息。
var myClientSecret = Encoding.UTF8.GetBytes("MySuperSecretClientSecretKey") 是唯一的选择吗?
该框架是否提供任何帮助我完成这项任务的东西?
【问题讨论】:
-
这太宽泛了,“最佳实践”也使它基于意见。此外,已经存在很多关于此主题的现有问题,请尝试搜索。 stackoverflow.com/questions/4967325/…、stackoverflow.com/questions/16957492/… 等等。此外,“对用户不可见”和“应用程序需要正常运行”是相互排斥的。
-
更多的理由是它过于宽泛和封闭,或者不清楚和封闭。它只是无处可去。为什么不关注您的需求,并在堆栈中找到答案。它就在那里。
-
您在问题中也没有提及任何这些。非对称或分组密码或其他系统的控制。它非常广泛,不清楚且基于意见。记住您是如何到达标签中的位置的。研究。
-
您需要退后一步,记住堆栈上的答案最好以相对简短的答案而不是页面形式提供。
-
我是说做研究。如果您希望您的密码对任何特定方可用或不可用,您可以通过将密码存储在保险库中来实现。您需要阅读模拟的含义。我已经完成了,因为我现在正在处理其他问题
标签: c# security encryption cryptography