从用户那里获取敏感数据并进行存储而不散列,以便可以还原

时间:2018-10-18 22:06:16

标签: c# security encryption .net-core

在从用户那里获取并存储密码时,我想就应用程序的安全性寻求一些建议。

我正在使用.NET Core(控制台项目)和Selenium WebDriver开发工具来自动化网站上的过程,这需要进行身份验证,而我的担忧如下:

1。从用户那里获取密码(使用控制台)并安全地进行处理

2。以安全的方式存储密码

关于第一点:

  • 我发现一个answer on SO指出 使用 SecureString 并不能完全防止敏感数据在某些时候被读取 必须转换为普通字符串。我遇到了the solution 使用SecureString从控制台获取用户输入,但是 根据写的 here SecureStringToBSTR必须用于处理文件中的敏感数据 安全的方式。但是,SecureStringToBSTR is not included in .NET Core是因为 仅适用于Windows,因此卡住了。

第二点:

  • 我无法对密码进行哈希处理,因为必须将其还原。起初我 想使用平台特定的解决方案并检查当前 应用中的平台,但经过研究后,我发现Windows仅存在DPAPI的API,MacOS中没有KeyChain的API(there's一些解决方法),Linux没有统一的方法完全存储敏感数据。我能想到的唯一解决方案是强制用户生成公用/专用密钥(例如使用RSA which is available on all platforms,使用公用密钥加密密码并要求使用专用密钥来检索密码。然后,我将存储加密的appsettings.json中输入密码,或作为here中指定的环境变量输入密码。不幸的是,Azure Key Vault是not free

我知道有很多与此类似的问题,但是:

  • 我找不到有关存储密码的任何信息,大多数资料都集中在散列密码上,但是,它不适用于描述的用例
  • 几乎所有内容都集中在ASP.NET Core MVC上

预先感谢您的提示。

0 个答案:

没有答案