E em resultado da execuc~ao do protocolo Skeyx, recorde{se (rever captulo 4), que as entradas da cache de chaves publicas de Die{Hellman de uma entidade27 s~ao criadas e sucessivamente actualizadas.
A criac~ao de uma entrada (ou a sua actualizac~ao) na cache de chaves publicas de Die- -Hellman pode ocorrer, basicamente, em tr^es circunst^ancias28:
1. pela execuc~ao da aplicac~ao s3lkeyxclient, fornecida na distribuic~ao do S3L (ver
secc~ao B.1 do ap^endice B) e que, grosso modo, fornece a possibilidade de, a partir da linha de comando, invocar uma func~aoSkeyx, que inicia o protocolo Skeyx sob o
ponto de vista da entidade cliente29;
2. pela invocac~ao da func~ao Skeyx, no decorrer da execuc~ao de um programa;
25[Ste90] refere
flock,ioctl,read,readv,wait,writeewritevpara a vers~ao 4.3 do BSD. 26Tal denic~ao ocorre por intermedio da primitiva
siginterrupt. 27Ou melhor, de uma inst^ancia dessa entidade.
28Supondo, em todos os casos, que a necessaria infra{estrutura em termos do PSE e dos demonios
Reencaminhador (s3lforwarder) e Servidor (s3lkeyxserver), se encontra operacional. 29No que se segue, a designac~ao
Skeyxrefere{se a func~ao correspondente ao protocolo homonimo, que
3. por um demonio Servidor (s3lkeyxserver), em resultado de um pedido que lhe foi
reencaminhado pelo demonio Reencaminhador (s3lforwarder).
A primeira hipotese, a qual corresponde uma execuc~ao explcita do protocolo Skeyx, traduz, claramente, uma polticadeantecipac~ao, pela denic~ao previa de um estado que se prev^e ser util num futuro proximo. Adicionalmente, e se assim o desejar, um programador de aplicac~oes pode tambem invocar, explcitamente, a func~aoSkeyxnos seus programas30, tal como prev^e a segunda hipotese.
Todavia, para o programador de aplicac~oes que recorre a API do S3L, a adopc~ao de in- vocac~oes explcitas de Skeyx (seja indirectamente pela execuc~ao de s3lkeyxclient, seja directamente no seio de um programa) raramente sera desejavel.
O protocolo Skeyx e, fundamentalmente, um pilar do S3L ponto{a{ponto e multiponto, que, para o programador de aplicac~oes, deve passar despercebido o tanto quanto possvel. E nesta ultima perspectiva que se encaixa o mecanismo de invocac~oes implcitas/auto- maticas deSkeyx e que, basicamente, concretiza uma poltica de actualizac~ao das caches por necessidade. A utilidade deste mecanismo revela{se no acto da denic~ao de contextos S3L (viaS3Lmake S3LCtx), seja previamente a assemblagem de uma mensagem S3L, seja
apos a recepc~ao de tais mensagens:
pretendendo{se enviar uma mensagem S3L para uma entidade ausente da nossa cache, o protocolo Skeyx e executado automaticamente na denic~ao do contexto S3L, no seio da func~ao S3Lmake S3LCtx, pelo que a invocac~ao subsequente de uma
func~ao de escrita S3L (S3Lwrite, S3Lsend, etc.) ja se processa com um contexto ctx valido, resultante da actualizac~ao da cache. Tomando como exemplo o cliente da gura B.6 (ver secc~ao B.2.8 do ap^endice B), a denic~ao de um contexto na linha 19 pode implicar a execuc~ao do protocolo Skeyx, sem que o utilizador se aperceba de tal facto, para alem da lat^encia introduzida por essa execuc~ao;
recebendo{se uma mensagem S3L de uma entidade ausente da nossacache
31, ent~ao, para conseguir processar essa mensagem e necessario executar o protocolo Skeyx com tal entidade. Ou seja, sempre que a func~ao de desassemblagem S3Lopen message
(chamada por todas func~oes S3L de leitura | S3Lread, S3Lrecv, etc. |) invoca S3Lmake S3LCtx para denir um contexto S3L relativo a mensagem S3L recebida, S3Lmake S3LCtxpode concluir da necessidade de executar o protocolo Skeyx32, para o que devera invocar a func~aoSkeyx.
Esta sucess~ao de acontecimentos, esquematizada na gura 5.11, pode ocorrer, por exemplo, na linha 39 do servidor da gura B.7 (ver secc~ao B.2.8 do ap^endice B ). Para invocar a func~ao Skeyx, S3Lmake S3LCtx necessita de lhe fornecer, entre ou-
tros par^ametros, a identicac~ao X.500 da entidade remota e o endereco IP des- sa entidade, valores que, por sua vez, ter~ao de ser fornecidos a S3Lmake ctx por
30Apesar de, para todos os efeitos, a func~ao
Skeyxse considerar n~ao documentada, uma vez que executa
operac~oes consideradas de caracter privado face ao programador de aplicac~oes que utiliza a API do S3L.
31Tal situac~ao e perfeitamente possvel: se a entidade originadora conseguiu construir a mensagem S3L
e porque disp~oe, na suacache, de uma entrada relativa a entidade receptora, mas criada apos a execuc~ao
do protocolo Skeyx com uma outra replica desta.
32Como se vera ainda nesta secc~ao, essa conclus~ao deriva de dois factos possveis: aus^encia da entrada
S3Lread
S3Lopen_message
S3Lmake_ctx
Skeyx Figura 5.11: Exemplo de execuc~ao implcita do protocolo Skeyx.
S3Lopen message. Todavia, S3Lopen message conhece a sntese MD5 do nome
distinto do originador (recordar a estrutura do cabecalho de uma mensagem S3L na gura 5.3) e n~ao o nome distinto original, pelo que esse facto e indicado a
S3Lmake S3LCtx atraves do valor NSID MD5X500 para o par^ametro nsid daquela
func~ao. Recorde{se que a estrutura das mensagens do protocolo Skeyx, tal como denidas no captulo 4, contemplam a identicac~ao do Servidor apenas com base no seu nome distinto X.500. Contudo, verica{se agora, no contexto de uma execuc~ao implcita de Skeyx, a necessidade de identica{lo tambem pela sntese MD5 do seu nome distinto. Esta forma alternativa de identicac~ao mantem, praticamente inal- terada, a estrutura das mensagens do Skeyx e, como a sua utilizac~ao se considera do foro interno do S3L (e n~ao propriamente destinada ao programador comum), optou{se por conserva-la no anonimato e relativamente indocumentada.
Finalmente, falta ainda esclarecer a forma atraves da qual S3Lopen messageobtem
o endereco IP da entidade originadora da mensagem. Esse endereco IP corresponde ao campoSource IP Addressde uma mensagem S3L (recordar a gura 5.3). Num
contexto invocador da func~ao S3Lopen messageem que est~ao presentes sockets de Berkeley (como e o caso das func~oes S3Lread, S3Lrecv, etc.), o endereco IP de
origem poderia ser obtido facilmente atraves da primitiva getpeername33. Porem, o uso da func~aoS3Lopen messagen~ao se restringe a desassemblagem de mensagens
recebidas da rede (recorde{se o que foi dito na secc~ao 5.3.3), o que aconselha a utilizac~ao de um mecanismo generico de especicac~ao do endereco IP da entidade originadora de uma mensagem S3L. No caso concreto, optou{se pela utilizac~ao de um campo Source IP Address da mensagem S3L. A presenca deste campo tem
ainda outro benefcio adicional: a prevenc~ao de ataques do tipoip{spoong 34. Ate agora, deniu{se como causa de uma ocorr^encia implcita do protocolo Skeyx a aus^encia de uma determinada entrada nacache.dhcachedo PSE. Existem, porem, outros estados em que uma entrada se pode encontrar e cuja detecc~ao pode tambem desencadear a execuc~ao do protocolo Skeyx com a entidade correspondente.
Na secc~ao 4.5.4, o protocolo Skeyx foi caracterizado como \semi{transaccional" no que diz respeito a actualizac~ao das caches das entidades participantes. Concretamente, o Skeyx garante (tanto quanto o TCP pode garantir) que ambas as entidades atinjam um 33Ou ainda de outras formas em determinados casos especcos: por exemplo, atraves do par^ametro
struct sockaddr *addrda primitivaacceptparasocketsconectados ou do par^ametrostruct sockaddr
*fromda primitivarecvfromparasocketsconectados e n~ao{conectados.
34Ja em [Bel89] se faz refer^encia a esta categoria de ataques, nos quais o endereco IP de
origem de um pacote e modicado en{route. Mais recentemente, o CERT Advisory CA-96.21
(ftp://info.cert.org/pub/cert advisories/CA-96.21.tcp syn flooding) descreve outro | o TCP SYN Flooding| que frequentemente ocorre em forma combinada com oip{spoong.
estado em que disp~oem de toda a informac~ao necessaria a actualizac~ao das caches, mas n~ao garante o sucesso simult^aneo dessas actualizac~oes, uma vez que a conex~ao TCP e quebrada imediatamente antes de a actualizac~ao das caches se processar. Consequente- mente, e salvaguardando as situac~oes de actualizac~oes parciais35, uma entrada da
cache pode encontrar{se nos seguintes \estados totais":
inexistente: nunca houve tentativas destinadas a sua criac~ao ou, imediatamente antes da sua criac~ao, o processo no seio do qual o Skeyx executava terminou;
(existente) actual: o processo de criac~ao (ou actualizac~ao, conforme o caso), foi levado, com sucesso, ate ao m;
(existente) obsoleto: uma entrada actual foi marcada comoobsoleta.
Uma entrada actual torna{se obsoleta quando se passa a designar a chave acordada
DHagreedkey a existente por DHagreedkey.old. Obviamente, na mesma entrada n~ao
podem coexistir uma chave actual e uma chave obsoleta, correspondendo essa situac~ao, para todos os efeitos, a uma corrupc~ao da entrada.
Ascripts3lmkdhold, fornecida com a distribuic~ao do S3L (ver secc~ao B.1 do ap^endice B), marca como obsoletas todas as chaves acordadas de Die{Hellman guardadas nacache do invocador. Na pratica, isto corresponde a tornar toda a cache obsoleta, por forma a forcar, de uma forma implcita, novas execuc~oes do protocolo Skeyx que ir~ao actualizar, progressivamente, acache. A detecc~ao da obsolesc^encia de uma entrada e feita pela func~ao
S3Lmake S3LCtxdurante a denic~ao de um contexto S3L. Como desse contexto faz parte
a chave acordada de Die{Hellman36, a aus^encia dessa chave (na pratica, a aus^encia da entrada nacache) ou a sua obsolesc^encia desencadeiam a execuc~ao implcita do protocolo Skeyx.
S~ao varias as causas que podem ditar a obsolesc^encia da totalidade dacache: modicac~ao dos par^ametros publicos de Die{Hellman;
modicac~ao das chaves (publica e privada) de Die{Hellman do dono dacache; para \resolver" esta situac~ao, e dispondo cada entrada nacacheda chave publica de Die- -Hellman da entidade correspondente, bastaria recombinar a chave privada do dono dacachecom aquelas chaves publicas para obter as novas chaves acordadas. Todavia, se o dono da cache enviasse agora uma mensagem S3L a uma das entidades com entrada nacache, essa entidade n~ao conseguiria abrir a mensagem, porque iria usar uma chave acordada desactualizada37. Assim, e prefervel detectar, na origem, a 35Estas situac~oes dever~ao ser, em princpio, raras, motivadas, por exemplo, por quebras de energia e
outros imponderaveis. Nessas circunst^ancias, devera ser feita uma inspecc~ao manual a cada entrada da
cache. A \corrupc~ao" de uma entrada e detectavel pela aus^encia de uma parte dos cheiros (o que signica
que a criac~ao foi parcial) ou pela presenca de copias suas de seguranca (o que signica que o processo de actualizac~ao n~ao foi levado ate ao m). O procedimento a seguir em ambos os casos deve ser a eliminac~ao da entrada, na esperanca de que uma futura criac~ao (explcita ou implcita) seja bem sucedida.
36Recorde{se a denic~ao da estrutura
S3LCtxna secc~ao 5.3.2.
37Na realidade, a func~ao
S3Lopen message acautela, por seguranca, esta situac~ao: se a denic~ao de um contexto S3L via S3Lmake S3LCtx e bem sucedida mas a autenticac~ao da mensagem falha, ent~ao
S3Lopen messagedespreza a mensagem recebida e termina executando Skeyx | desde que o par^ametro skeyx called n~ao venha devolvido de S3Lmake S3LCtxaS3LTRUE, sinal de que um Skeyx teria ocorrido no seu interior |, garantindo assim que, na recepc~ao das proximas mensagens, a entrada dacacheja esta
presenca de uma chave acordada obsoleta e executar, automaticamente, o protocolo Skeyx com a entidade remota, na proxima assemblagem de uma mensagem S3L a ela destinada;
modicac~ao do PIN (induzida, eventualmente, pelo seu compromisso) do dono da cache; recorde{se que todas as chaves acordadas de Die{Hellman presentes na cacheest~ao cifradas com base numa chave DES derivada do PIN; na aus^encia de uma aplicac~ao especicamente destinada a decifrar, com o PIN antigo, todas as chaves acordadas e a cifra{las com o novo, uma forma indirecta de conseguir o mesmo efeito e marcar essas chaves como obsoletas e conar no mecanismo de execuc~oes implcitas do protocolo Skeyx a m de assegurar a aplicac~ao do novo PIN;
modicac~ao da identicac~ao (nome distinto) do dono da cache; essa identicac~ao corresponde ao sujeito dos certicados das chaves RSA; na pratica, isto corresponde a mudanca da identidade de uma entidade e deve ser, em princpio, um evento raro; revogac~ao ou modicac~ao das chaves (publica e privada) RSA preservadas no PSE; uma vez que estas chaves s~ao essenciais a autenticac~ao das mensagens do Skeyx, e natural que uma entidade opte por reconstruir a sua cache com base na utilizac~ao das novas vers~oes destas chaves38.
Atendendo ao que foi dito sobre os \estados totais" de uma entrada nacache, a gura 5.12 apresenta todas as combinac~oes possveis entre um par de entradas, relativas a duas entidades diferentes, A e B. cache B cache B 1 4 2 3 5 6 B: DHagreedkey.old B: DHagreedkey B: DHagreedkey A: B: B: B: cache A cache A A: DHagreedkey A: DHagreedkey.old A: DHagreedkey A: DHagreedkey.old A: DHagreedkey.old
Figura 5.12: Possveis estados de um par de entradas em duas caches distintas. A combinac~ao \estavel", para a qual todas as outras tendem e, obviamente, a com- binac~ao 4, com ambas as caches actualizadas. O mecanismo de actualizac~oes implcitas actua da seguinte forma, para as outras combinac~oes:
1 <A:,B:>: nem A, nem B possuem entrada recproca, nas suas caches; se um deles decidir enviar uma mensagem S3L ao outro, a func~ao S3Lmake S3LCtx detecta a
aus^encia da entrada e invoca Skeyxautomaticamente;
38A situac~ao de compromisso da chave privada, usada no calculo das assinaturas
Csig e Ssig |
2 <A:,B:DHagreedkey>: apenas uma das entidades (neste caso B) possui uma en- trada e actualizada; se A decide enviar uma mensagem S3L a B, ent~ao, em A,
S3Lmake S3LCtxexecutaSkeyxautomaticamente; se B decide enviar uma mensagem
S3L a A, ent~ao, em A,S3Lmake S3LCtxtambem invocaSkeyxautomaticamente; em
ambos os casos a causa da execuc~ao deSkeyxpor A e a aus^encia de entrada relativa
a B;
3 <A:,B:Dhagreedkey.old>: A n~ao possui entrada relativa a B, mas B possui entrada relativa a A, embora obsoleta; se A decide enviar uma mensagem S3L a B, ent~ao, em A,S3Lmake S3LCtxinvocaSkeyxautomaticamente porque n~ao se detectou a entrada
de B; se B decide enviar uma mensagem S3L a A, ent~ao, em B, S3Lmake S3LCtx
tambem executa Skeyx automaticamente, porque B detecta a obsolesc^encia da sua
entrada;
5 <A:DHagreedkey,B:DHagreedkey.old>: A possui entrada actualizada relativa a B e B possui uma entrada obsoleta relativa a A; se A envia uma mensagem S3L a B, ent~ao, em B, S3Lmake S3LCtx detecta a obsolesc^encia da sua entrada e executa Skeyx,
apos o que continua o processamento da mensagem S3L recebida; se B pretende enviar uma mensagem S3L a A, ent~ao, em B, S3Lmake S3LCtxdetecta, a partida, a
obsolesc^encia da entrada de A e executaSkeyx para corrigir essa situac~ao;
6 <A:DHagreedkey.old,B:DHagreedkey.old>: A e B possuem ambos entradas recprocas obsoletas; o primeiro a enviar uma mensagem S3L ao outro provoca a actualizac~ao de ambas as entradas.
Resumindo, o S3L possibilita a adopc~ao de duas polticas de actualizac~ao da cache: por antecipac~ao, com base na utilizac~ao da aplicac~ao s3lkeyxclient, e por necessidade, invocando a func~ao Skeyxsempre que tal e julgado oportuno pela func~ao de denic~ao de
contextos S3Lmake S3LCtx, sendo este ultimo mecanismo o mais discreto e adequado ao
Comunicac~ao Segura Multiponto
via S3L
Conclui{se, neste captulo, a apresentac~ao da arquitectura do S3L, com a descric~ao das ex- tens~oes necessarias a sua operac~ao num contexto de comunicac~ao multiponto. As extens~oes multiponto em quest~ao suportam as mesmas qualidades de servico oferecidas pelo S3L ponto{a{ponto (Privacidade, Autenticac~ao1, Integridade, Sequenciac~ao { contra ataques- -de{repetic~ao { e Compress~ao) mas assumindo como protocolo base de comunicac~ao a variante multiponto do IP, vulgo IP Multicast2 [Dee89].
Basicamente, o IP Multicast assenta na utilizac~ao do protocolo User Datagram Protocol (UDP) [Pos80a] (protocolo n~ao{orientado{a{conex~ao, que segue uma poltica de entrega de melhor esforcoe n~ao garante sequenciac~ao), com o objectivo de fazer chegar um datagrama a um conjunto de sistemas de destino, constitudos num grupo identicado atraves de um endereco IP de classe D (gama [224.0.0.0, 239.255.255.255]).
A utilizac~ao do IP Multicast como protocolo de comunicac~ao em grupo num ambiente sensvel em termos de Seguranca n~ao pode ser feita sem a introduc~ao de servicos adicionais. Por um lado, a junc~ao a um determinado grupo IP Multicast n~ao encontra obstaculos de natureza selectiva, ou seja, um sistema dispondo de interfaces de rede com capacidades multiponto pode aderir a qualquer grupo, sendo suciente a execuc~ao de um conjunto mnimo de operac~oes sobre sockets de Berkeley (ver, por exemplo, o cliente S3L multiponto da secc~ao B.2.8 do ap^endice B). Adicionalmente, a junc~ao so e necessaria caso se pretenda receber o trafego especco desse grupo. A gerac~ao de trafego dirigido ao grupo pode ser feita por entidades que n~ao pertencem ao grupo, o que introduz oportunidades obvias para ataques do tipo negac~ao{de{servico.
A gura 6.1 representa uma possvel soluc~ao para o problema da permeabilidade dos grupos IP Multicast: a constituic~ao de um subgrupo seguro, do grupo mais abrangente identicado por um determinado endereco IP de classe D. O trafego do subgrupo segu- ro e sujeito a medidas especiais de protecc~ao (em termos de Privacidade, Autenticac~ao, 1Neste caso incluindo, para alem da N~ao{Repudiac~ao, o Controle de Acesso (ver \Controle de acesso
ao grupo" na secc~ao 6.2.1).
2Rera{se que, ao longo deste captulo, o
IP Multicast n~ao sera, em si mesmo, objecto de analise
aprofundada, uma vez que se assume, sobretudo, como um instrumento de trabalho disponvel para, sobre ele, concretizar os protocolos aqui descritos. Refer^encias como [Dee89, Fen96, SM96, SRL96] constituem boas fontes de informac~ao sobre o tema, sendo [Hur97] uma sntese bastante recente do estado da arte.
grupo IP Multicast
Legenda:
tráfego seguro (SKIP/S3L) tráfego inseguro não-membro subgrupo seguro
Figura 6.1: Subgrupos seguros e inseguros sobreIP Multicast.
etc.) que o \isolam" dos elementos do subgrupo complementar, bem como de trafego eventualmente gerado por n~ao{membros.
Neste captulo, s~ao apresentados dois conjuntos de protocolos que governam a criac~ao, gest~ao e operac~ao de subgrupos seguros de grupos IP Multicast. Na linha do captulo anterior, introduzem{se, em primeiro lugar, as extens~oes multiponto do SKIP, preparan- do--se assim o terreno para a denic~ao das extens~oes multiponto do proprio S3L. Mais uma vez, colocar{se{a ^enfase na complementaridade entre as duas abordagens.
Em jeito de antecipac~ao, podemos adiantar que o modelo de programac~ao obtido pela introduc~ao das extens~oes multiponto do S3L e muito semelhante ao da variante ponto- -a{ponto: a inicializac~ao de um \contexto multiponto", segue{se a utilizac~ao das \primi- tivas" S3Lsendtoe S3Lrecvfromque detectam, automaticamente, a variante multiponto
ou ponto{a{ponto do S3L e actuam em conformidade. 6.1 Extens~oes Multiponto ao SKIP
Tradicionalmente, a distribuic~ao de chaves num contexto de comunicac~ao multiponto ba- seia{se na exist^encia de um Centro de Distribuic~ao de Chaves (KDC3) que fornece, a cada elemento do grupo, a chave{do{grupo. Com base nessa chave, cada elemento tem acesso de leitura e escrita ao trafego do grupo.
Todavia, [AP95] identica dois problemas fundamentais nesta abordagem:
1. a mudanca dachave{do{grupon~ao e escalavel relativamente ao numero de elementos do grupo: para um grupo numeroso, o KDC podera ter diculdades em fornecer,