<< Introdução | Modelo de Operação >> |
2. Criptografia Básica
Seja para trafegar dados,
autenticar os nós ou verificar informações, um componente
comum em qualquer conexão segura é um segredo. Somente utilizando-se
de informações restritas a pelo menos uma das partes garante-se
que intrusos não possam comprometer uma conexão, já que
os algoritmos de criptografia são públicos, portanto a forma de
embaralhar/desembaralhar a informação pode ser realizada por qualquer
um que detenha domínio do algoritmo usado na transmissão.
A forma mais simples ( e a mais
usada) de manter uma conexão segura é escolher um segredo (uma
chave secreta) e configurar dois nós para criptografar seus dados usando
a mesma. Esta criptografia é chamada de simétrica.
O ponto crítico da criptografia
simétrica encontra-se na premissa de que os dois nós acordaram
sobre uma chave a ser usada e somente eles possuem conhecimento sobre esta chave.
Em transações onde os nós não podem obedecer a esta
premissa, que representam grande parte das transações realizadas
via Internet, faz-se necessário o uso de algum algoritmo que não
necessite de uma chave pré-estabelecida entre as duas partes. A solução
para este problema foi dada pela criptografia assimétrica (algoritmo
de chave pública), que possibilitou a explosão das transações
por intermédio das redes de computadores.
Como citado acima, a criptografia
baseada em chaves simétricas, fundamenta-se em chaves secretas pré-definidas
pelas partes dispostas a manter uma conexão segura, que deverão
garantir o sigilo desta chave, com a pena de comprometer toda a segurança
dos dados.
Os algoritmos de encriptação
dos dados (também chamados de ciphers) são usualmente operações
matemáticas reversíveis, que combinam os dados de entrada com
a chave secreta nas operações. A qualidade da encriptação
está diretamente ligada ao tamanho da chave usada, já que quanto
maior o tamanho da chave, maior o numero de chaves possíveis, o que dificulta
a quebra da criptografia por força bruta. Se por exemplo, um algoritmo
de encriptação por chave secreta utilizar uma chave de 2 bits,
ele pode ser facilmente quebrado, pois basta um intruso testar no máximo
4 diferentes chaves até descobrir o segredo da transmissão.
Por realizar operações
matemáticas relativamente simples, o tempo computacional gasto pelos
algoritmos de chave simétrica é satisfatoriamente curto para ser
implementado sem adicionar sobrecarga nos sistemas físicos atualmente
no mercado.
A inconveniência do pré-estabelecimento
de uma chave secreta exigido pelo algoritmo de chave simétrica é
contornada utilizando-se a criptografia assimétrica.
Neste modelo de criptografia,
duas chaves são utilizadas para realizar o processo de encriptação/desencriptação
, o que uma encriptar somente a outra pode desencriptar. Desta forma, uma parte
querendo estabelecer uma conexão segura com outra, deverá gerar
as duas chaves: a chave pública e a chave privada. A chave pública
pode ser livremente distribuída, já que de nada adianta a chave
pública sem a privada para completar a encriptação/desencriptação.
Como utiliza-se de algoritmos reversos para desencripar mensagens, o tempo computacional utilizado pelos algoritmos de criptografia assimétrica é muito elevado, tornando-se inviável o uso de uma comunicação intensa de dados utilizando-se estes algoritmos.
O protocolo TLS e SSL combinam as criptografias simétrica e assimétrica, para contornar o problema do segredo pré-estabelecido da simétrica e o alto gasto computacional da assimétrica. Nestes protocolos, a solução consiste em uma etapa inicial de negociação (handshake), onde utiliza-se de criptografia assimétrica para autenticar os nós e combinar uma chave secreta para uso na criptografia simétrica. Terminada esta etapa, o algoritmo por chave pública garante que a negociação da chave secreta foi feita em um canal seguro e que somente as duas partes a conhecem, portanto pode-se trabalhar durante todo o restante da conexão utilizando-se os algoritmos de chave simétrica, tornando a transmissão computacionalmente viável.
Nos tópicos acima, foi apresentado um problema gerado pelos algoritmos de criptografia por chave simétrica, que necessitavam de um gerenciamento prévio das chaves utilizadas na conexão. Foi apresentada também uma solução utilizando-se algoritmos de chave pública, porém uma questão ainda não foi resolvida: como acreditar que o nó que envia a chave pública é realmente o nó que se espera que seja?
Este é um dos pontos onde os protocolos que utilizam-se de chaves públicas para garantir segurança nas conexões ficam mais sucetíveis a ataques, já que de forma alguma o protocolo pode controlar por quem (na vida real) foi emitida aquela chave pública.
A solução para esta vulnerabilidade foi a criação de certificados de autenticidade. Ao invés de mandar somente uma chave pública para o nó a ser estabelecida uma conexão segura, uma parte deve enviar um certificado, que contém, além da chave pública, outras informações que identificam aquele nó como a entidade esperada. Neste ponto, é confiada à parte que recebe o certificado a checagem dos dados existentes no certificados, que garantem que ela realmente estabelecerá uma conexão com quem ela deveria.
Um outro problema surge com o uso dos certificados: se alguém pode emitir certificados para a empresa XYZ, por que eu não posso emitir um certificado para mim chamando-me de XYZ? Novamente, necessitamos de intervenção nesta etapa de autenticação, onde a solução adotada foi a criação de entidades certificadoras. Empresas ou organizações que emitem certificados e garantem a autenticidade dos dados neles contidos. Portanto, se eu acredito que a entidade certificadora da UFRJ é confiável, e recebo um certificado da empresa XYZ com uma assinatura digital da certificadora da UFRJ, eu posso confiar na chave pública que recebi e dar continuidade à transmissão.
<< Introdução | Modelo de Operação >> |