3

我正在制作一个有趣的聊天程序,我决定添加加密。但是,我对此并不陌生,所以我想知道的是,这在密码学上是否安全,这是一种做事的好方法吗?

这是登录:

开始:

客户端发送用户名

如果用户存在,则服务器为用户发送存储的盐

然后客户端发送 SHA-2 散列(Salt + 明文密码)

服务器将其与存储的盐 + 密码的散列结果进行比较,如果相同,则用户已成功登录,从那里开始加密是 AES。

结尾

有什么毛病吗?我不认为有,但我不想继续制作程序,只是被告知加密不起作用!另外,有人有任何好的链接来进一步阅读密码学吗?

4

6 回答 6

3

这对数据库/服务器的攻击并不安全,实际上似乎违背了使用加盐哈希的目的。如果客户端发回一个加盐哈希来代替他们的密码,那么这与他们的密码基本相同。

如果攻击者破坏了您的数据库,他们不必强制任何人的密码登录,他们只需使用加盐哈希,他们就可以成为他们想成为的任何人。

如果您使用 SSL,您可以通过加密线路发送明文密码,并在服务器上进行哈希处理。然后攻击者必须暴力破解哈希或攻击 SSL 通道。

此外,使用 PBKDF2、bcrypt 或 scrypt 作为您的密码哈希算法,而不是 SHA-2。您想要能够抵抗蛮力攻击的东西。

于 2013-02-12T04:07:18.857 回答
2

确保您的散列传输使用 SSL 加密,因为如果散列被泄露,您的用户帐户就会被泄露。

正如 CodesInChaos 的评论中提到的,在 SSL 中验证服务器的公钥是重要必要的。

于 2013-02-11T21:39:07.190 回答
1

简短的回答是“不,为什么还要碰运气?” 冗长的答案太长而且太复杂了。有太多未知的变量我们无法给出一个好的答案:客户端和服务器之间的链接是否加密?您是否验证要连接的服务器的身份?等等。

一般来说,你不应该重新发明轮子,你应该避免自制密码学。对于密码,考虑使用scrypt并感到高兴。

如果您想验证用户输入的密码,您可能还需要考虑实施质询-响应身份验证系统,或者至少实施一些针对重放攻击的保护。您当前的解决方案是完全不安全的,因为它使加盐哈希本身成为密码。攻击者可以在不知道密码的情况下登录该帐户。

同样,不要发明自己的东西。使用由密码学家和整个社区设计和验证的协议。维基百科是您开始研究的好地方。Bruce Schneier 的“应用密码学”一书是一个很好的资源,每个软件开发人员都应该在他们的图书馆中拥有它。

于 2013-02-11T21:32:27.130 回答
1

只要此交换是通过 SSL 进行的,就应该没问题。此外,如果您打算使用 SHA-2 系列的成员,请使用 SHA-512。今天任何少的事情都是不可接受的。

您描述的协议基本上是标准用户/密码网站登录+盐交换。

更好的是在服务器上进行加盐和 SHA 散列。让用户通过 SSL 以纯文本形式传输他们的密码,并且永远不要泄露盐。

JChatd是一个基于 SSL 的点对点聊天客户端示例。

于 2013-02-11T21:45:48.700 回答
0

客户端可以发送 username 和 sha(password) ,服务器可以进行转换和比较,服务器不会为用户发送盐

这是关于密码学的好课程

https://class.coursera.org/crypto/class/index
于 2013-02-11T21:37:49.047 回答
0

我不明白你描述的

如果用户存在,则服务器为用户发送存储的盐

在这里发送什么?密码的哈希?
如果是,则没有安全性。这个想法是用户向客户端提供密码,客户端将加密的哈希发送到服务器进行比较。如果匹配,则用户已通过身份验证

于 2013-02-11T21:40:13.553 回答