用户身份验证会成为集中式服务器的性能瓶颈吗?

Can User Authentication become a performance bottleneck in Centralized Server?

为了解释上下文,让我们以单线程聊天服务器为例,它使用异步事件通知(例如 epoll 等)来处理 IO,并且在用户身份验证期间广泛使用 PKI 和其他加密工具,并且在本地处理和完成的注册过程。虽然消息间接(从源到目的地)是一个 gentle-on-CPU 数据密集型过程,但很少有加密过程(例如使用 RSA 密钥对消息进行签名)计算量很大,并且可能成为整个 IO 中的缓慢路径环形。

攻击者能否利用这条慢速路径在短时间内发出过多的注册请求,从而大幅降低服务器的性能?如果是,那么减少影响的方法是什么?如果这是一个真正的威胁,那么大型服务提供商如何应对它?

让我们扩大讨论范围以涵盖联合 XMPP 服务器。

虽然不是这方面的专家,但以下是常识性的思考,或许能解答你的疑问。

注册过多

这就是大多数注册表单使用 captcha 的原因。

身份验证过多

身份验证的计算量并不大;它们通常涉及(加盐)哈希值的比较。 正如@SergeBallesta 指出的那样,这是完全错误的;为了防止暴力攻击,密码散列似乎在设计上很慢。事实上,this post mentions the issue of vulnerability to DDoS, and suggests IP ban as a counter-measure (see paragraphs below and see also this thread 推荐的 BCrypt 轮数)。

身份验证试验的次数通常使用会话参数进行限制,拒绝与现有会话无关的身份验证请求似乎也不是不合理的。

短时间内来自同一 IP 的大量身份验证请求可能会被监控并暂时禁止该 IP。这通常会涉及一个独立于应用程序代码本身的监控进程。

留言太多

这里我不太确定,如果遇到这种情况,我可能会测试一下我要说的话。我认为在最坏的情况下,由于低级加密(例如 SSL)而产生的开销与应用程序处理时间相当,所以我不会为此担心。

关于消息路由,您可能会在每次经过身份验证的用户发送 N 条消息时生成一个新令牌,在每次提交时更新令牌有效性并在令牌过期时触发更新。这可能会导致轻微的开销,但它允许限制每个用户的消息提交速率,因此可以控制由于消息路由而导致的整体服务器负载。

希望对您有所帮助。