2
Apresentação
Seja bem-vindo à apostila de Conceito e Estrutura de Redes de Computadores!
Essa apostila compõe o material didático da disciplina de Segurança de Dados e de Informação, do Curso Técnico de Redes de Computadores, da Escola Técnica Estadual Governador Eduardo Campos.
Espero que esse material possa contribuir para o seu aprendizado. É válido ressaltar que a ideia desta apostila não é esgotar qualquer assunto abordado, e sim, permitir que busquem informações adicionais de maneira consciente e organizada.
Todo o assunto neste material foi devidamente selecionado de livros e de fontes confiáveis da internet, juntamente com contribuições da minha parte. Busquei “enxugar” o conteúdo o máximo possível, focando nos principais pontos de cada tópico. Lembrando que vocês podem (e devem) estudar também através de outras mídias. Pesquisem!
Quaisquer dúvidas podem ser enviadas via e-mail ou redes sociais. Bons estudos!
3
Sumário
Capitulo 1 ... 6
1. Segurança lógica ... 6
1.1. Estrutura básica de segurança ... 6
Capitulo 2 ... 12
2.1. Criptografia ... 12
2.2. O papel da criptografia ... 12
2.3. Tipos de Criptografias ... 14
2.4. Segurança dos sistemas criptográficos ... 33
2.5. As maiores falhas nos sistemas criptográficos ... 36
2.6. Os ataques aos sistemas criptográficos ... 37
2.7. Protocolos seguros ... 38
Capitulo 3 ... 50
3.1. Definição e função do firewall ... 50
Capitulo 4 ... 80
4.1. INTRODUÇÃO ... 80
4.2. Definição de ataques a computadores ... 81
4.3. Conceitos ... 81 4.4. CLASSIFICAÇÃO ... 86 4.5. TIPOS DE ATACANTES... 87 4.6. ACESSO ... 88 4.7. Resultados... 89 4.8. Ferramentas ... 90 Evitando um ataque ... 93 Linha do tempo ... 98 Capitulo 5 ... 101
5.1 Controles de Acesso, o que são? ... 101
4
5.3 Recursos a serem protegidos ... 101
5.4 O que os controles de acesso lógico pretendem garantir em relação à segurança de informações? ... 103
5.5 Identificando e autenticando o usuário ... 103
5.6 Projetado um processo de logon para ser considerado eficiente .. 104
5.7 Identificação do usuário ... 104
5.8 Autenticação do usuário ... 105
5.9 Orientando os usuários em relação às senhas ... 105
5.10 Senhas que devem ser evitadas ... 106
5.11 Escolhendo uma boa senha ... 107
5.12 Concessão de senhas aos usuários ... 107
5.13 Controle de acesso físico ... 108
5.14 Outras formas de autenticação do usuário, além do uso de senhas 109 5.15 Sistemas biométricos ... 109
Capitulo 6 ... 115
6. Introdução aos sistemas de detecção de intrusões ... 115
6.1 Técnicas de detecção ... 116
6.2 As diferentes ações IDS ... 118
6.3 Os desafios IDS ... 119
7. Redes sem fio ... 119
7.1. Evolução e mudanças ... 120
7.2 Características de redes sem fio ... 122
7.3 Segurança em redes sem fio ... 124
7.4 Bluetooth ... 125
7.5 Histórico ... 126
7.6 Arquitetura e protocolos do Bluetooth ... 127
5
7.8 Arquitetura de segurança do Bluetooth ... 132
7.9 WLAN ... 135
7.10 Padrão IEEE 802.11 ... 140
6
Capitulo 1
1. Segurança lógica
1.1. Estrutura básica de segurança
Neste mundo virtual da internet, muitos dos paradigmas, problemas e soluções do mundo real também se aplicam. Assim como no mundo real, onde existem propriedades privadas e organizações de comércio com dependências de acesso público (lojas), no mundo virtual existem máquinas de usuários (estações) e servidores de organizações, respectivamente. Assim como no mundo real, as propriedades e organizações virtuais necessitam de proteção e controle de acesso. Confiamos plenamente que você, leitor, não sai de casa sem se certificar de que as portas, janelas e o portão estejam trancados. Da mesma forma, uma loja na cidade é de acesso público, no sentido de qualquer pessoa poder entrar em suas dependências por ser potencialmente um cliente; porém, dependências internas da loja são vedadas a esses clientes em potencial.
Os mesmos critérios de segurança devem ser observados no mundo virtual, por meio de medidas estritas de segurança. Alguns paralelos interessantes são:
Firewalls: Equivalentes ao controle de acesso na loja real, por intermédio de porteiros, vigias, limites físicos e portas.
Política de segurança: Equivalente ao modelo de conduta do cidadão visitante na loja e de procedimentos por parte dos funcionários para garantir o bom comportamento social dos visitantes e da integridade do patrimônio da loja.
Separação entre rede pública (servidores externos) e rede interna: equivalente à separação entre a parte pública da loja, onde os visitantes circulam, e a parte privada, onde somente os funcionários transitam.
Entretanto, as pessoas e organizações no mundo virtual interagem de várias maneiras, e o modelo de segurança mencionado anteriormente se mostra
7 insuficiente para tratar da complexidade das comunicações possíveis no mundo virtual, fruto dos avanços tecnológicos.
A necessidade de segurança é um fato que vem transcendendo o limite da produtividade e da funcionalidade. Enquanto a velocidade e a eficiência em todos os processos de negócios significam uma vantagem competitiva, a falta de segurança nos meios que habilitam a velocidade e a eficiência pode resultar em grandes prejuízos e falta de novas oportunidades de negócios.
O mundo da segurança, seja pensando em violência urbana ou em hackers, é peculiar. Ele é marcado pela evolução contínua, no qual novos ataques têm como resposta novas formas de proteção, que levam ao desenvolvimento de novas técnicas de ataques, de maneira que um ciclo é formado. Não é por acaso que é no elo mais fraco da corrente que os ataques acontecem. De tempos em tempos os noticiários são compostos por alguns crimes ‘da moda’, que vêm e vão. Como resposta, o policiamento é incrementado, o que resulta na inibição daquele tipo de delito.
Os criminosos passam então a praticar um novo tipo de crime, que acaba virando notícia. E o ciclo assim continua. Já foi comprovada uma forte ligação entre sequestradores e ladrões de banco, por exemplo, na qual existe uma constante migração entre as modalidades de crimes, onde o policiamento é geralmente mais falho.
Esse mesmo comportamento pode ser observado no mundo da informação, de modo que também se deve ter em mente que a segurança deve ser contínua e evolutiva. Isso ocorre porque o arsenal de defesa usado pela organização pode funcionar contra determinados tipos de ataques; porém, pode ser falho contra novas técnicas desenvolvidas para driblar esse arsenal de defesa.
Alguns fatores podem ser considerados para que a preocupação com a segurança contínua seja justificada:
a. Entender a natureza dos ataques é fundamental: é preciso entender que muitos ataques são resultado da exploração de vulnerabilidades, as quais passam a existir devido a uma falha no projeto ou na implementação de um protocolo, aplicação, serviço ou sistema, ou ainda devido a erros de configuração e administração de recursos
8 computacionais. Isso significa que uma falha pode ser corrigida, porém novos bugs sempre existirão;
b. Novas tecnologias trazem consigo novas vulnerabilidades: é preciso ter em mente que novas vulnerabilidades surgem diariamente. Como novas tecnologias e novos sistemas são sempre criados, é razoável considerar que novas vulnerabilidades sempre existirão e, portanto, novos ataques também serão sempre criados. As redes sem fio (wireless), por exemplo, trazem grandes benefícios para as organizações e os usuários, porém trazem também novas vulnerabilidades que podem colocar em risco os negócios da organização;
c. Novas formas de ataques são criadas: a própria história mostra uma evolução constante das técnicas usadas para ataques, que estão cada vez mais sofisticadas. A mistura de diferentes técnicas, o uso de tecnologia para cobrir vestígios a cooperação entre atacantes e a criatividade são fatores que tornam a defesa mais difícil do que o habitual;
d. Aumento da conectividade resulta em novas possibilidades de ataques: a facilidade de acesso traz como consequência o aumento de novos curiosos e também da possibilidade de disfarce que podem ser usados nos ataques. Além disso, novas tecnologias, principalmente os novos protocolos de comunicação móvel, alteram o paradigma de segurança. Um cenário onde os usuários de telefones celulares são alvos de ataques e usados como porta de entrada para ataques a uma rede corporativa, por exemplo, é completamente plausível;
e. Existência tanto de ataques direcionados quanto de ataques oportuníssimos: apesar de a maioria dos ataques registrados ser oportunista, os ataques direcionados também existem em grande número. Esses ataques direcionados podem ser considerados mais perigosos, pois, existindo a intenção de atacar, a estratégia pode ser cuidadosamente pensada e estudada, e executada de modo a explorar o elo mais fraco da organização. Esses são, geralmente, os ataques que resultam em maiores
9 prejuízos, pois não são feitos de maneira aleatória, como ocorre com os ataques oportuníssimos. Isso pode ser observado também pelo nível de agressividade dos ataques. Quanto mais agressivo é o ataque, maior é o nível de esforço dispensado em um ataque a um alvo específico. É interessante notar também que a agressividade de um ataque está relacionada com a severidade, ou seja, maiores perdas;
f. A defesa é mais complexa do que o ataque: para o hacker, basta que ele consiga explorar apenas um ponto de falha da organização. Caso uma determinada técnica não funcione, ele pode tentar explorar outras, até que seus objetivos sejam atingidos. Já para as organizações, a defesa é muito mais complexa, pois exige que todos os pontos sejam defendidos. O esquecimento de um único ponto faz com que os esforços dispensados na segurança dos outros pontos sejam em vão. Isso acaba se relacionando com uma das principais falácias do mundo corporativo: a falsa sensação de segurança. É interessante notar que, quando o profissional não conhece os riscos, ele tende a achar que tudo está seguro com o ambiente. Com isso, a organização passa, na realidade, a correr riscos ainda maiores, que é o resultado da negligência. Isso acontece com os firewalls ou com os antivírus, por exemplo, que não podem proteger a organização contra determinados tipos de ataques.
g. Aumento dos crimes digitais: o que não pode ser subestimado são os indícios de que os crimes digitais estão se tornando cada vez mais organizados. As comunidades criminosas contam, atualmente, com o respaldo da própria internet, que permite que limites geográficos sejam transpostos, oferecendo possibilidades de novos tipos de ataques. Além disso, a legislação para crimes digitais ainda está na fase da infância em muitos países, o que acaba dificultando uma ação mais severa para a inibição dos crimes.
Dentre os fatos que demonstram o aumento da importância da segurança, pode-se destacar a rápida dispode-seminação de vírus e worms, que são cada vez mais sofisticados. Utilizando técnicas que incluem a engenharia social, canais seguros
10 de comunicação, exploração de vulnerabilidades e arquitetura distribuída, os ataques visam a contaminação e a disseminação rápida, além do uso das vítimas como origem de novos ataques. A evolução dos ataques aponta para o uso de técnicas ainda mais sofisticadas, como o uso de códigos polimórficos para a criação de vírus, worms, backdoor ou exploits, para dificultar sua detecção. Além disso, ferramentas que implementam mecanismos que dificultam a adoção da forense computacional também já estão sendo desenvolvidos. Os canais ocultos ou cobertos (covert channels) tendem a ser usados para os ataques, nos quais os controles são enviados por túneis criados com o uso de HTTPS ou o SSH, por exemplo. O uso de ‘pontes’ de ataques e mecanismos do TCP/IP para dificultar a detecção e investigação igualmente tende a ser cada vez mais utilizado. Ataques a infraestruturas envolvendo roteamento ou DNS, por exemplo, também podem ser realizados.
Alguns incidentes mostram que os prejuízos com a falta de segurança podem ser grandes. O roubo de 5,6 milhões de números de cartões de crédito da Visa e da MasterCard de uma administradora de cartões americana, em fevereiro de 2003 [JT 03], por exemplo, pode sugerir grandes problemas e inconvenientes para as vítimas. No Brasil, o roubo de mais de 152 mil senhas de acesso de grandes provedores de acesso, em março de 2003, resultou em quebra de privacidade e, em muitos casos, perdas bem maiores [REV 03]. No âmbito mundial, variações de worms como o Klez ainda continuam na ativa, mesmo passado mais de um ano desde seu surgimento.
A primeira versão do Klez surgiu em novembro de 2001 e a versão mais perigosa, em maio de 2002; em março de 2003, o Klez era o worm mais ativo do mês [MES 03]. Em junho de 2002, um incidente de segurança envolvendo usuários de cinco dos maiores bancos e administradores de cartões de crédito do Brasil resultou em prejuízos calculados em R$ 100 mil [TER 02], mostrando que incidentes envolvendo instituições financeiras estão se tornando cada vez mais comuns, seja no Brasil ou em outros países.
Outros incidentes notórios podem ser lembrados, como o que envolveu o worm Nimda, em setembro de 2001. Um alto grau de evolução pôde ser observado no Nimda, que foi capaz de atacar tanto sistemas web quanto sistemas de e-mail. Antes do aparecimento do Nimda, um outro worm, o Code Red (e sua variação
11 Code Red II), vinha, e ainda vem, causando grandes prejuízos, não somente às organizações que sofreram o ataque, mas à internet como um todo. Causando lentidão na rede, o Code Red resultou em prejuízos estimados em 2,6 bilhões de dólares nos Estados Unidos, em julho e agosto de 2001. Outro notório evento foi a exploração em larga escala de ferramentas para ataques coordenados e distribuídos, que afetaram e causaram grandes prejuízos, durante 2000, a sites como Amazon Books, Yahoo, CNN, eBay, UOL e ZipMail. Somaram-se ainda ataques a sites de comércio eletrônico, notadamente o roubo de informações sobre clientes da CDNow, até mesmo dos números de cartões de crédito. Casos de ‘pichações’ de sites Web também são um fato corriqueiro, demonstrando a rápida popularização dos ataques a sistemas de computadores. Porém, os ataques que vêm causando os maiores problemas para as organizações são aqueles que acontecem a partir da sua própria rede, ou seja, os ataques internos.
Somado a isso, está o fato de as conexões entre as redes das organizações alcançarem níveis de integração cada vez maiores. Os ambientes cooperativos, formados a partir de conexões entre organizações e filiais, fornecedores, parceiros comerciais, distribuidores, vendedores ou usuários móveis, resultam na necessidade de um novo tipo de abordagem quanto à segurança. Em oposição à ideia inicial, quando o objetivo era proteger a rede da organização isolando-a das redes públicas, nos ambientes cooperativos o objetivo é justamente o contrário: disponibilizar cada vez mais serviços e permitir a comunicação entre sistemas de diferentes organizações, de forma segura. A complexidade aumenta, pois agora a proteção deve ocorrer não somente contra os ataques vindos da rede pública, mas também contra aqueles que podem ser considerados internos, originados a partir de qualquer ponto do ambiente cooperativo.
É interessante observar que o crescimento da importância e até mesmo da dependência do papel da tecnologia nos negócios, somado ao aumento da facilidade de acesso e ao avanço das técnicas usadas para ataques e fraudes eletrônicos, resultam no aumento do número de incidentes de segurança, o que faz com que as organizações devam ser protegidas da melhor maneira possível. Afinal de contas, é o próprio negócio, em forma de bits e bytes, que está em jogo. Assim, entender os problemas e as formas de resolvê-los torna-se imprescindível, principalmente porque não se pode proteger contra riscos que não se conhece.
12 Este livro tem como principal objetivo apresentar os conceitos, as técnicas e as tecnologias de segurança que podem ser usados na proteção dos valores computacionais internos das organizações. Para isso, a formação de um ambiente cooperativo e as motivações para a implementação de uma segurança coerente serão discutidas. Os motivos que levam à adoção de determinada tecnologia também serão discutidos, bem como a integração das diversas tecnologias existentes, que é, de fato, o grande desafio das organizações.
Capitulo 2
2.1. CriptografiaA criptografia é uma ciência que tem importância fundamental para a segurança da informação, ao servir de base para diversas tecnologias e protocolos, tais como a infraestrutura de chaves públicas (Public Key Infrastructure- PKI), o IP Security (IPSec) e o Wired Equivalent Privacy (WEP). Suas propriedades- sigilo, integridade, autenticação e não-repúdio- garantem o armazenamento, as comunicações e as transações seguras, essenciais no mundo atual. Este capítulo discute o papel da criptografia e os aspectos relacionados à sua segurança, e também a infraestrutura de chaves públicas, componente importante em um ambiente baseado em certificados digitais.
2.2. O papel da criptografia
A criptografia tem função e importância cada vez mais fundamentais para a segurança das organizações; é a ciência de manter as mensagens seguras. A cifragem (encryption) é o processo de disfarçar a mensagem original, o texto claro (plaintext ou cleartext), de tal modo que sua substância é escondida em uma mensagem com texto cifrado (ciphertext), enquanto a decifragem (decryption) é o processo de transformar o texto cifrado de volta em texto claro original [SCH 96].
Os processos de cifragem e decifragem são realizados via uso de algoritmos com funções matemáticas que transformam os textos claros, que podem ser lidos, em textos cifrados, que são inteligíveis. A criptografia possibilita que as propriedades importantes para a proteção da informação sejam alcançadas, dentre elas:
13 Integridade -> garantir que uma informação estará disponível para acesso
no momento desejado.
Integridade -> garantir que o conteúdo da mensagem não foi alterado. Controle de acesso -> garantir que o conteúdo da mensagem somente será
acessado por pessoas autorizadas.
Autenticidade -> garantir a identidade de quem está enviando a mensagem.
Não repúdio -> prevenir que alguém negue o envio e/ou recebimento de uma mensagem.
Sigilo -> impedir que pessoas não autorizadas tenham acesso ao conteúdo da mensagem, garantindo que apenas a origem e o destino tenham conhecimento.
O exemplo clássico é uma compra pela internet, todos os requisitos são encontrados neste processo de troca de informações: A informação que permite a transação - valor e descrição do produto - precisa estar disponível no dia e na hora que o cliente desejar efetuá-la (disponibilidade), o valor da transação não pode ser alterado (integridade), somente o cliente que está comprando e o comerciante devem ter acesso à transação (controle de acesso), o cliente que está comprando deve ser realmente quem diz ser (autenticidade), o cliente tem como provar o pagamento e o comerciante não têm como negar o recebimento (não-repúdio) e o conhecimento do conteúdo da transação fica restrito aos envolvidos (privacidade).
Além dessas propriedades, a assinatura digital e a certificação digital são importantes para a proteção da informação. De fato, no mundo atual, onde a comunicação está cada vez mais onipresente na vida das pessoas, a proteção de toda essa comunicação deve ser garantida, bem como a privacidade dos usuários. Dessa maneira, a criptografia já é usada em muitas soluções do dia-a-dia dos usuários de todos os níveis. Alguns exemplos de uso de criptografia para a proteção do sigilo e integridade da informação e da integridade e autenticação da comunicação que podem ser vistos são os seguintes:
A comunicação das ligações celulares da tecnologia Global System for Mobile Communication (GSN1) é protegida pelo algoritmo COMPUS-2.
14 As compras via internet são protegidas pelo protocolo de segurança Secure
Socket Layer (SSL).
Os bancos protegem as transações eletrônicas do Internet Banking com SSL e também com algum protocolo criptográfico adicional.
Os administradores de sistemas acessam os servidores remotamente usando protocolos como o Secure Shell (SSH).
As redes sem fio usam criptografia para proteção dos acesos, definidos no protocolo Wired Equivalent Privacy.
Redes privadas virtuais (Virtual Private Network - VPN) usam protocolos como o IP Security (IPSec) para proteger as comunicações entre as organizações.
O uso de certificados digitais como credenciais também é importante para a segurança, principalmente para acesso a serviços críticos e que requerem o não-repúdio.
Assim é fundamental que técnicas computacionais sejam empregadas para que os requisitos de proteção da informação sejam atendidos. Neste cenário apresentam-se os dois tipos básicos de criptografia: a simétrica ou chave privada, e a assimétrica ou chave pública.
2.3. Tipos de Criptografias
Criptografia simétrica ou chave privada
O modelo mais antigo de criptografia, em que a chave, isto é, o elemento que dá acesso à mensagem oculta trocada entre duas partes, é igual (simétrica) para ambas as partes e deve permanecer em segredo (privada). Tipicamente, esta chave é representada por uma senha, usada tanto pelo remetente para codificar a mensagem numa ponta, como pelo destinatário para decodificá-la na outra. Essencialmente, quando a origem (ALFA) cifra uma mensagem, ele utiliza um algoritmo de ciframento para transformar o conteúdo em claro da mensagem em texto cifrado. Quando o destino (BRAVO) decifra uma mensagem, ele utiliza o algoritmo de deciframento correspondente para converter o texto cifrado de novo em uma mensagem clara. Se um intruso (CHARLIE) conhecer o algoritmo de ciframento, ele poderia decifrar uma mensagem cifrada tão facilmente quanto o
15 destino (BRAVO). A solução no uso da criptografia de chave privada propõe que quando a origem (ALFA) cifra uma mensagem, ele utilize um algoritmo de ciframento e uma chave secreta para transformar uma mensagem clara em um texto cifrado. O destino (BRAVO), por sua vez, ao decifrar a mensagem, utiliza o algoritmo de deciframento correspondente e a mesma chave para transformar o texto cifrado em uma mensagem em claro. O intruso (CHARLIE), por não possuir a chave secreta, mesmo conhecendo o algoritmo, não conseguirá decifrar a mensagem. A segurança do sistema passa a residir não mais no algoritmo e sim na chave empregada. É ela (chave privada) que agora, no lugar do algoritmo, deverá ser mantida em segredo pela origem (ALFA) e destino (BRAVO).
A principal vantagem é a simplicidade, esta técnica apresenta facilidade de uso e rapidez para executar os processos criptográficos. Entenda que se as chaves utilizadas forem complexas a elaboração de um algoritmo de chave privada se torna bastante fácil, porém as possibilidades de interceptação são correlatas aos recursos empregados, entretanto sua utilização é considerável no processo de proteção da informação, pois quanto mais simples o algoritmo, melhor é a velocidade de processamento e facilidade de implementação. O principal problema residente na utilização deste sistema de criptografia é que quando a chave de ciframento é a mesma utilizada para deciframento, ou esta última pode facilmente ser obtida a partir do conhecimento da primeira, ambas precisam ser compartilhadas previamente entre origem e destino, antes de se estabelecer o canal criptográfico desejado, e durante o processo de compartilhamento a senha pode ser interceptada, por isso é fundamental utilizar um canal seguro durante o compartilhamento, este independente do destinado à comunicação sigilosa, uma vez que qualquer um que tenha acesso à senha poderá descobrir o conteúdo secreto da mensagem. Outras lacunas são interpostas a este sistema:
Como cada par necessita de uma chave para se comunicar de forma segura, para um uma rede de n usuários precisaríamos de algo da ordem de 𝑛2
chaves, quantidade esta que dificulta a gerência das chaves;
A chave deve ser trocada entre as partes e armazenada de forma segura, o que nem sempre é fácil de ser garantido;
16 A criptografia simétrica não garante os princípios de autenticidade e
não-repúdio
A criptografia de chave privada ou simétrica, como o Data Encryption Standard DES, 3DES, 1DEA, RC6 e outros, é responsável pelo sigilo das informações, por meio da utilização de uma chave secreta para a codificação e decodificação dos lados (Figura 1).
Os algoritmos de chave simétrica têm como característica a rapidez na execução, porém eles não permitem a assinatura e a certificação digitais. Além disso, existe o problema da necessidade de distribuição das chaves secretas a serem utilizadas pelos usuários, que deve ser feita de maneira segura. O problema está na dificuldade de enviar a chave gerada para o usuário, pois o canal de comunicação ainda não é seguro. Outro problema é o uso de chaves secretas diferentes para cada tipo de comunicação e também para cada mensagem, o que faz com que seu gerenciamento se torne muito complexo. Um exemplo dessa complexidade pode ser visto em um ambiente no qual três usuários se comunicam entre si, onde cada um deles deve armazenar e gerenciar três chaves diferentes. A figura 9.3 mostras que Maria precisa de três chaves secretas diferentes para se comunicar com João, Pedro e Luís.
Figura 1 Criptografia de chave privada ou simétrica.
17 Existem diversos algoritmos criptográficos que fazem uso da Chave Simétrica, tais como:
- DES (Data Encryption Standard)
Criado pela IBM em 1977, usa criptografia de 56 bits, o que corresponde a cerca de 72 quadrilhões de chaves diferentes. Apesar de ser um valor bastante alto, foi quebrado por em 1997 por força bruta (tentativa e erro), em um desafio feito na Internet.
- IDEA (Internacional Data Encryption Algorithm)
Criado em 1991 por Massey e Xuejia Lai, utiliza chaves de 128 bits com uma estrutura semelhante ao anteriormente citado DES, porém, possui uma implementação mais simples.
- RC (Ron’s Code ou Rivest Cipher)
Desenvolvido por Ron Rivest, é largamente utilizado em e- mails. Possui diversas versões (RC2, RC4, RC5 e RC6), com chaves que vão de 8 a 1024 bits Podemos citar ainda o 3DES, o Twofish e o Blowfish, entre outros.
Algoritmo de Criptografia simétrica em Java
Algoritmo DES
Listagem 1. Criptografando e Descriptografando dados com DES
import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey;
public class EncriptaDecriptaDES {
18
public static void main(String[] argv) {
try{
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey chaveDES = keygenerator.generateKey(); Cipher cifraDES; // Cria a cifra cifraDES = Cipher.getInstance("DES/ECB/PKCS5Padding");
// Inicializa a cifra para o processo de encriptação
cifraDES.init(Cipher.ENCRYPT_MODE, chaveDES);
// Texto puro
byte[] textoPuro = "Exemplo de texto puro".getBytes();
System.out.println("Texto [Formato de Byte] : " + textoPuro);
System.out.println("Texto Puro : " + new String(textoPuro)); // Texto encriptado byte[] textoEncriptado = cifraDES.doFinal(textoPuro); System.out.println("Texto Encriptado : " + textoEncriptado);
// Inicializa a cifra também para o processo de decriptação
cifraDES.init(Cipher.DECRYPT_MODE, chaveDES);
19
byte[] textoDecriptografado = cifraDES.doFinal(textoEncriptado);
System.out.println("Texto Decriptografado : " + new String(textoDecriptografado)); }catch(NoSuchAlgorithmException e){ e.printStackTrace(); }catch(NoSuchPaddingException e){ e.printStackTrace(); }catch(InvalidKeyException e){ e.printStackTrace(); }catch(IllegalBlockSizeException e){ e.printStackTrace(); }catch(BadPaddingException e){ e.printStackTrace(); } } }
Inicialmente criamos uma instância de Cipher e especificamos o nome do algoritmo, o modo e o esquema de padding que é opcional, tudo separado por uma barra "/" conforme o código abaixo:
Cipher cifraDES; // Cria a cifra
cifraDES = Cipher.getInstance("DES/ECB/PKCS5Padding");
Após isso convertemos o texto para byte conforme destacado abaixo:
// Texto puro
byte[] textoPuro = "Exemplo de texto puro".getBytes();
Para criptografar o texto puro utilizamos o método Cipher.doFinal(), conforme mostra o código abaixo:
20
cifraDES.init(Cipher.ENCRYPT_MODE, chaveDES); // Texto encriptado
byte[] textoEncriptado = cifraDES.doFinal(textoPuro);
Podemos verificar que o método doFinal também espera um array de bytes, por isso realizamos a conversão anteriormente.
Por fim, utilizamos o método Cipher.doFinal() em modo de decriptação para descriptografar o texto puro conforme o código destacado abaixo:
// Inicializa a cifra também para o processo de decriptação cifraDES.init(Cipher.DECRYPT_MODE, chaveDES);
// Decriptografa o texto
byte[] textoDecriptografado = cifraDES.doFinal(textoEncriptado);
Existe vários algoritmos de Criptografia simétrica, nessa apostila será
apresentado o DES, caso você tenha interesse em saber mais sobre os tipos de algoritmos de criptografia, acesse: http://www.devmedia.com.br/utilizando-criptografia-simetrica-em-java/31170
Criptografia assimétrica ou chave pública
Modelo de criptografia criado na década de 1970 - pelo matemático Clifford Cocks que trabalhava no serviço secreto inglês, o GCHQ - na qual cada parte envolvida na comunicação usa duas chaves diferentes (assimétricas) e complementares, uma privada e outra pública.
Neste caso, as chaves não são apenas senhas, mas arquivos digitais mais complexos (que eventualmente até estão associados a uma senha). A chave pública pode ficar disponível para qualquer pessoa que queira se comunicar com outra de modo seguro, mas a chave privada deverá ficar em poder apenas de cada titular. É com a chave privada que o destinatário poderá decodificar uma mensagem que foi criptografada para ele com sua respectiva chave pública. Para entender o conceito, basta pensar num cadeado comum protegendo um determinado bem. A mensagem é está bem, e o cadeado, que pode ficar exposto, é a chave pública. Apenas quem tiver uma chave particular (privada) que consiga abrir o cadeado poderá acessar a mensagem. A principal vantagem deste método é a sua segurança, pois não é preciso (nem se deve) compartilhar a chave privada. Por outro lado, o tempo de processamento de mensagens com criptografia
21 assimétrica é muitas vezes maior do que com criptografia simétrica, o que pode limitar seu uso em determinadas situações.
Essencialmente, o destino (BRAVO) e todos os que desejam comunicar-se de modo seguro geram uma chave de ciframento e sua correspondente chave de deciframento. Ele mantém secreta a chave de deciframento, esta é chamada de sua chave privada. Ele torna pública a chave de ciframento, esta é chamada de sua chave pública. A chave pública realmente condiz com seu nome. Qualquer pessoa pode obter uma cópia dela. O destino (BRAVO) inclusive encoraja isto, enviando-a para seus amigos ou publicando-a na internet. Assim, O intruso (CHARLIE) não tem nenhuma dificuldade em obtê-la. Quando a origem (ALFA) deseja enviar uma mensagem ao destino (BRAVO), precisa primeiro encontrar a chave pública dele.
Feito isto, ela cifra sua mensagem utilizando a chave pública do destino (BRAVO), despachando-a em seguida. Quando o destino (BRAVO) recebe a mensagem, ele a decifra facilmente com sua chave privada. O intruso (CHARLIE), que interceptou a mensagem em trânsito, não conhece a chave privada do destino (BRAVO), embora conheça sua chave pública. Mas este conhecimento não o ajuda a decifrar a mensagem. Mesmo a origem (ALFA), que foi quem cifrou a mensagem com a chave pública do destino (BRAVO), não pode decifrá-la agora. A grande vantagem deste sistema é permitir a qualquer um enviar uma mensagem secreta, apenas utilizando a chave pública de quem irá recebê-la. Como a chave pública está amplamente disponível, não há necessidade do envio de chaves como feito no modelo simétrico. A confidencialidade da mensagem é garantida, enquanto a chave privada estiver segura. Caso contrário, quem possuir acesso à chave privada terá acesso às mensagens.
O óbice deste sistema é a complexidade empregada no desenvolvimento dos algoritmos que devem ser capazes de reconhecer a dupla de chaves existentes e poder relacionar as mesmas no momento oportuno, o que acarreta num grande poder de processamento computacional.
Os algoritmos de chave pública ou assimétrica, como RSA, Rabin e outros, podem possibilitar, além do sigilo, integridade, não-repúdio e autenticidade. É possível ainda que a assinatura e a certificação digitais possam ser utilizadas. As
22 comunicações são realizadas por meio de dois pares de chaves diferentes, uma privada e uma pública para cada entidade. Uma mensagem, por exemplo, pode ser cifrada utilizando-se uma chave pública e decifrada utilizando-se somente a chave privada correspondente ou vice-versa (Figura 3.4).
O algoritmo assimétrico minimiza o problema de troca de chaves, pois não é necessário um canal seguro para tal. Porém, ele é cerca de 60 a 70 vezes mais lento que os algoritmos simétricos. A figura 9.4 mostra as vantagens na distribuição de chaves, onde Maria mantém somente o seu par de chaves (privada e pública), enquanto João, Pedro e Luís obtêm a chave pública de Maria para enviar a mensagem cifrada para ela. Como somente a chave privada equivalente é capaz de decifrar a mensagem, e somente Maria a possui, o sigilo da mensagem para Maria é garantida.
Assim, a criptografia simétrica possui o problema da distribuição e gerenciamento de chaves, enquanto a criptografia assimétrica possui o problema
Figura 4 As chaves secretas necessárias na criptografia assimétrica. Pub-Maria
Pri-Maria
Figura 5 As chaves privadas e públicas necessárias na criptografia assimétrica.
23 de desempenho, 10is ele exige maior poder d e processamento. Isso faz com que os dois tipos de algoritmos (simétrico e assimétrico) sejam normalmente utilizados em conjunto, aproveitando-se as melhores características de cada um. Com isso, a aplicação mais comum para a criptografia é a utilização dos algoritmos de chave pública para autenticação, certificação e estabelecimento da comunicação segura. Uma vez que o canal seguro esteja estabelecido, uma chave secreta pode ser gerada e trocada para a utilização da criptografia de chave simétrica, que é mais rápida e usada para o sigilo das mensagens. Assim, os pontos fracos de ambos os tipos de criptografia podem ser reduzidos, com a criptografia de chave pública formando o canal seguro para a distribuição d e chaves simétricas, que por sua vez é mais rápida que o uso do par de chaves da criptografia assimétrica.
Exemplo de um algoritmo de criptografia assimétrica em Java Algoritmo RSA
Listagem 1. Criptografando e Descriptografando dados com RSA. import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher;
public class EncriptaDecriptaRSA {
24 /**
* Local da chave privada no sistema de arquivos. */
public static final String PATH_CHAVE_PRIVADA = "C:/keys/private.key"; /**
* Local da chave pública no sistema de arquivos. */
public static final String PATH_CHAVE_PUBLICA = "C:/keys/public.key"; /**
* Gera a chave que contém um par de chave Privada e Pública usando 1025 bytes.
* Armazena o conjunto de chaves nos arquivos private.key e public.key */
public static void geraChave() { try {
final KeyPairGenerator keyGen =
KeyPairGenerator.getInstance(ALGORITHM); keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
File chavePrivadaFile = new File(PATH_CHAVE_PRIVADA); File chavePublicaFile = new File(PATH_CHAVE_PUBLICA);
// Cria os arquivos para armazenar a chave Privada e a chave Publica if (chavePrivadaFile.getParentFile() != null) {
chavePrivadaFile.getParentFile().mkdirs(); }
25 chavePrivadaFile.createNewFile(); if (chavePublicaFile.getParentFile() != null) { chavePublicaFile.getParentFile().mkdirs(); } chavePublicaFile.createNewFile(); // Salva a Chave Pública no arquivo
ObjectOutputStream chavePublicaOS = new ObjectOutputStream( new FileOutputStream(chavePublicaFile));
chavePublicaOS.writeObject(key.getPublic()); chavePublicaOS.close();
// Salva a Chave Privada no arquivo
ObjectOutputStream chavePrivadaOS = new ObjectOutputStream( new FileOutputStream(chavePrivadaFile)); chavePrivadaOS.writeObject(key.getPrivate()); chavePrivadaOS.close(); } catch (Exception e) { e.printStackTrace(); } } /**
* Verifica se o par de chaves Pública e Privada já foram geradas. */
public static boolean verificaSeExisteChavesNoSO() { File chavePrivada = new File(PATH_CHAVE_PRIVADA); File chavePublica = new File(PATH_CHAVE_PUBLICA);
26 if (chavePrivada.exists() && chavePublica.exists()) {
return true; }
return false; }
/**
* Criptografa o texto puro usando chave pública. */
public static byte[] criptografa(String texto, PublicKey chave) { byte[] cipherText = null;
try {
final Cipher cipher = Cipher.getInstance(ALGORITHM); // Criptografa o texto puro usando a chave Púlica
cipher.init(Cipher.ENCRYPT_MODE, chave); cipherText = cipher.doFinal(texto.getBytes()); } catch (Exception e) { e.printStackTrace(); } return cipherText; } /**
* Decriptografa o texto puro usando chave privada. */
27 byte[] dectyptedText = null;
try {
final Cipher cipher = Cipher.getInstance(ALGORITHM); // Decriptografa o texto puro usando a chave Privada cipher.init(Cipher.DECRYPT_MODE, chave);
dectyptedText = cipher.doFinal(texto); } catch (Exception ex) {
ex.printStackTrace(); }
return new String(dectyptedText); }
/**
* Testa o Algoritmo */
public static void main(String[] args) { try {
// Verifica se já existe um par de chaves, caso contrário gera-se as chaves.. if (!verificaSeExisteChavesNoSO()) {
// Método responsável por gerar um par de chaves usando o algoritmo RSA e
// armazena as chaves nos seus respectivos arquivos. geraChave();
}
final String msgOriginal = "Exemplo de mensagem"; ObjectInputStream inputStream = null;
28 // Criptografa a Mensagem usando a Chave Pública
inputStream = new ObjectInputStream(new FileInputStream(PATH_CHAVE_PUBLICA));
final PublicKey chavePublica = (PublicKey) inputStream.readObject(); final byte[] textoCriptografado = criptografa(msgOriginal, chavePublica); // Decriptografa a Mensagem usando a Chave Pirvada
inputStream = new ObjectInputStream(new FileInputStream(PATH_CHAVE_PRIVADA));
final PrivateKey chavePrivada = (PrivateKey) inputStream.readObject(); final String textoPuro = decriptografa(textoCriptografado, chavePrivada); // Imprime o texto original, o texto criptografado e
// o texto descriptografado.
System.out.println("Mensagem Original: " + msgOriginal);
System.out.println("Mensagem Criptografada: " +textoCriptografado.toString());
System.out.println("Mensagem Decriptografada: " + textoPuro); } catch (Exception e) { e.printStackTrace(); } } }
Se executarmos o código acima teremos como resultado:
29 Mensagem Criptografada: [B@9ee4e7
Mensagem Decriptografada: Exemplo de mensagem
No código acima utilizamos KeyPairGenerator para criar nossa chave. Segue abaixo o trecho de código:
final KeyPairGenerator keyGen =
KeyPairGenerator.getInstance(ALGORITHM); keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
Primeiramente criamos uma instância de KeyPairGenerator para geração das chaves do RSA e após isso inicializamos o gerador informando o tamanho em bits do módulo. Normalmente o tamanho desse módulo é de 1024 bits ou 2048 bits por questões de desempenho. Logo após chamamos o método genKeyPair() que retornará um objeto do tipo KeyPair contendo as chaves. Por fim, chamamos getPublic() e getPrivate() para recuperarmos a chave pública e a chave privada.
Criptografia Hash
A criptografia hash permite que, através de uma string de qualquer tamanho, seja calculado um identificador digital de tamanho fixo, chamado de valor hash. O valor hash geralmente é formado por 16 bytes (no caso do MD-2, MD-4 e MD- 5) ou 20 bytes (no caso do SHA-1), mas pode se estender, embora não passe de 512 bytes.
Seja uma função hash H, e x uma string qualquer, teremos que H(x) será o valor hash para a string x.
As características básicas de uma função hash são:
O valor de entrada da função possui qualquer tamanho; O valor de saída da função possui tamanho fixo;
H(x) é relativamente fácil de ser computado, para qualquer valor de x; H(x) é uma função “one-way”;
30 Uma função hash é dita "one-way” pois uma vez obtido o valor hash h para uma string x, é computacionalmente impossível fazer o processo inverso, ou seja, encontrar um valor x tal que H(x) = h.
Diz-se ainda que H(x) é livre de colisão, significando que as funções hash devem garantir uma probabilidade mínima de que duas strings diferentes acabem por resultar no mesmo valor hash. Qualquer alteração na string original que deu origem ao identificador digital, mesmo que de um único bit, acabará por gerar uma alteração significativa no valor hash final.
Combinação dos Tipos
Com os dois tipos de Chaves (Simétrica e Assimétrica) tendo suas vantagens e desvantagens, era natural o surgimento um método que buscasse mixar as vantagens de cada um, eliminando assim, suas desvantagens.
Os protocolos TLS (Transport Layer Security) e SSL (Secure Sockets Layer) são exemplos desse mix. Para compensar o problema do segredo pré-estabelecido da chave simétrica e o alto poder computacional necessário na chave simétrica, foi elaborado um meio onde em sua primeira etapa (handshake), seja utilizado a criptografia assimétrica, autenticando assim os nós e combinando uma chave secreta para um uso posterior na criptografia simétrica. Como o algoritmo de chave pública garante que a negociação foi realizada em um canal seguro, não havendo a necessidade da troca periódica da chave (problemas no caso da Chave Simétrica), todo o restante do processo pode passar a ser realizado utilizando algoritmos de chave simétrica, o que diminui potencialmente a necessidade do poder computacional, permitindo seu uso em uma comunicação mais intensa (problemas encontrados na Chave Assimétrica).
Certificado digital
Com um sistema de chave pública, o gerenciamento de chaves passa a ter dois novos aspectos: primeiro, deve-se previamente localizar a chave pública de qualquer pessoa com quem se deseja comunicar e, segundo, deve-se obter uma garantia de que a chave pública encontrada seja proveniente daquela pessoa. Sem esta garantia, um intruso pode convencer os interlocutores de que chaves públicas falsas pertencem a eles. Estabelecendo um processo de confiança entre
31 os interlocutores, o intruso pode fazer-se passar por ambos. Deste modo, quando um emissor enviar uma mensagem ao receptor solicitando sua chave pública, o intruso poderá interceptá-la e devolver-lhe uma chave pública forjada por ele. Ele também pode fazer o mesmo com o receptor, fazendo com que cada lado pense que está se comunicando com o outro, quando na verdade estão sendo interceptados pelo intruso, então este pode decifrar todas as mensagens, cifrá-las novamente ou, se preferir, até substituí-las por outras mensagens. Através deste ataque, um intruso pode causar tantos danos ou até mais do que causaria se conseguisse quebrar o algoritmo de ciframento empregado pelos interlocutores. A garantia para evitar este tipo de ataque é representada pelos certificados de chave pública, comumente chamados de certificado digital, tais certificados consistem em chaves públicas assinadas por uma pessoa de confiança. Servem para evitar tentativas de substituição de uma chave pública por outra. O certificado contém algo mais do que sua chave pública, ele apresenta informações sobre o nome, endereço e outros dados pessoais, e é assinado por alguém em quem o proprietário deposita sua confiança, uma autoridade de certificação (certification authority - CA). Assim, um certificado digital pode ser definido como um documento eletrônico, assinado digitalmente por uma terceira parte confiável.
No Brasil, o órgão da autoridade certificadora raiz é o ICP-Brasil (AC-Raiz), ele é o executor das políticas de certificados e normas técnicas e operacionais aprovadas pelo Comitê Gestor da ICP-Brasil. São autoridades certificadoras no país: Serpro (AC-SERPRO), Caixa Econômica Federal (AC-CAIXA), Serasa Experian SERASA), Receita Federal do Brasil RFB), Certsing (AC-Certisign), Imprensa Oficial do Estado de São Paulo (AC-IOSP), Autoridade Certificadora da Justiça (AC-JUS), Autoridade Certificadora da Presidência da República (AC-PR) e Casa da Moeda do Brasil (AC-CMB).
Assim, a AC-Raiz tem autoridade de emitir, expedir, distribuir, revogar e gerenciar os certificados das autoridades certificadoras de nível imediatamente subsequente ao seu, sendo também encarregada de emitir a lista de certificados revogados e de fiscalizar e auditar as autoridades certificadoras, autoridades de registro e demais prestadores de serviço habilitados na ICP-Brasil. Além disso,
32 verifica se as autoridades certificadoras (ACs) estão atuando em conformidade com as diretrizes e normas técnicas estabelecidas pelo Comitê Gestor.
Assinatura digital
O sistema de criptografia assimétrica ou de chave pública também é utilizado como um meio de assinatura digital. A pessoa que assina usa sua chave privada para criptografar uma mensagem conhecida, e o texto cifrado pode ser decifrado por qualquer um usando a chave pública desta pessoa, assim como uma assinatura em papel, consiste em um bloco de informação adicionado à mensagem que comprova a identidade do emissor, confirmando quem ele diz ser. O processo se baseia em uma inversão do sistema, onde o funcionamento da assinatura digital pode ser descrito como: o emissor cifra (ou seja, atesta autenticidade) a mensagem com sua chave privada e a envia, em um processo denominado de assinatura digital. Cada um que receber a mensagem deverá verificar a validade da assinatura digital, utilizando para isso a chave pública do emissor, reconhecendo de fato, que a mensagem não foi adulterada.
Como a chave pública do emissor apenas decifra (ou seja, verifica a validade) mensagens cifradas com sua chave privada, obtém-se a garantia de autenticidade, integridade e não-repudi0 da mensagem, o que é apoiado pela função hashing, pois se alguém modificar um bit do conteúdo da mensagem ou se outra pessoa assiná-la ao invés do próprio emissor, o sistema de verificação não irá reconhecer a assinatura digital dele como sendo válida.
33 É importante perceber que a assinatura digital, como descrita, não garante a confidencialidade da mensagem. Qualquer um poderá acessá-la e verificá-la, mesmo um intruso, apenas utilizando a chave pública do emissor, assim, ao empregar o uso da técnica de assinatura digital o que se busca é a garantia de autenticidade, integridade e não-repudio da mensagem.
2.4. Segurança dos sistemas criptográficos
A segurança de sistemas criptográficos depende de uma série de fatores, como uma falha na geração de chaves, por exemplo, que pode comprometer totalmente
Figura 6 Funcionamento da assinatura digital
34 o sigilo de uma comunicação. Diversos fatores devem ser analisados para que a proteção adequada da informação não seja apenas uma falsa impressão:
Geração das chaves: com a utilização de um número aleatório real como ponto inicial para a criação das chaves, é impossível saber ou adivinhar a estrutura das chaves futuras, o que garante uma maior segurança. Sem a geração aleatória, o algoritmo utilizado pode revelar padrões que diminuem o espaço de escolha das chaves, o que facilita sua descoberta. Assim, é importante utilizar sistemas que sejam capazes de gerar números aleatórios reais, tais como os utilizados por alguns tipos de hardware, conhecidos também como Hardware Security Module (HSM). Eles têm a vantagem de utilizar componentes dedicados na geração aleatória desses números, além de não utilizarem os algoritmos conhecidos utilizados pelos softwares, que podem revelar padrões de geração de chaves mais facilmente.
Mecanismo de troca das chaves: por exemplo, Diffie-Hellman para criptografia e RSApara assinaturas [SCH 96]. O métOdo preferido hoje é o Internet Key Exchange (IKE), em comparação com o Simple Key Management for Internet Protocol (SKIP). A principal vantagem do IKE sobre o SKIP é sua habilidade de negociar com um número diferente de chaves criptográficas.
Taxa de troca das chaves: como regra, quanto maior for a frequência da troca automática das chaves, maior será o sigilo dos dados. Isso acontece porque a janela de oportunidade de ataques diminui, pois, caso uma chave seja quebrada, ela já não é mais útil para a comunicação. A troca de chaves manual é considerada insegura, além de ser trabalhoso realizar todo o processo manualmente, o que pode influir na produtividade do usuário.
Tamanhos da chave: são diferentes para a criptografia simétrica e para a criptografia de chave pública.
35 Além dos fatores verificados, deve-se também levar em consideração a qualidade do algoritmo criptográfico e sua correta implementação, seja em software ou hardware.
Um princípio fundamental é o de Dutchman A. Kerckhoffs, que, no século XIX, enunciou que a segurança deve residir na chave, pois sempre se deve assumir que o atacante tem os detalhes completos do algoritmo criptográfico e de sua implementação. Isso é reforçado pelo fato de que esses detalhes do algoritmo e de sua implementação podem ser descobertos, e, se o atacante não é capaz de descobrir esses detalhes, então ele não é capaz de quebrar uma chave criptográfica [SCH 96].
Assim, confiar na segurança da criptografia somente porque o algoritmo criptográfico não é conhecido é, na realidade, uma grande falácia. O melhor algoritmo é aquele que é público e vem sendo testado por todos, permanecendo intacto. Esse é um dos principais fatores de segurança de sistemas criptográficos, o que faz com que a segurança resida na chave, e não no algoritmo.
Em termos matemáticos, o algoritmo criptográfico, que tem origem a partir de um problema matemático difícil, é considerado seguro se 50 mil computadores não puderem resolver esse problema em um milhão de anos. Existem diversos tipos de problemas matemáticos difíceis, tais como [SCH 96] [ROT 98-2] [ROT 98-3]:
Logaritmo discreto ou Discrete Logarithm Problem (DLP), como o DiffieHellman e o Digital Signature Algorithm (DSA).
Fatoração de números primos grandes ou Integer Factorization Problem (IFP), como o RSA.
Curvas elípticas ou Elliptic Curve Discrete Logarithm Problem (ECDLP). As funções one-way hash são consideradas fáceis de serem executadas em uma direção, mas são extremamente difíceis de serem executadas na direção contrária. Fazendo-se uma analogia, esse tipo de função seria como um ovo, que pode ser facilmente quebrado, mexido e frito, porém quase impossível de ser recuperado à sua forma originaI.
36 Funções trap-door one-way hash utilizam uma parte da informação (o trap-door) para realizar a função nas duas direções. O tamanho da chave determina o grau de dificuldade do problema matemático. Uma discussão teórica que envolve as funções one-way hash está relacionada com sua própria existência, pois, matematicamente, não existe um modo de comprovar essa afirmação [ROT 98-3].
Quanto ao RSA e a outros algoritmos de chaves públicas, sua segurança tem como base a dificuldade envolvendo a fatoração de números primos grandes. Ao passo que é fácil multiplicar dois números primos grandes, fatorar o produto desses dois números é muito mais difícil. As chaves pública e privada do RSA são funções de pares de números primos muito grandes, com centenas de dígitos. Uma característica do RSA e de outros algoritmos de chave pública é que eles podem ser utilizados para a cifragem de dados e também para a autenticação por meio de assinaturas digitais [ROT 98-3].
2.5. As maiores falhas nos sistemas criptográficos
A utilização de sistemas criptográficos cresce à medida que aumenta o uso da internet e a troca eletrônica de informações. Devido à sua extrema importância, que pode resultar em uma perigosa falsa sensação de segurança, os fatores que podem causar falhas em sistemas criptográficos devem ser considerados, são:
Falha na checagem do tamanho dos valores.
Reutilização de parâmetros aleatórios, que nunca deveriam ser reutilizados.
Alguns sistemas não destroem a mensagem em texto simples, depois de ser feita a cifragem.
Alguns sistemas utilizam arquivos temporários para proteger os dados que podem ser perdidos durante urna pane no sistema. Eles podem também utilizar a memória virtual para aumentar a disponibilidade d a memória. Em casos extremos, o sistema operacional pode deixar as chaves no disco
rígido. Existem sistemas que permitem que a senha fique armazenada na memória de vídeo.
Há falhas também na utilização da base de dados de recuperação de chaves, em casos de emergência.
37 Em um sistema que utiliza a geração de números aleatórios, se forem gerados números ineficientes e que não são devidamente aleatórios, o sistema será totalmente compro metido, não importando a efetividade do algoritmo de criptografia.
Essas falhas podem ser exploradas por meio de ataques feitos por hardware, que podem introduzir, deliberadamente, falhas no processamento da criptografia, para tentar determinar as chaves secretas [SCH 98].
Além dessas falhas, os algoritmos podem ter problemas em sua implementação. Isso ocorre devido à complexidade existente, que faz com que os erros em seu desenvolvimento sejam comuns. Além disso, os revendedores ainda comercializam produtos com algoritmos já considerados inseguros e até proprietários (apostando na segurança pela obscuridade), além de as interfaces com o usuário ainda serem difíceis de ser utilizadas [BEL 98).
2.6. Os ataques aos sistemas criptográficos
A criptoanálise (cryptanalysis) é a ciência de recuperar uma informação cifrada sem o acesso direto à chave de criptografia, de forma que ela pode recuperar a mensagem original ou a chave de criptografia.
Alguns ataques baseados na criptanálise são:
Ataque do texto cifrado conhecido (Ciphertext-only attack): o atacante possui diversas mensagens, todas cifradas com o mesmo algoritmo criptográfico. O objetivo é recuperar a mensagem original ou deduzir a chave, que pode ser usada para decifrar as mensagens.
Ataque do texto em claro conhecimento (Known-plaintext attack): o atacante possui o conhecimento das mensagens cifradas e também do seu equivalente em claro. O objetivo é deduzir as chaves utilizadas ou um algoritmo para decifrar qualquer mensagem cifrada com a mesma chave.
Ataque do texto em claro escolhido (Chosen-plaintext attack): o atacante escolhe um texto em claro e faz a análise de acordo com o texto
38 cifrado obtido. O objetivo é deduzir as chaves ou um algoritmo para decifrar as mensagens.
Ataque dotexto em claro escolhido comadaptação (Adaptive-chosen-plaintext attack): este é um caso especial do ataque de texto em claro escolhido, no qual o atacante escolhe e modifica o texto em claro escolhido de acordo com os resultados que vem obtendo. O objetivo é deduzir as chaves ou um algoritmo para decifrar as mensagens.
Ataque do texto cifrado escolhido (Chosen-ciphertext attack): o atacante escolhe diferentes textos cifrados para serem decifrados e tem o acesso aos textos decifrados. Esse ataque é usado mais contra algoritmos de chave pública. Com isso, ele pode deduzir a chave utilizada.
Ataque do texto escolhido (Chosen-text attack): composição dos ataques de texto em claro escolhido e de texto cifrado escolhido.
Ataque da chave escolhida: o atacante usa o conhecimento sobre relações entre diferentes chaves.
Rubber-hose cryptanalysis: ataque baseado em ameaça, chantagem ou tortura, para que o usuário entregue a chave criptográfica.
Ataque da compra da chave (Purchase-key attack): ataque baseado em suborno.
Ataque de força bruta (Brute-force attack): ataque em que todas as combinações de chaves possíveis são testadas.
Além desses ataques tradicionais, outros tipos de ataques podem ser utilizados contra os próprios sistemas criptográficos. É interessante notar que o próprio Schneier diz, em [SCH 98], que os ataques aos sistemas não ocorrem pela tentativa de testar todas as chaves possíveis ('força bruta') ou por explorar falhas nos algoritmos, mas, sim, pela exploração de erros no projeto, na implementação e na instalação dos sistemas.
2.7. Protocolos seguros
Protocolo IPsec
Antes de tudo deixa explicar o que significa IPSEC esta sigla significa Internet Protocol Security, o IPSEC é projetado para proteger dados por assinatura digital
39 e criptografar os dados antes de transmitir. IPSEC criptografa informações sobre datagramas IP por encapsulamento, então se o pacote for capturado o atacante não pode fazer quase nada.
Qual é suporte do Windows 2003 para IPSEC?
Geração de chave à para dois computadores comunicarem em rede usando datagrama IP criptografados exige que ambos tem acesso a chave compartilhada de criptografia, está chave permite que cada computador criptografe dados e outro computador descriptografado os dados, o IPSEC utiliza algoritmo chamado Diffie-Hellman para criptografar chaves idênticas
Checksums criptografia à IPSEC usa chave criptográfica para calcular um checksum para o dados em cada pacote, é chamado de as mensagem authnetication code (HMAC) , então transmite com os dados , se alguém alterar o pacote enquanto ele está sendo transmitindo , o pacote é descartado.
Mutual authentication à Antes dos computadores abrirem um canal de comunicação em IPSEC eles devem primeiro estabelecer uma relação de confiança para isto Windows 2003 disponibiliza para autenticação os seguintes meios
Kerberos
Certificado digital Senha
Uma vez os computadores estabelecido o meio seguro evita ataques dos tipos spoof em uma das pontas.
Replay prevention à Em alguns caso é possível o atacante usar dados de pacote capturado contra você, mesmo que os pacotes estiverem criptografados, por exemplo, os primeiros pacotes que dois computadores trocam durante uma sessão segura têm alguns pacote que o atacante pode interceptar e reenviar para ganhar acesso a recursos. O IPSEC previne a repetição de pacotes desta natureza
40 assinando um número de sequência para cada pacote, em um sistema IPSEC não aceita o número de sequência de pacote errado.
Filtragem de pacote IP -> O IPsec inclui seu próprio mecanismo de filtragem de pacote o que evita ataques do tipo denial-of-service pelo bloqueio de especifico tipo de endereço de IPs , protocolos , portas ou qualquer outra combinação.
Importante
IPSEC suporta dois tipos de hash o HMAC combinado com Message Digest 5 (MD5) e HMAC em combinação com Secure Hash Algorithm-1 (SHA1), sobre o HMAC-SHA1 é opção para trabalhar com uma chave maior visto que SHA1 utiliza 160bit enquanto o MD5 utiliza apenas 128bit, o HMAC-MD5 é forte o suficiente para ambiente normal mas HMAC-SHA1 é melhor escolha para um nível maior de segurança
Protocolos utilizado pelo IPSEC
Por padrão o IPsec utiliza dois protocolos que prove diferente tipos de segurança para comunicação em rede
IP Authentication Header (AH)
IP Encapsulation Security Payload (ESP) IPSEC com AH
O protocolo IP authentication header ele não faz a criptografia dos dados em pacotes IP, mas prove autenticação, anti-replay e serviços de integridade, você pode usar AH por você mesmo ou combinação com ESP. Usando o AH sozinho prove uma segurança básica com baixa sobre carga, porem o AH não garante que os pacotes possam ser modificados em rota.
Ao utilizar o AH para proteger a transmissão de dados o sistema insere o cabeçalho AH dentro do datagrama IP, imediatamente depois do cabeçalho IP e antes do datagrama do payload.
41 Next header: Especifica o protocolo que está gerando o cabeçalho, se o IPSec está usando AH sozinho, o campo contém o código para protocolos que gerou o payload no qual é usualmente TCP, UDP ou ICMP.
Payload lenth: Especifica o tamanho do cabeçalho AH Reservado: Sem uso
Índice de parâmetros de segurança: contém um valor que é combinação do pacote do endereço destino e protocolo de segurança (AH), assim define o datagrama Security association. O security association é uma lista dos itens de segurança negociados entre os computadores que estão em comunicação, qual o sistema irá utilizar para proteger os dados transmitidos
Authentication Data: Contem integrity check value (ICV) que envia ao computador cálculos baseados nos campos do endereço IP, cabeçalho AH e payload do datagrama IP, o sistema que realiza o mesmo calculo e compara o resultado para este valor, o ICV é uma mensagem de código de autenticação que tem como principal objetivo autenticar uma mensagem e verificar a sua integridade.
IP –Encapsuluition security payload
O protocolo IP segurança de encapsulamento de payload (ESP) é utilizado para criptografar os dados dentro do datagrama IP, prevenindo que invasores leiam a informação dentro do pacote , caso este seja capturado. O ESP também prove autentificação , integridade e anti-replay , não como o AH que insere somente um cabeçalho dentro do datagrama IP , o ESP insere um cabeçalho e um trailer no qual envolve o payload datagrama , o protocolo criptografia todos os dados abaixo do cabeçalho do ESP incluindo o ESP trailer, portanto se alguém conseguir capturar o pacote usando ESP , pode ler o conteúdo do cabeçalho do endereço IP
42 mas não poderá ler qualquer parte do payload do datagrama que inclui o datagrama TCP , UDP ou cabeçalho ICMP.
A utilização do ESP com AH, pode ser realizada isto permite aumentar a segurança porque somente o ESP sendo utilizado tem a possibilidade o atacante alterar o cabeçalho do endereço IP, incluindo o AH no cabeçalho IP dentro do cálculo ICV resultado na maior proteção e inibe este tipo de ataque.
Os campos e funções do cabeçalho ESP como mostra na figura-4 podem ser visto logo abaixo.
Índice de parâmetros de segurança: contém um valor que é combinação do pacote do endereço destino e protocolo de segurança (AH), assim define o datagrama security association . O security association é uma lista dos itens de segurança negociados entre os computadores que estão em comunicação, qual o sistema irá utilizar para proteger os dados transmitidos
Payload Data: Contem informação trazida de dentro do payload do datagrama IP como TCP, UDP ou ICMP
Figura 9. ESP cabeçalho e trailer localização
43 Pad lenth: especifica o número de bytes que podem ser preenchidos no
campo
Next Header: Especifica o protocolo que está gerando o cabeçalho, se o IPSec está usando AH sozinho, o campo contém o código para protocolos que gerou o payload no qual é usualmente TCP, UDP ou ICMP.
Authentication Data: Contém integrity check value (ICV) que envia ao computador cálculos baseados no campos do endereço ip, cabeçalho AH e payload do datagrama IP, o sistema que realiza o mesmo cálculo e compara o resultado para este valor, o ICV é uma mensagem de código de autenticação que tem como principal objetivo autenticar uma mensagem e verificar a sua integridade.
Modo de transporte e modo túnel
IPSec pode operar de duas formas: modo transporte e modo túnel, para comunicação entre computadores na mesma rede você utilizada o modo transport mode , no qual os dois sistemas tem suporte a IPSec, em conexões WAN e conexões de VPN , é necessário utilizar modo túnel , no sistema final que não tem suporte e toda implementação é feita no roteador de forma que toda ponta deverá ter a mesma implementação ou compatível.
Como funciona o modo túnel
1. Computador envia dados usando padrão de datagrama ip sem proteção; Figura 11. Formato de uma mensagem ESP