Quando
se adota o método de chaves secretas, é recomendável não utilizar por muito
tempo a mesma. Quando ideal é a cada nova sessão uma nova chave seja
estabelecida. Mas como estabelecer a chave ao início de cada sessão? Como
evitar as escutas? Cifrar a mensagem? Com que chave? Aqui apresenta-se uma solução
para ilustrar o conceito de funções unidirecionais. A função a ser usada
é a exponencial módulo de um número, isto é, dados os inteiros 'a', 'x' e 'n',
seja ~x)=aAx mod n (n>O, x>=O). Assim, ftx) é o resto da divisão de aAx
por n. O cálculo desta função é viável. O procedimento abaixo mostra uma
maneira de calcular esta função :
Procedimento
expomod (a,x,n,r:inteiro); {r possui o resultado da função}
declare y, c
: tipo inteiro
inicio
r:=
l;
y:=x;
c:=a mod n;
enquanto y>O faça inicio
se ímpar(y) então
r=r*c mod n;
y=y div 2;
C=C 2 mod n;
fim;
fim;
Suponha que dois usuários A e B desejam manter uma conversa sigilosa através de
chave secreta. As duas partes escolheram um número primo grande , p' da ordem
de 10A 100, e já concordaram também em utilizar uma base , a'. Preferivelmente
deve ser uma raiz primitiva de p, de modo que ffx)=aAx mod p é uma b~eção sobre
o conjunto 1..p-l dos naturais x tais que l<=x<=p-l. Para iniciar o
estabelecimento da chave, A gera ao acaso um expoente x no intervalo 1..p- l e
B gera outro, y Usando expomod, A calcula ffx) e B ffy). Então A envia pela
rede ffx) e B envia ffy). De posse de y e ffx), B calcula, usando
expomod
:
K
= [(ffx)]Ay mod p = (aAx mod p)Ay mod p = aA(xy) mod p = K.
Da
mesma forma, A usa expomod e de posse de x e ffy) calcula:
k = [(ffy)]AX mod p =
(aAy mod p)AX mod p = aA(xy) mod p - - K.
Assim
A e B chegam a um número comum K, que será a chave de ciframento para as
mensagens.
Suponha
um espião bem informado que obtenha os valores de a e p e, através de escuta,
os valores de f(f(x)) e de f(f(y)). Para determinar K, ele precisa determinar a
função logaritmo módulo p, que é intratável. Mesmo A não é capaz de determinar
o valor de y e B o valor de x. A função expomod é unidirecional sem segredo,
permite a A e B trocarem uma chave secreta utilizando a própria rede.
Nenhum comentário:
Postar um comentário