gpt4 book ai didi

c# - 安全密码存储和传输

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:06 24 4
gpt4 key购买 nike

我正在为我的组织开发一个新的用户存储,现在正在处理密码存储。加盐、HMAC 等概念对我来说都很好——我想存储用户的密码,无论是加盐和散列、HMAC 散列,还是 HMAC 加盐和散列——不确定最好的方法是什么——但理论上它不会没关系,因为如果需要,它可以随着时间的推移而改变。

我想要一个 XML 和 JSON 服务,可以充当客户端应用程序的安全 token 服务。

我已经为另一个系统开发了一个,它要求客户端首先使用 SHA1 对明文密码进行双重加密,然后使用服务器仅为该 session 提供的 128 位唯一 key (或随机数)使用 HMACSHA1 对明文密码进行双重加密。

我想为新系统重复这种技术 - 将算法升级到 SHA256(之所以选择是因为所有上述平台都可以轻松实现实现 - 而且它比 SHA1 强大得多) - 但有一个问题。

如果我将密码作为加盐散列存储在用户存储中,则需要向客户端发送该加盐,以便在使用唯一 session key 进行 HMACd 之前构造正确的散列。这将完全违背首先使用盐的观点。同样,如果我不使用盐来存储密码,而是使用 HMAC,它仍然是同样的问题。

目前,我能看到的唯一解决方案是对用户存储中的密码使用裸 SHA256 哈希,这样我就可以将其用作服务器和客户端的起点,以获得更安全的加盐/hmacd Web 服务的密码传输。

这仍然会使用户存储在被访问时容易受到字典攻击;尽管这不太可能 - 假设它永远不会发生,但我并不满意。

非常感谢任何输入。

最佳答案

HTTPS 是解决这个问题的最佳方案。

你在这个问题上投入了大量的加密原语,希望它会消失。一般来说,您提出的协议(protocol)似乎浪费资源,我建议研究其他身份验证协议(protocol)并想办法简化您的协议(protocol)。 Practical Cryptography是一本优秀的书。

最大的问题是在客户端和服务器之间传输 secret 。为了正确实现这一点,您需要使用 Diffie-Hellman key 交换。幸运的是,已经用 javascript 编写了一个:
http://enanocms.org/News:Article/2008/02/20/Diffie_Hellman_key_exchange_implemented

另一个问题是我看不到客户端如何确定它正在与正确的服务器通信。 SSL 使用非对称加密,由 PKI 支持,您将无法在 JavaScript 中实现。

消息摘要不是加密算法。泄露密码哈希是绝对不行的,因为密文旨在防止窃听。

将密码盐泄露给攻击者会降低您密码的安全性。如果攻击者有盐,那么他们可以使用字典来攻击密码,如果没有盐,他们将不得不随机猜测,从而使密码存储系统更加健壮。

关于c# - 安全密码存储和传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com