• Nenhum resultado encontrado

Manipulac~ao de Contextos S3L Ponto{a{Ponto

B.2 Programac~ao de Aplicac~oes com a API do S3L

B.2.3 Manipulac~ao de Contextos S3L Ponto{a{Ponto

Um contexto S3L ponto{a{ponto condensa toda a informac~ao necessaria a uma troca de mensagens S3L ponto{a{ponto3. Assim, previamente a assemblagem de uma mensagem S3L e necessario de nir um destino bem como as qualidades de servico pretendidas, ou seja, de ne{se um contexto S3L. Correspondentemente, da analise4 de uma mensagem S3L resulta a recuperac~ao n~ao so da mensagem original como tambem do contexto que assistiu a sua gerac~ao.

typedef struct {

u_char version; /* versao do protocolo S3L */

S3LPartieInfo *loc_info; /* informacao relativa a entidade local */ char rem_md5dname[16]; /* sintese MD5 do nome dist. da entidade remota */ char *rem_entry; /* entrada da entidade remota, na cache local */ char *rem_symlist; /* algoritmos simetricos da entidade remota */ char *rem_cbclist; /* subconjunto de rem_symlist com os algoritmos

da categoria CBC */

BitString dhagreedkey; /* chave acordada de Diffie--Hellman */ struct timeval rem_n; /* marca temporal remota */

struct timeval loc_n; /* marca temporal local */

u_long delta; /* desvio maximo admissivel entre loc_n e rem_n */ char *kijalg; /* algoritmo de encriptacao de Kp */

char *cryptalg; /* algoritmo de encriptacao dos dados */ char *macalg; /* algoritmo de producao do MAC */ char *compalg; /* algoritmo de compressao dos dados */ } S3LCtx;

Figura B.3: Estrutura S3LCtx.

A estruturaS3LCtx, de nida em s3lsocket.he apresentada na gura B.3, constitui o tipo de dados no qual assenta um contexto S3L.

Note{se que, de um contexto S3L faz sempre parte a informac~ao relevante sobre a enti- dade local, acessvel atraves do campoloc info, o qual se sup~oe previamente inicializado e preenchido pelas func~oes de manipulac~ao de informac~ao de \caracter pessoal" (rever a secc~ao B.2.2).

O tipoBitstringe originario do SecuDE, sendo originalmente de nido em [Sch95d] como:

struct BitString {

unsigned int nbits;

char *bits;

}

3A bem da legibilidade do resto do manual, assume{se, doravante, que as designac~oes \contexto(s)

S3L" e \mensagem(ens) S3L" se referem, por omiss~ao, a objectos do domnio S3L ponto{a{ponto. As correspondentes designac~oes da variante multiponto do S3L ser~ao, porem, explicitamente usadas (e.g.,

\contexto(s) S3L multiponto" e \mensagem(ens) S3L multiponto").

4Do ingl^es

A inicializac~ao, preenchimento e libertac~ao de memoria associada a contextos S3L faz-se a custa das func~oesS3Linit S3LCtx,S3Lmake S3LCtxe S3Lfree S3LCtx, respectivamente.

Em geral, chamadas as func~oes S3Linit S3LCtx e S3Lfree S3LCtx ocorrem uma so vez

ao longo da vida de um programa. Quanto a S3Lmake S3LCtx, e invocada explicitamente

sempre que se pretende de nir um \contexto de emiss~ao" e e invocada implicitamente no seio de S3Lopen message(ver B.2.4) a m de de nir o \contexto de recepc~ao". Este

ultimo podera ser imediatamente reutilizado, por exemplo, para enviar uma mensagem S3L de resposta a mesma entidade originadora.

Nome: S3Linit S3LCtx{ inicializa uma estruturaS3LCtx S3Linit S3LCtx

Sinopse:

#include <s3lsocket.h>

void S3Linit S3LCtx(S3LCtx *ctx, S3LPartieInfo *info);

Descric~ao:

A func~aoS3Linit S3LCtxinicializa os \campos apontadores" da estruturactxa NULL, preparando{a para uma posterior invocac~ao a func~ao S3Lmake S3LCtx.

Todavia, o campoloc infoe inicializado com o valor do par^ametroinfo, fazendo

com que toda a informac~ao relativa a entidade local passe a fazer automaticamente parte do contexto ctx.

Ver tambem:

S3Lmake S3LCtx,S3Lfree S3LCtx

Nome: S3Lmake S3LCtx{ de ne contextosS3LCtx S3Lmake S3LCtx

Sinopse:

#include <s3lsocket.h>

S3Lbool S3Lmake S3LCtx(S3LCtx *ctx, char *rem id, char nsid, u long delta, char *kijalg, char *cryptalg, char *macalg, char *compalg, char *rem ipaddr, S3Lbool *skeyx called);

Descric~ao:

A func~aoS3Lmake S3LCtxpreenche os diversos campos da estruturactxde nindo

assim um contexto S3L. No entanto, por raz~oes de ordem pratica, alguns dos campos dectx n~ao s~ao de nidos atraves desta func~ao: version e loc info s~ao

de nidos em S3Linit S3LCtx; as marcas temporaisrem n e loc ns~ao de nidas

emS3Lopen messagee S3Lmake message, respectivamente.

A de nic~ao dos campos rem symlist, rem cbclist e dhagreedkey faz{se com

base em informac~ao preservada na cache .dhcache, concretamente na entrada

rem entry. Este campo corresponde a um caminho, no sistema de cheiros, para

uma subdirectoria de.dhcacheonde, supostamente, se encontra a entrada da enti-

dade remota identi cada pelo par^ametrorem iddeS3Lmake S3LCtx. Na aus^encia

dessa entrada, o protocolo Skeyx e automaticamente executado, apos o que, uma vez criada a entrada da entidade remota na cache, os campos rem symlist, rem cbcliste dhagreedkeypodem ser nalmente preenchidos.

ctx: contexto S3L a (re)de nir; rem id:

identi ca a \entidade remota" a que, conjuntamente com a entidade local (dada pelo campo ctx->loc info), o contexto se refere;

nsid(Name Space IDenti er):

tipo do identi cadorrem id; um valorNSID X500corresponde a presenca

de um nome distinto X.500 em rem id; um valor NSID MD5X500 corres-

ponde a presenca de uma sntese MD5 de um nome distinto X.500 em

rem id; no primeiro caso, o campo rem md5dname de ctxe de nido pe-

la sntese MD5 de rem id, enquanto que no segundo, rem md5dname e

uma copia directa de rem id; os valores NSID X500 e NSID MD5X500s~ao

de nidos em common.h;

delta: tempo de vida, em microsegundos, da mensagem S3L associada a este

contexto; o campo delta de ctx e inicializado deste valor; um valor S3L DEFAULT DELTA (de nido em s3lsocket.hcomo 0L) corresponde a

um tempo de vida in nito ou seja, n~ao se pretende qualquer protecc~ao contra ataques{de{repetic~ao;

kijalg:

algoritmo simetrico da famlia CBC com que, em conjunc~ao com an'esima

vers~ao da chave dhagreedkey, se cifrara/cifrou a chave espec ca (Kp)

de cada mensagem; n sera dado pelos campos loc n num contexto de

emiss~ao e porrem nnum contexto de recepc~ao; os valores dekijalgde-

vem pertencer, primariamente, ao \subconjunto CBC" de SYM ENC ALGS

(de nido em keyx.h) e, em ultima inst^ancia, a intersecc~ao dos con-

juntos ctx->rem cbclist e ctx->loc info->cbclist; caso contrario,

n~ao ser~ao aceites, e o contexto n~ao sera de nido; s3lsocket.h de ne S3L DEFAULT CBC ALG como DES-CBC, valor a indicar, em caso de inde-

cis~ao;

cryptalg:

algoritmo simetrico a usar, em conjunc~ao com a chave Kp, na encrip-

tac~ao dos dados do utilizador integrados na mensagem S3L; os valores de kijalg devem pertencer, primariamente, ao conjunto SYM ENC ALGS

(de nido emkeyx.h) e, em ultima inst^ancia, a intersecc~ao dos conjuntos ctx->rem symlistectx->loc info->symlist; caso contrario, n~ao ser~ao

aceites, e o contexto n~ao sera estabelecido; o valorS3L DEFAULT SYM ALG

(de nido como IDEA) pode ser usado em caso de indecis~ao e o valor S3L NO CRYPT indica que se dispensa encriptac~ao dos dados do utiliza-

dor; ambos os valores s~ao de nidos em s3lsocket.h; macalg:

algoritmo simetrico a usar, em conjunc~ao com a chave Kp e o algoritmo

de sntese MD5, para produzir o MAC (Message Authetication Code) da mensagem; os valores potenciais de macalge cryptalg coincidem, bem

como o seu metodo de validac~ao; o valorS3L DEFAULT MAC ALGa indicar

em caso de decis~ao e de nido ems3lsocket.hcomoIDEA; a autenticac~ao

compalg:

algoritmo de compress~ao a usar sobre os dados do utilizador; na vers~ao ac-

tual do S3L e suportado apenas o algoritmo

S3L DEFAULT COMPRESS ALG, de nido em s3lsocket.h como ZLIB-1.0.3; a compress~ao e facultativa, o que se pode exprimir atraves

do valorS3L NO COMPRESS; rem ipaddr:

endereco IP onde reside a entidade remota;

skeyx called:

indicador da ocorr^encia do protocolo Skeyx; normalmente tem o valor

S3LFALSE; se antes da invocac~ao a S3Lmake S3LCtx, o protocolo Skeyx

tiver sido executado recentemente com a entidade rem id na maquina rem ipaddrent~aoskeyx calleddevera ser fornecido com o valorS3LTRUE,

evitando assim uma eventual execuc~ao automatica de Skeyx dentro de

S3Lmake S3LCtx; a variavel que suporta skeyx called deve ser reutili-

zada quando rem ide rem ipaddr s~ao invariantes entre sucessivas invo-

cac~oes de S3Lmake S3LCtx;

Valores de retorno:

A func~ao retornaS3LTRUE se bem sucedida. Caso contrario retorna S3LABORT.

Ver tambem:

S3Linit S3LCtx,S3Lfree S3LCtx,S3Lopen message

Nome: S3Lfree S3LCtx{ liberta memoria din^amica numa estruturaS3LCtx S3Lfree S3LCtx

Sinopse:

#include <s3lsocket.h>

void S3Lfree S3LCtx(S3LCtx *ctx);

Descric~ao:

A func~ao S3Lfree S3LCtx liberta a memoria din^amica associada a alguns dos

campos da estruturainfoinvocando, por m, a func~aoS3Linit S3LCtxde forma

a que esses campos quem novamente inicializados aNULL.

Ver tambem:

S3Linit S3LCtx, S3Lmake S3LCtx