Troca de Chaves Criptográficas com Redes Neurais Artificiais
Transcrição
Troca de Chaves Criptográficas com Redes Neurais Artificiais
Troca de Chaves Criptográficas com Redes Neurais Artificiais Denis R. M. Piazentin1 , Maurı́cio Duarte1 1 Computer and Information Systems Research Lab (COMPSI) Centro Universitário Eurı́pedes de Marı́lia (UNIVEM) – Marı́lia, SP – Brasil [email protected], [email protected] Abstract. Encryption algorithms work by scrambling information to protected then from unauthorized access. These algorithms use cryptographic keys, a data used by a given algorithm for scrambling the information and subsequent restoration of these information through decryption. The distribution of cryptographic keys is a known problem in cryptography. Given that artificial neural networks can synchronize by mutual learning, adjusting their weights, it is possible to use this property of synchronization to solve the problem of exchanging cryptographic keys. This work is the study of this technique, known as Neural Cryptography. Resumo. Algoritmos de criptografia trabalham embaralhando informações para as proteger de acesso indevido. Esses algoritmos usam chaves criptográficas, um dado usado pelo algoritmo para o embaralhamento das informações e posterior restauração dos mesmos através da descriptografia. A distribuição das chaves criptográficas é um conhecido problema em criptografia. Tendo em vista que redes neurais artificiais podem se sincronizar por aprendizado mútuo, ajustando seus pesos, é possı́vel usar essa propriedade de sincronização para solucionar o problema de troca de chaves criptográficas. Este trabalho é o estudo desta técnica, conhecida como Criptografia Neural. 1. Introdução A criptografia usa algoritmos criptográficos para transformar texto plano em texto cifrado e utiliza um dado chamado chave criptográfica para criptografar e descriptografar esses textos. Fazer com que ambas as partes da comunicação possuam essa mesma chave é um problema conhecido em criptografia, que já teve propostas e implementadas soluções como o uso de um terceiro confiável, a troca com antecedência e uso de chaves públicas. A sincronização de redes neurais e o uso de seus pesos como chaves criptográficas é uma alternativa ao problema de troca de chave. Com a descoberta da sincronização entre redes neurais por um processo conhecido como aprendizagem mútua, onde os pesos são ajustados até que convirjam e com a criação de redes neurais com uma estrutura diferenciada onde há uma sincronização muito mais rápida que o treinamento comum, foi possı́vel propor um protocolo de troca de chaves que utiliza os pesos dessas redes sincronizadas como chaves criptográficas, criando uma alternativa ao problema de troca de chave. Este trabalho tem como objetivo prover uma revisão bibliográfica e apresentar o uso da sincronização de redes neurais artificiais como protocolo de troca de chaves. A criptografia neural é uma alternativa interessante, tendo em vista que problemas encontrados em outros protocolos não são observáveis aqui. 2. Criptografia e Troca de Chaves Criptografar é o ato de converter informações sensı́veis em textos ilegı́veis, enquanto que, o processo inverso, converter textos ilegı́veis em informação legı́vel, consiste do ato de descriptografar. Para criptografar e descriptografar dados, utilizam-se algoritmos criptográficos que, por sua vez, utilizam um dado conhecido como chave. Na criptografia computadorizada, a chave é sempre um número ou um conjunto de números [Burnett e Paine 2001]. Alguns algoritmos de criptografia mais conhecidos são o Data Encryption Standart (DES), o Advanced Encryption Standart (AES) e o RSA [Terada 2008]. O DES foi o primeiro algoritmo de criptografia de conhecimento público e se tornou o padrão comercial em algoritmos criptográficos, junto com sua variante, Triple DES. No DES e nos algoritmos públicos que se seguiram, a segurança se baseia exclusivamente no conhecimento da chave secreta. O DES e todos os algoritmos conhecidos como de criptografia de chave simétrica utilizam a mesma chave para criptografar e descriptografar [Terada 2008]. Sucessor do DES, o AES foi escolhido para ser o novo padrão comercial através de uma competição criada em 1998. Os algoritmos candidatos a AES foram analisados quanto à sua segurança, performance e tamanho [Burnett e Paine 2001]. A partir dessa análise, foram selecionados uma série de algoritmos que foram exaustivamente testados e, em outubro de 2000, o algoritmo Rijndael foi escolhido e adotado como AES [Terada 2008]. O AES é um algoritmo de chave simétrica que utiliza chaves de 128, 192 ou 256 bits de comprimento [Terada 2008]. O algoritmo RSA, publicado em 1978, utiliza o conceito de chaves públicas e privadas. Nesse esquema, cada usuário possui seu par de chaves; a chave pública, que é usada por terceiros para criptografar o conteúdo e uma chave distinta, privada, que é usada pelo usuário para descriptografar os dados [Burnett e Paine 2001]. O algoritmo RSA comumente é utilizado para criptografar uma chave de sessão, que é usada por outro algoritmo, de criptografia simétrica, para criptografar e descriptografar a mensagem em si [Burnett e Paine 2001]. Isso ocorre porque algoritmos de chave pública como o RSA são muito mais lentos que os de chave simétrica, chegando a ser 500 vezes mais lento em algumas comparações [Burnett e Paine 2001]. A criptografia de chave pública é uma das soluções para o problema de troca de chaves. A criptografia é usada para proteger a troca de informações secretas, mas para isso também é necessário proteger as chaves que descriptografam essas informações e, se um atacante pode interceptar a mensagem com o texto cifrado, também pode interceptar a mensagem com a chave que a descriptografa [Burnett e Paine 2001]. Outras soluções para o problema de troca de chaves são a troca de chaves com antecedência, o uso de um terceiro confiável e a criptografia neural. Na troca de chaves com antecedência, as duas partes que desejam se comuni- car devem se encontrar antes e compartilhar a chave que será usada para criptografar as mensagens através de um meio de comunicação seguro [Burnett e Paine 2001]. O principal problema com esse protocolo é a dificuldade na troca de chaves que surge quando as partes estão em locais geograficamente distantes ou quando muitas partes desejam se comunicar, situações em que ocorrem problemas de logı́stica que inviabilizam a troca [Burnett e Paine 2001]. No caso de terceiro confiável, cada parte possui uma chave diferente compartilhada com uma terceira parte confiável (trusted third party, TTP), que armazena a chave de todas as outras partes e tem acesso a todas as mensagens [Burnett e Paine 2001]. O principal problema com esse protocolo é que a confiabilidade da TTP é extremamente crı́tica, e caso a TTP seja perdida ou comprometida de qualquer forma, é necessário obter outra TTP e reiniciar o processo de geração de chaves para todas as partes, o que pode ser muito custoso [Burnett e Paine 2001]. Criptografia neural utiliza os pesos de redes neurais sincronizadas como chaves criptográficas [Kinzel e Kanter 2002]. O protocolo se baseia na propriedade de sincronização de certas redes neurais e no fato de que a sincronização é muito mais rápida que o aprendizado de uma terceira rede neural de um atacante que esteja apenas monitorando a comunicação [Ruttor 2007]. 3. Redes Neurais Artificiais Redes neurais artificiais (RNAs) são sistemas paralelos distribuı́dos por unidades de processamento simples (neurônios artificiais) que calculam determinadas funções matemáticas [Braga et al. 2007]. O primeiro neurônio artificial, que foi proposto em 1943 por McCulloch e Pitts, é um simplificação do neurônio biológico, que é dividido em corpo ou soma, dendritos e axônio, conforme ilustrado na Figura 1. Figura 1. Modelo de neurônio biológico com o corpo, os dendritos e o axônio com seus terminais sinápticos. Fonte: próprio autor O modelo de neurônio artificial foi composto de n terminais de entrada, recebendo os valores x1 , x2 , . . . , xn , com pesos acoplados w1 , w2 , . . . , wn representando a força das sinapses do neurônio, com o efeito da sinapse i então sendo dado por xi wi no momento em que o neurônio atinge seu limiar de excitação, dado pela somatória dos valores xi wi e por uma função de ativação f (u), com o disparo sendo dado pela saı́da y nos valores 1 ou 0 [Braga et al. 2007] [Russell e Norvig 2010]. O modelo do neurônio artificial é representado na Figura 2. Figura 2. Modelo matemático de um neurônio artificial, com as entradas x1 , x2 , . . . , xn , pesos w1 , w2 , . . . , wn , saı́da y e corpo com a somatória de xi wi e função de ativação f (u). Fonte: próprio autor Neurônios individuais são computacionalmente limitados, mas conjuntos de neurônios organizados em forma de rede podem resolver problemas mais complexos [Braga et al. 2007]. Para isso, se organizam redes de neurônios artificiais com quantia de camadas variadas e com conexão entre si unidirecionais (feedforward ) ou recorrentes, com saı́das da camada inferior alimentando entradas da camada superior [Braga et al. 2007]. As RNAs são treinadas para aprender e melhorar sua performance na resolução de um problema [Haykin 1999]. Esse treinamento consiste de um processo iterativo de ajuste dos pesos das conexões [Braga et al. 2007] em que as entradas da rede são alimentadas e, de acordo com o resultado, os pesos são ajustados. O ajuste dos pesos é dado por w(t + 1) = w(t) + ∆w(t), com w(t + 1) sendo o valor do peso no instante t + 1 e ∆w(t) o ajuste aplicado aos pesos. O treinamento ou aprendizado pode ser supervisionado ou não supervisionado. No treinamento supervisionado, há um supervisor estimulando as entradas e ajustando os pesos para aproximar sua saı́da da saı́da desejada. No treinamento não supervisionado, padrões são apresentados continuamente à rede e as regularidades nos dados apresentados torna o aprendizado possı́vel [Braga et al. 2007]. A regra de aprendizado de Hebb, uma das regras de aprendizado usadas na criptografia neural, que propõe que o peso deve ser ajustado caso haja sincronismo entre atividades de entrada e saı́da, é classificada como não supervisionada [Braga et al. 2007]. 4. Criptografia Neural A sincronização de redes neurais é um caso especial de aprendizado onde duas redes neurais são iniciadas com pesos escolhidos aleatoriamente e, a cada passo do processo de sincronização, recebem um vetor de entradas gerado publicamente, calculam suas saı́das e as comunicam uma para a outra. Caso o mapeamento entre a entrada atual e a saı́da de ambas as redes não seja igual, os pesos da rede são atualizados de acordo com uma das regras aplicáveis [Ruttor 2007]. Nas redes neurais mais simples, como os perceptrons, não se observa diferença significativa entre o tempo para a rede ser treinada por exemplos do tempo necessário para sincronizar, porém redes neurais com uma estrutura especı́fica, as Tree Parity Machines (TPM), sincronizam muito mais rápido do que uma terceira rede que esteja escutando a comunicação precisa para aprender, e essa diferença de tempo é usada pelo protocolo para resolver o problema de troca de chaves [Ruttor 2007]. A arquitetura da rede TPM foi apresentada no artigo Secure exchange of information by synchronization of neural networks [Kanter et al. 2002] e pode ser vista na Figura 3: Figura 3. Estrutura de uma Tree Parity Machine, com K = 3 e N = 4. Fonte: próprio autor A TPM é composta por três camadas, a de entrada, a oculta e a de saı́da, respectivamente. A camada oculta possui K unidades, representados na Figura 3 por oi onde i = 1, . . . , K, com cada unidade possuindo N unidades da camada de entradas xj com peso associado wj , onde j = 1, . . . , N . A camada de saı́da possui apenas uma unidade y. Tem-se que todos os valores de entradas são binários, tais que xi,j ∈ {−1, +1} (1) e os pesos que definem o mapeamento de entradas para saı́da são números discretos entre −L e +L, wi,j ∈ {−L, −L + 1, . . . , +L − 1, L} (2) como em outras redes neurais, tem-se também que o estado de cada neurônio é dado pelo somatório de xj wj , N 1 X 1 hi = √ xi wi = √ xi,j wi,j N N j=1 (3) com a saı́da oi sendo definida pela função sinal de hi , oi = sgn(hi ) (4) com o caso especial de hi = 0 sendo mapeado para −1 para garantir um valor de saı́da binário. Tem-se então que a saı́da total y da TPM é dado pelo produto (paridade) das unidades da camada oculta oi , y= K Y oi (5) i=1 De tal forma, a saı́da y apenas indica se o número de unidades inativas da camada oculta é par (y = +1) ou ı́mpar(y = −1) e, consequentemente, há 2K−1 diferentes representações internas (o1 , o2 , . . . , ok ) que resultam no mesmo valor de y [Ruttor 2007]. O processo de sincronização tem inı́cio com os pesos das TPM A e B sendo inicializados com valores aleatórios, não relacionados e secretos. Após isso, para cada passo da sincronização, é gerada publicamente uma lista de valores aleatórios de tamanho K × N que alimenta as entradas A e B, em que as saı́das y A e y B são calculadas [Ruttor 2007]. Caso y A 6= y B nenhuma ação é tomada e caso y A = y B é aplicada uma das regras de aprendizado, que são [Prabakaran e P. 2010]: • Regra de aprendizado de Hebb: A/B wi A/B (t + 1) = wi A/B (t) + xi y A/B Θ(y A/B oi )Θ(y A y B ) (6) • Regra de aprendizado anti-Hebb: A/B wi A/B (t + 1) = wi A/B (t) − xi oi Θ(y A/B oi )Θ(y A y B ) (7) • Regra de aprendizado Passeio Aleatório A/B wi A/B (t + 1) = wi A/B (t) + xi Θ(y A/B oi )Θ(y A y B ) (8) Onde Θ é a função degrau, 0, x < 0 1 + sgn(x) 1 Θ(x) = = 2, x = 0 2 1, x > 0 (9) dessa forma, apenas são atualizadas as unidades onde oi = y A/B quando y A = y B . Essa restrição na atualização dos pesos é especialmente útil, já que torna impossı́vel saber quais pesos foram atualizados sem conhecer os seus valores na camada oculta [Firmino Filho 2009]. Os passos da sincronização devem ser repetidos até que as duas redes estejam sincronizadas. As redes são consideradas sincronizadas quando para cada peso wiA das K unidades ocultas de A e o peso correspondente wiB em B tem-se que wiA = wiB . Porém, como as TPM A e B possuem pesos secretos, essa comunicação não é possı́vel. Como alternativa para a detecção de sincronização entre as redes, é proposto que seja feito um teste cifrando uma mensagem pré-determinada com um algoritmo criptográfico usando como chave o estado dos pesos de A e B e comparando-os, de forma que se a mensagem cifrada mA seja igual à mB , então A e B estão sincronizados. Para reduzir os custos de processamento desse algoritmo, acrescenta-se a regra de que o teste de sincronização deve ser executado apenas caso a condição y A = y B tenha ocorrido nos últimos M passos. O processo de sincronização é baseado na competição entre forças aleatórias B B atrativas e repulsivas. Um passo atrativo ocorre quando y A = oA i = oi = y , situação onde os pesos de ambas as redes são atualizados. Com os pesos das redes entre −L e +L, a distância di = |wiA − wiB | não será modificada, exceto caso o valor de um dos pesos ultrapasse L, caso em que é atribuido ao mesmo o valor limitante, o que faz com que a distância di diminua, até que di = 0 [Firmino Filho 2009]. B Um passo repulsivo ocorre quando y A = y B mas oA i 6= oi . Nessa situação apenas um dos pesos é atualizado, o que aumenta a distância di = |wiA − wiB |. Para uma rede neural atacante, a probabilidade de passos repulsivos é sempre maior do que entre A e B [Ruttor 2007]. O principal problema para um atacante E é que a representação interna (o1 , o2 , . . . , oi ) de A e B lhe é desconhecida. Como as alterações nos pesos depende dos valores de oi , é importante para um ataque bem sucedido que o estado das unidades ocultas seja adivinhado corretamente. Ataques de força bruta são computacionalmente inviáveis contra o protocolo, pois para determinada TPM há (2L + 1)KN diferentes configurações possı́veis de pesos. Há quatro principais formas de ataque; simples, geométrico, de maioria e o genético. No ataque simples, E treina uma terceira TPM com os vetores públicos x e com as saı́das y A , que são transmitidas publicamente entre A e B. A TPM de E deve ter a mesma estrutura de A e B e inicia com pesos aleatórios [Ruttor 2007]. A rede neural de E é treinada por uma das seguintes equações: • Regra de aprendizado de Hebb: A B wiE (t + 1) = wiE (t) + xi y E Θ(y A oE i )Θ(y y ) (10) • Regra de aprendizado anti-Hebb: A B wiE (t + 1) = wiE (t) − xi oi Θ(y A oE i )Θ(y y ) (11) • Regra de aprendizado Passeio Aleatório A B wiE (t + 1) = wiE (t) + xi Θ(y A oE i )Θ(y y ) (12) O ataque geométrico é similar ao ataque simples, porém a regra de aprendizado só é aplicada caso y E = y A = y B . Caso y E 6= y A = y B , o atacante tentará corrigir sua representação interna para obter a mesma saı́da antes de atualizar seus pesos, trocando o valor de sua saı́da y E pelo valor da saı́da de um neurônio da camada oculta [Firmino Filho 2009]. No ataque de maioria, o atacante usa m TPMs para melhorar sua capacidade de predição. As m redes não inicializadas com pesos aleatórios e quando a saı́da de uma determinada rede yiE for diferente de y A/B , E tenta corrigir sua representação da mesma forma que o ataque geométrico. Após a correção, o atacante E seleciona a representação interna mais comum e esta será adotada por todas as redes na regra de aprendizagem [Firmino Filho 2009]. Para aumentar a eficiência e reduzir a correlação que surge entre as TPMs de E devido às atualizações idênticas, o atacante pode usar o ataque de maioria e o ataque geométrico alternadamente [Ruttor 2007]. O ataque de maioria é o com maior taxa de sucesso contra a criptografia neural, e para aumentar a segurança contra esse protocolo foi proposto por [Ruttor 2007] o uso de queries, em que um algoritmo utiliza informações internas de uma das TPM para gerar vetores de entradas com maior probabilidade de ocorrência de passos atrativos entre os parceiros. O ataque genético é baseado em um algoritmo evolucionário. No ataque genético, E começa com apenas uma TPM, mas pode usar até m redes neurais. Quando y A = y B , o seguinte algoritmo é aplicado: m • Caso E tenha até 2K−1 Tree Parity Machines, ele determina todas as 2K−1 representações internas (o1 , o2 , . . . , oi ) que produzem a saı́da y A e os usa para atualizar os pesos de acordo com a regra de aprendizado. Assim E cria 2K−1 variantes de cada TPM nesse passo de mutação [Ruttor 2007]. m • Caso E já tenha mais que 2K−1 TPMs, só as mais aptas devem ser mantidas. E isso é obtido descartando todas as redes que predisseram menos que U saı́das y A nos últimos V passos de aprendizagem em que y A = y B no passo de seleção. Como regra adicional, E mantém ao menos 20 TPMs. Foram propostas duas melhorias ao algoritmo, sendo o uso de queries, por [Ruttor 2007], e o uso de transmissões errôneas, proposto por [Allam e Abbas 2010], em que as TPMs parceiras enviam suas saı́das erroneamente com probabilidade baseada na distância estimada entre os pesos de A e B e a rede parceira tenta predizer o envio desta informação usando os mesmos cálculos. 5. Conclusões O protocolo foi implementado na linguagem Python para comprovar o funcionamento da técnica de criptografia neural. Com a implementação, pode-se observar o fenômeno de sincronização de redes neurais e validar algumas caracterı́sticas do protocolo. Foi possı́vel confirmar que, conforme verificado por Ruttor 2007 e Firmino Filho 2009, o tempo de sincronização das redes neurais aumenta exponencialmente com o aumento de L. Foram utilizadas duas redes neurais Tree Parity Machine utilizando a regra de aprendizado de Hebb e configuradas com K = 4, N = 4 e L variável para obter a média do tempo de sincronização e sua variação com L. Os resultados obtidos encontram-se na figura 4, onde pode-se observar um crescimento polinomial no número de mensagens trocadas para atingir a sincronização com o aumento de L. Mantendo o valor L = 3, N = 4 e variando o parametro K, obtemos os tempos de sincronização exibidos na figura 5, onde podemos observar que o aumento no número de mensagens trocadas para a sincronização não aumenta consideravelmente com o aumento de K, porém, o tempo de processamento gasto aumenta proporcionalmente. Temos que, após cada sincronização bem sucedida entre TPMs, obtemos uma matriz de pesos de tamanho K × N , exemplificada na figura 6. É possı́vel, dentre outras formas, utilizar a matriz como chave criptográfica concatenando os valores e aplicando um algoritmo de hash, como o SHA-256, para gerar imediatamente uma chave de 256 bits válida para um algoritmo criptográfico simétrico, como o AES. Figura 4. Número de mensagens trocadas até a sincronização, com L variável. Fonte: próprio autor Figura 5. Número de mensagens trocadas e tempo de CPU até a sincronização, com K variável. Fonte: próprio autor Foram efetuados testes de sincronização via rede usando TPMs configuradas com K = 4, N = 4 e L = 3, onde foi verificado que as redes neurais sincronizaram com sucesso, com M = 5, gerando uma matriz de pesos similar à da figura 6 idênticas nas TPMs A e B. A criptografia neural é uma alternativa ao problema de troca de chaves. Consiste de um algoritmo simples e precisa de um número baixo de cálculos para gerar chaves [Kanter et al. 2002], que torna as implementações do protocolo vantajosas em situações com recursos computacionais limitados. Também não possui algumas das desvantagens encontradas em outras técnicas, como a troca de chave com antecedência, que é logı́sticamente inviável e não depende exclusivamente de uma máquina mestre com acesso a todas as informações, como na abordagem do uso de um terceiro confiável. Estudos adicionais serão feitos para comparar a performance do algoritmo de criptografia neural com a encontrada no algoritmo de criptografia pública RSA para validar a velocidade do protocolo proposto. Também serão feitas análises mais detalhadas da segurança do protocolo implementado, comparando-o com a criptografia de chave pública e o protocolo Diffie-Hellman. Figura 6. Número de mensagens trocadas até a sincronização, com K variável. Fonte: próprio autor Referências Allam, A. M. e Abbas, H. M. (2010). On the improvement of neural cryptography using erroneous transmitted information with error prediction. Trans. Neur. Netw., 21:1915–1924. Braga, A., Carvalho, A., e Ludermir, T. (2007). Redes Neurais Artificiais: Teoria e Aplicações. LTC, 2nd edition. Burnett, S. e Paine, S. (2001). The RSA Security’s Official Guide to Cryptography. Osborne/McGraw-Hill, Berkeley, CA, USA. Firmino Filho, J. (2009). Implementação e análise de desempenho dos protocolos de criptografia neural e diffie-hellman em sistemas rfid utilizando uma plataforma embarcada. Universidade Federal do Rio Grande do Norte, page 61. Haykin, S. (1999). Neural networks: a comprehensive foundation. Prentice Hall. Kanter, I., Kinzel, W., e Kanter, E. (2002). Secure exchange of information by synchronization of neural networks. Europhysics Letters, 57(1):11. Kinzel, W. e Kanter, I. (2002). Neural cryptography. In in Proc. of the 9th International Conference on Neural Information Processing, pages 18–22. Prabakaran, N. e P., V. (2010). A new security on neural cryptography with queries. Int. J. of Advanced Networking and Applications, pages 437–444. Russell, S. e Norvig, P. (2010). Artificial intelligence: a modern approach. Prentice Hall series in artificial intelligence. Prentice Hall, 3rd edition. Ruttor, A. (2007). Neural synchronization and cryptography. arXiv, page 120. Terada, R. (2008). Segurança de Dados: Criptografia em Rede de Computador. Edgard Blucher, 2nd edition.