安全地发送纯文本密码?

cit*_*spi 9 php security encryption passwords objective-c

我正在开发一个iOS应用程序,用户可以填写密码.然后使用POST或GET将密码发布到我站点上的PHP页面.(它必须是纯文本,因为它在脚本中使用.)

除了HTTPS,有什么办法可以保护密码吗?在Obj-C中加密,然后在PHP中解密?

注意:不发送用户名...只有密码被发布到服务器.

编辑:澄清一下,David Stratton是正确的......我试图阻止公共场所的恶意嗅探器在发布到服务器时简单地读取明文密码.

Hal*_*yon 9

挑战响应大纲

让我们假设您有单向散列函数abc(实际使用md5sha1 PHP的加密强散列算法请参阅:password_hash).

您存储在数据库中的密码是abc(password + salt)(salt单独存储)

服务器生成随机质询challenge并将其发送到客户端(带有salt)并计算预期响应:abc(challenge + abc(password + salt))

然后客户端计算:abc(user_password + salt)并应用challengeget abc(challenge + abc(user_password + salt)),即发送到服务器,服务器可以轻松验证有效性.

这是安全的,因为:

  • 密码永远不会以纯文本格式发送,也不会以明文形式存储
  • 发送的哈希值每次都会更改(减轻重放攻击)

有一些问题:

你怎么知道送什么盐?好吧,我从来没有真正找到解决方案,但使用确定性算法将用户名转换为盐解决了这个问题.如果算法不具有确定性,则攻击者可能会找出存在哪个用户名,哪些用户名不存在.这确实需要您拥有用户名.或者你可以只有一个静态盐,但我对密码学知之甚少,无法评估该实现的质量.


Ala*_*lan 7

重新考虑不使用HTTPS.HTTPS可以很好地防御多种攻击.

通常没有理由传输密码.通过传输密码,您发送的是有价值的数据,并且与之相关的风险更大.

通常您散列密码并提交哈希值.在服务器端,你比较哈希,如果匹配,很好.

显然,使用这种方法,哈希很重要,你必须防止重放攻击.您可以让您的服务器生成加密安全的一次性使用盐,将其传递给客户端,盐和哈希密码,并比较哈希服务器端.

您还需要防止对密码的反向哈希攻击.IE,我有一个哈希,我可以将它与一堆预先生成的哈希进行比较,以找到原始密码.

  • 如果您同时拥有客户端和服务器,则可以使用HTTPS的自签名证书. (2认同)