B.2 Programac~ao de Aplicac~oes com a API do S3L
B.2.5 Manipulac~ao de Contextos S3L Multiponto
O S3L permite a constituic~ao de subgrupos seguros sobre os grupos de base oferecidos pelo IPMulticast. Ao contrario do S3L ponto{a{ponto, n~ao e necessario indicar, explicitamente, para cada transacc~ao entre duas entidades comunicantes, quais as qualidades de servico que v~ao ditar a seguranca da transacc~ao. Uma especie de \dono do grupo", materializado pela aplicac~ao s3lmgowner, dene, para todo o grupo, a poltica de gest~ao de chaves e os
diversos algoritmos de Encriptac~ao, Autenticac~ao e Compress~ao a usar.
A gura B.4 apresenta as estruturas de dados usadas, ao nvel do dono de um grupo, a m de manter a informac~ao que caracteriza o grupo. Essas estruturas de dados s~ao preenchidas com base em informac~ao fornecida ao demonio s3lmgowner, atraves da sua
linha de comando (ver o manual de s3lmgownerna secc~ao B.1.4).
Os membros cam a conhecer as qualidades de servico que se obrigam a usar, enquanto membros do grupo, apos a execuc~ao de um processo de junc~ao que ocorre, de forma implcita,por necessidade, durante a assemblagem ou desassemblagem de uma mensagem S3L multiponto (ver func~oes S3LMmake message e S3LMopen messageem B.2.6).
A informac~ao recebida do dono do grupo em resultado do processo de junc~ao e mantida, nos membros, em estruturas de dados do mesmo tipo que as usadas pelo dono do grupo. Adicionalmente, e necessario preservar a identidade e a localizac~ao do dono do grupo, uma vez que, dependendo da poltica de gest~ao de chaves GIK5 denida pelo dono do grupo, pode ser necessario repetir o processo de junc~ao, posteriormente. Como o processo de (re)junc~ao se baseia na utilizac~ao de mensagens S3L ponto{a{ponto, a chamada informac~ao de \caracter pessoal" (rever B.2.2) relativa ao membro, tambem deve estar facilmente acessvel.
Assim, um contexto S3L 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. A gura B.5 apresenta a denic~ao, em C, do tipo S3LMCtx, relativo a um
contexto S3L multiponto.
A inicializac~ao de um contextoS3LMCtxpor forma a permitir a realizac~ao posterior de
(re)junc~oes ao grupo e efectuada atraves da func~ao S3LMinit S3LMCtx que, tipicamente,
e invocada uma unica vez, no incio de um programa que utiliza as funcionalidades S3L 5
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 B.4: EstruturasS3LMGikInfoeS3LMGroupInfo.
multiponto. 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, no interior das func~oes S3LMmake message
e S3LMopen message.
A API do S3L n~ao oferece mais func~oes de manuseamento de contextos S3L 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.
Contudo, existem dois campos cuja manipulac~ao directa podera ter interesse. A leitu- ra do campo rem napos a recepc~ao de uma mensagem S3L multiponto permitira aceder
ao valor do campo n dessa mensagem e utiliza{lo, por exemplo, num mecanismo de se-
quenciac~ao ou de detecc~ao de repetic~oes. A escrita no campodeltade 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~aode uma forma analoga a sua utilizac~ao em mensagens S3L ponto{a{ponto.
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 B.5: Estrutura S3LMCtx.
Nome: S3LMinit S3LMCtx{ inicializa uma estruturaS3LMCtx S3LMinit S3LMCtx
Sinopse:
#include <s3lsocket.h>
void S3LMinit S3LMCtx (S3LMCtx *mctx, S3LPartieInfo *loc info, char *mipaddr, char *gowner dname, char *gowner ipaddr);
Descric~ao:
A func~aoS3LMinit S3LMCtxinicializa um contexto multipontomctx, actualizan-
do os seus campos loc info, group info.mipaddr, gowner dname e gowner ipaddrcom o valor dos par^ametros homologos da func~ao.
Ver tambem:
S3LMmake message,S3LMopen message