多个平台上的密码散列(Android,Phone,W8M)

时间:2012-12-17 15:37:02

标签: c# android objective-c hash passwords

我们目前正在.Net中开发一个Web应用程序,该应用程序还将安装Android,iPhone和Windows Mobile 8应用程序。所有这些应用程序都需要具有统一的登录系统。我们的网站和网络服务将使用SSL,但显然我们希望尽我们所能确保用户密码保持安全。因此,我们正在寻找可在整个上述平台中使用的通用密码散列函数。

目前我们发现的唯一常见的是SAH256但是我想使用更强一些的东西。 C#有我想要使用的Rfc2898DeriveBytes类(并且可以在网站和Win8 Mobile中使用)但是有没有针对Android / Java和iOS / Objective C的任何实现?如果不能使用这将是我们的下一个最佳选择?

3 个答案:

答案 0 :(得分:4)

在存储用户密码并在登录尝试期间进行比较时,应在后端使用密码哈希功能。

登录scenerio:

用户通过您应用的某个版本通过SSL发送密码。

后端服务器散列从用户发送的密码,从数据存储中检索存储的散列,将发送的密码的散列与存储的散列进行比较。

哈希匹配,允许用户访问,否则访问被拒绝。

SSL加密可防止在从客户端传输过程中泄露密码,将密码存储为哈希可防止在数据库被破坏时泄露用户密码。

使用此场景,由于散列全部在后端服务器上完成,因此只需要一个哈希算法实现。

答案 1 :(得分:2)

PBKDF2不适合您的情况。它主要用于防止攻击者已拥有您的数据(即加密文件)时的攻击。它通过占用CPU来强制延迟来强制执行此操作。因为您正在执行auth服务器端,所以您可以轻松保存一些CPU,只需等待一两秒即可在客户端输入错误时向客户端发送响应。只需使用盐渍哈希(如HMAC),你就可以了。

如果您使用的是SSL,那么您的密码是安全的。您可以做得更好的唯一方法是实现完整的公钥加密,这可以防止MITM攻击。 SSL甚至内置了这个。

通过网络发送密码哈希并不比发送密码更安全。是的,密码文本对攻击者是隐藏的,但是他们仍然有哈希,如果他们有,他们不需要密码。对于SSL,您的纯文本也受到保护。

答案 2 :(得分:0)

虽然我从未亲自使用它,但bcrypt似乎拥有您正在寻找的所有实现。

http://en.wikipedia.org/wiki/Bcrypt#See_also

希望有所帮助。