【问题标题】:How can I store secrets in my application?如何在我的应用程序中存储秘密?
【发布时间】:2016-03-19 17:53:17
【问题描述】:

当我想知道“但是应用程序使用的密钥应该放在哪里?”时,我在这里向answering 提出了一个建议使用 .NET 加密库(例如 AesManaged)的问题。

我有一个秘密需要存储在我的应用程序中,它应该由应用程序使用但用户不知道,我不知道该怎么做。

我所说的那种秘密不是与用户相关的东西(例如,用户对第三方服务的密码),而是与应用程序或开发人员相关的东西,用户不应该知道(例如,如果用户知道应用程序的 OAuth 客户端机密,他可以冒充开发人员对抗第三方服务)。

我知道 Window 的 Credential ManagerData Protection API 等,但它们在这种情况下无济于事,因为它们旨在保护用户的秘密,而且它们中的大多数都是运行时解决方案,而我需要的是要保护的是“常量”和“编译时”。

我完全清楚,我将采取的任何行动都只会延迟熟练且有决心的用户访问机密,因为如果应用程序必须以明文形式访问它,那么用户也可以以某种方式访问​​它。我正在寻找的是防止临时用户“在记事本中”打开应用程序并获取秘密。

我完全清楚,任何一种措施都只是暂时阻止熟练且坚定的用户访问此类机密,我并不是要求解决问题的防弹解决方案,我对我有哪些选择感兴趣除了写var myClientSecret = "MySuperSecretClientSecretKey";来存储这些信息。

var myClientSecret = Encoding.UTF8.GetBytes("MySuperSecretClientSecretKey") 是唯一的选择吗?

该框架是否提供任何帮助我完成这项任务的东西?

【问题讨论】:

  • 这太宽泛了,“最佳实践”也使它基于意见。此外,已经存在很多关于此主题的现有问题,请尝试搜索。 stackoverflow.com/questions/4967325/…stackoverflow.com/questions/16957492/… 等等。此外,“对用户不可见”和“应用程序需要正常运行”是相互排斥的。
  • 更多的理由是它过于宽泛和封闭,或者不清楚和封闭。它只是无处可去。为什么不关注您的需求,并在堆栈中找到答案。它就在那里。
  • 您在问题中也没有提及任何这些。非对称或分组密码或其他系统的控制。它非常广泛,不清楚且基于意见。记住您是如何到达标签中的位置的。研究。
  • 您需要退后一步,记住堆栈上的答案最好以相对简短的答案而不是页面形式提供。
  • 我是说做研究。如果您希望您的密码对任何特定方可用或不可用,您可以通过将密码存储在保险库中来实现。您需要阅读模拟的含义。我已经完成了,因为我现在正在处理其他问题

标签: c# security encryption cryptography


【解决方案1】:

将秘密存储在智能卡中。购买软件时将智能卡发送给用户。

无法读取或克隆存储在智能卡中的密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 2011-07-28
    • 2023-04-05
    • 1970-01-01
    • 2011-10-30
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多