在不连接服务器的情况下偶尔在设备上进行安全认证

时间:2010-08-23 05:56:55

标签: security passwords

我正在开发一个服务器应用程序,它将有相当多的客户端设备访问它。 问题是我们无法保证客户端设备始终可以访问服务器。设备完全可以在网络外停留1周或更长时间。与此同时,我们仍然希望设备以自主方式工作,并附带必要内容的副本(连接到网络时自动更新)。

当然,这会导致一些与用户身份验证相关的安全问题。我们计划让设备拥有用户列表的副本。我们正在思考如何在设备上保护身份验证。显然,我们无法在更新包中以纯文本形式发送密码。

主服务器上的密码被加盐和散列,我们正在考虑使用某种散列(SHA1?),用于客户端设备可用的列表。

通过这样做,我们降低了攻击设备的标准(无盐)。

您是否有任何关于保持客户端设备尽可能安全的有效方法的建议?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您没有充分理由削弱客户端设备上的密码,请在客户端和服务器上使用相同的身份验证方案。客户端设备也可以处理盐。

答案 1 :(得分:0)

首先,您需要清楚攻击者是谁。在这种情况下,如果有人在哪里窃取设备怎么办?另一种情况是,如果有人在哪里与恶意客户端连接到服务器?如果有人在哪里嗅到交通怎么办?

要停止嗅探,应通过ssl(可能是https)完成所有通信。为防止恶意客户端,您可以通过硬编码的SSL证书识别​​每个客户端设备,并将这些凭据存储在数据库的服务器端。服务器可以使用来自CA的普通证书。如果设备被盗,您可以撤销本地数据库中的证书。完整的PKI不是必需的,尽管这是一个可以使用效果很好的情况。

将密码哈希值泄露给攻击者(客户端)始终是一个漏洞。将所有密码哈希值传递给客户端通常使用sql注入。这不是解决方案。

md5以多种不同的方式被打破,并在现实世界的攻击中被利用。 sha1更安全,仍然得到NIST的认可,但sha256是一个非常好的选择。必须使用随机值对密码哈希值进行格式化。

我能为您的密码问题考虑的安全解决方案是仅允许在连接到网络时进行身份验证。该用户可以被缓存,然后该用户可以注销并重新登录。这限制了攻击情形,但并未否定它。如果有人在哪里窃取设备,他也会有密码哈希,在这种情况下,用户必须被迫更改他的密码(希望这发生在攻击者有机会打破哈希之前)。

安全性较低的解决方案是使用重型散列函数,例如PBKDF2。这在winzip等应用程序中使用,其中密码哈希始终可供攻击者使用。缺点是 EXTREMELY SLOW ,因此无法用于普通的Web应用程序。