221 Teorema Fundamental da Aritmética e Números de Gödel Aplicados à Criptografia Vilson Vieira da Silva, Jr.1 , Claudio Cesar de Sá1 , Rafael Stubs Parpinelli1 , Charles Christian Miers1 1 Universidade do Estado de Santa Catarina (Udesc) – Centro de Ciências Tecnológicas Campus Universitário Prof. Avelino Marcante s/n – Bairro Bom Retiro CEP 89223-100 – Joinville – SC – Brasil [email protected], {claudio, parpinelli, charles}@joinville.udesc.br Resumo. Através da união do Teorema Fundamental da Aritmética e do conceito formal de número de Gödel, proposto pelo mesmo matemático que lhe dá nome, busca-se o desenvolvimento de um algorı́tmo criptográfico e sua posterior análise. Para isso é criada uma aplicação real, que demonstra os princı́pios teóricos nos quais soluções práticas e populares são desenvolvidas, como o algorı́tmo de criptografia para geração de chaves públicas RSA1 . 1. Introdução A criptografia moderna utiliza de diversos métodos para a criação de algorı́tmos cada vez mais confiáveis na codificação de dados. Em sua maioria, tais métodos estão baseados em propriedades de teoremas matemáticos. Desta forma, propôe-se analisar a aplicação de um destes teoremas, o Teorema Fundamental da Aritmética, que usado como axioma em um conceito formal, criado pelo matemático Kurt Gödel [Hintikka 1999], revela-se como base para algorı́tmos criptográficos. Permite-se ainda analisar tal algorı́tmo na forma de uma aplicação prática, com o desenvolvimento de um software de codificação de dados. O artigo está organizado da seguinte forma: na sessão 2 é apresentado o Teorema Fundamental da Aritmética, a sessão 3 apresenta os números de Gödel, assim como sua definição matemática. A sessão 4 une os conceitos dos teoremas apresentados em uma aplicação prática ligada à criptografia e conclui o artigo através de sua análise. 2. O Teorema Fundamental da Aritmética O Teorema Fundamental da Aritmética (TFA) [Mollin 1998], inicialmente provado por Euclides2 enuncia: Para todo número natural n maior que 1, ou este é um número primo, ou pode ser escrito como um produto de números primos, de maneira unı́voca. 1 2 Iniciais do sobrenome de seus criadores: Ron Rivest, Adi Shamir e Len Adleman A prova foi generalizada e tornada correta posteriormente pelo matemático Carl Friederich Gauss Grahl, E. A; Hübner, J. F. (Eds.). Anais do XV Seminário de Computação, Blumenau, 20-22 de Novembro, 2006. p 221-228. 222 Por exemplo: 2100 = 22 × 31 × 52 × 71 (1) A ordem dos fatores, pela propriedade comutativa da multiplicação, é irrelevante. O que torna tal teorema interessante é a garantia de obtenção de uma representação única para todo e qualquer número natural. Isso abre diversas possibilidades de aplicação, como em criptografia, onde um texto pode ser codificado como uma sequência de números primos. 3. Os Números de Gödel Kurt Gödel, em 1931, deu um grande passo para para a evolução da matemática com seu Teorema da Incompletude [Gödel 1931]. Para a prova de tal teorema, Göedel precisou de uma abstração, uma formalização que o possibilitasse trazer ao seu campo de domı́nio – a teoria dos números [Andrews 1995] – toda e qualquer sistema formal. Desta maneira, poderia “operar” sobre tais sistemas com regras aritméticas, botando-os em prova, analisando suas caracterı́sticas, testando portanto sua completude, o objetivo primordial de sua tese. Este propôs então os Números de Gödel [Hofstadter 1989], um conceito formal a partir da teoria dos números. 3.1. Definição Os Números de Gödel (NG) são definidos por uma função que designa um número natural a cada sı́mbolo ou fórmula de alguma linguagem formal e a potência destes números primos seguindo a posicionalidade na palavra ou texto. A estes números naturais dá-se o nome de Números de Gödel. Portanto, tendo um conjunto contável S, pode-se definir a função de geração de Números de Gödel (função de numeração de Gödel) por: f : S → N Como para S pode-se ter qualquer conjunto de elementos contáveis, toda e qualquer linguagem formal pode ser convertida para uma representação no domı́nio dos números naturais. Para exemplificar, deseja-se criar um Número de Gödel para a palavra abba. Definindo-se o conjunto S por S = { a, b } pode-se ter a seguinte função de mapeamento 223 aos números naturais: f (a) = 1 f (b) = 2 (2) (3) Agora, como método de concatenação de sı́mbolos, Gödel utilizou a estratégia de usar os sı́mbolos (já convertidos para números naturais) como expoentes de uma seqüência de números primos, onde cada sı́mbolo ocupa o expoente de um único número primo. Portanto, para a palavra abba se tem a representação numérica dada por: N Gabba = 21 × 32 × 52 × 71 = 3150 Define-se assim uma relação entre o alfabeto de S com os números naturais, onde a palavra abba constitui o NG 3150, de forma unı́voca. Os NG são portanto únicos e representam numericamente uma palavra de um sistema formal qualquer. Haja visto que esta representação se faz por produto de números primos, que por si só são de difı́cil busca por métodos computacionais, têm tal dificuldade aumentada pelo fato desta representação ter grande complexidade espacial, fazendo crescer o tamanho do NG de maneira exponencial, devido ao produto dos números primos desta sequência. 4. TFA e NG Aplicados à Criptografia 4.1. Criptografia Sempre foi desejo do homem manter em segurança certas informações. A criptografia [Schneier 1995] é uma das mais importantes disciplinas por trás desta segurança. Esta, através da matemática e da ciência da computação, pode criar métodos muito eficientes de codificação e decodificação, com alto grau de confiabilidade. Um destes métodos baseia-se no aproveitamento de certas caracterı́sticas encontradas em teoremas matemáticos. Tal estratégia é usada como base, por exemplo, para um dos sistemas criptográficos mais populares da atualidade: a criptografia por chaves públicas [Choudhury and Choudhury 2002]. Nesta técnica, são usados números primos e fórmulas matemáticas para a geração de uma chave pública e privada, únicas para cada indivı́duo. Ao se comunicar, os indivı́duos trocam suas chaves públicas. A partir daı́, uma mensagem codificada pelo dono da chave pública só poderá ser aberta com a chave privada deste. Assim, se um indivı́duo deseja enviar uma mensagem ao destinatário, deverá usar a chave pública do destinatário 224 para codificar a mensagem, que só poderá ser aberta pelo destinatário e ninguém mais, nem mesmo o próprio emissor. Um exemplo de algorı́tmo gerador de chaves públicas e privadas é o popular RSA [Rivest et al. 1978], criado em 1978 por Ronald Rivest, Adi Shamir e Len Adleman, e utilizado na codificação em protocolos seguros como SSL 3 [Rescorla 2000] e na criação de certificados de segurança para serviços de risco como as redes virtuais privadas, VPN 4 [Holden 2003]. 4.2. Formulação As caracterı́sticas dos Números de Gödel e do Teorema Fundamental da Aritmética possibilita a criação de um algorı́tmo de criptografia baseado em chaves. Dos NG, tal algorı́tmo herda a função numeradora, que unida com a propriedade da univocacidade garantida pelo TFA, proporciona a geração de números naturais únicos para cada sı́mbolo ou combinação destes. Além disso, garante-se também a operação inversa, onde tais números gerados podem ser convertidos novamente aos seus sı́mbolos originais, haja visto que a fatoração é dada pela sequência 2i × 3j × 5k × 7l × .... Assim a proposta é fazer uma codificação usando os NG e uma decodificação através da fatoração destes. Portanto, define-se o algorı́tmo que implementa estas operações: Codificação 1. Tendo-se como entrada h w, C i sendo w ∈ L( S ) e C = { ( x , y ) | x ∈ S, y ∈ N, f ( x ) = y } (a chave codificadora), onde L( S ) = { x+ | x ∈ S } e S = { a, b } (alfabeto da palavra a codificar); 2. Para cada elemento i da palavra w, toma-se seu par ( i , yi ) da relação definida na chave C; 3. Encontra-se o NG pela multiplicação da seqüência de números primos dado por N G = 2y1 × 3y2 × 5y3 × ... × pynn , onde p é o consecutivo número primo n válido e n o tamanho da palavra w. Decodificação 1. Tendo-se como entrada h g, C i sendo g ∈ N (um número de Gödel) e C a chave criptográfica usada na codificação; 2. Fatora-se g (aqui aplicando o método recursivo): (a) Se g é um primo, retorna-o. Senão, g 0 = pgi sendo pi um número primo i consecutivo; (b) Se a divisão não gerar resto, adiciona pi à lista Lg e fatora g 0 . Caso g contrário, g 0 = pi+1 e assim sucessivamente, até obter uma divisão sem resto. 3 4 Secure Sockets Layer Virtual Private Network 225 3. A lista Lg contém g fatorado. Conta-se, para cada elemento j de Lg , a quantidade de elementos iguais a j. O valor desta contagem valora kj ; 4. Para cada kj encontrado, toma-se seu par ( j, kj ) da relação definida na chave C; 5. Encontra-se a palavra w, formada pela concatenação dos kj calculados. 4.3. Aplicação A partir dos algorı́tmos de codificação e decodificação por TFA, pôde-se desenvolver um software que implementa tal sistema criptográfico. O aplicativo foi desenvolvido buscando-se certa eficiência, mesmo que somente para a demonstração do método. Para tal, utilizou-se a linguagem de programação C [Kernighan and Ritchie 1978]. Ainda, para as operações de fatoração e multiplicação de números naturais, utilizou-se a biblioteca PARI, componente do sistema de computação algébrica PARI/GP 5 . Optou-se pelo uso desta biblioteca devida à necessidade da computação de grandes valores numéricos. Para a execução do software necessita-se, para a codificação, de duas entradas: o arquivo texto contendo a chave (chave.txt, neste exemplo) e uma palavra que será codificada (original.txt). Para a decodificação, ainda é necessária a chave e o número natural que será fatorado (criptografado.txt). O arquivo texto que abriga a chave possui o formato hsı́mbolo códigoi, onde sı́mbolo é qualquer caractere ASCII e código um número natural maior ou igual a zero. Como exemplo: a 1 b 2 As codificações são realizadas pelo parâmetro -c e as decodificações por -d. Um exemplo de execução seria: ./goedel -c chave.txt < original.txt > criptografado.txt Ainda, o parâmetro -s leva à execução do show mode, que apresenta todos os passos realizados na codificação e decodificação de uma palavra dada. Por exemplo: 5 PARI/GP: http://pari.math.u-bordeaux.fr 226 ./goedel -s chave.txt < original.txt *** CODIFICACAO entrada = aaba fatoracao = 2ˆ1 3ˆ1 5ˆ2 7ˆ1 codificado = 1050 *** DECODIFICACAO saida = aaba A aplicação está disponı́vel no repositório (http://mov.void.cc/archives/goedel0.2.tar.bz2) sobre a licença pública GPL 6 . Maiores informações sobre sua instalação e uso encontram-se no arquivo README do pacote distribuı́do. 4.4. Análise A criptografia moderna considera eficiente os algorı́tmos de codificação/decodificação cujo tempo computacional requerido para sua execução é impraticável por computadores pessoais e até mesmo por super-computadores [Mao 2003]. Pensando desta forma, o método utilizado fornece uma demonstração do poder dado pelos números primos no desenvolvimento de algorı́tmos de criptografia. O software produzido não suporta a codificação de uma palavra de entrada muito grande, haja visto que para cada elemento desta palavra, é necessário um número primo que o “represente”, tendo-se portanto alta complexidade espacial. Além disso, para uma quantidade grande de sı́mbolos, os expoentes de tais números primos serão compostos por valores de vários dı́gitos, o que aumentará ainda mais o tempo de processamento, alta complexidade temporal. Se por um lado isto lembra errôneamente ineficiência, por outro leva à comprovação de que a quebra de uma chave criptográfica gerada por estratégias semelhantes à empregada, é praticamente impossı́vel, somente conseguida pelo uso de novas técnicas de processamento [Ord 2002], e ainda não comprovadas. 6 GNU General Public License:http://www.fsf.org/licensing/licenses/gpl.txt 227 5. Conclusões O Teorema Fundamental da Aritmética revelou fatos interessantes. Aplicá-lo como axioma para os Números de Gödel, fez propor um método criptográfico, que apesar de pouco eficiente, demonstra a base na qual algorı́tmos de criptografia massivamente usados atualmente são desenvolvidos. Ainda, descobriu-se que a propriedade da incompletude dos sistemas formais, descoberta e provada por Kurt Gödel dos Números de Gödel, não é somente uma caracterı́stica de ineficiência de algorı́tmos. Nota-se que se vista de um novo ângulo, o da criptografia moderna, revela-se como um identificador não da ineficiência, mas da eficiência de segurança de algorı́tmos criptográficos. Quanto mais os computadores são incapazes de quebrar as chaves criadas por estes algorı́tmos, mais tempo estes perdurarão como padrões de codificação. O software desenvolvido permitiu analisar de maneira prática a teoria aqui desenvolvida. Comprovou-se a dificuldade da decodificação de uma mensagem criptografada, pela fatoração em termos de números primos de um número natural de milhares de casas decimais. Enfim, de axioma para aplicação em novos teoremas, à base para o desenvolvimento de soluções práticas, o Teorema Fundamental da Aritmética prova que as teorias podem ser usadas para uma gama de aplicações, e não somente destinadas a hipóteses não implementadas. Referências Andrews, G. E. (1995). Number Theory. Dover Publications, 1st edition. Choudhury, S. and Choudhury, S. (2002). Public Key Infrastructure and Implementation and Design. Wiley, 1st edition. Gödel, K. (1931). Uber formal unentscheidbare satze der principia mathematica und verwandter systeme, i. Mathematik und Physik, 38. Hintikka, J. (1999). On Gödel. Wadsworth Publishing, 1st edition. Hofstadter, D. R. (1989). Gödel, Escher, Bach: An Eternal Golden Braid. Vintage Books, 1st edition. Holden, G. (2003). Guide to Firewalls and Network Security: Intrusion Detection and VPNs. Course Technology, 1st edition. Kernighan, B. and Ritchie, D. (1978). The C Programming Language. Prentice Hall, 1st edition. Mao, W. (2003). Modern Cryptography: Theory and Practice. Prentice Hall, 1st edition. Mollin, R. A. (1998). Fundamental Number Theory with Applications. CRC-Press, 1st edition. Ord, T. (2002). Hypercomputation: computing more than the turing machine. Honours Thesis, University of Melbourne. Rescorla, E. (2000). SSL and TLS: Designing and Building Secure Systems. AddisonWesley Professional, 1st edition. 228 Rivest, R., Shamir, A., and Adleman, L. (1978). A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM, Vol. 21 (2), pp.120-126. Schneier, B. (1995). Applied Cryptography: Protocols, Algorithms, and Source Code in C. Wiley, 2nd edition.