but most web applications would not be capable of handling more than 100 sign-in requests per second.
O que isto significa é: O autor desse artigo faz uma alegação infundada (mas não totalmente irracional) de que enviar mais de 100 assinaturas por segundo seria um efetivo ataque de negação de serviço contra "a maioria" aplicações web.
Para cada entrada, um aplicativo da web típico teria que hash a senha e compará-la com a representação em hash no banco de dados. Se o webapp usar uma boa função de hash , isso de fato usa uma boa quantidade de CPU. Portanto, a alegação talvez não seja totalmente irracional, mas, na minha experiência, a maioria dos aplicativos da Web usa apenas um hash simples como o MD5, o SHA1 ou o SHA256, que não exige muita CPU.
O grande erro nesse artigo vem aqui:
Note: The examples below are based on 100 password request per second.
Nos próximos parágrafos, o autor faz sugestões para a força da senha, com base em uma taxa máxima de ataque de 100 tentativas por segundo. Esse pode ser um número razoável para um ataque on-line , em que o invasor se conecta ao aplicativo da Web ao vivo.
Mas, para um ataque off-line , em que o invasor fez o primeiro download de todo o banco de dados por meio de um ataque de injeção SQL, isso é totalmente errado. Por exemplo, aqui está uma implementação da NVIDIA CUDA para o SHA1 , que pode ser 47 milhões de hashes por segundo em um pequeno cluster de servidores.
web applications only need to be able to protect against 100 attempts per second?
Desculpe, mas não, você está entendendo mal essa parte. Agora, você está analisando do ponto de vista do proprietário do webapp tentando proteger um ataque de adivinhação de senha de força bruta on-line. Você deve tomar uma ação longa antes de chegar a isso.
- Se as contas individuais tiverem um determinado número de tentativas de login com falha (3,5,10,25 todas podem ser números razoáveis), a conta deverá ser desativada temporariamente. (Ou melhor ainda, não desabilite a conta, mas diminua as tentativas de login, ou seja, limitação de tarjeta / taxa.)
- Se você estiver obtendo centenas de tentativas de login com falha por segundo em todo o sistema, sua estrutura de registro / monitoramento (Nagios etc) deverá estar gritando alertas para que você fique ciente do ataque.
Por último, você pode querer ler as Perguntas frequentes que acompanham o artigo , torna os autores mais claros. Ele está falando sobre como os usuários finais podem gerar senhas razoavelmente seguras e ainda fáceis de lembrar - não sobre o tratamento das senhas no servidor.
Atualização, após a edição da pergunta:
Based on the current average performance of most web servers, what is the maximum number of login attempts possible during a brute force attack?
Para um simples hash como o SHA1, eu diria que um único servidor quad-core, assumindo boas técnicas de programação, poderia lidar com um número muito grande de 10.000 solicitações por segundo. Dependerá totalmente do framework webapp & programação utilizada, porque a sobrecarga de manipulação da conexão HTTP dominará a velocidade de cálculo do SHA1. Se estivermos usando o Apache no modo Prefork com o fx PHP, os números serão muito bons, talvez 2.000 solicitações por segundo por servidor.
let's say you have a requirement for a system that cannot use tar-pitting or temporary account disabling
Em seguida, altere os requisitos - isso está além do reparo.
the number of actual login attempts per second on a web-based system is very useful.
Mais uma vez, você deve alertar sobre um ataque de força bruta longo antes que ele fique tão grande.