我问here我要求实施的协议,以及它的安全性。因为从一开始它似乎很清楚它是狗屎。因此,我问:
你们能指点我一些非常简单的登录协议(我在加密系统中是空的)吗?我正在开发应用程序的服务器端和客户端,并且我有自己的messengering系统,所以我有足够的自由。
您的建议只有2个特殊特征。
简单:此应用程序将要运行的网络并不特别不安全,我只想避免以纯文本形式发送密码
如果可能,不要太长时间的消息交换。越短越好。
答案 0 :(得分:4)
查看Challenge Response Authentication
答案 1 :(得分:2)
Three pass protocol会很方便。基本上,它归结为:
这样,密码永远不会以明文形式发送,也不会以加密密钥发送。这也是一个相对快速的协议,因为它(可能)依赖于symetric加密,这非常快。
答案 2 :(得分:2)
在数据库内容进入未经授权的人手中时,将密码哈希存储在数据库中并不是最佳安全措施。 没有办法直接反转哈希,但是有用于反转哈希(传递)单词的在线 dictinonaries (如here)。
在数据库中你应该存储类似的东西:
md5(login_name + domain_or_appname_salt + password);
中间的盐可以防止多种形式的字典攻击。
在客户端(在浏览器中),您将拥有一个包含用户名和密码的登录表单。一小段javascript会对userame + app_salt_和密码进行哈希处理,因此只有login_name和生成的哈希被发送到服务器。
现在,明文密码永远不会以纯文本形式发送到服务器。 所以你不必在这里依赖HTTPS。
可以在密码更新表单中使用相同的技术。因此,服务器永远不会知道明文密码。
我希望你从这个和其他答案中得到一些启发。
快乐黑客!
Huibert
答案 3 :(得分:0)
如果您的协议在TCP上运行,您只需以明文形式编写身份验证,然后使用SSL包装通信。例如,如果您使用端口1234作为协议,则可以关闭服务器上的该端口,并让客户端使用SSH对其进行隧道传输。这可以通过编程方式完成,这是一个非常常见的解决方案。
如果您的协议通过HTTP运行,则可以使用HTTPS以标准方式执行此操作。例如,基于HTTPS的基本身份验证足以满足您指定的需求。
另一方面,如果您不想在线路上发送密码,则需要进行质询响应身份验证。
这有一个缺点,即密码将在服务器上可用(以纯文本加密)。如果您不想在服务器上存储密码,那么您需要回到我的第一个示例。
答案 4 :(得分:0)
SASL是一种安全的身份验证机制。版本1.5 +的Java标准库中提供了对SASL的支持。