Sinal comportamental colapsa contra replay competente: uma medição
Com dado humano real, a dinâmica de mouse separa pessoa de script simples quase perfeitamente e cai a um terço da taxa de acerto contra um replay suave do próprio movimento humano; a dinâmica de teclado vai ao acaso. Observação passiva não distingue uma cópia competente do original, então o sinal passivo serve para decidir quando desafiar, nunca como prova de presença.
- Método
- Três conjuntos públicos de dado humano (mouse livre, teclado com texto fixo e teclado com texto livre) contra scripts em quatro níveis de sofisticação, mais um replay suave de traços humanos reais, validado por um portão que confere se ele preserva a microestrutura do movimento. Métrica no ponto de operação: taxa de acerto de humano com falso alarme de no máximo 1%, avaliada por sessão e entre pessoas, com a pior pessoa como indicador. Sem conteúdo de tecla capturado; sem juntar conjuntos numa classe só.
- Fonte
- Bancada de medição da Hummand (repositório privado). Dados humanos: Balabit Mouse Dynamics Challenge (mouse), Killourhy e Maxion, CMU (teclado, texto fixo), e Dhakal et al., Aalto 136M (teclado, texto livre). Medição de 2026-06-27.
- Tags
- presença · replay · medição · sinal-passivo
Rótulo honesto: o que se mede aqui é uma trilha de pesquisa. No produto, a prova de presença é um desafio ativo com um componente certificado de terceiro para a detecção de vivacidade; nenhum sinal comportamental passivo entra no caminho da decisão. Esta nota é a razão de ser assim.
A pergunta
Dinâmica de mouse e de teclado é barata: não pede hardware, não pede atrito, e a literatura de detecção de bots a cita com frequência. A tentação é usá-la como prova de que há um ser humano do outro lado. A pergunta que a bancada respondeu foi estreita de propósito: um sinal comportamental passivo separa um humano real de um script, e o quanto essa separação resiste conforme o script fica melhor?
Os critérios de corte foram fixados antes de rodar. O que importa não é a área sob a curva, e sim a taxa de acerto de humano com falso alarme de no máximo 1%, medida entre pessoas diferentes e reportada pela pior pessoa. Uma curva bonita com acerto ruim nesse ponto é o tipo de resultado que engana quem o produz.
O que se mediu, e o que não
Dado humano real, de conjuntos públicos. Três, cada um com uma modalidade: mouse livre (Balabit, dez pessoas, oitocentas janelas de sessenta segundos), teclado com texto fixo (CMU, cinquenta e uma pessoas, uma senha curta repetida) e teclado com texto livre (Aalto, mil pessoas amostradas de um conjunto muito maior, quase quinze mil sessões). Do teclado entram só os instantes de pressionar e soltar e a categoria da tecla, nunca o caractere: a bancada não é um registrador de teclas.
Scripts em níveis. L0 é o adversário trivial: tempos constantes, mouse em linha reta. L1 acrescenta ruído uniforme, a tentativa ingênua de parecer menos mecânico. L2 é o adversário sério: tempos amostrados de distribuições calibradas nos humanos, mouse em curvas com aceleração e desaceleração, pausas e correções ocasionais. L3 pega um traço humano real e o reproduz com ruído por ponto. Os scripts são gerados pareados por conjunto e por modalidade, calibrados no conjunto humano correspondente.
Higiene. Nunca se treina e testa na mesma sessão, nem na mesma pessoa: a generalização é medida deixando uma pessoa inteira de fora. Nunca se juntam conjuntos humanos numa classe só contra scripts, porque o classificador aprenderia qual conjunto, não humano contra script; a sanidade disso foi medida, e o artefato de origem entre os dois conjuntos de teclado é forte (acurácia balanceada de 0,978 ao tentar prever a origem). A avaliação é por conjunto e, separadamente, entre conjuntos da mesma modalidade.
O que ficou de fora. Não há adversário de ponta: nenhum modelo generativo de movimento, nenhum replay perfeito. A amostra de pessoas é a dos conjuntos públicos, não uma amostra demográfica. E não se mediu nada em produção.
O primeiro resultado, e por que ele não bastava
| Conjunto | Modalidade | Área sob a curva, por sessão | Acerto na pior pessoa | Pessoas que passam |
|---|---|---|---|---|
| Balabit | mouse livre | próxima de 1,00 | 0,775 | 100% |
| Aalto | teclado, texto livre | 0,88 | 0,000 | 0% |
| CMU | teclado, texto fixo | 0,84 | 0,000 | 0% |
Contra os quatro níveis de script, o mouse parecia validado: acerto de 0,861 no ponto de operação por sessão e toda pessoa acima do corte. O teclado, apesar da curva razoável, falha na pior pessoa nas duas variantes, e o sinal transfere entre os dois conjuntos de teclado só no ranking (área de cerca de 0,81), não no ponto de operação (acerto de cerca de 0,04).
O problema estava no adversário. Uma ablação mostrou que o que sustentava o acerto do mouse era o grupo de características de jerk (a variação da aceleração) e a estrutura de pausas. E o L3, ao injetar ruído branco em cada ponto do traço humano, inflava o jerk e destruía as pausas: fabricava exatamente a diferença que o classificador depois encontrava. Um adversário secretamente fraco produz conclusão falsa nos dois sentidos, e por isso o passo seguinte não foi ajustar o classificador.
O teste decisivo: um replay competente
Construiu-se um replay suave, L3’, a partir de traços humanos reais de mouse: reparametrização monotônica do tempo, transformação afim pequena, deslocamento espacial de baixa frequência anulado durante as pausas, e nenhum ruído por ponto. A ideia é um traço que um observador descreveria como o mesmo movimento, levemente diferente.
Antes de medir qualquer coisa contra ele, um portão de validação confere se o replay é mesmo suave: a mediana do jerk e a da contagem de pausas do L3’ precisam ficar a menos de 30% das medianas humanas. O L3’ passou (jerk em 1,10 vezes o humano, pausas em 0,90). O L3 antigo, submetido ao mesmo portão, falha (3,98 e 0,58). Esse contraste é o que dá poder ao portão: ele distingue o adversário que engana o classificador do que engana a si mesmo.
| Medida, mouse (Balabit) | Contra L3 | Contra L3’ |
|---|---|---|
| Acerto de humano, falso alarme de até 1%, por sessão | 0,861 | 0,320 |
| Acerto na pior pessoa, entre pessoas | 0,775 | 0,025 |
| Pessoas que passam | 100% | 10% |
| Só o grupo jerk | 0,86 | 0,004 |
O grupo jerk sozinho vai ao acaso. A separação anterior era artefato do ruído do adversário, não do replay. O replay suave foi construído para mouse; o teclado já estava ao acaso contra o replay simples (área de 0,507 no Aalto, 0,388 no CMU) e não precisou dele.
A leitura honesta
O resultado tem uma explicação estrutural, e é ela que vale, não o número: replay é cópia, e observação passiva não distingue uma cópia competente do original. Um classificador que olha o traço só consegue separar o que difere no traço. Se o adversário reproduz um traço humano preservando a microestrutura, não sobra o que separar, e melhorar as características não muda isso.
Duas consequências, e as duas viraram decisão de projeto:
- O sinal passivo é triagem, não defesa. Ele continua útil onde funciona: contra automação trivial, para decidir quando acionar um desafio mais caro e reduzir atrito no caminho comum. Não é apresentado, em produto nem em material técnico, como prova de que há uma pessoa.
- A prova de presença é o desafio ativo. Vivo, imprevisível, com o resultado amarrado à submissão de uso único e conferido no servidor. É onde o adversário tem de produzir algo novo em vez de reproduzir algo gravado.
Entre as modalidades passivas, o mouse é o melhor sinal de triagem; o teclado é acessório, e só pega os níveis mais simples de automação.
Limites
- Os conjuntos são públicos e a amostra de pessoas é a deles; o sinal é exploratório, não validade demográfica. Os dois conjuntos de teclado não podem ser somados, e texto fixo não é proxy de sessão livre.
- O L3’ é um replay competente, não o teto adversarial. Um modelo generativo de movimento ou um replay perfeito não foram medidos, e o resultado só piora nessa direção.
- A bancada mede separabilidade de traço. Não mede um sistema em produção, não mede o desafio ativo, e não diz nada sobre ataques ao próprio desafio ativo, que são outro problema com outra defesa.
- Os números valem para a versão medida em 2026-06-27. Os limiares de decisão que a bancada usa para o ponto de operação são recalculados a cada configuração e não são os de nenhum sistema em produção.