Descansando a Cabeça

Monday, September 19, 2011

VPN, Algoritmos de Criptografia e Hash

Antes de continuar, eu quero que fique claro que eu continuo liso, ferrado e fudido por causa de duas questões envolvendo VPN e Algoritmos de Hash. Eram as duas questões que faltavam para eu ter passado.


Tem uns que defendem que a segurança deve estar na camada de aplicação, nesse caso todas as aplicações que necessitassem de segurança teriam que ser reescritas, isso provavelmente foi ideia de algum Engenheiro de Software, que na cabeça dele bastava colocar uma interface UML e as classes implementassem essa interface e pronto.

Tem outros que defendem que essa segurança deva ser implementada a nível de camada de transporte. De fato, temos o TLS (antigo SSL) que é implementado nessa camada. Quem acessa, por exemplo, o GMAIL faz uso desse protocolo, através do HTTPS (HTTP Seguro), pela porta 443.

Já outros defendem que essa segurança seja implementada a nível de rede. Isto é, valendo-se do próprio datagrama IP.

IPSec

Um desses protocolos de cama de rede, utilizados para segurança, é o IPSec (IP Seguro). Ele foi projetado para promover Autenticação, Integridade de Confiabilidade nesse nível de camada.

Uma coisa curiosa sobre o IPSec, capaz de uma banca medíocre usar isso como pegadinha:
IPSec foi primeiro desenvolvido para IPv6, depois... como o negócio não andou rápido, eles mudaram adaptaram para também ser utilizado em IPv4

Devemos entender que criptografia de chave assimétrica é mais seguro porque permite a troca de chaves no instante em que se inicia a comunicação, porém a criptografia de chave simétrica é mais rápida, porque os participantes já dispõe da chave.

Com isso em mente é só escolher um algoritmo de criptografia simétrico, tanto faz, para isso o IPSec é transparente. Podemos escolher o DES, 3DES, AES, RC4...


Para fazer essa troca da chave simétrica o IPSec utiliza o protocolo IKE (Internet Key Exchange).

Vamos rezar: IPSEC É ORIENTADO A CONEXÃO. AMÉM.

Sim e o que isso quer dizer? O protocolo IP não é orientado a conexão... por que não? Porque não entrega os pacotes em ordem. Quem faz isso é o TCP. O IP é tão desmantelado que os pacotes nem mesmo precisam ir pelo mesmo caminho, podem ser roteados por caminhos diferentes. Nesse meio tempo muitos pacotes podem se perder em algum buffer de roteador, podem ser descartados... etc.

Acontece que o IPSec usa uma chave simétrica por algum tempo e troca por outra chave, então ele precisa mandar os pacotes em ordem para saber com que qual chave cada pacote foi gerado.

O IPSec tem dois cabealhos, que  é o AH (Autentication Header) e o ESP (Encapsulation Security Payload)

O AH é capaz de fornecer autenticação e checagem de integridade, por meio do campo HMAC ( Hashed Message Authentication Code)

HMAC => Hash da mensagem do pacote, esse hash é criptografado com a chave simétrica da comunicação.

MODO TRANSPORTE.

Usando apenas o AH, o IPSec não é capaz de fornecer Confidencialidade pois os dados em si não são criptografados. Usando o AH  o IPSec vai impedir ataques como o homem-do-meio, e vai impedir também que alguém adultere os pacotes IPs.

Se for usado o ESP então o conteúdo do pacote IP é criptografado, sendo que o ESP ainda garante Integridade de Autenticidade.

Se for usado o MODO TUNEL, então TODO O PACOTE IP é colocado dentro de OUTRO PACOTE IP. (SIM, FOI ESSA A QUESTÃO QUE EU ERREI).



VPN

A VPN é uma forma de se criar uma espécie de túnel virtual seguro dentro de uma rede insegura, como a Internet é. Os dados que trafegam por essa VPN são criptografados.

Digamos que duas corporações queiram trocar dados seguros entre si, então uma forma alternativa seria construir um link dedicado físico entre as duas, porém tal projeto pode ser inviável.



De fato, as LANs locais da minha empresa podem se conectar as LANs locais de sua empresa pela VPN, de modo seguro.

As três aplicações mais conhecidas da VPN são:

  • Acesso remoto via internet
  • Conexão de LANs via internet
  • Conexão de computadores em uma INTRANET.
Acesso Remoto via Internet

 

Pode-se utilizar VPN também para ocultar uma rede que deve ser protegida até mesmo de dentro da organização, colocando esse rede atrás de um servidor de VPN. Porém, mesmo fora da rede, alguém com permissão de acesso pode entrar nessa rede VPN.





Para isso as VPNs devem dispôr de formas de AUTENTICAÇÃO do usuário, além de AUDITORIA, para saber quem acessou o quê, quando e por quanto tempo.

Note que em uma VPN os endereços IPs reais da rede privada não são divulgados, toda a comunicação externa deve ser realizada por uma máquina que mascare os outros IPs.

Deve-se também fazer uma troca periódica das chaves pois há sempre a possibilidade de quebra de chave por força bruta. Lembre-se que o IPSec utiliza chaves simétricas durante a comunicação e as troca regularmente de modo que os pacotes IP que trafegam na rede são enviados em ordem (por isso o IPSec é orientado a conexão) assim o receptor tem como saber que chave usar para qual pacote.\
Tunelamento é a habilidade de se encapsular um protocolo dentro do outro, como por exemplo IPX (Ip Exchange) dentro do TCP/IP.

