Lew*_*rin 8 c# asp.net security passwords password-protection
我知道“我如何安全地存储密码?” 问题在这里被问过很多次;我知道答案总是“永远不要这样做!存储哈希值,永远不要存储密码!使用 bcrypt!”
但是当您不能使用哈希进行身份验证时呢?例如:自动化流程。假设我编写了一个自动化应用程序,它需要登录到 SFTP 站点或某种需要用户名/密码的外部服务。我无法使用散列值对外部服务进行身份验证,那我该怎么办?
我标记这个问题有C#
和ASP.NET
,因为这些是两个领域,这个问题也适用于专门针对我的情况。
编辑:由于评论中提出的讨论,让我澄清我试图解决的威胁:我想防止攻击者能够读取用于访问外部服务的纯文本密码。这意味着如果他们以某种方式获得了对我们网络或数据库的非管理员访问权限,即使使用数据库转储,他们也无法读取纯文本密码。
有不同的选项,既使用密钥对密码进行加密,又使用 HSM 模块保护密钥存储。
选项 (1):将数据库与 HSM 模块结合使用
您可以在数据库中存储加密的密码,并受益于 SQL 2016“始终加密(数据库引擎)”中的功能。始终加密允许客户端加密客户端应用程序内的敏感数据,并且永远不会向数据库引擎(SQL 数据库或 SQL Server)泄露加密密钥。
您可以将硬件安全模块 (HSM) 与始终加密结合使用。
硬件安全模块 (HSM) 是保护数字密钥并执行加密操作的物理设备。这些模块传统上以插入卡或直接连接到计算机或网络的外部设备的形式出现。
当您获得 HSM 时,您还可以获得实现通用 API 的软件库,例如 Microsoft Crypto API 和 Cryptography API。这些 API 称为加密服务提供商 (CSP) 和加密 API:下一代 CNG 提供商。
您的应用程序可以使用这些 API 与 HSM 进行通信。
为了更好地保护 HSM 模块,您可以: - 将 HSM 连接到数据库服务器。- 将 HSM 与操作系统服务器的管理员登录信息绑定。
更多细节:
此外,Oracle数据库和其他引擎可以提供HSM加密
选项 (2):使用 HSM 模块将密码存储在受保护存储中的文件中:
加密包含密码的文件。这可以通过操作系统、应用程序或专门的实用程序来完成,例如专门设计用于保护密码机密性的密码管理软件。
使用操作系统访问控制功能来限制对包含密码的文件的访问。例如,主机可以配置为仅允许管理员和以管理员级权限运行的某些进程访问密码文件,从而防止用户和用户级进程访问密码。
归档时间: |
|
查看次数: |
2440 次 |
最近记录: |