繁体   English   中英

有时在设备上进行安全身份验证,而无需连接到服务器

[英]Secure authentication on a device occasionally without connection to a server

我正在开发一个服务器应用程序,它将有相当数量的客户端设备对其进行访问。 问题是我们不能保证客户端设备将始终可以访问服务器。 设备完全可能在网络外部运行1周或更长时间。 同时,我们仍然希望设备以必需的内容的副本(在连接到网络时自动更新)以自主方式工作。

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

主服务器上的密码经过加密和哈希处理,我们正在考虑使用某种哈希(SHA1?)来为客户端设备提供可用列表。

通过这样做,我们降低了对设备进行攻击的门槛(无盐)。

您是否对有效保护客户端设备的安全性有何建议?

谢谢!

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

首先,您需要明确攻击者是谁。 在这种情况下,如果有人在哪里偷设备? 另一种情况是,如果有人通过恶意客户端连接到服务器,该怎么办? 如果有人在哪里监听流量该怎么办?

要停止嗅探,所有通信都应通过ssl(可能是https)进行。 为了防止恶意客户端,您可以通过对SSL证书进行硬编码来识别每个客户端设备,并将这些凭据存储在数据库的服务器端。 服务器可以使用来自CA的普通证书。 如果设备被盗,则可以在本地数据库中吊销证书。 虽然可以使用完整的PKI,但可以得到很好的效果,但这不是必需的。

将密码散列溢出到攻击者(客户端)始终是一个漏洞。 通常使用sql注入将所有密码哈希转移到客户端。 这不是解决方案。

md5以多种不同方式被破坏,并在现实世界中被利用。 sha1更安全,并且仍被NIST批准,但是sha256是一个很好的选择。 随机添加盐值密码散列是必要的。

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

一种不太安全的解决方案是使用繁重的哈希函数,例如PBKDF2 它用于Winzip之类的应用程序中,攻击者始终可以使用密码哈希。 缺点是它的速度极慢 ,因此不能用于普通的Web应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM