Motivação
Os
serviços de autenticação e encriptação (AH e ESP) dependem da
utilização de chaves secretas (conhecidas apenas pelos
comunicantes) para serem fornecidos pelo IPSec.
Caso uma entidade
intercepte uma comunicação IPSec em modo transporte, por exemplo,
esta será incapaz de alterar qualquer parte do pacote sem que seja
notada (se estiver sendo utilizado o AH) ou ter acesso às
informações nele contidas (caso seja utilizado o ESP). Todavia,
isto é válido apenas se esta entidade não possui acesso ao segredo
compartilhado pelos comunicantes.
Portanto, é preciso
que o acordo quanto às chaves que serão usadas na comunicação
seja feito de maneira segura.
A forma mais trivial
de estabelecer uma chave secreta no IPSec é através de configuração
manual. Os comunicantes escolhem as chaves que serão usadas e
registram manualmente as SAs necessárias.
Esta é uma
estratégia bastante prática para cenários pequenos, mas não é
escalável, já que seria preciso configurar ao menos duas SAs
(entrada e saída) para cada par de endereços IP. Para resolver este
problema e permitir maior flexibilidade no compartilhamento de
chaves, foi criado o IKE (Internet Key Exchange),
um protocolo para gerenciamento automático de chaves que também faz
parte do IPSec.
Funcionamento
Este protocolo,
que pode ser considerado o mais complexo do conjunto IPSec, usa o
ISAKMP (Internet Security Association Key Management
Protocol) como base para criar
as SAs nos dois lados da comunicação, que serão utilizadas pelos
protocolos AH e ESP.
O primeiro
passo para o estabelecimento das SAs para os comunicantes é a
criação de um canal seguro. Este é definido por uma SA
bidirecional (ao contrário das demais) referente ao IKE. Nela, estão
contidas informações como a chave secreta e os algoritmos de
criptografia que serão usados nas negociações subsequentes (para
as SAs do AH e do ESP).
Para a escolha da
chave secreta, é realizada uma série de procedimentos baseada no
algoritmo de troca de chaves Diffie-Hellman [11].
Diffie-Hellman
Proposto em 1976, este algoritmo permite o
estabelecimento de uma chave secreta compartilhada através de um
canal de comunicação inseguro. Esta chave poderá ser utilizada,
por exemplo, em algoritmos de criptografia simétrica.
Numa troca de chaves entre duas entidades
hipotéticas A e B,
ocorre primeiro um acordo quanto a um número primo p
e a uma raiz primitiva de p,
r.
O número r
será uma raiz primitiva de p
se
Os números p
e r não
são secretos.
Em seguida, A
e B escolhem um número
secreto entre 1 e p-1
(inclusive) cada, XA
e XB.
Então, A
envia para B:
A chave secreta
K, calculada por B,
será:
Analogamente, A
poderá calcular a mesma chave secreta a partir de YB,
fazendo:
Desta forma, a partir da escolha de r e
p e da troca (sem segurança) de
YA e YB,
o algoritmo de Diffie-Hellman
permite o estabelecimento de uma chave secreta, conhecida apenas por
A e B.
Este algoritmo não autentica os usuários que
estão realizando a troca de chaves, o que o torna vulnerável a
ataques. Devido a isso, o protocolo IKE inclui mecanismos adicionais
para garantir a autenticação, baseados na troca de assinaturas
digitais. Para mais detalhes, ver [2].
Escolhida a chave secreta e criada a SA para o
IKE, ocorre o estabelecimento das demais SAs através do canal seguro
criado.