e capaz de rejeitar cotac~oes repetidas (relativas ao mesmo instante temporal de outras previamente recebidas) bem como de actualizar o historial de cotac~oes com valores menos recentes, mas que foram recebidos apos valores mais actuais.
Na proxima secc~ao, veremos que o valor do camponde uma mensagem S3L multiponto
recebida e acessvel atraves de um camporem n(remote n) da estrutura de dadosS3LMCtx,
que dene o contexto de emiss~ao/recepc~ao de uma mensagem S3L multiponto. Desta forma, as aplicac~oes que necessitem de Sequenciac~ao de mensagens S3L multiponto t^em a sua disposic~ao a referida marca temporal.
6.3 A Interface de Programac~ao de Aplicac~oes do S3L Mul-
tiponto
Nesta secc~ao descrevem{se as extens~oes multiponto a Interface de Programac~ao de Apli- cac~oes do S3L ponto{a{ponto, inicialmente apresentada na secc~ao 5.3. As estruturas de dados e func~oes aqui introduzidas devem ser aplicadas em conjunc~ao com os procedi- mentos necessarios a utilizac~ao de sockets de Berkeley sobre IP Multicast. As extens~oes multiponto do S3L s~ao tambem descritas na secc~ao B.2 do ap^endice B, apresentando{se 29No protocoloInternet Group Management Protocol(IGMP) [Fen96], por exemplo, adopta{se um com-
portamento semelhante, quando ummulticast router em fase de arranque envia, para o grupo 224.0.0.1, duasmembership queriespraticamente seguidas.
na secc~ao B.2.8 do mesmo ap^endice exemplos concretos de um servidor e de um cliente S3L multiponto.
Tal como acontece no S3L ponto{a{ponto, a utilizac~ao das funcionalidades proporcio- nadas pelas extens~oes multiponto segue um roteiro bem denido, que se divide em dois conjuntos de tarefas, em func~ao do papel a desempenhar:
tarefas do produtor de mensagens S3L multiponto:
1. obtenc~ao de informac~ao que identica e caracteriza a entidade produtora; 2. inicializac~ao de um contexto S3L multiponto, especicando{se o endereco IP
Multicast do grupo e identicando{se o seu dono;
3. assemblagem da mensagem S3L multiponto com base no contexto inicializado em 2 (e que acaba por ser completamente denido, em resultado de uma junc~ao implcita junto do dono do grupo S3L);
4. envio da mensagem assemblada para o grupo S3L, subgrupo de um determinado grupoIP Multicast, atraves da func~ao S3Lsendto;
5. repetic~ao das etapas 2, 3 e 4, com possvel reutilizac~ao dos contextos iniciali- zados na etapa 2 sempre que o grupo em causa e o seu dono se mantenham os mesmos;
tarefas do consumidor de mensagens S3L multiponto:
1. obtenc~ao de informac~ao que identica e caracteriza a entidade consumidora; 2. inicializac~ao de um contexto S3L multiponto, especicando{se o endereco IP
Multicast do grupo e identicando{se o seu dono;
3. junc~ao explcita de umsocket de Berkeley ao grupoIP Multicast 30; 4. recepc~ao de uma mensagem S3L multiponto viaS3Lrecvfrom;
5. processamento da mensagem recebida com base no contexto inicializado em 2 (e que acaba por ser completamente denido, em resultado de uma junc~ao implcita junto do dono do grupo S3L);
6. repetic~ao das etapas 2, 3, 4 e 5, com possvel reutilizac~ao dos contextos inicia- lizados na etapa 2 sempre que o grupo em causa e o seu dono se mantenham os mesmos, em cujo caso se dispensa tambem a repetic~ao da junc~aoIP Multicast efectuada em 3.
Das tarefas apresentadas, ressaltam algumas semelhancas com o modelo de utilizac~ao da API do S3L ponto{a{ponto. Nomeadamente, a obtenc~ao de informac~ao de \caracter pessoal" que caracteriza a entidade produtora ou consumidora de mensagens continua a constituir uma tarefa (a primeira) obrigatoria. As estruturas de dados e func~oes relacio- nadas com a manipulac~ao desse tipo de informac~ao foram ja apresentadas na secc~ao 5.3.1 do captulo anterior. As restantes tarefas lidam com alguns pormenores especcos do S3L multiponto, pelo que as respectivas estruturas de dados e func~oes ser~ao objecto de discuss~ao nas proximas secc~oes.
6.3.1 Manipulac~ao de Contextos Multiponto Seguros
Um contexto multiponto dene{se como uma estrutura de dados onde se concentra toda a informac~ao relevante a operac~ao de uma entidade como membro de um grupo S3L. E com base na informac~ao guardada nessa estrutura que uma entidade pode produzir mensagens S3L multiponto de acordo com as qualidades de servico denidas pelo dono do grupo.
typedef struct {
time_t birthdate; /* ``data de nascimento'' da GIK */ char gik[32]; /* GIK */
} S3LMGikInfo; /* informacao relativa a uma GIK */ typedef struct {
u_char version; /* versao das extensoes multiponto do S3L */ char mipaddr[16]; /* endereco IP multicast do grupo */ time_t group_lifetime; /* tempo de vida do grupo */
time_t group_birthdate; /* ``data de nascimento'' do grupo */
char gik_file[UNIX_PATH_MAX]; /* ficheiro com a proxima versao da GIK */ S3LMGikInfo gik_array[S3LM_MAX_GIKS]; /* array circular de GIKs */ int gik_array_front; /* 1a posicao livre do array */
int gik_array_back; /* 1a posicao ocupada do array */ S3Lbool gik_array_full; /* estado (cheio/nao cheio) do array */ time_t gik_lifetime; /* tempo de vida de uma GIK */
time_t kp_kcis; /* intervalo de mudanca de Kp em segundos */ size_t kp_kcib; /* intervalo de mudanca de Kp em bytes */ char gikalg[64]; /* algoritmo de encriptacao de Kp */ char cryptalg[64];/* algoritmo de encriptacao dos dados */ car macalg[64]; /* algoritmo de producao do MAC */ char compalg[64]; /* algoritmo de compressao dos dados */ } S3LMGroupInfo;
Figura 6.13: Estruturas auxiliares S3LMGikInfoeS3LMGroupInfo.
A gura 6.14 apresenta a denic~ao, em C, do tipo S3LMCtx, relativo a um contexto
S3L multiponto. A gura 6.13 apresenta outros tipos de dados auxiliares, entre os quais o tipoS3LMGroupInfo. O dono do grupo mantem, numa estrutura deste tipo, a informac~ao
que caracteriza o grupo. E precisamente esta informac~ao que e devolvida a um candi- dato ou membro numa conrmac~ao de (re)junc~ao, cando acessvel atraves do campo
group infodo contexto multipontoS3LMCtx. Portanto, a denic~ao de um contexto so se
encontra concluda apos uma junc~ao ao grupo S3L. Todavia, antes dessa junc~ao, que ocor- re implicitamente durante a sntese ou analise de mensagens S3L multiponto (ver func~oes
S3LMmake message e S3LMopen message), e necessario colocar no contexto um conjunto
mnimo de informac~ao que permita levar a cabo, posteriormente, o referido processo de junc~ao. E esse o papel da func~ao S3LMinit S3LMCtx:
void S3LMinit S3LMCtx (S3LMCtx *mctx, S3LPartieInfo *loc info,
typedef struct {
S3LPartieInfo *loc_info; /* informacao relativa `a entidade local */ char gowner_dname[SBUF_SIZE]; /* nome distinto X.500 do dono do grupo */ char gowner_ipaddr[16]; /* endereco IP do dono do grupo */
S3LMGroupInfo group_info; /* caracterizacao do grupo */
time_t loc_gik_birthdate; /* ``data de nascimento'' local da GIK mais recente */
size_t kp_counter; /* numero de bytes enviados com a ultima Kp */ time_t kp_birthdate; /* ``data de nascimento'' local da ultima Kp */ char kp[32]; /* ultima Kp gerada aleatoriamente */
struct timeval loc_n; /* marca temporal local */ struct timeval rem_n; /* marca temporal remota */
u_long delta; /* desvio maximo admissivel entre loc_n e rem_n */ } S3LMCtx;
Figura 6.14: EstruturaS3LMCtx.
texto multiponto mctx, actualizando os seus campos loc info, group info.mipaddr,gowner dnamee gowner ipaddr com o valor dos par^ametros
homologos da func~ao.
A API do S3L n~ao oferece mais func~oes de manipulac~ao de contextos multiponto. A inicializac~ao dos restantes campos ca a cargo dos mecanismos implcitos de (re)junc~ao ao grupo. A utilizac~ao de memoria estatica dispensa tambem uma func~ao de libertac~ao especca.
Existem, no entanto, dois campos cuja manipulac~ao directa podera ter interesse. A leitura do campo rem napos a recepc~ao de uma mensagem permitira aceder ao valor do
campondessa mensagem a m de proceder, por exemplo, a sua sequenciac~ao ou a detecc~ao
de repetic~oes. A escrita no campo delta de um valor positivo, antes do envio de uma
mensagem, constitui indicac~ao de que no destino esse campo devera ser usado na detecc~ao de ataques{de{repetic~ao, de uma forma analoga a das mensagens S3L ponto{a{ponto.
A reutilizac~ao de um contexto S3LMCtx e possvel desde que o grupo e o seu dono
se mantenham inalterados, uma vez que a reactualizac~ao do contexto ocorre, implcita e progressivamente,por necessidade.
6.3.2 Sntese e Analise de Mensagens S3L Multiponto
A semelhanca das mensagens do S3L ponto{a{ponto, o processamento de mensagens S3L multiponto e efectuado por func~oes especcas, conforme se trate da assemblagem ou da desassemblagem dessas mensagens:
S3Lbool S3LMmake message (char *buf in, u long len buf in,
char *buf out, u long *len buf out, S3LMCtx *mctx): sintetiza uma mensa-
gem S3L multiponto, com base nos dadosbuf in(de dimens~aolen buf in) e no con-
textomctx; a mensagem produzidae depositada embuf out, re ectindolen buf out
S3Lbool S3LMopen message (char *buf in, u long len buf in,
char *buf out, u long *len buf out, S3LCtx *mctx): analisa, campo a cam-
po, uma mensagem S3L, fornecida em buf in; o contexto mctx recebe informac~ao
contextual resultante da analise da mensagem e de uma eventual (re)junc~ao ao gru- po durante esse processo; os dados recuperados da mensagem s~ao depositados em
buf oute a sua dimens~ao indicada atraves de len buf out.
A estrutura das mensagens S3L multiponto foi previamente introduzida na secc~ao 6.2.2. Aparte o trabalho de assemblagem e desassemblagem de mensagens desse tipo, estas func~oes levam a cabo execuc~oes do processo de (re)junc~ao ao grupo. As condic~oes que determinam, nestas func~oes, a execuc~ao implcita de (re)junc~oes ao grupo foram discutidas previamente na secc~ao 6.2.3.
6.3.3 Escrita e Leitura de Mensagens S3L Multiponto sobre Sockets As func~oes S3Lsendto e S3Lrecvfrom foram apresentadas, em primeira inst^ancia, na
secc~ao 5.3.4 do captulo anterior, optando{se, nesse contexto, por n~ao antecipar a sua relac~ao com o S3L multiponto. A utilizac~ao destas func~oes para enviar e receber mensa- gens S3L multiponto encapsuladas no campo de dados de pacotes UDP deriva do facto de que, no modelo de programac~ao de sockets de Berkeley, s~ao precisamente as primiti- vas sendtoe recvfrom as unicas primitivas de escrita e leitura que operam com sockets
IP Multicast. A utilizac~ao das func~oesS3Lrecvfrom e S3Lsendtoassegura, assim, seme-
lhancas sintacticas e sem^anticas com as respectivas primitivas de Berkeley.
O prototipo nal que a seguir se apresenta para as func~oes S3Lsendto e S3Lrecvfromapenas difere do apresentado anteriormente na secc~ao 5.3.4 pela utilizac~ao do
tipovoid *na tipicac~ao do par^ametro do contexto, sendo internamente feitas convers~oes
paraS3LCtx * ouS3LMCtx *, conforme o caso:
int S3Lsendto (int fd, void *msg, int len, unsigned int flags,
const struct sockaddr *to, int tolen, void *ctx);
int S3Lrecvfrom (int fd, char *buf, int len, unsigned int flags,
struct sockaddr *from, int *fromlen, void *ctx);
Internamente, cada uma desta func~oes invoca procedimentos ponto{a{ponto (S3Lmake message, S3Lopen message) ou multiponto (S3LMmake message, S3LMopen message), em func~ao do tipo do endereco IP encerrado no campo sin addr
dos par^ametros to oufrom, c.f. o caso.