Algoritmos Criptográficos
Os modernos algoritmos de criptográfia podem ser classificados em
dois tipos de acordo com a chave que utiliza : os de chave única
e os de chave pública e privada.
Chave simétrica
Os algoritmos de chave única, são também
conhecidos como algoritmos de chave simétrica e, caracterizam-se
por utilizar a mesma chave tanto para a cifragem como para a decifragem
dos dados, esse método funciona em aplicações
limitadas, como as militares, onde o emissor e o receptor podem se preparar
antecipadamente para trocar a chave.
Infelizmente, genericamente esse método não funciona muito
bem, pois trocar chaves secretas com todas as pessoas a quem você
queira enviar uma mensagem é praticamente impossível. Para
ilustrar isso, considere o que você teria de fazer se tivesse de
enviar um memorando confidencial para acionistas de uma empresa. Primeiro,
você teria de entra em contato com cada acionista individualmente
para que pudesse fazer a troca das chaves secretas. Isso poderia ser feito
ao telefone, mas se as mensagens fossem extremamente confidenciais, talvez
fosse melhor você trocar chaves pessoalmente. Lembre-se de que você
precisaria fazer isso para todas as pessoas; cada uma teria uma chave secreta
separada. Para aumentar a complexidade desse sistema, você também
deverá se lembrar de qual chave serve para cada cliente. Se você
as misturar, os clientes não serão capazes de ler as suas
mensagens. Obviamente, esse tipo de sistema não é viável
para transações comerciais comuns.
Chave assimétrica
Os algoritmos de chave pública e privada, também
chamados de algoritmos de chave assimétrica, utilizam duas
chaves : uma pública que pode ser divulgada e outra secreta conhecida
somente por pessoas autorizadas. Em um sistema de chave pública,
cada pessoa tem duas chaves: uma chave pública e uma chave privada.
As mensagens criptografadas com uma das chaves do par só podem se
decriptografadas com a outra chave correspondente; portanto, qualquer mensagem
criptografada com a chave privada só pode ser decriptografada com
a chave pública e vice-versa. Como o nome sugere, normalmente a
chave pública é mantida universalmente disponível.
A outra chave, a chave privada, é mantida em segredo.
Vamos ver com a juda de um exemplo o funcionamento da chave pública.
Se Frank e Andrea quiserem se comunicar secretamente usando a criptografia
com chave pública, eles terão de fazer o seguinte :
-
Frank escreve uma mensagem e a criptografa utilizando a chave pública
de Andrea. A chave está disponível para qualquer pessoa.
-
Frank envia a mensagem para Andrea através da Internet.
-
Andrea recebe a mensagem e a decriptografa utilizando sua chave privada.
-
Andrea lê a mensagem. Se quiser responder, ela deverá fazer
o mesmo, a diferença é que dessa vez a chave de Frank será
utilizada.
Como apenas Andrea tem acesso à sua própria chave privada
(presupondo-se que a segurança do sistema seja eficiente), somente
ela poderá ler a mensagem, pois existe confidencialidade. A grande
vantagem deste sistema é que não só Frank pode enviar
mensagens secretas para Andrea, todo mundo pode. Tudo o que o emissor precisa
é da chave pública de Andrea.
Lembre-se que o sigilo da chave privada é importantíssimo.
O criptossistema inteiro se baseia no fato de que a chave privada é
realmente privada. Se um invasor conseguir roubar a sua chave privada,
tudo estará perdido. Não importa qual seja a eficiência
do algoritmo de criptografia - o intruso vencerá e poderá
ler e criar mensagens utilizando seu nome.
ADVERTÊNCIA :
Mantenha sua chave privada secreta. Não a guarde em texto simples
no sistema. Se um intruso roubar a sua chave privada, ele poderá
assumir a sua identidade, e enviar e receber mensagens como se fosse você. |
Assinatura Digital:
Ter duas chaves separadas proporciona outro benefício : a assinatura
digital. Imagine usar o sistema de forma invertida. Em vez de Frank
criptografar a mensagem com a chave pública de Andrea, ele utiliza
sua própria chave privada. Você deve observar que agora todo
mundo pode ler a mensagem, ele deixou de ser privada. Isso é verdade,
mas também é verdade que apenas Frank poderia ter escrito
a mensagem. Pois ele é a unica pessoa capaz de criar mensagens que
possam ser lidas com sua chave pública, pressupondo-se que Frank
não tenha compartilhado sua chave privada com ninguém mais
e que ela seja realmente secreta.
Vejamos um exemplo. Frank quer enviar uma mensagem para todos os seus
contatos informando-os que mudou de emprego. Na verdade, ele não
se importa com quem lerá a mensagem, mas quer ter certeza de garantir
a seus contatos que a mensagem realmente é dele, e não de
outra pessoa.
-
Frank escreve a mensagem e a criptografa utilizando sua chave privada.
-
Frank envia a mensagem a seus contatos através da Internet.
-
Os contatos recebem a mensagem e a decriptografam utilizando a chave pública
de Frank.
O fato de a chave pública de Frank ter decriptografado a mensagem
garante aos contatos que a mensagem realmente é de Frank. Qualquer
mensagem decriptografada com a chave pública de Frank só
poderia ter sido criada com sua chave privada.
Isso é muito importante. Na criptografia com chave pública,
cada par de chaves é único. Só existe apenas uma chave
pública para cada chave privada e vice-versa. Se isso não
fosse verdade, a assinatura digital não seria possível; um
impostor poderia utilizar outra chave privada para criar uma mensagem que
pudesse ser lida pela chave pública fornecida.
Podemos observar que a assinatura digital assegura aos contados que
a mensagem não foi alterada (integridade) e que vei de Frank (autenticidade).
Além disso, Frank é o único com acesso a sua chave
privada.
Agora combinando so dois métodos, Frank pode enviar uma mensagem
privada e assinada para Andrea, vejamos :
-
Frank escreve a mensagem e a criptografa utilizando sua chave privada (assinatura
da mensagem).
-
Em seguida, ele criptografa a mensagem com a chave pública de Andrea
(tornando-a privada)
-
Frank envia a mensagem duplamente criptografada para Andrea através
da Internet.
-
Andrea recebe a mensagem.
-
Ela decriptografa a mensagem duas vezes. Primeiro, ela utiliza sua chave
privada e, depois, a chave pública de Frank.
-
Agora Andrea pode ler a mensagem e tem certeza que ela é secreta
e vei de Frank. Ela tem certeza de que a mensagem não foi modificada;
para alterá-la, o invasor teria de acessar a chave privada de Frank.
Como Combinar Criptografia
com chave pública e criptografia simétrica :
Agora vamos ver a combinação dos dois métodos
: A criptografia com chave pública é computacionalmente intensiva;
é necessário muito tempo para criptografar uma mensagem com
apenas alguns paragráfos. No entanto, nem tudo está perdido,
pois os melhores aspectos da criptografia com chave simétrica e
da criptografia com chave assimétrica podem ser combinados codificando-se
a mensagem com o método da chave simétrica e criptografando-se
a chave simétrica com o método de chave pública, vejamos
:
Novamente vamos considerar Frank e Andrea. Frank quer enviar uma mensagem
à Andrea, mas dessa vez ele utilizará uma combinação
de criptografia com chave pública e de criptografia com chave simétrica
:
-
Frank escreve a mensagem e a codifica utilizando a criptografia com chave
simétrica com uma chave que ele cria aleatoriamente apenas para
essa mensagem. Isso é conhecido como chave de mensagem ou chave
de sessão.
-
Frank criptografa essa chave de sessão com a chave pública
de Andrea.
-
Frank envia a mensagem criptografada e a chave de sessão criptografada
a Andrea.
-
Andrea decriptografa a chave de sessão utilizando sua chave privada.
-
Em seguida, Andrea decriptografa a mensagem usando a chave de sessão
que acabou de receber.
-
Andrea agora pode ler a mensagem.
Esse método se beneficia da força dos dois tipos de criptossistemas
: a velocidade da criptografia simétrica e a facilidade dos mecanismos
de distribuição de chave do sistema de criptografia com chave
pública.
Tudo bem, esse método resolve o problema de garantir a confidencialidade
de uma mensagem, mas como fica a integridade e a não- repudiação
? Poderíamos simplemente criptografar a mensagem utilizando a chave
privada do emissor, como fizemos antes. Infelizmente, encontramos os mesmos
problemas de desempenho discutidos anteriormente com relação
à confidencialidade. Para resolver o problema, precisamos introduzir
outra ferramenta útil conhecida como message digest (ou hash).
Message digest é uma função que obtém
uma mensagem como entrada e produz um código de tamanho fixo como
saída. Por exemplo, se tivéssemos uma função
de message digest de 10 bytes, qualquer texto que executássemos
através da função produziria 10 bytes de saída,
como dar3ksjudr. Lembre-se de que cada mensagem deverá produzir
facilmente um message digest aleatório. Ou seja, qualquer par de
mensagens que escolhermos deverá produzir um message digest específico.
Existem muitos algoritmos de message digest ou hash, mas para que eles
sejam úteis a esse propósito (considerados criptograficamente
seguros), o algoritmo deverá exibir determinadas propriedades, como
as seguintes :
-
Sem retorno - Deverá ser difícil ou impossível determinar
a mensagem que produziu uma determinada saída. Isso impedirá
que alguém substitua uma mensagem por outra que tenha o mesmo message
digest.
-
Aleatoriedade - A mensagem deverá parecer aleatória, mais
uma vez para impedir que alguém determine a mensagem original.
-
Exclusividade - O message digest deverá ser exclusivo, de modo que
a existência de duas mensagens com o mesmo message digest seja impossível.
Vários message digests exibem essas propriedade. Os mais utilizados
são o MD4 e o MD5, e o SHA.
Vejamos como os message digest podem ser usados para oferecer não-repudiação
e integridade. Frank deseja enviar uma mensagem assinada a seus contatos,
só que agora de uma forma mais eficiente :
-
Frank escreve a mensagem e cria um message digest da mensagem.
-
Frank criptografa o message digest com sua chave privada (ele assina a
mensagem).
-
Ele envia a mensagem e o message digest criptografados a seus contatos
(eniod da assinatura).
-
Os contatos de Frank calculam um novo message digest da mensagem que acabaram
de receber.
-
Em seguida, eles decriptografam o message digest que Frank enviou. Para
isso utilizam a chave pública de Frank.
-
Por fim, eles comparam o message digest que criaram com o que Frank enviou
(verificação da assinatura).
Se os dois message digest forem iguais, isso significa que somente Frank
poderá ter enviado a mensagem. Além disso, a mensagem não
poderia ter sido modificada, pois nesse caso os contatos teriam calculado
um message digest que não corresponderia ao enviado pro Frank.
E finalmante para oferecer confidencialidade, integridade e não
repudiação, devemos combinar criptografia com chave pública
e message digest, Frank deseja enviar uma mensagem secreta assinada para
Andrea :
-
Frank escreve a mensagem e cria um message digest da mensagem.
-
Frank criptografa o message digest com sua chave privada (ele assina a
mensagem).
-
Ao mesmo tempo, Frank codifica a mensagem com base na técnica de
criptografia com chave simétrica utilizando uma chave de sessão
aleatoriamente escolhida.
-
Frank criptografa a chave de sessão com a chave pública de
Andrea.
-
Agora, ele envia à Andrea a mensagem criptografada, o message digest
criptografado e a chave de sessão criptografada.
-
Andrea recebe todos os três itens. Primeiro, ela decriptografa a
chave de sessão usando sua chave privada.
-
Usando a chave de sessão decriptografada, Andrea decriptografa a
própria mensagem.
-
Em seguida, ela calcula seu próprio message digest da mensagem.
-
Agora, ela decriptografa o message digest enviado por Frank. Para isso,
Andrea utiliza a chave pública de Frank.
-
E finalmente, ela compara os dois message digest. Se eles forem iguais,
isso significa que a mensagem não foi alterada e realmente foi enviada
por Frank.
Certificados
:
Como acabamos de ver, a criptografia com chave pública pode
ser usada para proporcionar confidencialidade, integridade não-repudiação.
A assinatura digital exige que o verificador esteja certo de que tem uma
chave pública pertencente à pessoa que assinou a mensagem.
A confiança do verificador na assinatura deverá ser igual
à sua confiança no proprietário da chave pública.
Por exemplo, se um violador quiser forjar documentos eletrônicos,
uma estratégia seria criar um par de chave pública/chave
privada e divulgar a chave pública com o nome de outra pessoa. Quaisquer
documento assinado com a chave privada do violador serão verificados
com a chave pública correspondente - uma chave pública que
tenha sido anunciada como pertencente a outra pessoa.
Existem diversas estratégias para solucionar esse problema. Uma
delas é trocar chaves públicas através de um meio
diret, como uma reunião. Infelizmente, esse método não
funciona bem quando temos muitas pessoas envolvidas. Uma opção
melhor seria a utilização de certificados e de autoridades
de certificação.
Um certificado é um documento digital contendo informações
de identificação e uma chave pública. Em geral, os
certificados têm um formato comum, normalmente baseados no padrão
ITU-T X.509. Mas ainda não podemos ter certeza de que o certificado
é genuíno e não é falso. Uma forma de descobrir
isso é utilizar autoridades de certificação ou
CAs.
Uma autoridade de certificação assina certificados
de chave pública digitalmente. Ao assinar um certificado, a CA garante
sua validade. No entanto um problema persiste : como a chave pública
da CA é distribuída? Também existem muitas estratégias
para esse problema. Em uma delas, se a CA for muito conhecida, como é
o caso do serviço postal americano, ele poderá divulgar amplamente
sua chave pública. Outro método seria que a CA tivesse seu
próprio certificado assinado por outra CA, também conhecida
pelo destinatário. Essa idéia de encadeamento de certificação
pode avançar ainda mais, com várias CAs organizadas em uma
hierarquia onde cada CA subordinada valida sua assinatura com a assinatura
de uma CA mais alta na hierarquia. Obviamente, as CAs de nível mais
alto deverão reverter para o método de divulgação
direta.
Quem oferecerá esses serviços ? . Há muito para
se discutir a respeito de quem deverá manter CAs na Internet. Muitas
organizações, incluindo instituições financeiras,
fornecedores de aplicações e até mesmo o serviço
postal americano expressaram interesse em oferecer serviços de certificação.
Em 1995, com a ajuda de muitos parceiros, a RSA Data Security criou uma
empresa, a VeriSign, inteiramente dedicada ao fornecimento de serviços
de certificação para usuários de chaves públicas.
Em um fututo próximo, provavelmente existirão CAs na Internet,
cada uma com exigências variáveis para comprovar identidade.
Algumas podem exigir que você venha pessoalmente com uma cópia
da sua certidão de nascimento, enquanto outras podem assinar certificados
com a garantia de sua palavra. A questão aqui é que o fato
de um documento ter sido assinado por uma CA não o torna necessariamente
válido.
Questões práticas
no uso da criptografia :
Vejamos algumas questões de gerenciamento relacionadas ao uso
da criptografia:
-
Tamanho da chave - A criptoanálise, a ciência da decodificação
de cifras, se baseia no fatoramento de números grandes. Conseqüentemente,
quanto maior a chave, mais difícil decifrá-la. No entanto,
as empresas que conduzem negócios nos Estados Unidos e no exterior
são limitadas pelas leis americanas à utilização
de chaves de 40 bits em suas aplicações. Quarenta bits já
são o bastante? Depende do que está sendo criptografado;
as chaves RC4 de 40 bits podem ser decifradas com uma certa facilidade.
Portanto, você não vai quere usá-las para criptografar
informações durante um período muito longo. Apesar
de exigir um esforço considerável, a decifração
de uma mensagem criptografada com uma chave RC4 de 40 bits é possivel.
As chaves de 40 bits podem ser seguras para criptografar ordens de compra
ou mensagens de correio eletrônico (que só precisam permanecer
secretas até que o destinatário as receba), mas talvez não
sejam suficientes para proteger segredos vitais para as empresas.
-
Revogação de certificado - O que acontece quando uma
chave privada é comprometida, ou uma chave pública passa
a ser inválida? Nesse caso, os certificados deixam de ser confiáveis,
pois as informações que eles estão certificando não
são mais verdadeiras. Como podemos impedir que os certificados sejam
usados? Muitas autoridades de certificação divulgão
periodicamente listas de certificados que não devem mais ser considerados
válidos, as CRLs (certificate revocation lists). Os certificados
dessas listas podem ter expirados, ou o par de chaves associados ao certificado
pode ter sido decifrado. As CRLs são muito eficientes para verificar
a precisão de um certificado em um determinado momento. No entanto,
as CRLs não lhe dão qualquer garantia de que um certificado
não foi revogado desde sua divulgação. Por essa razão,
muitas organizações estão procurando outras soluções
para lidar com a verificação de certificados.
-
Estrutura de CA - Já falamos sobre CAs e como podem ser "encadeadas"
em hierarquias de certificação. Portanto, as grandes organizações
podem optar por ter dentro delas várias CAs (uma para o departamento
de pesquisa, outra para o departamento de bolsas e assim por diante) e
ter uma única CA de nível mais alto para certificar as CAs
dos departamentos. No entanto, manter vários níveis de CAs
pode ser complicado. Além disso, ter uma única CA na empresa
cria um "único ponto de falha", pois o comprometimento do par de
chaves da CA corporativa pode resultar na perda das chaves de todos os
funcionários da empresa. Outras empresas optam por uma estrutura
plana de CAs, na qual cada CA departamental tem muitas outras CAs parceiras,
que correspondem ao outros departamentos da empresa. É melhor ter
uma hierarquia de CAs, na qual o comprometimento de uma única CA
pode resultar no comprometimento de todos os certificados da empresa, ou
é melhor ter uma estrutura plana, na qual várias CAs devem
ser controladas e devem trocar mensagens umas com as outras?
-
Fazer ou não fazer caução - Esse é um
dos assuntos mais debatidos no que se refere à criptografia. Muitas
empresas afirmam que, como a comunicação dos funcionários
é propriedade da empresa, a organização deverá
ter acesso às chaves dos funcionários, recuperar mensagens
(quando houver desligamento de funcionários ou quando eles perderem
suas chaves, por exemplo). Po outro lado, a maior parte dos defensores
da privacidade é veemente contra essa idéia, citando a emenda
federal que garante os direitos dos funcionários à privacidade.
(E no Brasil, como anda isso?)
-
O que fazer com todas essas informações - O arquivamento
de chaves e de dados criptografados (mensagens de correio eletrônico
criptografadas, ordens de compra assinadas,...) é uma questão
extremamente difícil. Muitas empresas têm de armazenar informações
durante muitos tempo, devido a regulamentos ou outras restrições.
Mas, com freqüência, armazenar mensagens ou ordens de compra
pode envolver muito mais do que simples manutenção de informações.
Considere, por exemplo, o armazenamento de ordens de compras assinadas.
Como as assinaturas só podem ser verificadas com a chave pública
apropriada, todas as chaves públicas (e suas cadeias de certificação)
devem ser guardadas para sempre. Mais uma vez, para grandes empresas, isso
pode ser complicado.
Referências :
-
http://www.penta.ufrgs.br/gere96/segur/cripto_.htm
-
http://www.penta.ufrgs.br/gereseg/kerber2.html
-
Prof. Eduardo Müssnich Barreto (eduardo@cepesc.gov.br)
-
Internet Security for Business ( ISBN 0-471-13752-9 )
-
Computer Security Basics (ISBN 0-937175-71-4)
-
Practical UNIX and Internet Security (ISBN 1-56592-148-8)
-
Maximun Security (ISBN 1-57521-268-4)
-
Firewall and Internet Security (ISBN 0-201-63357-4)
http://www.absoluta.org
---oOo--- verdade@absoluta.org
Copyright © 1998 - 1999 Verdade @bsoluta