Introdução ao uso de S/Key

Autor: João Carlos Mendes Luís, Jonny@jonny.eng.br


O uso de senhas de apenas uma vez (One Time Passwords - OTP) é uma forma de aumentar a segurança no acesso de recursos internos de uma rede por usuários vindos da rede externa. Seu princípio básico está em evitar a captura de senhas de acesso por hackers utilizando de recursos como o Sniffing ou Eavesdropping. Mesmo que o hacker monitore a rede e consiga obter a senha, esta não será valida para um acesso subsequente. As senhas são usadas uma única vez.

1) Como funciona ?

Obviamente o princípio de operação do OTP não é pedir que o usuário mude sua senha a cada vez que a utilizar. :)

A idéia é utilizar um gerador sequencial de senhas, baseado em algum algoritmo de hashing como o MD4 ou o MD5. O usuário inicializa o seu sequenciador inserindo sua senha em no programa de inicialização. Ele recebe então um número de sequência e uma chave, que serão usadas em todos os acessos subsequentes do tipo OTP. A cada utilização de uma senha OTP o número de sequência é decrementado. Ao chegar a zero, ou próximo disso o usuário deve se utilizar de um meio de acesso seguro para reinicializar seu gerador de chaves.

2) Exemplo prático:

roma::jonny [520] keyinit 
Adding jonny:
Reminder - Only use this method if you are directly connected.
If you are using telnet or rlogin exit with no password and use keyinit -s.
Enter secret password: 
Again secret password: 

ID jonny s/key is 99 ro63854
BIAS DOCK ELAN SEN HIT TEAM
Com o comando acima inicializa-se o sequenciador de OTP. A senha utilizada no sequenciador não precisa ser necessariamente a mesma senha utilizada no sistema. Os métodos de autenticação são diferentes e independentes.

Após a inicialização do gerador, voce poderá usar sua senha OTP nos acessos que assim o indicarem. O exemplo abaixo é de uma sessão telnet:

Connected to roma.coe.ufrj.br.
Escape character is '^]'.

FreeBSD (roma.coe.ufrj.br) (ttyp6)

login: jonny
s/key 98 ro63855
Password:
Last login: Sun Jun  7 16:16:28 from oslo
...
Numa sessão subsequente o sistema pedirá uma outra senha, seguindo a sequência inicializada:
Connected to roma.coe.ufrj.br.
Escape character is '^]'.

FreeBSD (roma.coe.ufrj.br) (ttyp4)

login: jonny
s/key 97 ro63855
Password:
 (turning echo on)
Password:CURB EARN BRIM HANG FANG COO
Last login: Sun Jun  7 21:05:38 from roma
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 2.2.6-STABLE (ROMA) #1: Tue Jun  2 20:05:03 EST 1998
...
Note ainda no exemplo acima que em o acesso telnet com S/Key oferece uma facilidade de feedback visual na digitacao da senha OTP. Se no pedido de senha se digitar uma senha nula, o sistema pede a senha de novo, mas dessa vez com feedback visual. Isso é muito prático para evitar erros de digitação.

3) Como saber qual é a próxima senha ?

Para entrar em sessão no exemplo anterior, bastou que eu utilizasse a minha senha S/Key (que não precisa ser igual à do sistema, lembra ?) o número de sequência e a chave (informados durante o login) e os aplicasse em uma calculadora S/Key. No FreeBSD existe uma calculadora em comando de linha que pode ser acessada como no exemplo abaixo:
roma::jonny [501] key 97 ro63855
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password: 
CURB EARN BRIM HANG FANG COO
Depois, basta usar a senha OTP informada, e entrar no sistema.

Algumas vezes o usuário pode estar em alguma rede que não possua calculadora S/Key à mão. Nesse caso pode-se optar por duas formas:

3.1) Acessar a calculadora sobre outra mídia

Em algumas agendas eletrônicas modernas existem calculadoras S/Key que podem ser utilizadas. Essa forma é bastante segura, pois a senha não é armazenada em nenhum lugar, sendo gerada somente no momento de necessidade.

Em casos de emergência, sempre se pode contar com uma calculadora S/Key pela internet. Com o uso de aplicações em linguagem Java, onde o processamento é feito na máquina local, pode-se implementar calculadoras pela Internet sem que a senha trafegue abertamente pela rede. É muito importante realçar, entretanto, que só se deve utilizar uma calculadora de uma fonte conhecida e fidedigna, para evitar que o código da calculadora tenha sido alterado para enviar sua senha para alguém. Esse método só deve ser usado em último caso, e com muito cuidado.

Um exemplo de calculadora OTP disponivel na Internet está em http://www.jonny.eng.br/jotp/.

Para usar, basta digitar o numero de sequência e a chave no campo "Challenge", a senha no campo "Secret password", e clicar no botão "Compute with MD5".

Obs.: A senha OTP não aparece completamente no display por que ela não cabe. Para vê-la por completo basta clicar no campo e usar as setas para mover o cursor.

3.2) Imprimir uma lista de N senhas

Outra forma simples de ter acesso às senhas OTP é simplesmente mandar o sistema gerar de uma vez um conjunto grande de senhas, imprimir e andar sempre com a lista no bolso. Esse método apresenta o inconveniente de manter as senhas disponíveis sobre uma forma física, mas sendo guardado com segurança, o método da lista ainda é o mais prático.

Vejamos como se gera uma lista com as próximas 60 senhas:

roma::jonny [505] key -n 60 95 ro63855 | sort -nr
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:
95: LEG TO CAM ELBA FREY SILT
94: PUN RUN ROT WHOM DIAL HILL
...
37: FLAW HOW ORAL IF DRAM FOE
36: BULL EMIL HOLT ELAN JUJU HUG

O comando sort -nr foi usado para colocar as senhas na ordem em que serão utilizadas pelo sistema, ou seja, do maior para o menor número de sequência. Para imprimir diretamente a saida desse comando, basta enviar a saída direto para a impressora:

roma::jonny [506] key -n 60 95 ro63855 | sort -nr | lpr
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:

E pronto, a lista está saindo na sua impressora default.

4) Acessos via S/Key para o serviço POP (E-Mail remoto)

O serviço POP ( Post Office Protocol) é utilizado por vários leitores de E-Mail remotos, como o Eudora e o Netscape Communicator. O usuário se conecta ao servidor, envia sua senha e pega os E-Mails armazenados para sua máquina local. A senha do serviço POP é normalmente enviada de forma aberta, ou seja, não-criptografada, o que implica que um hacker pode estar monitorando a rede e capturar a senha.

O serviço POP apresenta o número de ordem e a chave geradora da sequência durante o estabelecimento da conexão. Para que o Netscape mostre-os, basta entrar uma vez com a senha em branco. A janela de erro que aparecerá apresentará os parâmetros de S/Key exigidos.

5) Cuidados a serem tomados com o uso de senhas em meios não seguros

Referências


Copyright (C) 1998 by Jonny