在app中通过HTTPS发送md5哈希或原始密码

时间:2014-02-06 09:44:43

标签: ios web-services security hash md5

我的应用程序我通过电子邮件登录

首次登录/注册

客户端

  • 输入密码
  • 计算md5哈希值
  • md5哈希存储在钥匙串(clinet上的安全位置)
  • md5哈希发送到服务器(HTTPS)

服务器

  • 获取md5哈希密码并使用带有盐的bcrypt来存储它
  • 发回通讯令牌

客户端

  • 列表项
  • 使用令牌直至过期

自动重新登录

客户端

  • 从钥匙串中取出md5哈希
  • 发送到服务器(HTTPS)...

手动重新登录

客户端

  • 用户再次输入密码
  • 计算(并存储)md5哈希
  • md5发送到服务器......

我读过的文章,在客户端

上发送(并存储)密码为raw

处理md5,而不是原始(通过HTTPS)发送它有什么好处吗? (有什么问题吗?)(理论上,用户可以使用相同的md5输入另一个密码,但仍能登录 - 这是一个有效的问题吗?)

上面描述的这种机制是否合法?

1 个答案:

答案 0 :(得分:0)

  

处理md5有什么好处,而不是发送它(通过   HTTPS)?

在安全方面,我会说并非真的,HTTPS已经阻止了man in the middle attack所以如果有人试图嗅探密码,它就无法正常工作。在这种情况下,您不会从哈希密码中获得太多收益。

  

理论上,用户可以使用相同的md5输入另一个密码,并且   仍然可以登录 - 这是一个有效的问题吗?

这是完全可能的,你甚至可以找到着名的“碰撞表”攻击,因为这个问题,但我认为这不是一个有效的问题。请记住,散列算法接收具有X长度的字符串作为输入,并将其转换为固定长度的字符串。这基本上意味着您将拥有数千/数百万的输入,这些输入将产生相同的输出。

编辑: 在向服务器发送MD5时,您可能想要考虑的一点是,您无法对密码强制执行规则,甚至无法使用密码执行任何操作。因此,您可能希望将密码原样发送到服务器,并让它处理“密码存储逻辑”。