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.
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.
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 TEAMCom 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.
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 COODepois, 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:
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.
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.
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.