Autenticação de Usuário

Objetivo: Desenvolver um programa de Machine Learning para autenticação de usuário através da biometria por dinâmica de digitação.

Introdução

A dinâmica de digitação de senhas é um estudo para identificar se as pessoas podem ser distinguidas por seus ritmos de digitação, da mesma forma que a caligrafia é usada para identificar o autor de um texto escrito. As aplicações possíveis incluem atuar como uma impressão digital eletrônica ou em um mecanismo de controle de acesso. Uma impressão digital conectaria uma pessoa a um crime baseado em computador da mesma maneira que uma impressão digital física conecta uma pessoa à cena de um crime físico. O controle de acesso pode incorporar a dinâmica de pressionamento de tecla, exigindo que um usuário legítimo digite uma senha com o ritmo correto e autenticando continuamente esse usuário enquanto ele digita no teclado.

Como os dados foram coletados

Foi construído um aparelho de coleta de dados de pressionamento de tecla que consiste em: (1) um laptop executando o Windows XP; (2) um aplicativo de software para apresentar estímulos aos sujeitos e para registrar suas teclas; e (3) um temporizador de referência externa para registrar a hora dessas teclas. O software apresenta ao usuário a senha a ser digitada. Conforme o usuário digita a senha, ela é verificada quanto à exatidão. Se o usuário cometer um erro tipográfico, o aplicativo solicitará que o usuário redigite a senha. Dessa forma, são gravados os timestamps de data/hora para 50 senhas digitadas corretamente em cada sessão.

Sempre que o usuário pressiona ou libera uma tecla, o aplicativo de software registra o evento (ou seja, keydown ou keyup), o nome da tecla envolvida e o timestamp de data/hora para o momento em que o evento de pressionamento de tecla ocorreu. Um relógio de referência externa foi usado para gerar os timestamps de data/hora altamente precisos. O relógio de referência demonstrou ser preciso em ± 200 microssegundos (usando um gerador de função para simular pressionamentos de tecla em intervalos fixos).

Foram recrutados 51 sujeitos (digitadores) de dentro de uma comunidade universitária; todos os sujeitos completaram totalmente o estudo - não descartamos nenhum sujeito. Todos os sujeitos digitaram a mesma senha e cada sujeito digitou a senha 400 vezes em 8 sessões (50 repetições por sessão). Eles esperaram pelo menos um dia entre as sessões, para capturar algumas das variações do dia-a-dia da digitação de cada sujeito. A senha (.tie5Roanl) foi escolhida para representar uma senha forte de 10 caracteres.

Os registros brutos de todos os pressionamentos de tecla e os timestamps de data/hora dos sujeitos foram analisados ​​para criar uma tabela de tempo de senha. A tabela de tempo de senha codifica os recursos de tempo para cada uma das 400 senhas que cada assunto digitou.

Arquivo de Dados

Arquivo contendo as informações de digitação: KSPasswordData.csv

Além do arquivo disponibilizado, há um outro arquivo de validação, com alguns exemplos de digitação dos mesmos usuários do conjunto anterior, que será usado para a validação dos resultados apresentados.

Bibliotecas

Para a implementação desse lab você muito provavelmente irá precisar instalar as seguintes bibliotecas em python:

  • joblib
  • numpy
  • sklearn
  • pandas

Exemplo

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from joblib import dump, load

X = pd.read_csv("KSPasswordData.csv")
y = X.pop('subject').values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

clf = KNeighborsClassifier(3)
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)

print(score)

dump(clf, 'exemplo.jlb') 

Dica

Selecione um dos classificadores do exemplo desse link.

classifiers = [
    KNeighborsClassifier(3),
    SVC(kernel="linear", C=0.025, random_state=42),
    SVC(gamma=2, C=1, random_state=42),
    GaussianProcessClassifier(1.0 * RBF(1.0), random_state=42),
    DecisionTreeClassifier(max_depth=5, random_state=42),
    RandomForestClassifier(
        max_depth=5, n_estimators=10, max_features=1, random_state=42
    ),
    MLPClassifier(alpha=1, max_iter=1000, random_state=42),
    AdaBoostClassifier(random_state=42),
    GaussianNB(),
    QuadraticDiscriminantAnalysis(),
]

Entrega

Escrever um relatório com os seguintes tópicos:

  • Introdução: fazer um breve resumo sobre segurança em sistemas operacionais;
  • Metodologia: citar qual algoritmo usou e descrever brevemente como esse algoritmo funciona;
  • Resultados: apresentar o score atingido com o algoritmo selecionado;
  • Conclusão