Dissertação: Protocolo Seguro Para Autoconfiguração de Endereços de Redes Móveis Ad Hoc Autor: Fábio Mesquita Buiati 1. Visão Geral das Redes Ad Hoc Uma rede móvel ad hoc é composta por nodos móveis conectados por interfaces sem fio, que se comunicam através de ondas de rádio. Esses nodos podem formar dinamicamente uma rede sem a necessidade de qualquer infra-estrutura fixa. Numa rede ad hoc, um nodo só pode se comunicar com os nodos com os nodos que estão no seu raio de transmissão. Em virtude disto, um pacote destinado a um nodo fora do alcance de transmissão do nodo de origem deverá passar pelos nodos intermediários, que funcionarão como roteadores até o pacote chegar ao seu nodo de destino. 1.1. Características Uma rede ad hoc pode operar de forma isolada ou pode ser a extensão de uma rede cabeada. Para atuar como uma extensão de uma rede fixa é necessário o uso de um gateway, que será responsável pela transmissão dos pacotes de uma rede para outra. Redes ad hoc possuem algumas particularidades que as tornam mais complexas que as redes cabeadas e às redes móveis com concentrador de acesso. Essas características são observadas na tabela abaixo: Características Topologia dinâmica Descrição Os nodos podem se movimentar livremente, logo a topologia da rede muda constantemente e de forma imprevisível. Largura de banda restrita Devido a ruídos, interferências, enfraquecimento de sinal, efeitos dos acessos múltiplos e fatores externos, as redes sem fio possuem uma capacidade significativamente menor do que redes cabeadas. Economia de energia Dispositivos móveis geralmente utilizam baterias, portanto para esses aparelhos o consumo de energia é um ponto crucial. Segurança limitada Redes móveis sem fio são mais vulneráveis a ataques que redes fixas, o que implica numa maior possibilidade de escuta, invasão e ataques. Técnicas de segurança devem ser implementadas para reduzir as chances de ataques. Por outro lado, por possuir um controle descentralizado, possuem maior robustez, já que os serviços operam de forma distribuída. 1.2. Classificação Existem diversas maneiras de classificar as redes ad hoc. Algumas delas são quanto sua: Comunicação: o Único salto: os nodos se comunicam diretamente com os outros nodos, pois estão dentro da área de transmissão. o Múltiplos saltos: alguns nodos não podem se comunicar com outros nodos, assim é preciso transmitir os dados por nodos intermediários, também chamados de nodos roteadores. Simetria: o Simétrica: todos os nodos da rede possuem capacidades iguais e dividem responsabilidades similares. o Assimétrica: as capacidades como, por exemplo, raio de transmissão, capacidade de processamento e velocidade de movimento, e suas responsabilidades como habilidade para efetuar roteamento, variam de nó para nó. 1.3. Vantagens A necessidade de instalar redes sem infra-estrutura, a um baixo custo associado com aplicações móveis são as principais vantagens das redes ad hoc. Em relação as redes cabeadas, podem-se observar as seguintes vantagens: Mobilidade: vantagem primordial em relação as redes cabeadas. Rápida instalação: podem sem instaladas em qualquer local sem a necessidade de infra-estrutura física, tornando a rede disponível em pouco tempo e de forma mais rápida. Confiabilidade: devido a não utilização de infra-estrutura física, torna-se muito mais fácil identificar problemas e reduz-se o tempo de re-configuração de algum nodo caso haja problemas. 1.4. Desvantagens Apesar das vantagens citadas, alguns problemas e dificuldades podem surgir devido as peculiaridades das redes sem fio. Os maiores problemas relacionados a essa tecnologia são: Localização: como os nodos se movem livremente e de forma imprevisível, são necessários mecanismos para conhecer a real localização de cada nodo. Interferências: como a transmissão e recepção dos dados são feitos utilizando ondas de rádio e freqüências públicas, redes ad hoc tornam-se vulneráveis a ruídos e interferência de outros sistemas. Consumo de energia: dispositivos portáteis geralmente utilizam baterias e estas têm suprimento limitado de energia. Portanto são utilizadas técnicas pelos fabricantes de equipamentos para diminuir o consumo de energia, influenciando diretamente na rede, visto que o nodo não é capaz de receber qualquer informação quando entra em funcionamento visando reduzir o consumo. Inexistência de um ponto central: a falta de uma entidade centralizadora, com a função de coordenar a rede, é preciso a adoção de algoritmos que gerenciem a rede através dos nodos conectados. Banda passante: redes sem fio possuem banda passante de no máximo 54 Mbps enquanto em redes cabeadas essa banda pode chegar até 10 Gbps. Interoperabilidade: redes ad hoc ainda possuem diversos produtos proprietários, que podem operar em freqüências diferentes ocasionando um mal funcionamento da rede. Por isso, é aconselhável a implantação de redes ad hoc com equipamentos de um mesmo fabricante. Segurança: os dados propagados em uma rede ad hoc podem exceder os limites físicos desejados, aumentando a possibilidade de escuta, invasão e ataques. Roteamento: como as rede possuiu uma topologia dinâmica, é necessário um protocolo de roteamento eficiente para a entrega correta dos pacotes. 1.5. Roteamento O mecanismo de roteamento em uma rede é responsável pela entrega dos dados entre os diferentes nodos da rede. O nodo responsável por isso recebe a nomenclatura de roteador. Sua principal função é entregar os pacotes de uma maquina de origem para as maquinas de destino. Quando um nodo origem envia pacotes pra um nodo destino, os dados são encaminhados ao roteador local que os encaminha até o destino final. Esse caminho pode conter vários roteadores. Cada roteador seleciona o próximo salto baseado na sua tabela de roteamento, que contem informações sobre todos os roteadores ao longo da rede, até que o pacote chegue ao seu destino. Um protocolo robusto e confiável deve gerenciar dinamicamente as informações contidas na tabela de roteamento, visto que, a topologia de rede pode mudar frequentemente. Os algoritmos de roteamento nas redes cabeadas podem ser classificados em: Algoritmos estáticos ou não-adaptativos: são previamente configurados pelo administrador de rede Algoritmos dinâmicos ou adaptativos: descobrem rotas automaticamente conforme as mudanças na topologia de rede. Em redes móveis sem fio todos os algoritmos de roteamento são dinâmicos devido à mobilidade dos nodos. As características desejáveis em um algoritmo de roteamento são as descritas na tabela abaixo: Características Descrição Correto funcionamento Escolher a melhor rota para o pacote chegar ao seu destino. Simplicidade Disponibilizar os serviços com o mínimo de processamento possível. Robustez Sempre chegar a uma resposta aceitável e funcionar sem problemas durante anos. Escalabilidade Prever o funcionamento da rede e mesmo com o aumento do numero de nodos, continue funcionando corretamente. Convergência Escolher rapidamente a melhor rota, mesmo com alterações sucessivas das rotas. Parâmentros de QoS Suporte a parâmetros de QoS é imprecindivel para determinados tipos de tráfego. Adaptabilidade Ser capaz de trabalhar com mudanças freqüentes de topologia. Independência da Funcionamento na maior variedade de computadores e tecnologia de rede meios físicos. Justiça Todos nodos devem ter acesso a recursos disponíveis na rede a qualquer momento. A escolha de um protocolo de roteamento varia de acordo com fatores como, por exemplo, complexidade da rede, tamanho, segurança, escalabilidade e estabilidades. Características sobre o roteamento em redes ad hoc Existem diferenças entre os algoritmos de roteamento utilizados em redes cabeadas e redes ad hoc. Isso porque, redes ad hoc dependem de diversos fatores, como topologia, seleção de roteadores e características que podem ser heurísticas na hora de encontrar o melhor caminho para a entrega dos pacotes. Devido a escassez de recursos nas redes ad hoc é necessário otimizar o uso da banda disponível, motivando o desenvolvimento de algoritmos mais eficientes. Características como a simetria dos enlaces também influencia na questão do roteamento dessas redes, sendo que são baseados em enlaces simétricos a maior parte desses protocolos. Diferentes padrões de mobilidade também resultam em dificuldades de desenvolvimento de protocolos de roteamento, visto que, alguns nodos podem se movimentar de rapidamente, enquanto outros podem ser fixos ou moverem-se lentamente, sendo quase impossível prever o padrão de movimentação de nodos, principalmente em redes de larga escala. Isso pode ocasionar uma sobrecarga na troca de mensagem do algoritmo de roteamento, ocasionando a sobrecarga do uso de banda. O grupo de trabalho Manet, com o intuito de observar o mérito e a performance de um protocolo de roteamento, enumera algumas métricas que os protocolos devem seguir. Podem ser tanto qualitativas como quantitativas. Na tabela abaixo são informadas as métricas qualitativas: Métrica Operação distribuída Descrição Característica fundamental a fim de evitar a centralização de informações, podendo ocasionar vulnerabilidade. Livre de loops Para evitar o trafego de pacotes por muito tempo na rede, pode ser usada uma variável TTL (time to live), entretanto uma abordagem mais estruturada é indicada. Operação baseada na Algoritmo adaptável às condições de trafego, utilizando de demanda forma mais eficiente recursos de energia e largura de banda. Operação pró-ativa Em certas ocasiões, a latência adicionada pela operação na demanda poderá ser inaceitável. Se os recursos de energia e banda permitir, operações pró-ativas são desejáveis. Segurança Se as camadas de rede e enlace não garantirem segurança, os protocolos de roteamento estarão vulneráveis a ataques. Mecanismos para inibir modificações nas operações do protocolo são desejáveis. Operação no período de Durante um período de inatividade o nodo deve deixar de “sonolência” transmitir e/ou receber pacotes, sem que isso resulte em maiores conseqüências. Características quantitativas para avaliação de desempenho dos protocolos de roteamento: Métrica Descrição Atraso e desempenho de Variância, dados fim a fim Tempo descobrimento de rota média e distribuição são dados muito importantes para avaliação de um protocolo de roteamento. de Uma forma de medir o atraso do pacote fim a fim de um algoritmo de roteamento é o tempo requerido para estabelecer rotas quando requisitadas. Porcentagem dos Medida para avaliar performance de roteamento de pacotes entregue fora de protocolos da camada de transporte como TCP, que ordem entregam pacotes na ordem correta. Eficiência Como o trafego de pacotes de dados e de controle deve compartilhar o mesmo meio e a capacidade dos meios é limitada, o trafego excessivo de pacotes de controle causará impacto na performance do roteamento. Devido as peculiaridades características das redes ad hoc, obter a eficiência de um protocolo de roteamento não é muito simples. Mas tendo como base os seguintes valores, pode-se medir a eficiência de um protocolo de roteamento de redes ad hoc: Bits de dados transmitidos / Bits de dados entregues: medida que representa a eficiência dos bits de dados entregues dentro da rede. Indiretamente, essa medida fornece também a media de saltos percorridos pelos pacotes de dados. Bits de controle transmitidos / Bits de dados entregues: medida que respresenta a eficiência do protocolo no uso entre os pacotes de controle sobre os pacotes de dados entregues. Pacotes de controle e pacotes de dados transmitidos / Pacotes de dados entregues: medida que tenta capturar a eficiência de acesso ao canal do protocolo. Protocolos de roteamento em redes ad hoc Devido a grande quantidade de protocolos de roteamento existentes para redes ad hoc, eles foram dividos em dois grupos: Protocolos reativos: determinam as rotas a serem usadas somente sob demanda. Esse tipo de protocolo proporciona economia de energia e banda, mas em conseqüência o atraso de entrega de pacotes pode ser significativamente alto. Protocolos pró-ativos: tentam avaliar continuamente a rede mantendo um conhecimento atualizado das rotas, para que, no momento em que precisar encaminhar pacotes, a rota já seja conhecida e possa ser encaminhado imediatamente. Possuem a vantagem de atraso mínimo, visto que, no momento que receber a solicitação já encaminha o pacote, em compensação precisam trocar informações continuamente entre os nodos acarretando uso de banda. Portanto, nota-se que nenhum dos dois grupos atende a todos os tipos de ambiente. Dessa forma, temos os protocolos híbridos, que usam uma estrutura hierárquica em que apenas alguns nodos fazem a atualização periódica da topologia da rede. 1.3. Descrição do problema de autoconfiguração Todo nodo, para se comunicar em uma rede, necessita de um identificador único, que geralmente é o IP. Em redes cabeadas, esse endereço pode ser configurado manualmente pelo administrador de rede ou automaticamente, via servidor DHCP, que fornece todas as informações para os nodos serem configurados na rede. Em redes ad hoc é difícil garantir acesso a um servidor, devido a mobilidade da rede. Portanto, é desejável que a configuração dos nodos seja feita de forma dinâmica, automática e de preferência sem intervenção humana. 1.4. Necessidades do protocolo de autoconfiguração Para se obter um protocolo de autoconfiguração rápido, seguro e confiável, as seguintes características são necessárias: Necessidade Descrição Unicidade dos endereços Dois ou mais nodos não podem obter o mesmo endereço IP IP em um determinado instante de tempo Correto funcionamento Um endereço IP é associado a um nodo somente durante o período que ele estiver na rede. Quando um nodo deixar a rede o seu endereço IP deve ser disponibilizado a outros nodos que queiram se juntar a rede Solucionar problemas Caso algum nodo falhe ou ocorra perda de mensagens, o relacionados à perda de protocolo deve agir de forma que não hajam dois ou mais mensagens nodos com o mesmo endereço IP Permitir endereçamento Um nodo só não será configurado na rede com um endereço IP somente se não houver nenhum endereço disponivel em multi-hop toda a rede Minimizar o tráfego de O protocolo deve minimizar a troca de pacotes entre os pacotes adicionais rede na nodos durante o processo de autoconfiguração de um nodo a fim de evitar afetar a performance da rede Verificar a ocorrência de Quando dois nodos solicitam um endereço IP no mesmo solicitações concorrentes instante de tempo, deve realizar um tratamento a fim de de endereço IP Ser evitar que os dois nodos obtenham o mesmo endereço. flexível particionamento ao O protocolo deve manipular a fusão de duas redes distintas e fusão de redes ad hoc a ad hoc como também o particionamento em duas ou mais redes. Realizar o processo de O protocolo deve-se adaptar as mudanças da topologia da sincronização rede. Possuir segurança O protocolo deve se assegura que somente nodos autorizados e confiáveis tenham permissão para acesso a rede. 1.5. Classificação dos Protocolos Os protocolos de autoconfiguração podem ser classificados de duas formas. Uma em relação ao processo de configuração e outra em relação a forma de detecção de endereços duplicados. 1.5.1. Quanto ao processo de autoconfiguração Independente O nodo constrói seu próprio endereço baseado em um numero randômico ou no identificador do hardware. Neste processo é necessário um mecanismo de detecção de endereços duplicados para assegurar a unicidade do endereço. Dependente Cada nodo da rede mantém um conjunto de endereços IP, assim é necessária uma segunda entidade para atribuir um novo endereço IP. 1.5.2. Quanto ao processo de detecção de endereços duplicados Alocação para detecção de conflitos O nodo escolhe um endereço IP por tentativa e faz a requisição esperando pela aprovação de todos os nodos da rede. Caso algum nodo negar, esse endereço já está em uso e o processo se repete ate que se encontre um endereço disponível. Alocação livre de conflitos Usa o conceito de divisão binária, onde cada nodo possui um conjunto de endereços distintos. Cada nodo pode atribuir um endereço IP sem a necessidade dos demais nodos da rede aprovar. Sendo assim, todos os nodos são responsáveis pelo processo de atribuição de endereços. Alocação do melhor esforço Os nodos da rede são responsáveis por atribuir um endereço IP para os novos nodos, tentando associar um endereço que não esteja sendo usando na rede. Todos os nodos possuem uma lista de endereços livres ou em uso na rede. Esse tipo de protocolo funciona muito bem em conjunto com protocolos de roteamento pró-ativos, pois os nodos frequentemente realizam difusão com as informações de endereços usados na rede. 1.6. Métricas para avaliação de performance Operação Distribuída Em uma rede ad hoc um nodo não é tão confiável quanto um servidor DHCP devido aos diversos fatores particulares a esse tipo de rede. A falha de alguns nodos não deve impedir o funcionamento do protocolo, sendo então necessário seu funcionamento de forma distribuída. Exatidão Dois ou mais nodos não devem possuir o mesmo endereço IP, portanto quando acontecer esse fato o algoritmo de detecção de endereços duplicados deve ser executado o mais rápido possível. Complexidade Devido a quantidade limitada de memória e processamento de nodos móveis, a solução deve ser o mais simples possível, podendo consistir de módulos como alocação de endereços, detecção de endereços duplicados e manutenção de tabelas de estado do nodo. Comunicação excessiva Deve-se evitar a difusão em virtude do alto consumo de banda, utilizando-se de alternativas como a comunicação somente com nodos vizinhos. Logo, protocolos onde cada nodo pode atribuir um endereço IP isoladamente são mais eficazes. Igualdade Distribuição de endereços IP deve ser justa, a fim de evitar a duplicidade de endereços. Latência Latência é o tempo entre a solicitação e a atribuição de um endereço IP livre a um nodo solicitante. Quanto menor as mensagens de difusão menor a latência. Escalabilidade Protocolos que utilizam difusão para a autoconfiguração possuem uma baixa escalabilidade em virtude do consumo de banda estar ligado ao numero de nodos na rede. Já se a comunicação ocorre entre nodos vizinhos e localmente, o protocolo tem alta escalabilidade. 2. Autenticação para o protocolo de autoconfiguração 2.1. Introdução Inúmeros fatores devem ser levados em consideração para disponibilizar segurança em protocolos de autoconfiguração como: autenticidade, confidencialidade, disponibilidade e integridade. Com isso obtemos redução no risco de vazamento de informações, fraudes, erros, uso indevido, sabotagens e roubo de informações. A autenticidade habilita um nodo a assegurar a identidade do nodo com o qual está se comunicando. O serviço de autenticação deve assegurar ao nodo receptor que a mensagem seja realmente procedente da origem informada em seu conteúdo. Confidencilidade assegura que informações não serão reveladas por nodos não autorizados. Seu objetivo é proteger a informação contra leitura e/ou copia por alguém que não tenha sido autorizado pelo proprietário da informação. Disponibilidade consiste na proteção dos serviços prestados pelo sistema de forma que eles não se tornem indisponíveis sem autorização, assegurando ao usuário o acesso aos recursos da rede sempre que ele precisar e for necessário. Integridade garante que uma mensagem que está sendo transmitida não será modificada sem a permissão do proprietário da informação. A criptografia é o mecanismo básico para se prover segurança e consiste no processo de transformar uma informação antes da comunicação para que ela se torne inintelegivel para destinatários indesejados. 2.2. Modelo de Segurança 2.2.1. Modelo Inimigo Pode se considerar “inimigo” qualquer nodo anunciando informações falsas nas mensagens pré-definidas no protocolo de autoconfiguração, que visam atingir o “alvo”, ou seja, qualquer nodo que aceite e use essas informações falsas, visto que, os nodos inimigos produzem as mensagens com sintaxe válida. Nodos inimigos exploram qualquer mensagem que faça parte do protocolo de autoconfiguração. Esses ataques podem ser classificados como: Ataques de solicitação: nodos inimigos atuam como clientes e fabricam mensagens requerendo o serviço de autoconfiguração. Ataques de servidor: nodos inimigos atuam como servidores na rede e atendem requisições solicitadas respondendo com falsas mensagens. 2.2.2. Requerimentos de Segurança Mecanismos para acompanhamento do comportamento dos nodos pelos próprios nodos da rede devem ser empregados nos protocolos a fim de prover uma maior segurança na rede. Esse mecanismo deve atuar de forma distribuída e autoconfigurável, portanto a verificação da confiabilidade desses nodos deve ser feita de forma colaborativa e adaptativa. Quando um nodo é corrompido, este deve ser excluído da rede e consequentemente não pode mais fornecer o serviço de autoconfiguração. Se o protocolo esta habilitado a identificar o mau comportamento dos nodos, pode-se usar esse mecanismo para tratar os nodos que estão se comportando de forma inadequada e classificá-los como nodos não confiáveis. 2.2.3. Modelo de Segurança Pode-se identifcar unicamente um nodo de forma confiável através de um certificado, visto que endereços IP podem ser duplicados, assim como o endereço MAC. Para um nodo obter o certificado e se tornar membro da rede é preciso adquirir pelo menos um numero X de certificados parciais dos nodos confiáveis já presentes na rede. 2.3. Serviço de Certificação em Redes Ad Hoc O serviço de certificação deve ser baseado em algoritmos e protocolos escaláveis para distribuir de forma segura os serviços de segurança para os nodos da rede. O serviço fica disponível para qualquer nodo da rede desde que seja possível localizar uma coalizão com um número mínimo suficiente de nodos, já que um determinado número de nodos pode colaborativamente prover serviços de certificação. A distribuição das funcionalidades de uma Autoridade Certificadora (CA) é baseada no modelo RSA e realizada através do compartilhamento da chave privada da CA entre todos os nodos participantes da rede utilizando a técnica de criptografia de limiar. Os certificados gerados por uma CA composta por um número X de nodos têm a finalidade de certificar as chaves publicas de cada nodo da rede. Os nodos que não possuem o certificado ou possuem certificado invalido são isolados, não possuindo acesso aos recursos da rede e serão tratados como nodos inimigos, ou seja, seus pacotes serão descartados. 2.3.1. Emissão e Revogação do Certificado Um nodo sem certificado ou precisando renovar seu certificado deve solicitar um certificados para outros nodos que ofereçam o serviço de certificação. A política de autenticação utilizada deve especificar de que maneira os nodos que recebem a requisição de certificados devem servir tal requisição. Diversos critérios podem ser usados para a emissão e renovação dos certificados a fim de proporcionar um serviço com a maior escalabilidade possível. Basicamente não existem diferenças entre a emissão e a renovação de certificados. Quando um nodo precisa solicitar um certificado ele prepara uma mensagem de requisição contendo informações da identidade do nodo e sua chave publica. Em caso de renovação, ele envia uma mensagem e juntamente com ela o seu certificado antigo. Qualquer nodo que possui o compartilhamento da chave secreta pode responder a essa requisição. Se o certificado enviado junto com a mensagem é valido, a requisição é tratada como uma renovação de certificado, caso contrário, será tratado como requisição de um novo certificado. Então, a política apropriada é aplicada a requisição e o nodo pode decidir se atende à requisição gerando um certificado parcial que deve ser encaminhado unicamente ao nodo que requisitou. Quando o nodo requerente receber X certificados parciais validos, ele gera seu novo certificado. 2.3.2. Armazenamento local dos certificados Neste modelo de segurança os nodos armazenam em uma base de dados local em cada nodo os certificados para que a relação de confiança colaborativa seja estabelecida entre os nodos. 2.3.3. Anulação e Revogação do Certificado Para controlar a validade do certificado, são empregados dois métodos de revogação. O primeiro é denominado revogação implícita onde cada nodo deve renovar o certificado em um determinado período após a emissão ou a ultima renovação. O outro método é conhecido como revogação explicita de certificado em que um certificado acusado pela lista do sistema de certificados revogados (CRL) é invalidado independentemente do tempo de validade dele. Com isso, apenas os certificados revogados que não expiraram ainda precisam estar na CRL. 2.3.4. Uso de Múltiplas Autoridades Certificadoras A junção de duas os mais redes ad hoc implica em uma serie de cuidados que devem ser tomados, visto que nodos podem estar utilizando o mesmo endereço IP e também a questão dos certificados, a fim de saber quais foram as autoridades certificadoras que emitiram os certificados para os nodos. Levando em consideração duas redes ad hoc distintas, para cada partição, existe uma autoridade certificadora distribuída, que assina os certificados para todos os nodos dessa rede. Porem, quando essas redes se unem os nodos da nova rede ficam com certificados diferentes, vindos de diferentes autoridades certificadoras distribuídas. Para resolver esse problema é necessário que haja uma relação de confiança cruzada entre as autoridades certificadoras distribuídas. 3. Especificação do Protocolo de Autoconfiguração 3.1. Objetivo O protocolo deve associar de forma segura e confiável um endereço IP a um nodo que deseja se juntar a rede ad hoc. O protocolo especificado usa o processo de divisão binária e considera questões como partição e junção de redes ad hoc, falha de nodos e perda de mensagens. 3.2. Funcionamento Todo nodo válido e confiável que pertence à rede possui um endereço IP identificando sua interface e um conjunto de endereços IP livres para servir aos nodos clientes que desejam se associar a rede. Os conjuntos de endereços IP livres dos nodos de uma mesma rede ad hoc devem ser disjuntos, garantindo que dois ou mais nodos servidores distribuam o mesmo endereço IP para nodos clientes. Cada rede ad hoc possui um identificador único com o objetivo de facilitar a detecção de junções e separações de redes. O protocolo DCDP (Dynamic Configuration Distribution Protocol) serve para distribuição de configurações de rede como: endereço IP, mascara de rede e gateway padrão e utiliza o mecanismo de divisão binária para fornecer conjuntos distintos de endereços IP aos nodos da rede. 3.2.1. Inicialização da rede ad hoc Para que a rede possa atender e autenticar de forma segura novas requisições de nodos clientes é necessário que existam pelo menos um numero X de nodos previamente configurados na rede. Portanto na faze de inicialização da rede o principal objetivo é inicializar os X nodos que irão atender as futuras requisições. Para iniciar os X nodos é utilizado um nodo líder que possua o certificado total assinado e com a chave secreta para que possa fornecer os compartilhamentos desta. Após inicializar os X nodos o nodo líder deixa a rede para evitar que algum nodo inimigo posso obter a chave secreta, garantindo uma inicialização segura e colaborativa através do processo de difusão. 3.2.2. Associação de um endereço IP a um novo nodo Para que um nodo possa obter um endereço IP em na rede ad hoc é preciso que ele já tenha obtido o certificado valido seguindo o modelo de confiança colaborativa. Um nodo com o certificado valido para obter um endereço IP envia uma mensagem em difusão utilizando seu endereço físico da placa como endereço de origem. Qualquer servidor pertencente à rede, responde a solicitação enviando o conjunto com maior quantidade de endereços IP livres que possui. O nodo cliente pode receber mais de uma resposta vinda de diferentes servidores. Nesse caso ele seleciona o nodo servidor com o maior conjunto de endereços IP livres. Após o nodo cliente escolher o servidor do qual irá receber o conjunto de IPs o servidor então divide seu conjunto de endereços ao meio, fornecendo a metade ao nodo cliente e mantendo a outra metade consigo. Então o nodo cliente associa o primeiro endereço do conjunto e os demais serão utilizados para atender requisições de novos nodos que venham querer se juntar a rede. 3.2.3. Saída de nodos O processo de saída ou falha de um nodo dever ser cuidadosamente analisada a fim de evitar problemas na alocação de endereços IP para novos nodos. O protocolo é projetado para minimizar o trabalho do nodo cliente, permitindo que o mesmo deixe a rede e troque o menor numero de mensagens possíveis com os nodos vizinhos, visto que, um nodo, devido a sua mobilidade ou recursos escassos de energia, pode não conseguir realizar a troca de mensagens com os vizinhos. Portanto, pode haver duas situações a se considerar quando um nodo deixa a rede. A primeira é quando o nodo deseja sair da rede e avisa seus vizinhos de sua intenção. A segunda forma é quando ocorre falha do nodo ou o nodo deixa a rede sem avisar previamente seus vizinhos. Saída graciosa dos nodos Ao sair da rede o nodo deixa seu conjunto de endereços IP para o nodo mais próximo da sua área de transmissão. Isso evita que um nodo deixa a rede com uma quantidade elevada de endereços IP não possibilitando que outros nodos possam utilizálos posteriormente. Saída brusca e falha dos nodos Com base na tabela de endereços IP associados aos nodos amigos, um nodo pode detectar se o seu nodo amigo saiu da rede abruptamente. Um nodo envia uma mensagem de ping aos seus nodos amigos. Caso o nodo receba alguma resposta, significa que o nodo ainda está na rede, caso contrario, é detectado que o nodo amigo ao qual foi enviada a mensagem deixou a rede abruptamente e realiza a recuperação dos endereços IP, adicionando estes ao seu conjunto de endereços IP livres. Esse método de recuperação possui a vantagem de que cada nodo é responsável por encontrar seus nodos amigos não sendo necessária a necessidade de broadcast na rede. Mas possui a desvantagem de que caso um nodo amigo deixe a faixa de transmissão por algum instante e retornar posteriormente, é considerada a partida do nodo da rede. 3.2.4. Processo de Sincronização Na associação de endereço IP a um novo nodo a rede, todo nodo pertencente a rede possui uma tabela que mostra a alocação dos endereços IP feitas aos nodos amigos. Com as informações de cada tabela armazenada localmente em cada nodo, é montada outra tabela para que sejam armazenadas os endereços alocados por todos os nodos da rede mantendo uma atual situação da topologia da rede. Nesta tabela global têm-se todos os nodos da rede e seus respectivos conjuntos de endereços IP. 3.2.5. Migração do nodo cliente Devido à mobilidade dos nodos, é possível que o nodo cliente se mova durante o processo de associação do endereço IP e com isso pode perder contato com o nodo servidor, que estava associando um endereço IP a ele. Então, o nodo cliente escolhe um novo nodo servidor e informa ao mesmo a existência do antigo nodo servidor. O novo nodo servidor informa ao antigo nodo servidor da migração do nodo cliente. Quando o processo de associação estiver terminado no antigo nodo servidor, ele encaminha o resultado para o novo nodo servidor que por sua vez encaminha pra o nodo cliente. 3.2.6. Perda de mensagens Para tratar a perda de mensagens, evitando problemas no funcionamento do protocolo, são usadas mensagens de confirmação e tempos apropriados para a troca de mensagens, garantindo assim que cada serviço seja realizado dentro de um tempo finito. 3.2.7. Detectando junção e separação de partições A mobilidade dos nodos pode ocasionar a divisão de uma rede ad hoc em duas ou mais partições. Essas partições devem convergir e tornar-se uma única rede. Neste caso, pode ocorrer que dois ou mais nodos possuam o mesmo endereço IP, portanto devem-se tratar esses casos a fim de evitar um possível conflito de endereços IP. Cada partição ou cada rede ad hoc possui uma identificação única que tem por objetivo auxiliar na detecção da junção de duas ou mais partições. Detectando o particionamento em uma rede ad hoc O particionamento da rede pode ser comparado a uma saída abrupta de vários nodos. Assim, os nodos enviam uma mensagem ping para seus amigos e caso eles não respondam, os endereços IP são recuperados. Esse processo é gradativo e , aos poucos, os blocos de endereços IP vão sendo recuperados. Junção de duas ou mais partições Quando um nodo recebe uma mensagem de outro nodo contendo o identificador único da rede diferente do seu, ele detecta que houve uma junção de duas redes ad hoc. Então, o nodo com maior ou menor endereço IP envia uma mensagem broadcast para coletar as configurações atuais da rede. Para que os nodos de diferentes partições possam se comunicar e formar uma nova rede ad hoc, é preciso cumprir o requerimento principal que é o estabelecimento de uma relação de confiança cruzada entre as autoridades certificadoras distribuídas de cada rede. Na junção de duas redes ad hoc, pode acontecer que a quantidade de nodos seja maior do que a quantidade de endereços IP disponíveis do endereçamento. Nesse caso, é realizada a troca de endereçamento de rede faixa que possua uma maior quantidade de endereços IP. 4. Implementação do Protocolo 4.1. Configuração do Ambiente 4.1.1. Configuração Física A rede ad hoc utiliza nos testes de implementação é totalmente móvel. Inicialmente, a rede é inicializada com dois nodos. Para realizar todos os testes mais dois nodos se juntam a rede. Todas as máquinas são equipadas com placas de rede sem fio modelo Orinoco Silver operando no modo ad hoc, ou seja, as maquinas se comunicam de forma direta, sem um ponto comum para centralizar o tráfego e as informações. 4.1.2. Configuração Lógica O protocolo de autoconfiguração proposto no trabalho recebeu o nome de Autoconf. Esse software é complementado com o software de autenticação, chamado de Cert. O modulo Autoconf possui todas as funcionalidades do serviço de autoconfiguração dos nodos, tanto para o nodo cliente como para o nodo servidor. Já o modulo Cert é responsável pela certificação dos nodos, também servindo tanto para atuar como nodo cliente como nodo servidor. 4.2. Ferramentas Utilizadas Foram utilizadas para o desenvolvimento do protocolo ferramentas de código aberto ou de uso livre. 4.2.1. Linguagem de Programação C A linguagem C foi escolhida, pois apresenta características que facilitam o desenvolvimento de software para uso em redes como, por exemplo, a independência de plataforma e o uso de sockets para efetuar a comunicação via rede. 4.2.2. Linux Foi utilizado o Linux Red Hat 9.0 por possuir na época a ultima versão dos compiladores, a maioria dos drivers para placas de redes sem fio, as bibliotecas de programação para redes e a ferramenta Wireless Tools. 4.2.3. Libnet Libnet é uma biblioteca escrita em C que permite que programadores construam pacotes para serem enviados pela rede através de qualquer plataforma. Essa biblioteca estabelece uma interface simples entre programadores e a programação de baixo nível TCP/IP. 4.2.4. Libcap Biblioteca escrita na linguagem C que permite que programadores capturem e recuperem pacotes pela rede com a utilização de filtros. 4.2.5. Wireless Extensions for Linux Consiste numa API de redes sem fio para o sistema Linux. É composta de três partes complementares. A primeira consiste na interface com o usuário, que é o conjunto de ferramentas para manipular as extensões. A segunda parte é uma modificação de kernel para suportar e definir todas essas extensões. E a terceira trata da interface de hardware e seus drives. 4.3. Definição e Especificação dos Estados do Protocolo Para um melhor entendimento do protocolo, a implementação foi dividida em estados pelo qual o protocolo deve passar. Dessa forma existe um diagrama a ser seguido pelos nodos clientes ao requisitar um endereço IP e outro diagrama para ilustrar o sequenciamento que os nodos servidores devem seguir para fornecer um endereço IP. Cada diagrama consiste em vários estados que modularizam o protocolo, tornando-o mais flexível e portável. 4.3.1. Estados do nodo cliente No processo de solicitação de endereço IP, existem cinco estados principais que descrevem o funcionamento do protocolo no lado do nodo cliente. São os estados: Requester: o nodo cliente faz a solicitação de um endereço IP, enviando uma mensagem em broadcast. Após o envio dessa mensagem é configurado um tempo para a obtenção de alguma resposta dentro da rede. WaitingOffer: o nodo cliente coleta as mensagens de resposta dos nodos servidores. As mensagens são armazenadas em uma estrutura de dados que serve para identificar os nodos servidores que responderam. O nodo cliente fica nesse estado por um determinado período de tempo coletando todas as respostas e caso não receba nenhuma resposta, volta ao estado Requester. A principal função desse estado é a seleção do nodo servidor com o maior conjunto de endereços IP livres. ChoosingServer: após selecionar o servidor, esse estado tem por função enviar uma mensagem ao nodo servidor escolhido informando que ele foi selecionado. WaitingAssigment: nesse estado o nodo cliente aguarda uma mensagem do nodo servidor. Caso não receba resposta, o protocolo envia novamente, por um numero determinado de vezes, a mensagem informando ao nodo servidor que ele foi escolhido. Não recebendo resposta nesse numero de vezes ele retorna ao estado Request, caso contrário avança para o próximo estado. Configured: nesse estado o nodo cliente associa o primeiro endereço do conjunto de endereços IP livres recebidos do nodo servidor a sua interface. Em seguida armazena o restante dos endereços em sua estrutura de dados local. Por fim envia uma mensagem ao nodo servidor confirmando o fim da operação. 4.3.2. Estados do nodo servidor No lado do servidor, existem seis estados que descrevem o funcionamento do protocolo. São eles: Configured: O nodo cliente ao atingir esse estado, ele torna-se um nodo servidor e está apto a atender as requisições dos nodos cliente. Nesse estado o nodo servidor fica escutando as requisições dos nodos clientes. Ao receber uma solicitação de endereço IP ele apenas retorna uma mensagem ao nodo cliente. WaitingClientChoose: o nodo servidor aguarda que o nodo cliente decida qual servidor irá utilizar para fazer o processo de autoconfiguração. Se o nodo servidor receber uma mensagem informando que ele foi escolhido ele passa para o próximo estagio, caso contrário retorna ao estado Configured. AssociateIPAddress: ao ser escolhido pelo nodo cliente o nodo servidor divide seu conjunto de endereços IP livres. Uma metade desse conjunto será enviada junto com o identificador da rede ad hoc. E por fim o nodo servidor configura um tempo de resposta para aguardar a confirmação do nodo cliente que foi realizada a autoconfiguração. WaitConfirm: estado crucial para atualização das tabelas do nodo servidor. A partir desse estado o nodo pode partir para outros dois estados dependendo do comportamento do nodo cliente. Se o servidor receber a mensagem que o endereço foi atribuído corretamente ele passa para o estado SetTables. Caso não recebe a mensagem de confirmação o nodo servidor passa para o estado CheckClientNode CheckClientNode: para chegar nesse estados dois problemas podem ter acontecido. O nodo cliente não recebeu a mensagem enviada pelo estado AssociateIPAddress ou o nodo servidor não tenha recebido a confirmação devido a perda da mensagem. No primeiro caso o nodo cliente não vai ser configurado. No segundo apesar de não ter confirmado a configuração ao nodo servidor o nodo cliente está configurado na rede. É enviado um ping ao nodo cliente. Caso obtenha resposta ele vai para o estado de configuração das tabelas, caso contrário retorna ao estado Configured sem associar o endereço ao cliente. SetTables: atualiza as tabelas. O bloco com os endereços IP é reduzido a metade é o IP do nodo cliente é associada a tabela de nodos amigos. Após feito isso, passa ao estado Configured.