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.