Protocolos Seguros

Standard

O começo da internet foi, para dizer o mínimo, inocente. Com o passar do tempo e o aparecimento de aplicativos comerciais percebeu-se a necessidade premente de aumentar o nível de segurança das transações, e acessos à informação, feitos via internet.

A solução óbvia foi criar um conjunto de protocolos para a pilha TCP/IP de forma a garantir a segurança, tanto do acesso, quanto da informação trocada para substituir os protocolos “em claro” que vimos no item quatro. Muitos destes protocolos se baseiam em algoritmos de criptografia e hash.

Criptografia

A palavra criptografia vem das palavras gregas que significam “escrita secreta” (kriptos = escondido, oculto e grifo = grafia, escrita). A criptografia tem uma longa e interessante historia de milhares de anos (TANENBAUM, 1998).

As mensagens a serem criptografadas, conhecidas como texto em claro, são transformadas por uma função que é controlada por uma chave. Em seguida, a saída do processo de criptografia, conhecida como texto cifrado, pode ser utilizado ou transmitido via rede. Presumimos que o inimigo, ou intruso, ouça e copie cuidadosamente o texto cifrado completo. No entanto, ao contrario do destinatário pretendido, ele não conhece a chave para decriptografar o texto e, portanto, conseguirá obter o texto em claro original. A arte de solucionar mensagens cifradas é chamada criptoanalise. A arte de criar mensagens cifradas (criptografia) e a arte de soluciona-las (criptoanalise) são chamadas coletivamente criptologia (TANENBAUM, 1998).

Os algoritmos de criptografia são divididos em dois grandes grupos: Os de chave pública e os de chave privada.

Algoritmos de chave privada

Estes são os algoritmos convencionais de criptografia, onde a mesma chave secreta é utilizada tanto para cifrar como para decifrar uma mensagem, devendo ser conhecida por ambos os lados do processo. Este é o grande problema do método, pois a chave tem de ser entregue aos participantes de modo seguro, e as transações só podem ser realizadas depois disso. Como cada par de participantes deve ter uma chave própria, o número de chaves necessárias para comunicação segura entre muitos participantes cresce combinatoriamente, com agravante adicional de que todas essas chaves são secretas e devem ser protegidas adequadamente. Ou seja, um participante do ciclo de criptografia deverá ter a chave de todos os outros para se comunicar com cada um deles. Isso inviabiliza o uso destes algoritmos isoladamente em certas aplicações (LAUREANO, 2005).

Por sua vez, os algoritmos de chave privada (ou simétrica) são divididos em duas categorias (LAUREANO, 2005):

  • Algoritmos de Bloco – Cifram os dados a partir de blocos, ou seja, se o dado a ser cifrado é um texto, esse texto será dividido em blocos e a criptografia será aplicada em cima de cada bloco. Um problema com essa cifragem é que se o mesmo bloco de texto simples aparecer em dois lugares, ele encriptará o mesmo texto, gerando assim, um padrão de repetição.
  • Algoritmos de Fluxo – Cifram os dados byte a byte. O dado a ser criptografado não é cifrado por blocos, como o anterior e sim, serialmente. A informação vai sendo criptografada do inicio ao fim, sem separações.

Existem, atualmente, diversos algoritmos de chave privada em uso. Entre eles podemos destacar:


  • DES – o Padrão para Criptografia de Dados (Data Encryption Standard) foi adotado como padrão pelo governo dos EUA em 1977. O DES é um algoritmo de bloco que usa uma chave de 56 bits e tem diferentes modos de operação, dependendo da finalidade com que é usado.
  • Triple DES – É uma maneira de tornar o DES pelo menos duas vezes mais seguro, usando o algoritmo de criptografia três vezes, com três chaves diferentes. Usar o DES duas vezes com duas chaves diferentes não aumenta tanto a segurança quanto se poderia pensar devido a um tipo teórico de ataque conhecido como meet-in-the-midle (encontro no meio), com o qual o atacante tenta cifrar o texto limpo simultaneamente com uma operação do DES e decifrar o texto com outra operação, até que haja um encontro no meio.
  • IDEA – O International Data Encryption Algorithm (IDEA – Algoritmo de Criptografia de Dados Internacional) foi desenvolvido em Zurique, na Suíça, por James L. Massey e Xuenjia Lai, e publicado em 1990. O IDEA usa chave de 128 bits, e é bastante forte.
  • RC2 – Este algoritmo de bloco foi desenvolvido originalmente por Ronald Rivest, e mantido em segredo pela RSA Data Security. O RC2 é vendido com uma implementação que permite a utilização de chaves de 1 a 2048 bits.
  • RC4 – Inventado em 1987 pela RSA, nunca teve o seu algoritmo de funcionamento interno publicado. Esse segredo possuía interesses financeiros e não de segurança. A empresa esperava que o mantendo em segredo, ninguém mais o implementaria e o comercializaria. É uma cifragem muito utilizada hoje em dia, até fazendo parte no protocolo de comunicação SSL (Security Socket Layer).
  • RC5 – Este algoritmo de bloco foi desenvolvido por Ronald Rivest e publicado em 1994. O RC5 permite que o tamanho da chave, o tamanho dos blocos de dados e o número de vezes que a criptografia será realizada seja definida pelo usuário.
  • Blowfish – É um algoritmo de criptografia em bloco, rápido, compacto e simples, inventado por Bruce Schneier. O algoritmo permite a utilização de uma chave de tamanho variável, de até 448 bits, e é otimizado para executar em processadores de 32 ou 64 bits. Não é patenteado e foi colocado em domínio público.” (LAUREANO, 2005)