Tunelamento

Esse tunelamento pode acontecer nas camadas 2 e 3 do modelo OSI, que são Enlace e Rede.


Tunelamento de nível 2 -  Alguma coisa dentro do Enlace.

Digamos que uma organização só disponha de um enlace de internet a rádio para transmitir seus dados para sua matriz, então pode-se criar uma VPN que pegue os pacotinhos IP e coloque dentro dos quadros PPP ( Point-to-Point Protocol é um protocolo de camada de enlace que permite a troca de dados entre dois dispositivos sobre um único canal de comunicação).

Alguns protocolos que utilizam essa abordagem:
  • PPTP (Point-to-Point Tuneling Protocol ) , da Micro$oft que permite o trafego IP, IPX e NETBEUI sejam criptografados e enviados por frames
  • O L2TP ( Layer 2 Tuneling Protocol ) permite que todo o trafego IP, IPX e NETBEUI seja tunelado em protocolos de camada de enlace do X.25, Frame Relay e ATM.
  • O L2F (Layer 2 Fowarding) da CISCO é utilizado para VPNs discadas.

Tunelamento de nível 3 -  (IP sobre IP).

Pega o IP e manda dentro de outro pacote IP, como o IPSec faz.



Algoritmos de Criptografia

A criptografia hoje em dia é utilizada basicamente para promover:

a) Autenticidade: você é quem diz ser?
b) Integridade: Permitir que o receptor detecte se a mensagem foi alterada ou corrompida no caminho.
c) Confidencialidade:  &$*#&$#(%#)%*#($#$*#($*#$#$*
d) Incontestabilidade: "esse dinheiro não é meu..."  (impedir que alguém negue que a mensagem foi enviada por ela)

Os algoritmos geralmente são públicos, o segredo não está aí, o segredo está nas chaves.

Os algoritmos de criptografia podem ser divididos em algoritmos de criptografia simétrica, assimétrica e algoritmos de hash.

Algoritmos de Hash

São os mais simples de entender. Pegue uma mensagem e gere uma esculhambação em cima dela, quanto mais esculhambado melhor, mas essa esculhambação tem que ser determinística, isso é, a mesma mensagem tem que gerar a mesma esculhambação, e essa esculhambação tem que ter um tamanho fixo.


Vish, é isso que cai em concurso, decorar os tais tamanhos fixos de MD4, MD4, SHA-1.

A esculhambação é também chamada de digest. É só lembrar da Reads Digest's uma revista pequenininha que só tinha notícia mentirosa.

Ah, você tem que saber que o negócio unidirecional, uma vez que se faça o hash da mensagem e se gere o digest não é possível recuperar a mensagem original.

Sim então vamos aos tais tamanhos dos digests dos algoritmos de hash.

MD4 => 128 bits
MD5 => (MD4 caducou) 128 bits
SHA-1 => ( 160 bits)
SHA-2 ( na verdade um conjunto de SHA's com pequenas variações, como o tamanho do digest)
SHA-224 =:> 224 bits
SHA-256 => 256 bits
SHA-512 => 512 bits


Algoritmos de Criptografia Simétrica

Cifra de Cesar => O mais paia de todos. Consiste apenas em colocar a letra atual mais alguma constante, digamos, o que é A vira B, o que é B vira C...

Cifra Monoalfabética => Mapeia uma letra no alfabeto atual em uma letra em outro alfabeto. Toda criança já passou por essa fase, de escrever um código cifrado baseado em substituição simples de letra, foi assim que eu peguei o caderno do meu vizinho e descobri que ele era gay.

Cifra Polialfabética => Está mais para a cifra de César do que para a cifra Monoalfabética... Ou seja, essa constante que a letra vai ser adicionada depende da posição do texto. Então trata-se de uma variável.

Mas isso aí é passado. 

Hoje se usa:

DES => Usa uma chave de 56 bits e cifra blocos de 64 bits. Utilizado com o TLS.

3-DES=> Evolução do DES, porém mais lento. Chaves de 168 bits.

AES => chaves de 128, 192 e 256 bits.

RC2 e RC4 => Podem substituir facilmente o DES, porém são mais rápidos.

IDEA => Muito bom, chaves de 128 bits, porém é patenteado.

BlowFish => Velho, chaves de 1 até 448 bits.

RC5 => chaves de 128 a 256 bits.

Serpent =>  Chaves de 128 a 256 bits.

TWOFISH => chaves de 128 a 256 bits.

SERPENT => chaves de 128 a 256 bits.

RIJNDAEL => chaves de 128 a 256 bits.
 


Algoritmos de Criptografia Assimétrica

Diferente dos algoritmos de chave simétrica, cuja chave é usada para criptografar e descriptografar, os algoritmos de chave assimétrica precisam de duas chaves. 

Eu fico com a chave privada e te dou a pública.

Se você quiser me mandar uma mensagem então criptografe com a chave pública.

Nesse caso, SOMENTE a chave privada é capaz de descriptografar a mensagem.

Pode ser ao contrário também, eu criptografo uma mensagem com uma chave privada, que continua a ser privada... e quem tem a chave pública é que descriptografa. Esse é o princípio da ASSINATURA DIGITAL, ou seja, se a pessoa consegue, com a minha chave pública, recuperar uma mensagem então essa mensagem só pode ter sido enviada por mim. Isso é o Não-repúdio ou ainda INCONTESTABILIDADE.

Alguns algoritmos de chave assimétrica:

RSA ,  El Gamal e  Rabin.

No comments:

Post a Comment