Projeto de Caixa-S Utilizando Algoritmo Genético Paralelo
Gian Ricardo Berkenbrock1, Marco Antonio Torrez Rojas21PerformanceLab – Universidade Federal de Santa Catarina (UFSC) Centro Tecnológico – Departamento de Informática e Estatística – Campus
Universitário Cx.P. 476 – 88.040-900 – Florianópolis – SC – Brasil
2Departamento de Ciência da Computação – Universidade do Estado de Santa Catarina (UDESC) - Campus Universitário Prof. Avelino Marcante, S/N – Cx.P. 631 -
89.223-100 – Joinville – SC – Brasil
[email protected], [email protected]
Abstract. This paper describes a parallel genetic algorithm approach to
generate a S-Box applied to AES algorithm.
Resumo. Este artigo descreve uma abordagem para gerar Caixa-S do
algoritmo AES utilizando o paradigma evolucionário do algoritmo genético paralelo.
1. Introdução
Com a forte adoção da tecnologia de Redes de Computadores, obtivemos grandes ganhos e facilidades para as corporações e seus usuários. Este cenário nos parece bem confortável e simples, mas, como qualquer atividade, possui seus riscos, riscos estes que podem atingir os clientes, as corporações ou ambos.
É neste cenário que a Segurança da Informação tem papel importante, pois o seu objetivo é permitir que se utilizem ferramentas para manter este ambiente seguro e operacional.
Não podemos falar em Segurança da Informação sem falarmos de criptografia, que apresenta um conjunto de características para garantir que as comunicações eletrônicas ocorram de forma segura.
Na criptografia, temos os algoritmos simétricos e assimétricos. Uma das peças fundamentais em projetos de algoritmos simétricos é a Caixa-S.
2. Algoritmos Genéticos
A IA tem muitas linhas de atuação e, neste trabalho, iremos abordar uma de suas linhas: a computação evolutiva. Esta é uma área de pesquisa multidisciplinar que envolve a biologia, inteligência artificial, otimização numérica e engenharia [Back 1996]. A Computação Evolutiva pode ser definida como: “desenvolvimento de computações artificiais inspiradas nas computações biológicas realizadas pelos seres vivos para viver e se reproduzir” [Bittencourt 1998]. A Computação Evolutiva permite a simulação do processo de evolução natural.
Os algoritmos genéticos foram inventados por John Holland e desenvolvidos por ele, seus alunos e companheiros na Universidade de Michigan, nas décadas de 60 e 70. A
pesquisa de Holland não estava centrada no desenvolvimento de um algoritmo para resolução de problemas, mas, sim, no estudo formal do fenômeno de adaptação que ocorre na natureza e como estes mecanismos de adaptação natural podem ser portados para computadores [Mitchell 1997].
Os algoritmos genéticos tornaram-se populares através do trabalho de David E. Goldberg, um dos alunos de Holland, que utilizou esta técnica para resolver um problema complexo de controle de transmissão de gás em dutos [Haupt 1998].
Os Algoritmos Genéticos são métodos de otimização e busca inspirados nos mecanismos da evolução de populações de seres vivos.
Segundo Goldberg [Goldberg 1989], os AG's são diferentes dos mecanismos normais de otimização e busca nos seguintes pontos:
• AG's trabalham com uma codificação de conjunto de parâmetros, não com parâmetros individualizados;
• AG's buscam por uma população de pontos e não por um simples ponto;
• AG's se utilizam de informações da função objetivo e não de informações secundárias ou outra informação auxiliar;
• AG's utilizam regras de transição probabilísticas e não determinísticas.
Na relação abaixo, podemos notar que a utilização de AG's apresenta as seguintes vantagens [Haupt 1998]:
• Otimiza, utilizando parâmetros contínuos e discretos; • Dispensa informações secundárias;
• Efetua busca simultaneamente em uma grande \área do espaço de busca; • Trabalha com um grande número de parâmetros;
• É muito adequado para trabalhar em computadores de arquitetura paralela; • Otimiza parâmetros extremamente complexos, escapa dos mínimos locais; • Fornece uma relação de ótimos parâmetros e não somente uma possível solução; • Manipula parâmetros codificados;
• Utiliza dados gerados numericamente, experimentalmente e funções analíticas; Com a sua forma de trabalhar de acordo com a evolução dos seres vivos e por apresentar diversas vantagens sobre outros métodos, os algoritmos genéticos têm sido uma boa alternativa para auxiliar na solução de uma grande variedade de problemas.
Durante o processo de reprodução, ocorrem fenômenos que atuam sobre o material genético armazenado nos cromossomos, sendo estes fenômenos a mutação e a recombinação.
Estes fenômenos são responsáveis pelas mudanças ocorridas na população. Sobre esta população diversificada, age a seleção natural, permitindo a sobrevivência apenas dos seres mais aptos.
O processo de evolução que ocorre na natureza é efetuado através de um processo de evolução simulado, que é realizado através de um algoritmo matemático implementado em um computador [Moscato 1995].
As características da evolução que devemos levar em consideração nos projetos são as seguintes [Davis 1991]:
• A evolução é um processo que opera nos cromossomos, no lugar dos seres vivos codificados por eles;
• A seleção natural é a relação entre cromossomos e suas estruturas codificadas. No processo de seleção natural, os cromossomos que codificam melhores estruturas se reproduzem com maior freqüência dos que não têm esta característica;
• O processo de reprodução é o ponto em que a evolução ocorre. A mutação pode causar diferenças entre os cromossomos dos filhos e dos pais e o processo de recombinação pode criar cromossomos bem diferentes nos filhos devido à combinação de material genético do cromossomo dos pais;
• O processo de evolução biológica não possui memória, pois não possui informações que lhe permitam voltar a etapas anteriores do processo.
Como ocorre na evolução biológica, a evolução baseada em simulação é um processo que será projetado para encontrar cada vez melhores cromossomos, através de uma manipulação aleatória de seu conteúdo.
O termo aleatório se refere ao fato do processo não ter nenhuma informação sobre o problema que está tentando resolver, exceto o valor da função objetivo.
A função objetivo ou função de aptidão é a única informação que temos sobre o cromossomo e esta informação é a sua nota, que reflete a qualidade da solução que ele representa.
Um AG pode ser visto como uma estrutura de controle que organiza e dirige um conjunto de transformações e operações indicadas para simular o processo de evolução [Moscato 1995].
Um algoritmo genético é constituído dos seguintes itens: População de Cromossomos
Como podemos observar, um algoritmo genético é composto por estruturas bem simples e bem definidas.
A população é formada por um conjunto aleatório de cromossomos, não é uma regra. Temos que considerar dentro da população também o seu tamanho, pois ele afeta o desempenho global e a eficiência dos AG's. Uma população muito pequena oferece uma pequena cobertura do espaço de busca, causando uma queda no desempenho. Uma população suficientemente grande fornece uma melhor cobertura do domínio do problema e previne a convergência prematura para soluções locais. Entretanto, com uma grande população tornam-se necessários recursos computacionais maiores, ou um tempo maior de processamento do problema.
Um cromossomo é uma estrutura de dados, geralmente vetor ou cadeia de bits, que representa uma possível solução do problema. A forma de codificação baseada em cadeia de bits (0 e 1) é a mais tradicional [Goldberg 1989], porém nem sempre é a melhor escolha [Dasgupta 1997].
De uma forma geral, um cromossomo representa um conjunto de parâmetros da função objetivo, cuja resposta será, maximizada ou minimizada.
O conjunto de todas as configurações que o cromossomo pode assumir forma o seu
espaço de busca. Se o cromossomo representa N parâmetros de uma função, então o seu
espaço de busca é um espaço com N dimensões [Lacerda 1999].
Um cromossomo computacional típico poderia ser S1=100101111010110 onde, por exemplo, cada 3 bits descrevem o status de um sensor de um robô que tem níveis de 0 a 7.
Seleção
O processo de seleção tem como objetivo escolher cromossomos em uma população para a reprodução. A fase de seleção descarta os cromossomos com baixa aptidão, desta forma, muitos genes mutados durante a evolução são eliminados.
Esta escolha pode ocorrer das seguintes formas tradicionais:
Aptidão: São escolhidos os elementos que apresentarem alta aptidão na população inicial, esta aptidão é calculada através da função de aptidão, que é um esquema de avaliação do fenótipo. Isto é, este mecanismo é inspirado na seleção natural que seleciona os mais aptos. Os mais aptos são aqueles que representam uma boa solução para o problema proposto. Função de Aptidão ou Função Objetivo, como são conhecidas no jargão dos AG's, são responsáveis por efetuar esta avaliação do cromossomo, podendo esta avaliação ser bastante complicada e demandando um alto custo computacional. O processo de geração desta função de avaliação deve ser muito criterioso [Haupt 1998][Lacerda 1999].
Roleta: Este método possui este nome por sua semelhança com a roleta utilizada em cassinos.
A seleção pelo método da roleta é calculada através da soma total de todas as aptidões dos indivíduos de uma população. Para cada individuo divide-se sua aptidão pelo valor da soma total das aptidões de todos os indivíduos, chegando a probabilidade que cada indivíduo tem de ser selecionado dentro da população. Com as probabilidades montadas de cada indivíduo, podemos elaborar a roleta simplificada, onde os indivíduos mais aptos ganham uma área proporcional a sua aptidão dentro da roleta. Fazendo a roleta girar, aqueles indivíduos mais aptos terão maiores chances de serem sorteados, pois apresentam uma área maior da roleta.
Recombinação
A recombinação é um dos principais mecanismos de busca dos AG's para explorar regiões desconhecidas do espaço de busca [Lacerda 1999].
Este operador é simples e visa realizar a troca de sub-partes entre dois cromossomos. Neste processo um par de cromossomos pai gera dois cromossomos filhos. Cada um dos
cromossomos pais tem sua cadeia cortada em uma posição, e suas sub-partes são trocadas entre si.
A recombinação é aplicada com uma dada probabilidade a cada par de cromossomos selecionados. Esta probabilidade utilizada fica entre 60% e 90% [Lacerda 1999].
Mutação
A mutação é outro mecanismo principal de busca dos AG's para explorar regiões desconhecidas do espaço de busca [Lacerda 1999].
Este processo consiste na troca aleatória dos valores da “string” de um cromossomo. Assim como a mutação genética, a probabilidade de ocorrer é muito pequena e ocorre uma modificação no código genético. Nos AG's, a mutação pode ocorrer em qualquer posição na cadeia de “strings”.
A mutação melhora a diversidade dos cromossomos da população inicial, em contra partida, destrói informações contidas no cromossomo. Deve-se aplicar uma taxa de mutação pequena entre 0,1% a 5%, suficiente para assegurar a diversidade [Lacerda 1999].
Em resumo, a mutação reflete uma taxa de alteração de um gene 0 em 1 ou vice-versa. De uma forma bem simples, um algoritmo genético é constituído dos seguintes passos, aplicados interativamente [Davis 1991][Mitchell 1997]:
1. Inicie uma população aleatoriamente ou com indivíduos oriundos de outros processos;
2. Calcule a função de aptidão para cada cromossomo da população;
3. Selecione, da população, pares de cromossomos onde os cromossomos mais aptos têm maiores chances de serem escolhidos, cada cromossomo pode ser escolhido mais de uma vez. Os mais aptos apresentam maior valor em sua aptidão;
4. O par escolhido é recombinado com uma probabilidade Pr (probabilidade de recombinação ou cruzamento). O ponto de recombinação ao longo do cromossomo é escolhido aleatoriamente;
5. Cada cromossomo está sujeito à mutação com uma probabilidade Pm (probabilidade de mutação);
6. Atualize a população com os resultados obtidos;
7. Se o critério de parada não for satisfeito, volte para o passo dois (2). O critério de parada é uma condiçãoo a ser adotada, por exemplo, quando 95% da população apresentar pouca variação em seus valores de aptidão.
3. Caixa-S
3.1. HistóricoOs cifradores de bloco simétricos, em sua maioria, são baseados nas idéias de Shannon sobre difusão e confusão. A difusão normalmente é produzida por uma estrutura de substituição conhecida por caixa de substituição S ou simplesmente Caixa-S.
Como estas estruturas são responsáveis pela segurança do algoritmo, um considerável esforço vem sendo realizado para analisar o projeto e as operações das Caixas-S. Esta análise consiste em verificar quão melhor é uma Caixa-S em relação a outra.
Maiores detalhes sobre estas contribuições podem ser encontrados na Home Page do pesquisador Terry Ritter, que apresentou este resumo histórico sobre o desenvolvimento do projeto de Caixas-S [Ritter 1999].
3.2. Características das Caixas-S
As Caixas-S são estruturas muito simples e apresentam as seguintes características: • É uma matriz bidimensional com X linhas e Y colunas.
• Efetua o mapeamento de N bits de entrada em M bits de saída. Em função desta característica, quando nos referimos a uma Caixa-S, dizemos que ela é do tipo
NxM.
• Existem 2N bits de entrada e 2M possíveis bits de saídas para uma Caixa-S de
NxM.
• É uma estrutura somente de substituição. Geralmente, é a única operação não linear do algoritmo de criptografia.
• O seu tamanho é muito importante para a segurança do algoritmo, Caixa-S grandes são mais resistentes às técnicas de criptoanálise diferencial e linear, mas, em contrapartida, existe uma complexidade maior no seu projeto e na disposição das mesmas [Stallings 1999].
• O tamanho de M é mais importante que N, pois aumentando o tamanho de N reduz a eficácia da criptoanálise diferencial, mas grandes aumentos acrescem a eficácia da criptoanálise linear [Schneier 1996].
• Existem diferentes técnicas para se projetar uma Caixa-S [Robshaw 1995]. 3.3. Projeto de Caixas-S
Nyberg, em suas pesquisas, identificou quatro maneiras de projetar Caixas-S [Robshaw 1995], sendo elas:
Randômica: A escolha é feita aleatoriamente, sem satisfazer nenhum critério.
Randômica com Testes: A escolha é feita aleatoriamente e esta escolha deve atender a certos critérios.
Manual: Técnica que se baseia na utilização de matemática elementar, conduzindo-se de forma mais intuitiva.
Matemática: Geração das Caixas-S baseada em princípios matemáticos. Esta técnica permite que o projeto de Caixas-S seja mais seguro contra a criptoanálise diferencial e linear.
Uma variação, utilizando a primeira técnica, consiste na geração das Caixas-S aleatoriamente em função da chave usada. Um estudo mais aprofundado sobre este assunto encontra-se em Keliher [Keliher 1997]. Uma grande vantagem desta abordagem é a sua dependência da chave, isto é: como a chave não é fixa, fica impossível a análise das Caixas-S buscando vulnerabilidades [Stallings 1999]. Uma grande desvantagem desta abordagem é a diminuição da performance do algoritmo em função da necessidade da realização desta operação.
3.4. Critérios de Projeto de Caixas-S
Para poder avaliar o projeto de uma Caixa-S, foram desenvolvidos critérios.
O objetivo desses critérios é verificar se a Caixa-S projetada atende a determinadas características desejadas e necessárias para manter a segurança do algoritmo.
Os principais critérios usados para validar a segurança de um algoritmo são:
Não Linearidade: É a característica em que cada bit do texto cifrado apresenta baixa correlação para com um sistema linear de equações.
Efeito Avalanche: Uma função f : {0,1}t {0,1}t atende a este critério, se, em média,
metade dos bits de saída são alterados quando um simples bit de entrada sofre alteração. Completeza: Dada uma correspondência um-para-um f:{0,1}n {0,1}n, esta atende a
este critério, se para cada i,j de {1,....,n} existem dois vetores de n-bits X1 e X2, tal que,
X1 e X2 diferem somente do i-esimo bit e f(X1) difere de f(X2), pelo menos do i-esimo bit,
ou seja, cada bit de saída dependente de todos os bits de entrada..
SAC (Strict Avalanche Criterion) – Critério Rigoroso de Avalanche: O SAC é a combinação dos critérios Efeito Avalanche e Completeza. Para que a função criptográfica atenda a este critério, cada bit de saída é alterado com uma probabilidade de 1/2 sempre que um simples bit de entrada é complementado.
BIC (Bit Independence Criterion) – Critério de Independência do Bit de Saída: Uma função que satisfaz o BIC tem a seguinte característica, sempre que um bit de entrada é complementado, os coeficientes da correlação entre cada dois bits alterados é zero.
As Caixas-S projetadas, levando em consideração estes critérios, apresentam características criptográficas importantes para a segurança dos algoritmos, sendo consideradas boas Caixas-S.
4. Não Linearidade de Caixa-S
4.1. O que é Não LinearidadeA linearidade é considerada uma fraqueza significativa em sistemas criptográficos, a não linearidade é uma forma explícita de avaliar a falta de fraquezas no sistema criptográfico. A não linearidade de uma Caixa-S representa um indicador chave para avaliar o poder de um cifrador de blocos..
No caso dos sistemas criptográficos, é desejado que a não linearidade de uma tabela de substituição (Caixa-S) seja o valor mínimo para cada bit de saída da tabela.
O critério de não linearidade permite avaliar o poder de uma Caixa-S com relação a criptoanálise linear e diferencial. A criptoanálise linear explora a baixa não linearidade de uma Caixa-S, a criptoanálise diferencial explora as entradas na tabela de distribuição de diferenças].
Se considerarmos uma Caixa-S como um conjunto ordenado de saídas de uma função booleana, a utilização de transformadas rápidas para calcular as propriedades criptográficas desejadas nos é habilitada, mais especificamente a Transformada Rápida Walsh-Hadamard1, sendo esta a ferramenta utilizada para calcular a não linearidade. 4.2. Cálculo de Não Linearidade
A não linearidade indica a distância de Hamming entre a função f(x) e todas as funções lineares e seus complementos (também conhecidas como funções afin).
Seja WHmax o valor máximo absoluto de F(w), a não linearidade de f(x) é dada por
Nf=1/2(2n-WHmax).
A transformada de Walsh-Hadamard avalia a correlação entre uma função booleana e o conjunto de todas as funções lineares e seus complementos, de forma rápida.
Seja S-1 a Caixa-S inversa de uma Caixa-S. O valor de não linearidade de uma Caixa-S inversa é o mesmo de sua Caixa-S.
5. pgaBox
Esta seção aborda a implementação de um aplicativo, denominado pgaBox, que utiliza o paradigma evolucionário do algoritmo genético.
O pgaBox foi desenvolvido para ser executado tanto em um único computador, como também em um conjunto deles. O modelo para a execução em paralelo do algoritmo genético utilizado, foi o modelo de ilha ou modelo de granularidade grossa, apresentado em [STENDER, 1993]. Para melhor atender ao modelo optou-se em desenvolver o aplicativo utilizando a linguagem Java [Sun Microsystems, 2003a] versão 1.4.1 02-b06, a tecnologia de Java RMI (Java Remote Method Invocation)[Sun Microsystems, 2003b] especificação 1.2 para a comunicação entre os computadores e o banco de dados Mckoi SQL [Diehl and Associates, Inc., 2003] versão 1.0.2 para a persistência dos indivíduos de interesse do projeto (não linearidade maior que 100).
No estágio atual do aplicativo, é possível configurar os seguintes parâmetros, Figura 1: • Tipo de Crossover: PMX (Partially Matched Crossover), UOBX (Uniform Order Based Crossover), OX (Order Crossover), CX (Cycle Crossover) e sem crosover;
• Tipo de Mutação: Inserção, Troca, Deslocamento e sem mutação; • Probabilidade de mutação: 0 a 100%;
• Evoluir por quantas gerações (critério de parada); • Utiliza ou não o Elitismo;
• Inicializa ou não com indivíduos armazenados no banco de dados; • Probabilidade de migração: 0 a 100%;
• Escolha do indivíduo para a migração: Melhor, pior ou um indivíduo aleatório.
Figura 1 - Tela de parâmetros do programa pgaBox
Atualmente, cada aplicativo consegue receber indivíduos de N outros aplicativos, mas
consegue apenas enviar para um único aplicativo distinto, podendo ser ele próprio, a Figura 2 demonstra essa restrição. A inicialização do ambiente/estrutura é realizada a
partir de um aplicativo, esse após ter sido inicializado executa o comando de inicialização de seu vizinho e espera este inicializar para poder prosseguir. Um vez o vizinho inicializado, ele propaga este comando para o próximo e assim por diante, até que todos já estejam executando.
Figura 2 - Uma estrutura de exemplo do programa pgaBox
Para demonstrar o aplicativo, foi realizado um experimento com 4 computadores do
PerformanceLab, onde foi montado uma estrutura retangular, Figura 3, com um banco de dados central no nó pga0, o qual será responsável pela
persistência dos dados. A configuração dos computadores está apresentado na Tabela 1.
pga0 pga1 pga2 pga3 Processador (GHz) 700 MHz 1.0 GHz 1.7 GHz 1.6 GHz Memória (Mb) 256 Mb 512 Mb 256 Mb 256 Mb Rede (Mbps) 100 Mbps 100 Mbps 100 Mbps 100 Mbps Tabela 1 - Configuração dos computadores
Configuração de cada aplicativo, com relação aos parâmetros genéticos, está apresentada na Tabela 2.
Parâmetro Opção utilizada
Tipo de crossover PMX
Tipo de mutação Inserção
Propabilidade de mutação 0,05 %
Gerações 1000
Elitismo Sim
Indivíduos iniciais do banco de dados Não
Probabilidade de migração 20 %
Tipo de escolha do indivíduo para a migração Melhor
Tabela 2 - Parâmetros dos aplicativos executados no experimento
Foi realizado então o experimento e os resultados serão apresentados na seção seguinte.
6. Resultados Experimentais
Nesta seção os resultados do experimento, conforme apresentado na seção anterior, serão apresentados e discutidos.
O tempo para realizar a execução em cada nó está apresentado na Tabela 4. A não linearidade máxima alcançada em cada nó/população está apresentado
na Tabela 3.
Computador pga0 pga1 pga2 pga3 Não linearidade (NL) 110 110 110 110 Tabela 3 - Máxima NL obtida no experimento
computador pga0 pga1 pga2 pga3 tempo (min) 15.56 7.01 11.15 14.67 Tabela 4 - Tempo de execução dos aplicativos
Com os dados apresentados na Tabela 4, pode-se observar o quão otimizado está este programa, pois foram 1000 gerações. Mas infelizmente, problemas de falta de memória chegaram a ocorrer nos nós pga0, pga2 e pga3 entre a geração 700 e 800. Portanto, nota-se que existe a necessidade de nota-ser realizado algum tipo de avaliação no aplicativo a fim de verificar se alterando o parâmetro de memória para a máquina virtual Java isso volta a acontecer ou se é necessário avaliar o projeto do aplicativo e tentar encontrar os pontos fracos (bugs). Outro ponto relativo do experimento foi conseguir atingir não linearidades de boa qualidade em um curto espaço de tempo e que satisfaz o experimento uma vez que a quantidade de gerações para a evolução foi pequena (1000), entretanto se novos experimentos forem feitos com um número de geração maior que o utilizado neste experimento, algo como 10000, 17000 ou 40000 gerações.
7. Conclusões e Trabalhos Futuros
Dado o resultado do experimento realizado, o aplicativo pgaBox conseguiu evoluir seus indivíduos para uma caixa-S com boa não linearidade. E que a aplicação de algoritmo genético paralelo (AGP) no projeto de caixa-S é validado, uma vez que através das propriedades de busca que o AGP proporciona o universo de busca por melhores caixas-S pode ser atingido de maneira menos morosa.
A caixa-s projetada pelo aplicativo pode ser utilizada no cifrador Rijndael, novo padrão de criptografia (AES) adotado pelos EUA em substituição do DES, a caixa-S projetada neste trabalho possuí não linearidade 110, a caixa-s do AES possuí não linearidade de 112.
Caixa-S gerada pelo aplicativo pgaBox:
13,124,23,143,210,163,233,70,83,207,154,38,190,22,44,24,140,227,215,64,191,128, 249,36,193,35,167,92,209,132,34,100,236,147,69,74,15,180,42,113,116,79,96,211,62, 184,65,218,28,255,112,104,127,108,63,86,29,45,165,176,146,196,109,170,11,225,33, 21,46,219,148,17,56,245,5,93,254,26,232,252,12,188,138,217,97,0,99,173,144,247, 234,58,59,240,80,68,212,156,118,48,122,185,226,14,51,224,223,16,18,199,222,89, 175,43,149,81,67,54,32,41,183,231,53,131,171,76,52,161,179,243,208,162,77,151,82, 164,114,248,137,134,103,111,8,126,152,6,133,87,49,19,241,30,72,205,71,47,95,229,1, 253,228,153,20,214,9,145,31,244,242,75,203,135,90,25,94,206,186,4,200,182,221,169, 130,220,136,192,251,178,177,3,50,102,27,115,155,250,88,129,84,187,91,60,204,150, 158,2,142,195,238,159,197,246,230,160,117,202,107,216,201,85,55,157,73,123,57,10, 194,166,172,119,141,105,168,37,39,235,7,101,66,174,120,237,110,189,139,121,40,213 ,181,78,61,98,106,198,239,125
Como o pgaBox tem muito a evoluir, segue algumas sugestões para trabalhos futuros: • Verificação do problema de falta de memória;
• Otimização do algoritmo de evolução; • Otimização da migração;
• Aumentar a flexibilidade do aplicativo de recebe N e envia para 1 para recebe N e envia para N aplicativos;
Referências
BÄCK, Thomas. Evolutionary Algorithms in Theory and Practice. Oxford University Press, 1996.
BITTENCOURT, Guilherme. Inteligência Artificial: Ferramentas e Teorias. Florianópolis: Editora da UFSC, 1998.
DAVIS, L. Handbook of Genetic Algorithms. New York: Van Nostrand Reinhold, 1991.
DASGUPTA, D.; MICHALEWICZ, Z. Evolutionary Algorithms in Engeneering Applications. Spring-Verlag, 1997.
Diehl and Associates, Inc. (2003). Mckoi sql database. http://www.mckoi.com/database/. Acessado 18 de setembro de 2003.
GOLDBERG, D.E., Genetic Algorithms in Search, Optimization & Machine Learning. Massachusetts: Adison Wesley Logman, 1989.
HAUPT, R.L.; HAUPT, S.E. Practical Genetic Algorithms. New York: John Wiley & Sons, 1998.
KELIHER, Lian. Substitution-Permutation Network Cryptosystem Using Key-Dependent S-Boxes. Ontario: Queen’s University, 1997. Dissertação de Mestrado. LACERDA, E.G.M e CARVALHO A.C.P.L.F. Introdução aos Algoritmos Genéticos.
In: ANAIS XIX CONGRESSO NACIONAL DA SOCIEDADE BRASILEIRA DE COMPUTAÇÃO, 1999, Rio de Janeiro. Anais. Rio de Janeiro: SBPC, 1999.
MITCHELL, M. An Introduction to Genetic Algorithms.Cambridge, Massachusetts, London, England: The MIT Press, 1997.
MOSCATO, P.; LAGUNA, M. Algoritmos Genéticos. 1995. http://www.densis.fee.unicamp.br/moscato.
RITTER, T. S-Box Design: A Literature Survey. 1999. http://www.ciphersbyritter.com ROBSHAW, M.J.B. The Block Ciphers – RSA Laboratories Technical Report TR-601.
RSA Laboratories, 1995. Relatório Técnico.
SCHNEIER, Bruce., Applied Cryptography: Protocols, Algorithms, and Source Code in C. New York: John Wiley & Sons, 2a ed., 1996.
STALLINGS, William., Cryptography and Network Security: Principles and Practice. New Jersey: Prentice-Hall, 1999.
Sun Microsystems (2003a). Java 2 platform, standard edition (j2se). http://java.sun.com/j2se/index.jsp. Acessado 18 de setembro de 2003.
Sun Microsystems (2003b). Java remote method invocation (java rmi). http://java.sun.com/products/jdk/rmi/. Acessado 21 de outubro de 2003.
STENDER, Joachim (Editor), Parallel genetic algorithms : theory and applications. IOS Press. 1993.