Algoritmos de chave pública

São algoritmos que fazem uso de duas chaves diferentes, uma em cada extremidade do processo. As duas chaves são associadas através de um relacionamento matemático, pertencendo a apenas um participante, que as utilizará para se comunicar com todos os outros de modo seguro. Essas duas chaves são geradas de tal maneira que a partir de uma delas não é possível calcular a outra a um custo computacional viável, possibilitando a divulgação de uma delas, denominada chave pública, sem colocar em risco o segredo da outra, denominada chave secreta ou privada (LAUREANO, 2005). São chamados algoritmos de chave pública por que, em geral, uma das chaves é disponibilizada em um servidor público, sem restrição de acesso, de forma que qualquer usuário possa ter acesso a esta chave.

Os principais algoritmos de chave pública em uso são

“Diffie-Hellman – Um sistema para troca de chaves criptográficas entre partes. Na verdade, não é um método de criptografia ou decriptografia, é um método para troca de chave secreta compartilhada por meio de um canal de comunicação público. Com efeito, as duas partes estabelecem certos valores numéricos comuns e cada uma delas cria uma chave. As transformações matemáticas das chaves são intercambiadas. Cada parte calcula então uma terceira chave (a chave de sessão) que não pode ser descoberta facilmente por um atacante que conheça os valores intercambiados.

ElGamal – Batizado com o nome de seu criador, Taher ElGamal, é um sistema criptográfico de chave pública baseado no protocolo de troca de chaves de Diffie- Hellman. O ElGamal pode ser utilizado para criptografia e assinatura digital, de forma semelhante ao algoritmo RSA.

DSS – O Digital Signature Standard (DSS – Padrão de assinatura Digital) foi desenvolvido pela Agência Nacional de Segurança (NSA), e adotado como Padrão Federal de Processamento de Informação (FIPS) pelo Instituto Nacional de Padrões Tecnologia (NIST) dos EUA. O DSS é baseado no Algoritmo de Assinatura Digital – DSA (Digital Signature Algorithm) – que permite a utilização de qualquer tamanho de chave, embora no DSS FIPS só sejam permitidas chaves entre 512 e 1024 bits. O DSS só pode ser usado para a realização de assinaturas digitais, embora haja implementações do DSA para criptografia.

RSA – RSA é um sistema criptográfico de chave pública conhecido, desenvolvido por Ronald Rivest, Adi Shamir e Leonard Adleman, então professores do MIT (Instituto de Tecnologia de Massachusets). O RSA utiliza criptografia em blocos e possui uma segurança muito forte, devido ao alto poder computacional necessário para se tentar quebrar uma chave RSA. Pode tanto ser usado para cifrar informações como para servir de base para um sistema de assinatura digital. As assinaturas digitais podem ser usadas para provar a autenticidade de informações digitais. A chave pode ser de qualquer tamanho, dependendo da implementação utilizada.” (LAUREANO, 2005)

Funções Hash

Hash é uma palavra em inglês que significa cortar em pequenos pedaços. Este substantivo utilizado para se referir aos passos seguidos pelos primeiros algoritmos de hash tornou-se sinônimo de funções matemáticas capazes de gerar um número único para um determinado conjunto de dados sem que exista a possibilidade de reversão. Ou seja, uma vez que o número hash tenha sido obtido não é possível relacioná-lo ao texto em claro original e cada texto em claro provoca a existência de um e somente um número hash.

As funções de hash também são chamadas de funções de mão única. Os esquemas de criptografia e descriptografia são exemplos de funções bidirecionais (TANENBAUM, 1998).

“O hash é uma soma de verificação criptográfica ou um código de integridade de mensagem que cada parte deve calcular para verificar a mensagem. Por exemplo, o computador que está enviando os dados utiliza a função de hash e uma chave compartilhada para calcular a soma de verificação da mensagem, incluindo-a com o pacote. O computador que está recebendo os dados deve executar a mesma função de hash na mensagem recebida e na chave compartilhada e compará-la com a original (incluída no pacote do remetente). Se a mensagem tiver sido alterada quando estava em trânsito, os valores de hash serão diferentes e o pacote será rejeitado.” (MICROSOFT TECHNET, 2010)

Uma boa função de hash é aquela cuja operação reversa é difícil ou impossível de obter. Suas finalidades são diversas, tais como (TANENBAUM, 1998):

  • Tabelas hash: utilizadas no desenvolvimento para definir privilégios de acesso a usuários e serviços;
  • Rainbow tables: tabelas construídas para a recuperação de senhas;
  • Fingerprinting: técnicas utilizadas para se verificar a integridade e autenticidade de arquivos de computador;
  • Correção de erros: por meio das verificações de redundância presentes em determinadas transmissões de dados; e
  • Criptografia: proteção de informações mediante a aplicação de funções criptográficas.

As funções de hash também são utilizadas em “assinaturas digitais” e em diversos mecanismos de autenticação (LAUREANO, 2005). Dentre as diversas funções de hash, destacam-se algumas:

  • MD5: já foram identificadas falhas no algoritmo desta função, que entrega 128 bits em sua saída. Ainda assim o MD5 é a função de hash com maior número de usuários na internet, geralmente para confirmar a integridade de um determinado arquivo.
  • SHA-1: especificações do governo norte-americano, por meio de sua agência de segurança (a NSA. O termo “SHA” significa secure hash algorithm (algoritmo de hash seguro).

Assinatura Digital

A autenticidade de muitos documentos legais, financeiros e outros documentos e determinada
pela presença de uma assinatura autorizada. No mundo real isso pode ser feito em um cartório. Para que os sistemas de mensagens computadorizadas possam substituir o transporte físico, e a armazenagem, de documentos, deve-se encontrar um método que permita assinar os documentos de um modo que não possa ser forjado (TANENBAUM, 1998).

“O problema de se criar um substituto para as assinaturas escritas a mão e muito difícil. Basicamente, necessita-se de um sistema através do qual uma parte possa enviar uma mensagem “assinada” para outra parte de forma que:

  1. O receptor possa verificar a identidade alegada pelo transmissor.
  2. Posteriormente, o transmissor não possa repudiar o conteúdo da mensagem.
  3. O receptor não tenha a possibilidade de inventar ele mesmo a mensagem.” (TANENBAUM, 1998)

Para atender estas necessidades foi criado um sistema de assinatura digital que consiste de uma estrutura de autenticação e criptografia e que pode ser utilizada para assinar documentos digitais com segurança. A assinatura digital é um processo que utiliza basicamente a criptografia de chave publica, ou assimétrica, e funções de hash e tem como principal propósito garantir o sigilo, integridade e autenticidade dos documentos envolvidos em transações eletrônicas. As assinaturas digitais fazem parte do sistema de certificação digital que reproduz todo o processo físico de criação segura, autenticação e assinatura de documentos.

Protocolos Seguros

Utilizando a ciência da criptografia (hash, assinatura digital), com o objetivo de garantir a informação e transações realizadas na internet os órgãos padronizadores modificaram a maior parte dos protocolos da camada de aplicação da pilha TCP/IP de forma a incluir uma camada extra a camada de segurança, como podemos ver na Tabela

Aplicação (HTTP)

Segurança (SSL)

Transporte (TCP)

Rede (IP)

Enlace (PPP)

Física

Tabela 6 – Pilha TCP/IP Segura (TANENBAUM, 1998)

SSL é a abreviação em inglês de Secure Socket Layer, ou camada de soquete segura. Foi, mais tarde, substituído pelo TSL (Transporte Secure Layer, ou segurança da camada de transporte) sendo este último a renomeação da versão 3.1 do primeiro, o SSLv3.1.

“A SSL constrói uma conexão segura entre dois soquetes, incluindo: 1. Negociação de parâmetros entre cliente e servidor; 2. Autenticação mutua de cliente e servidor; 3. Comunicação secreta; 4. Proteção da integridade dos dados.” (TANENBAUM, 1998)

Em resumo, a função do SSL é construir a conexão de forma segura e evitar ataques do tipo “homem no meio” criptografando as mensagens entre o cliente e o servidor. Quando o HTTP e usado sobre a SSL, ele se denomina HTTPS (Secure HTTP), embora seja o protocolo HTTP padrão. Às vezes, ele esta disponível em uma nova porta (443), em lugar da porta padrão (8 0). A propósito, a SSL não se limita ao uso apenas com navegadores da Web, mas essa e sua aplicação mais comum (TANENBAUM, 1998). O mesmo pode ser dito do SMTPS e do IMAPs, etc. No caso do HTTPS as especificações foram definidas na RFC 2818, já o SMTPS foi definido na RFC 2821 e o IMAPS 2595.

As especiações desta camada segura na pilha TCP/IP foram desenvolvidas de forma a permitir total transparência para o usuário final. No caso do HTTPS, por exemplo, tudo o que o usuário final notará será a mudança do nome do protocolo na URL e, em alguns casos, um pequeno cadeado na barra de status do navegador. As transações criptografadas, a troca de senhas, a autenticação de assinatura e todo o processo de segurança se dão de forma transparente. Exceto quando a unidade certificadora, responsável por validar a assinatura digital, não é automaticamente reconhecida pelo navegador.

Bibliografia

TANENBAUM, A. S. Redes de Computadores. 3ª. ed. São Paulo: Editora Campus, 1998.