You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>CRIPTOGRAFIA</strong><br />
A história da criptologia é um passeio no campo da criatividade humana. A<br />
criptologia foi usada por governantes e pelo povo, em épocas de guerra e em<br />
épocas de paz. Faz parte da história humana porque sempre houve fórmulas<br />
secretas, informações confidenciais e interesses os mais diversos que não<br />
deveriam cair no domínio público ou na mão de inimigos.<br />
Desde quando existe a criptologia? Quais as pessoas famosas que gostavam de<br />
criptologia? Quais as pessoas que ficaram famosas com a criptologia? Quem<br />
usava criptologia?<br />
Dê uma olhada na linha do tempo. Tem muita coisa interessante. Não se esqueça<br />
de que as guerras e a necessidade de manter ou conquistar novos territórios<br />
sempre foram "vitaminas" para a Criptologia. E guerra e disputa é o que nunca<br />
faltou na história da humanidade!<br />
ÉPOCAS DA HISTÓRIA<br />
É comum se dividir a História em fases, épocas e períodos seguindo os mais<br />
variados critérios. Um deles é dividir a História em Idade Antiga, Idade Média,<br />
Idade Moderna e Idade Contemporânea, porém esta é uma sistematização<br />
arbitrária.<br />
Para Toynbee, é possível encontrar unidades mais simples dentro do vasto<br />
complexo de personalidades e fatos sociais que se sucedem sem solução de<br />
continuidade. São as sociedades e, num sentido mais amplo, as civilizações que<br />
ditam a História. Haveria 21 civilizações, distintas das culturas primitivas de<br />
curta duração, das quais ainda hoje cinco sobrevivem.<br />
Já que o critério é arbitrário, vamos fazer o nosso: analisaremos o período antes<br />
de Cristo, depois com a Idade Média e finalmente com as histórias recente e<br />
atual.<br />
ANTES DE CRISTO ou CRIPTOLOGIA NA ANTIGUIDADE<br />
O período antes de Cristo até o ano de 476 é conhecido como ANTIGUIDADE ou<br />
IDADE ANTIGA. Abrange as civilizações dos assírios, egípcios, hebreus, hititas,<br />
persas e outros, que viveram nas vizinhanças do mar Mediterrâneo, com o modo<br />
de produção asiático. As culturas das antigas Grécia e Roma, às vezes chamadas<br />
de civilizações clássicas, são também consideradas parte da Antiguidade, com o<br />
modo de produção escravista.<br />
Os antigos babilônios foram grandes matemáticos e se interessavam pela<br />
astronomia. Até hoje usamos seu método de divisão por 60 na contagem do<br />
tempo em segundos e minutos. Nosso calendário provém do que era usado pelos<br />
egípcios e que depois foi modificado pelos romanos. Ainda hoje as obras de
cientistas gregos, como Euclides, Arquimedes e Aristóteles, são consultadas.<br />
Ignora-se quando e quem inventou o primeiro alfabeto, mas é certo que veio de<br />
uma das culturas antigas. Os fenícios, ao que tudo indica, o teriam difundido pelo<br />
mundo mediterrâneo.<br />
E daí? Já existia criptologia na Idade Antiga? Como ciência oficializada, a<br />
resposta é não. Como aplicação prática, sim!<br />
IDADE MÉDIA ou CRIPTOLOGIA MEDIEVAL<br />
Classicamente, a Idade Média vai de 476, data da queda do Império Romano, até<br />
1453, data da queda de Constantinopla. Do início da idade média até Carlos<br />
Magno, que funda o Santo Império Romano, católico e feudal, há um longo<br />
período de transição.<br />
A Idade Média é marcada pelas migrações e invasões bárbaras, a expansão do<br />
islamismo, a fundação do império de Carlos Magno, a organização feudal, a<br />
Cavalaria e as Ordens Militares, as Cruzadas, a organização da Igreja Católica e<br />
o prestígio temporal dos papas, heresias e Inquisição, a formação das<br />
monarquias feudais e o início das monarquias modernas do Ocidente, a luta<br />
entre o Império e o papado, a guerra dos Cem anos, a Magna Charta Libertatum,<br />
documento fundamental das liberdades modernas, o Cisma do Ocidente, a<br />
formação das monarquias da Europa Oriental, as invasões dos mongóis e a queda<br />
de Constantinopla, em 1453, que marca o seu fim.<br />
Apesar das proibições (e até perseguições) no chamado período das trevas, a<br />
criptologia era uma necessidade, e o movimento renascentista, com início ao<br />
redor de 1300, trouxe grandes novidades.<br />
CRIPTOLOGIA RECENTE<br />
A história recente é a época das grandes invenções, dos descobrimentos<br />
marítimos, da Renascença. Fatos marcantes foram a centralização monárquica e<br />
o absolutismo, as guerras religiosas, a nova política econômica, o surgimento do<br />
Direito das gentes, o advento da ciência moderna, o classicismo literário e o<br />
desenvolvimento artístico, a formação das potências modernas e a expansão<br />
colonial.<br />
Em 1789 ocorre a Revolução Francesa seguida pela era napoleônica, pela luta<br />
pelo Estado nacional e constitucional, pelas revoluções democráticas e pelo<br />
aparecimento da questão social e pelo imperialismo colonial. É a época das<br />
grandes invenções, principalmente relacionadas à comunicação: o telégrafo e o<br />
rádio mudam radicalmente o papel da criptologia.<br />
A <strong>CRIPTOGRAFIA</strong> ATUAL<br />
Em 1900 o desenvolvimento tecnológico continua e as duas Grandes Guerras<br />
aumentam exponencialmente a importância da criptologia. Seus efeitos são<br />
sentidos tanto na criptografia quanto na criptoanálise.
O computador tem um impacto ainda maior que os já causados pelo telégrafo e<br />
pelo rádio - a criptologia distancia-se dos conceitos tradicionais para entrar<br />
numa nova era.<br />
+- (1900 a.c)<br />
A história acontece numa vila egípcia perto do rio Nilo chamada Menet Khufu.<br />
No túmulo de Khnumhotep II, homem de grande importância, alguns hieróglifos<br />
foram substituídos por outros mais "importantes e bonitos". Kahn considera este<br />
fato como o primeiro exemplo documentado de escrita cifrada.<br />
± 1500 a.C.<br />
A criptografia da Mesopotâmia ultrapassou a egípcia, chegando a um nível<br />
bastante avançado. O primeiro registro do uso da criptografia nesta região está<br />
numa fórmula para fazer esmaltes para cerâmica. O tablete de argila que contém<br />
a fórmula tem apenas cerca de 8 cm x 5 cm e foi achado às margens do rio Tigre.<br />
Usava símbolos especiais que podem ter vários significados diferentes. (Kahn)<br />
Nesta época, mercadores assírios usavam "intaglios", que são peças planas de<br />
pedra com inscrições de símbolos que os identificavam. O moderno comércio<br />
com assinaturas digitais estava inventado!<br />
Esta também foi a época em que culturas como a do Egito, China, Índia e da<br />
Mesopotâmia desenvolveram a esteganografia:<br />
* Tatuagens com mensagens na cabeça de escravos. Infelizmente era preciso<br />
esperar o cabelo crescer para esconder a mensagem. A decifração era feita no<br />
barbeiro...<br />
* Marcas na parte interna de caixas de madeira usadas para transportar cera. As<br />
marcas eram escondidas com cera nova. Para decifrar, bastava derreter a cera.<br />
* Mensagens colocadas dentro do estômago de animais... e também de humanos.<br />
600 a 500 a.C.<br />
Escribas hebreus, escrevendo o Livro de Jeremias, usaram a cifra de substituição<br />
simples pelo alfabeto reverso conhecida como ATBASH. As cifras mais<br />
conhecidas da época são o ATBASH, o ALBAM e o ATBAH, as chamadas cifras<br />
hebraicas. (Kahn)<br />
Se é que realmente existiu, o scytalae espartano ou bastão de Licurgo era um<br />
bastão de madeira ao redor do qual se enrolava firmemente uma tira de couro ou<br />
pergaminho, longa e estreita. Escrevia-se a mensagem no sentido do<br />
comprimento do bastão e, depois, desenrolava-se a tira com as letras
embaralhadas.<br />
século 400 a.C<br />
Textos gregos antigos, de Enéas, o Tático, descrevem vários métodos de ocultar<br />
mensagens. Este cientista militar e criptógrafo inventou um telégrafo hidro-ótico,<br />
um sistema de comunicação à distância. Dois grupos, separados por uma<br />
distância em que ainda era possível reconhecer a luz de uma tocha e que<br />
quisessem enviar mensagens deviam possuir dois vasos iguais. Os vasos tinham<br />
um abertura no fundo, fechada por uma rolha, e eram preenchidos com água.<br />
Um bastão, que tinha mensagens inscritas, era colocado em pé dentro do vaso.<br />
Ao sinal de uma tocha, as rolhas eram retiradas simultaneamente. Quando o<br />
nível da água estivesse na altura da mensagem que se queria transmitir, outro<br />
sinal luminoso era enviado para que as rolhas fossem recolocadas.<br />
± 300 a.C.<br />
rtha-sastra, um livro atribuído a Kautilya, foi escrito na Índia. Cita diversas cifras<br />
criptográficas e recomenda uma variedade de métodos de criptoanálise (o<br />
processo de quebrar códigos) para obter relatórios de espionagem. Os processos<br />
são recomendados para diplomatas.<br />
Euclides de Alexandria, matemático grego que viveu aproximadamente de 330<br />
a.C. a 270 a.C., compilou e sistematizou o que havia na época sobre geometria e<br />
teoria dos números. É o famoso texto "Elementos", o livro mais publicado na<br />
história da humanidade (não é a Bíblia, como se costuma dizer). Euclides nem de<br />
longe poderia imaginar a tremenda influência que sua obra teria nos dias da<br />
moderna criptologia feita por computador.<br />
Erastótenes de Cirene, filósofo e geômetra grego, viveu de 276 a.C. a 194 a.C.<br />
Conhecido como criador de um método para identificar números primos,<br />
chamado de crivo de Erastótenes, e por ter calculado o diâmetro da Terra com<br />
surpreendente precisão.<br />
± 200 a.C.<br />
Políbio, um historiador grego nascido em Megalópolis e que viveu de 204 a.C. a<br />
122 a.C., escreveu vários livros sobre o Império Romano. Descreveu também<br />
uma cifra de substituição que converte os caracteres da mensagem clara em<br />
cifras que, apesar de não ser da sua autoria, ficou conhecida como Código de
Políbio.<br />
± 130 a.C.<br />
Em Uruk, na região do atual Iraque, era comum os escribas transformarem seus<br />
nomes em números dentro do emblema que identificava seus trabalhos. A<br />
prática, provavelmente, era apenas para divertir os leitores e não estava<br />
relacionada à segurança.<br />
50 a.C.<br />
O imperador romano Júlio César usou uma cifra de substituição para aumentar a<br />
segurança de mensagens governamentais. César alterou as letras desviando-as<br />
em três posições - A se tornava D, B se tornava E, etc. Às vezes, César reforçava<br />
sua cifragem substituindo letras latinas por letras gregas.<br />
O Código de César é o único da Antiguidade que continua sendo usado até hoje.<br />
Atualmente denomina-se qualquer cifra baseada na substituição cíclica do<br />
alfabeto de Código de César.<br />
79 d.C.<br />
A fórmula Sator ou quadrado latino é encontrado em escavações feitas em<br />
Pompéia, inscrito numa coluna. Ocorre também num amuleto de bronze,<br />
originário da Ásia Menor, datado do século V. As palavras rotas arepo tenet<br />
opera sator parecem ter o efeito mágico de nunca desaparecem... persistem até<br />
hoje como um enigma de transposição.<br />
200 d.C.<br />
O Papiro de Leiden, um texto que detalha como fazer poções especiais, possui<br />
texto cifrado nos trechos cruciais das receitas. Exemplos destas "receitas<br />
mágicas" são as que supostamente fazem com que um homem ame uma mulher<br />
ou que provoquem uma doença de pele incurável. Só para informar, as receitas<br />
não funcionam<br />
400 d.C.
Kama-Sutra, escrito por Vatsayana, classifica a criptografia como a 44ª e 45ª das<br />
64 artes que as pessoas deveriam conhecer e praticar:<br />
* A arte de saber escrever em cifras e de escrever palavras de uma forma<br />
peculiar.<br />
* A arte de falar mudando as formas da palavra, conhecida como criptolalia.<br />
A LINHA DO TEMPO DA <strong>CRIPTOGRAFIA</strong> RECENTE.<br />
1466<br />
Leon Battista Alberti (1404-1472) era amigo de Leonardo Dato, um secretário<br />
pontificial que o aproximou da criptologia. Alberti inventou e publicou a primeira<br />
cifra polialfabética, criando um disco de cifragem para simplificar o processo,<br />
conhecido como Disco de Alberti (que foi reeditado como um brinquedo chamado<br />
"Captain Midnight Decoder *** Ao que tudo indica, esta classe de cifra não foi<br />
quebrada até os anos de 1800. Alberti também tem muitos escritos sobre o<br />
estado da arte de cifras, além da sua própria invenção. Usou seu disco para<br />
facilitar a obtenção de criptogramas. Estes sistemas eram muito mais fortes do<br />
que a nomenclatura usada pelos diplomatas da época e foram aplicados durante<br />
muitos séculos.<br />
O "Trattati in cifra" de Leon Battista Alberti foi publicado em Roma, na Itália, em<br />
1470. Continha "especialmente teorias e processos de cifragem, métodos de<br />
decifração e dados estatísticos" (Galland).<br />
1473-1490<br />
Um manuscrito [...] de Arnaldus de Bruxella usa cinco linhas de cifras para<br />
ocultar a parte crucial da operação da alquimia que fazia a pedra filosofal."<br />
(Kahn)<br />
1474<br />
Em 1474, Sicco Simonetta publicou "Regulae ad extrahendum litteras zifferatas<br />
sine exemplo", um pequeno trabalho ressaltando "métodos de decifração e<br />
fornececendo dados estatísticos consideráveis" (Galland). "A data do pequeno<br />
ensaio de Simonetta sobre cifras é importante porque se tratava de um período<br />
no qual a criptologia se tornou prática universal, quando cifras simples<br />
evoluíram para criptogramas complicados." (Thompson).<br />
1518<br />
Johannes von Heydenberg aus Trittenheim/Mosel, ou Johannes Trithemius (1462-<br />
1516), escreveu o primeiro livro impresso de criptologia. Inventou uma cifra
esteganográfica na qual cada letra era representada por uma palavra obtida de<br />
uma sucessão de colunas. A série de palavras resultantes ficava parecida com<br />
uma oração legítima. Também descreveu cifras polialfabéticas na forma de<br />
tabelas de substituição retangulares que, na época, já tinham se tornado padrão.<br />
Introduziu a noção da troca de alfabetos a cada letra.<br />
Trithemius escreveu, porém não publicou, sua Steganographia, a qual circulou<br />
como manuscrito por mais de cem anos, sendo copiada por muitas pessoas que<br />
desejavam extrair os segredos que se pensava que continha. A verdadeira<br />
história do feiticeiro que conjurava espíritos e praticava magia negra você<br />
encontra em "O Segredo do Terceiro Livro". Altamente interessante, recomendo<br />
a leitura.<br />
A Polygraphiae libri sex de Trithemius, a qual incluía sua tabela de substituição<br />
Tabula Recta Caesar, foi publicada em 1518, apesar de haver dúvidas quanto à<br />
data correta. Foi reimpressa em 1550, 1564, 1571 e 1600. Uma tradução em<br />
Francês apareceu em 1561 e em 1564. (Galland)<br />
1526<br />
ohannes von Heydenberg aus Trittenheim/Mosel, ou Johannes Trithemius (1462-<br />
1516), escreveu o primeiro livro impresso de criptologia. Inventou uma cifra<br />
esteganográfica na qual cada letra era representada por uma palavra obtida de<br />
uma sucessão de colunas. A série de palavras resultantes ficava parecida com<br />
uma oração legítima. Também descreveu cifras polialfabéticas na forma de<br />
tabelas de substituição retangulares que, na época, já tinham se tornado padrão.<br />
Introduziu a noção da troca de alfabetos a cada letra.<br />
Trithemius escreveu, porém não publicou, sua Steganographia, a qual circulou<br />
como manuscrito por mais de cem anos, sendo copiada por muitas pessoas que<br />
desejavam extrair os segredos que se pensava que continha. A verdadeira<br />
história do feiticeiro que conjurava espíritos e praticava magia negra você<br />
encontra em "O Segredo do Terceiro Livro". Altamente interessante, recomendo<br />
a leitura.<br />
A Polygraphiae libri sex de Trithemius, a qual incluía sua tabela de substituição<br />
Tabula Recta Caesar, foi publicada em 1518, apesar de haver dúvidas quanto à<br />
data correta. Foi reimpressa em 1550, 1564, 1571 e 1600. Uma tradução em<br />
Francês apareceu em 1561 e em 1564. (Galland)<br />
1526<br />
O livro Opus novum ... principibus maxime vtilissimum pro cipharis, de Jacopo<br />
Silvestri, é impresso. A obra discute seis métodos de cifras, inclusive a cifra de<br />
César, para a qual ele recomenda o uso de um disco de cifragem. Opum novum<br />
foi escrito para ser um manual prático de criptologia que "claramente pretendia<br />
alcançar um vasto círculo de leitores". (Arnold)<br />
Na figura ao lado, observe que o alfabeto-chave de Silvestri não possuía as letras<br />
j, v, w e y. "No disco, as três marcas que sucedem o Z representam: & para et;<br />
um símbolo usado comumente no Latim medieval para significar us ou um no<br />
final de palavras (p.ex., plurib& = pluribus), ou com, con, cum ou cun no início
de palavras (p.ex., &cedo = concedo); e um símbolo usado para rum, a<br />
terminação do genitivo plural latino (illo& = illorum). O zig-zag no centro da<br />
figura deve corresponder a uma pequena manivela para girar os discos móveis".<br />
(Arnold)<br />
1533<br />
Heinrich Cornelius Agrippa von Nettelsheim (1486-1535) publica o De occulta<br />
philosophia, em Colônia, na Alemanha. No livro 3, capítulo 30, descreve sua cifra<br />
de substituição monoalfabética, hoje conhecida como Cifra Pig Pen. A tradução<br />
literal do nome é Porco no Chiqueiro e vem do fato de que cada uma das letras<br />
(os porcos) é colocada numa "casa" (o chiqueiro). Na época, a cifra parece ter<br />
tido importância pois, alguns anos mais tarde, Vigenère a reproduz no seu<br />
Traicté des chiffres, ou secretes manieres d'escrire (Paris, 1586, f. 275 v).<br />
Aparentemente, esta cifra foi utilizada pela sociedade secreta dos francomaçons.<br />
1540<br />
Giovanni Battista Palatino publicou seu Libro nvova d'imparare a scrivere ... Con<br />
vn breue et vtile trattato de le cifere. Foi reimpresso em 1545, 47, 48, 50, 53, 56,<br />
61, 66, 78 e 1588. Uma versão revisada foi impressa em 1566, 78 e 88<br />
A CIFRA DE CÉSAR.<br />
Apesar de a criptologia estar bastante avançada na época, em 50 a.C. César<br />
usava um sistema bastante simples de substituição. Suetônio, escritor romano<br />
que viveu no início da era cristã (69 d.C.), em Vida dos Césares, escreveu a<br />
biografia dos imperadores romanos, de Júlio César a Domiciano.<br />
Conta que Júlio César usava na sua correspondência particular um código de<br />
substituição no qual cada letra da mensagem original era substituída pela letra<br />
que a seguia em três posições no alfabeto: a letra A era substituída por D, a B<br />
por E, e assim sucessivamente<br />
Hoje em dia, porém, a denominação de Código de César é utilizada para<br />
qualquer cifra na qual cada letra da mensagem clara seja substituída por outra<br />
deslocada um número fixo de posições, não necessariamente três. Um exemplo é<br />
o código que, ainda segundo Suetônio, era usado por Augusto, onde a letra A era<br />
substituída por B, a B por C e assim sucessivamente.<br />
Como o alfabeto romano possui 26 letras, é possível obter 26 alfabetos cifrantes<br />
diferentes, dos quais um (o do deslocamento zero) não altera a mensagem<br />
original. Cada um destes alfabetos cifrantes é conhecido como Alfabeto de César.
CARACTERÍSTICAS<br />
• Origem: Usada pelo imperador romano Júlio César em 50 a.C.<br />
• Classe: Substituição Simples.<br />
• Tipo: Monoalfabética (porque usa apenas UM alfabeto cifrante)<br />
Monogrâmica (porque trata cada UM dos caracteres individualmente).<br />
• Características: Reversível porque, aplicando-se o mesmo método no texto<br />
cifrado obtém-se novamente a mensagem original.<br />
• Segurança: Baixíssima<br />
• Uso: Aplicável apenas em textos muito curtos.<br />
• Criptoanálise: Uma simples criptoanálise baseada na característica<br />
estatística da língua é suficiente para decifrar o texto.<br />
A substituição original do código de César encontra-se na tabela abaixo:<br />
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C<br />
Apesar da sua simplicidade (ou exatamente devido a ela), esta cifra foi utilizada<br />
pelos oficiais sulistas na Guerra de Secessão americana e pelo exército russo em<br />
1915.<br />
A cifra ROT13, que surgiu em 1984 na USENET, baseia-se numa substituição na<br />
posição 13 (A por N, B por O, etc).<br />
Com o uso de dois discos concêntricos contendo todas as letras do alfabeto, a<br />
substituição se torna extremamente simples. Estes discos já foram utilizados<br />
como brinquedo que fazia a alegria de muitas crianças (... e de adultos também).<br />
O que é Esteganografia ?<br />
O termo esteganografia vem do grego e significa "escrita coberta". É um ramo<br />
particular da criptologia que consiste, não em fazer com que uma mensagem seja<br />
ininteligível, mas em camuflá-la, mascarando a sua presença. Ao contrário da<br />
criptografia, que procura esconder a informação da mensagem, a esteganografia<br />
procura esconder a EXISTÊNCIA da mensagem.<br />
Contrariamente à criptografia, que cifra as mensagens de modo a torná-las<br />
incompreensíveis, a esteganografia esconde as mensagens através de artifícios<br />
usando imagens ou um texto que tenha sentido, mas que sirvam apenas de<br />
suporte (como o alfabeto biliteral de Francis Bacon ou as famosas cartas de<br />
George Sand). A idéia é a mesma das grelhas de Cardano e do "barn code":<br />
mesclar a mensagem numa outra, onde apenas determinadas palavras devem ser<br />
lidas para descobrir o texto camuflado.<br />
O primeiro uso confirmado da esteganografia está em "As Histórias" de Heródoto<br />
e remonta ao século V a.C.: um certo Hístio, querendo fazer contato secreto com<br />
seu superior, o tirano Aristágoras de Mileto, escolheu um escravo fiel, raspou<br />
sua cabeça e escreveu na careca a mensagem que queria enviar. Esperou que os
cabelos crescessem e mandou o escravo ao encontro de Aristágoras com a<br />
instrução de que deveriam raspar seus cabelos.<br />
Ainda nas "As Histórias" de Heródoto consta que, para informar os espartanos de<br />
um ataque iminente dos persas, o rei Demaratos utilizou um estratagema muito<br />
especial: pegou tabletes, retirou-lhes a cera, gravou na madeira a mensagem<br />
secreta e recobriu os tabletes novamente com cera. Deste modo, os tabletes,<br />
aparentemente virgens, não chamaram a atenção e chegaram até as mãos dos<br />
gregos. O problema foi que os gregos não imaginavam que a cera que tinham<br />
importado continha mais do que apenas cera. Foi Gorgo, a mulher de Leônidas,<br />
quem teve a idéia de raspar a cera e bisbilhotar o fundo das caixinhas que a<br />
transportava - leu a mensagem, avisou os gregos e garantiu a vitória sobre os<br />
persas.<br />
Na China antiga também se usava a esteganografia. Escreviam-se mensagens<br />
sobre seda fina e o pequeno retalho era transformado numa bolinha que era<br />
recoberta por cera. Para transportar a mensagem, obrigavam um mensageiro<br />
engolir a bolinha, ir até o destinatário e entregá-la depois de... éééécccaaaa.<br />
No século XVI, o cientista italiano Giovanni Porta descobriu como esconder uma<br />
mensagem num ovo cozido: escrevia sobre a casca do ovo cozido com uma tinta<br />
contendo uma onça de alume (± 29 g) diluída em cerca de meio litro de vinagre.<br />
A solução penetrava na casca e se depositava sobre a superfície branca do ovo.<br />
Depois, bastava o destinatário abrir o ovo para ler a mensagem.<br />
O historiador da Grécia antiga, Enéias, o Tático, teve a idéia de enviar uma<br />
mensagem secreta fazendo minúsculos furos em certas letras de um texto<br />
qualquer. A sucessão destas letras marcadas fornecia o texto secreto. Dois mil<br />
anos mais tarde, remetentes ingleses empregaram o mesmo método, não para<br />
garantir o segredo de suas cartas, mas para evitar o pagamento de taxas de<br />
correio muito caras. Na realidade, antes da reforma do serviço postal ao redor de<br />
1850, enviar uma carta custava cerca de um shilling para cada cem milhas de<br />
distância. Os jornais, no entanto, eram isentos. Graças a furinhos de agulha, os<br />
ingleses espertos enviavam suas mensagens gratuitamente transformando folhas<br />
de jornal em verdadeiras peneiras Este procedimento também foi utilizado pelos<br />
alemães durante a Primeira Guerra Mundial. Durante a Segunda Guerra, eles<br />
aperfeiçoaram o método marcando letras de jornais com tintas "invisíveis" ao<br />
invés de fazerem furos.<br />
Os espiões alemães da Segunda Guerra utilizavam micropontos para fazer com<br />
que suas mensagens viajassem discretamente. Eram fotografias do tamanho de<br />
um ponto (.) que depois eram ampliadas para que a mensagem aparecesse<br />
claramente. Era uma espécie de microfilme colocado numa letra, num timbre,<br />
etc.<br />
Em 1999, Catherine Taylor Clelland, Viviana Risca e Carter Bancroft publicaram<br />
na revista Nature "Hiding messages in DNA microdots" (escondendo mensagens<br />
em micropontos de DNA). Como qualquer material genético é formado por<br />
cadeias de quatro nucleotídeos (Adenina, Citosina, Guanina e Timina), podemos<br />
comparar estas cadeias a um alfabeto de quatro letras: A, C, G e T. Além disso,<br />
como os cientistas atualmente podem fabricar cadeias de DNA com um conjunto
predeterminado de nucleotídeos, nada os impede de atribuir a um grupo de três<br />
nucleotídeos uma letra do alfabeto, um número ou sinais de pontuação (por<br />
exemplo, "A"=CGA, "B"=CCA, etc) e compor uma "mensagem genética". Para<br />
disfarçar as pistas, pode-se misturar algumas outras sequências aleatórias de<br />
nucleotídeos. Para complicar as coisas, o resultado é apenas visível ao<br />
microscópio eletrônico. Uma possível aplicação deste método esteganográfico<br />
seria, por exemplo, uma empresa que produz uma nova espécie de tomate e<br />
inclui sua marca de fábrica nas moléculas do tomate afim de evitar imitações.<br />
Códigos<br />
Códigos podem ser protocolos de comunicação, ou seja, um "conjunto de<br />
convenções que rege o tratamento e, especialmente, a formatação de dados num<br />
sistema de comunicação". Existem códigos abertos (como o código Morse) e<br />
códigos secretos.<br />
Códigos também podem ser uma coletânea de substitutos para letras, palavras<br />
ou frases inteiras. Geralmente são colocados em livros, os chamados livros de<br />
códigos ou nomenclaturas, como duas listas em ordem alfabética. Numa delas o<br />
texto claro está em ordem alfabética (para facilitar a cifragem), seguido dos<br />
substitutos. Na outra, os códigos estão em ordem alfabética (para facilitar a<br />
decifração), seguidos do texto claro correspondente.<br />
CIFRAS DE BLOCO<br />
As cifras de bloco operam em blocos de tamanho fixo, geralmente de 64 ou 128<br />
bits. Para cifrar mensagens cujo comprimento ultrapasse o tamanho do bloco,<br />
existem vários modos de operação. A maioria apenas confere<br />
confidencialidade; algumas proporcionam confidencialidade e autenticação. Este<br />
texto é um resumo dos principais modos de operação das cifras de bloco.<br />
ECB - Electronic codebook<br />
O modo de operação mais simples é o electronic codebook - ECB (livro de código<br />
eletrônico). A mensagem clara é fracionada em blocos de tamanho fixo e cada<br />
bloco é cifrado isoladamente. No final, a mensagem cifrada é obtida pela<br />
concatenação dos blocos cifrados.
A desvantagem deste método é que blocos de texto claro iguais produzem<br />
também blocos cifrados iguais, ou seja, o método não esconde o padrão dos<br />
dados. Este modo de operação não acrescenta nada à confidencialidade<br />
proporcionada pela cifra. A comparação do resultado da aplicação de uma cifra<br />
de bloco nos dados de uma imagem gráfica, usando diversos modos de operação,<br />
mostra de forma clara a contribuição à confidencialidade proporcionada pelos<br />
modos de operação.<br />
O modo ECB também pode fazer com que protocolos sem proteção de<br />
integridade se tornem ainda mais vulneráveis a ataques, principalmente a<br />
ataques de replay (veja em Criptoanálise/Tipos de ataque).
CBC - Cipher-block chaining<br />
No modo de operação cipher-block chaining - CBC (corrente de blocos), é feita<br />
uma operação XOR entre cada novo bloco de texto claro com o bloco cifrado<br />
obtido na etapa imediatamente anterior. Desta forma, cada um dos blocos<br />
cifrados depende de todos os blocos de texto claro anteriores.<br />
O CBC é um dos modos de operação mais utilizados. Sua maior desvantagem é<br />
ser sequencial. Como não pode ser usado em paralelo (pois sempre depende do<br />
resultado anterior), seu uso dificulta o processamento de blocos em paralelo, o<br />
que melhoraria o desempenho do método.
PCBC - Propagating cipher-block chaining<br />
O modo de operação propagating cipher-block chaining - PCBC (corrente de<br />
blocos em propagação) foi projetado para propagar ou esparramar melhor que o<br />
CBC pequenas alterações no texto cifrado. É usado quase que exclusivamente no<br />
Kerberos e no WASTE. As rotinas de cifragem e decifração são as seguintes:<br />
O vetor de inicialização é<br />
CFB - Cipher feedback e OFB - output feedback<br />
O modo Output Feedback (OFB) transforma uma cifra de bloco num gerador de<br />
números pseudo-aleatórios. O texto cifrado realimenta a cifra de bloco e este<br />
processo é repetido para produzir um fluxo de bits pseudo-randômicos. O fluxo<br />
de bits é totalmente determinado pelo algoritmo, pela chave, por um vetor de<br />
inicialização e pelo número de bits que realimentam a cifra em cada etapa. O<br />
fluxo de bits pode então servir para fazer uma operação XOR com o texto claro<br />
afim de produzir o texto cifrado, transformando efetivamente a cifra de bloco<br />
numa cifra de fluxo.<br />
O modo Cipher Feedback (CFB) difere do OFB apenas porque o texto cifrado<br />
(depois da etapa XOR) realimenta o método ao invés da saída da cifra de bloco<br />
(antes da etapa XOR). Uma cifra de bloco operando no modo CFB não pode ser<br />
usada como um gerador de números randômicos.<br />
Com o cipher feedback um bloco de fluxo de chave é calculado cifrando-se o<br />
bloco de texto cifrado anterior.
O modo output feedback gera o próximo bloco de fluxo de chave cifrando o bloco<br />
de fluxo de chave anterior:
O algoritmo DES ilustrado<br />
Conheça todos os detalhes da origem e da concepção do DES, o primeiro<br />
exemplar da modernidade. O artigo sobre criptologia "The DES Algorithm<br />
Illustrated" de Grabbe, do qual tomei conhecimento através do meu amigo Dr.<br />
César Bravo, e "The Code Book" de Singh serviram de base para esta série sobre<br />
o DES.<br />
O National Bureau of Standards paquera o Gênio da Garrafa<br />
O algoritmo DES (Data Encryption Standard) já foi o algoritmo de encriptação<br />
mais usado no mundo. Durante muitos anos, e para muitas pessoas, "fazer código<br />
secreto" e DES foram sinônimos.
Em 15 de Maio de 1973, durante o reinado de Richard Nixon, o National Bureau<br />
of Standards (NBS) publicou uma notícia no Federal Register solicitando<br />
formalmente propostas de algoritmos criptográficos para proteger transmissões<br />
e armazenamento de dados. A notícia explicava porque a encriptação era um<br />
assunto importante.<br />
Nas últimas décadas houve um aumento acelerado no acervo e na comunicação<br />
de dados digitais do governo, da indústria e de outras organizações do setor<br />
privado. Com frequência, o conteúdo destes dados transmitidos e armazenados é<br />
de alto valor e/ou alta sensibilidade. Hoje em dia são comuns as transmissões de<br />
dados de transferências de fundos de alguns milhões de dólares (entre agências<br />
bancárias), da compra ou venda de ações (entre bolsas de valores e corretoras),<br />
de mandados de prisão ou registros de prisão e condenação (entre agências de<br />
serviços policiais), de reservas e emissões de passagens aéreas (entre<br />
companhias aéreas e agências de turismo) e de registros de saúde e dados de<br />
pacientes (entre médicos e centros de tratamento).<br />
O crescente volume, valor e confidencialidade destes registros regularmente<br />
transmitidos e armazenados por agências comerciais e governamentais acabou<br />
destacando o problema e a preocupação com a exposição destes dados ao acesso<br />
e uso não autorizados. O mau uso pode ocorrer sob a forma de roubo ou<br />
desfalques de registros de dados representando dinheiro, modificações<br />
maliciosas de balanços comerciais ou a interceptação e mau uso de informações<br />
confidenciais sobre pessoas. A necessidade de proteção torna-se então aparente<br />
e urgente.<br />
Reconhecidamente, a encriptação (também conhecida por embaralhamento,<br />
cifragem ou transformação de privacidade) representa a única maneira de<br />
proteger tais dados durante uma transmissão e um modo de proteger o conteúdo<br />
de dados armazenados em vários meios, contanto que se possa criar e validar<br />
uma encriptação forte o suficiente e que seja passível de ser integrada num<br />
sistema. O National Bureau of Standards solicitava técnicas e algoritmos para a<br />
encriptação de dados por computador. Também solicitava técnicas para<br />
implementar a função criptográfica: gerar, avaliar e proteger chaves<br />
criptográficas; manter arquivos codificados com chaves que expiram; fazer<br />
atualizações parciais em arquivos encriptados e misturar dados encriptados com<br />
claros para permitir marcações, contagens, roteamentos, etc. O Bureau, no seu<br />
papel de estabelecer padrões e de auxiliar o governo e a indústria no acesso à<br />
tecnologia, se encarregaria de avaliar os métodos de proteção para preparar as<br />
linhas de ação.<br />
O NBS ficou esperando por respostas. Nenhuma apareceu até 6 de Agosto de<br />
1974, três dias antes da renúncia de Nixon, quando a IBM apresentou um<br />
algoritmo candidato que ela havia desenvolvido internamente, denominado<br />
LUCIFER.<br />
HORST FEISTEL e o algoritmo LUCIFER<br />
Horst Feistel chegou como imigrante alemão aos Estados Unidos em 1934.<br />
Estava prestes a se tornar um cidadão estadunidense quando os EUA entraram
na guerra. Para Feistel, alemão, isto significou uma imediata prisão domiciliar, a<br />
qual se estendeu até 1944. Mesmo após alguns depois do incidente, Feistel<br />
manteve-se distante da criptologia para evitar levantar suspeitas das<br />
autoridades. Porém, quando estava no Cambridge Research Center da Força<br />
Aérea Americana, não resistiu e começou a pesquisar cifras. Imediatamente<br />
começou a ter problemas com a National Security Agency, a NSA, organização<br />
responsável pela segurança das comunicações militares e governamentais, que<br />
também se incumbe de interceptar e decifrar mensagens estrangeiras. Até hoje,<br />
mais que qualquer outra organização do mundo, a NSA é a que emprega o maior<br />
número de matemáticos, a que compra a maior quantidade de hardware e a que<br />
intercepta mais mensagens. Pode ser considerada a líder mundial da bisbilhotice<br />
e da quebra de sigilo.<br />
A NSA não se importava com o passado de Feistel, queria apenas ter o<br />
monopólio da pesquisa em criptografia e parece que acabou conseguindo fazer<br />
com que o projeto de pesquisa de Feistel fosse cancelado. Em 1960, o<br />
pesquisador, perseguido, foi para a Mitre Corporation, mas a NSA continuou<br />
fazendo pressão e forçou-o a abandonar seu trabalho pela segunda vez. Feistel<br />
acabou indo para o Thomas J. Watson Laboratory da IBM, perto de Nova Iorque,<br />
onde, por alguns anos, conseguiu prosseguir com suas pesquisas sem ser caçado.<br />
Foi neste laboratório que, no início de 1970, ele desenvolveu o sistema Lucifer. E<br />
foi este o sistema apresentado à NBS.<br />
Após avaliar o algoritmo com a ajuda da National Security Agency (ironia do<br />
destino), o NBS adotou o algoritmo LUCIFER com algumas modificações sob a<br />
denominação de Data Encryption Standard (DES) em 15 de Julho de 1977. O<br />
DES foi rapidamente adotado na mídia não digital, como nas linhas telefônicas<br />
públicas. Depois de alguns anos, a International Flavors and Fragrances, por<br />
exemplo, estava utilizando o DES para proteger as transmissões por telefone das<br />
suas preciosas fórmulas ("With Data Encryption, Scents Are Safe at IFF" na<br />
Computerworld 14, No. 21, 95 de 1980).<br />
Neste meio tempo, a indústria bancária, a maior usuária de encriptação depois<br />
do governo, adotou o DES como padrão para o mercado bancário atacadista. Os<br />
padrões do mercado atacadista da indústria bancária são estabelecidos pelo<br />
American National Standards Institute (ANSI). A norma ANSI X3.92, adotada em<br />
1980, especifica o uso do algoritmo DES.<br />
O governo dos EUA, durante os cerca de 20 anos de reinado do DES, forçava a<br />
indústria a limitar sua criptografia ao DES (e até a formas mais fracas) sem<br />
revelar como esta cifra era fácil de quebrar. A aceitação desta política,<br />
praticamente sem contestação, colocou toda a infraestrutura de importância<br />
crítica em risco.
Para provar a falta de segurança do DES, a Electronic Frontier Foundation - EFF<br />
construiu o primeiro hardware para crackear mensagens codificadas por este<br />
método. Na quarta-feira, 17 de Julho de 1998, o EFF DES Cracker, construído<br />
com menos que US$ 250.000, venceu um concurso lançado pelo RSA Laboratory,<br />
o "DES Challenge II", e a equipe recebeu o prêmio de US$ 10.000. A máquina<br />
precisou de menos que 3 dias para completar o desafio, ultrapassando a marca<br />
de 39 dias anteriormente conseguida através de um processamento maciço de<br />
várias dezenas de milhares de computadores em rede.<br />
Seis meses mais tarde, no dia 19 de Janeiro de 1999, uma terça-feira, a<br />
Distributed.Net, uma coalisão mundial de entusiastas do computador,<br />
trabalhando com um EFF DES Cracker e uma rede distribuída de cerca de<br />
100.000 PCs na Internet, quebrou novamente o recorde. Para vencer o concurso<br />
DES Challenge III da RSA precisou apenas de 22 horas e 15 minutos. No andar<br />
térreo da Conferência sobre Segurança de Dados & Expo da RSA, um encontro<br />
sobre segurança de dados e criptografia de grande importância que é realizado<br />
em San José, California, o sistema estava testando 245 bilhões de chaves por<br />
segundo quando a chave correta foi encontrada.<br />
Estava decretado o fim do DES e provada a incompetência do governo<br />
estadunidense em avaliar riscos e estabelecer políticas de segurança adequadas.<br />
A EFF publicou um livro, "Cracking DES - Secrets of Encryption Research,<br />
Wiretap Politics & Chip Design - How federal agencies subvert privacy", onde<br />
conta em detalhes todos os aspectos deste projeto que bateu de frente com a<br />
administração dos EUA. Nos capítulos 5, 6 e 7 está o código fonte do software<br />
usado. O governo norte-americano, apoiando-se na lei que proíbe a expostação<br />
de software de criptografia, proibiu que este material fosse publicado na Internet<br />
em servidores que estivessem em território dos EUA. Não tem problema...<br />
O Departamento de Engenharia Elétrica da Universidade Católica de Leuven, na<br />
Bélgica, escaneou o material e o disponibilizou em EFF DES Cracker Source<br />
Code. Caso você tenha dificuldade em fazer o download, procure na seção de<br />
Downloads da Aldeia, na categoria Criptologia / Criptoanálise. Lá também está a<br />
preciosidade.
Fontes<br />
• "The DES Algorithm Illustrated", de J. Orlin Grabbe. Grabbe é o autor do<br />
"International Financial Markets", internacionalmente conhecido como um<br />
especialista em derivativos. Atua em criptografia, segurança de transações<br />
bancárias e dinheiro eletrônico. Sua home page está em<br />
http://orlingrabbe.org/.<br />
• Simon Singh, autor de vários livros de sucesso, também escreveu "The<br />
Code Book", livro sobre criptologia rico em detalhes históricos e<br />
extremamente didático.<br />
• Cracking DES no site da EFF.<br />
O DES trabalha com bits ou números binários - os 0s e 1s dos computadores<br />
digitais. Cada grupo de 4 bits corresponde a um valor hexadecimal, cuja base é<br />
16. O binário "0001" corresponde ao número hexadecimal "1", o binário "1000" é<br />
igual ao número hexadecimal "8", "1001" é igual ao hexadecimal "9", "1010" é<br />
igual a o hexadecimal "A" e "1111" é igual ao hexadecimal "F".<br />
O DES funciona encriptando grupos de 64 bits de mensagem, o que significa 16<br />
números hexadecimais. Para realizar a encriptação, o DES utiliza "chaves" com<br />
comprimento aparente de 16 números hexadecimais, ou comprimento aparente<br />
de 64 bits. Entretanto, no algoritmo DES, cada oitavo bit da chave é ignorado, de<br />
modo que a chave acaba tendo o comprimento de 56 bits. Mas, para todos os<br />
efeitos, o DES é organizado baseando-se no número redondo de 64 bits (16<br />
dígitos hexadecimais).<br />
Por exemplo, se tomarmos a mensagem clara hexadecimal 8787878787878787 e<br />
a encriptarmos com a chave DES hexadecimal 0E329232EA6D0D73, obteremos<br />
o texto cifrado hexadecimal 0000000000000000. Se o criptograma for decifrado<br />
com a mesma chave secreta, o resultado será o texto claro original<br />
8787878787878787 hexadecimal.<br />
Este exemplo é limpo e metódico porque nosso texto claro tinha o comprimento<br />
de exatos 64 bits. O mesmo seria verdade caso nosso texto claro tivesse um<br />
comprimento múltiplo de 64 bits. Mas a maioria das mensagens não cairá nesta<br />
categoria. Não serão um múltiplo exato de 64 bits (isto é, um múltiplo exato de<br />
16 números hexadecimais).<br />
Por exemplo, considere a seguinte mensagem: "Criptologia sempre NumaBoa".<br />
Esta mensagem clara possui 28 bytes (56 dígitos hexadecimais) de comprimento.<br />
Neste caso, para encriptar a mensagem, seu comprimento precisa ser ajustado<br />
com a adição de alguns bytes extras no final. Depois de decifrar a mensagem,<br />
estes bytes extras são descartados. É lógico que existem vários esquemas<br />
diferentes para adicionar bytes. Aqui nós iremos adicionar apenas zeros no final,<br />
de modo que a mensagem total seja um múltiplo de 8 bytes (ou 16 dígitos<br />
hexadecimais, ou 64 bits).<br />
O texto claro "Criptologia sempre NumaBoa" é, em hexadecimal,<br />
43 72 69 70 74 6F 6C 6F<br />
67 69 61 20 73 65 6D 70<br />
72 65 20 4E 75 6D 61 42
6F 61 0D 0A<br />
Note que os primeiros 54 dígitos hexadecimais representam a mensagem em<br />
Português, enquanto que "0D" é o hexadecimal para Retorno (Carriage Return) e<br />
"0A" é o hexadecimal para Quebra de Linha (Line Feed), indicando que o arquivo<br />
de mensagem chegou ao fim. Completamos então a mensagem com alguns zeros<br />
no final para obter um total de 64 dígitos hexadecimais:<br />
43 72 69 70 74 6F 6C 6F<br />
67 69 61 20 73 65 6D 70<br />
72 65 20 4E 75 6D 61 42<br />
6F 61 0D 0A 00 00 00 00<br />
Se cifrarmos agora a mensagem clara em blocos de 64 bits (16 dígitos<br />
hexadecimais), usando a mesma chave DES "0E329232EA6D0D73", obtemos o<br />
seguinte texto cifrado:<br />
A1 BF 4C 8C 1F 44 6A 4C<br />
CA 4D E4 28 6E DE 99 50<br />
F5 59 66 2B B5 09 D9 3C<br />
4B A7 70 FA E2 4B B3 C2<br />
Se você tem algum conhecimento da criptografia clássica, não vai ser difícil<br />
perceber que o DES utiliza somente cifras tradicionais como a substituição e a<br />
transposição. A diferença é que, com a ajuda do computador, não se trabalha<br />
mais com letras e sim com bits. Os princípios, porém, são os mesmos.<br />
O DES é uma cifra de bloco, o que significa que atua sobre blocos de texto claro<br />
de determinado tamanho (64 bits) e retorna blocos de texto cifrado do mesmo<br />
tamanho. Portanto, o DES resulta numa permutação entre os 2 64 (leia como "2
elevado a 64") arranjos possíveis de 64 bits, cada um deles podendo ser 0 ou 1.<br />
Cada bloco de 64 bits é dividido em dois blocos de 32 bits, um sub-bloco<br />
esquerdo L e um sub-bloco direito R (esta divisão é usada apenas em certas<br />
operações).<br />
Exemplo: Seja M o texto claro da mensagem M = 0123456789ABCDEF, onde M<br />
está no formato hexadecimal (base 16). Reescrevendo M em formato binário<br />
obtemos o bloco de texto de 64 bits:<br />
1111<br />
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110<br />
L = 0000 0001 0010 0011 0100 0101 0110 0111<br />
R = 1000 1001 1010 1011 1100 1101 1110 1111<br />
O primeiro bit de M é "0" e o último bit é "1". Lemos da esquerda para a direita.<br />
O DES atua sobre blocos de 64 bits usando tamanhos de chave de 56 bits. Na<br />
realidade, as chaves são armazenadas com 64 bits mas, passando por um<br />
processo que "retira" 8 bits, são reduzidas para 56 bits. Estes 8 bits estão<br />
presentes nas chaves para garantir a integridade das mesmas, ou seja, o último<br />
bit de cada um dos 8 bytes da chave é um bit verificador, chamado de bit de<br />
paridade. Bits de paridade indicam quantos bits estão setados (têm valor 1) nos<br />
sete primeiros bits do byte. Quando este número for par (daí paridade), o último<br />
bit recebe o valor 1, caso contrário, recebe o valor 0. Por exemplo, o byte<br />
00010011 possui 2 bits setados nos primeiros sete bits, por isso o byte é<br />
completado com 1; o byte 00110100 possui três bits setados nos primeiros sete<br />
bits, por isso o byte é completado com 0. Apesar dos bits de paridade serem<br />
retirados, nos cálculos a seguir vamos sempre numerar os bits de 1 a 64, indo da<br />
esquerda para a direita.<br />
Exemplo: seja K a chave hexadecimal K = 133457799BBCDFF1. Isto nos dá a<br />
chave binária (substituindo 1 = 0001, 3 = 0011, etc agrupados em oito bits):<br />
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001<br />
Passo 1: A partir da chave de 56 bits, criar 16 subchaves de 48 bits<br />
A chave de 64 bits é permutada de acordo com a tabela a seguir, PC-1. Observe<br />
que nesta tabela os bits de paridade foram excluídos (os bits 8, 16, 24, 32, 40,<br />
48, 56 e 64 estão ausentes) portanto, esta operação só é efetuada depois da<br />
verificação de integridade da chave. Como a primeira entrada da tabela é "57",<br />
isto significa que o 57º bit da chave original K torna-se o primeiro bit da chave<br />
permutada K+. O 49º bit da chave original transforma-se no segundo bit da<br />
chave permutada. O 4º bit da chave original é o último bit da chave permutada.<br />
Observe que apenas 56 bits da chave original aparecem na chave permutada.<br />
PC-1<br />
---------------------------------------<br />
57 49 41 33 25 17 9<br />
1 58 50 42 34 26 18<br />
10 2 59 51 43 35 27<br />
19 11 3 60 52 44 36<br />
63 55 47 39 31 23 15
7 62 54 46 38 30 22<br />
14 6 61 53 45 37 29<br />
21 13 5 28 20 12 4<br />
---------------------------------------<br />
Exemplo: Da chave original de 64 bits<br />
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111<br />
11110001<br />
obtemos a permutação de 56 bits<br />
K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111<br />
A seguir, dividimos esta chave em duas metades, esquerda C 0<br />
e direita D 0<br />
, onde<br />
cada metade tem 28 bits.<br />
Exemplo: Da chave permutada K+ obtemos<br />
C 0<br />
= 1111000 0110011 0010101 0101111<br />
D 0<br />
= 0101010 1011001 1001111 0001111<br />
Com C 0<br />
e D 0<br />
definidas, criamos dezesseis blocos C n<br />
e D n<br />
, 1
casos, um único deslocamento à esquerda significa uma rotação dos bits uma<br />
posição para a esquerda de modo que, após um deslocamento à esquerda, os bits<br />
nas 28 posições sejam os bits que previamente estavam nas posições 2, 3, ..., 28,<br />
1.<br />
Exemplo: Do par original C 0<br />
e D 0<br />
obtemos:<br />
C 0 = 1111000011001100101010101111<br />
D 0 = 0101010101100110011110001111<br />
C 1 = 1110000110011001010101011111<br />
D 1 = 1010101011001100111100011110<br />
C 2 = 1100001100110010101010111111<br />
D 2 = 0101010110011001111000111101<br />
C 3 = 0000110011001010101011111111<br />
D 3 = 0101011001100111100011110101<br />
C 4 = 0011001100101010101111111100<br />
D 4 = 0101100110011110001111010101<br />
C 5 = 1100110010101010111111110000<br />
D 5 = 0110011001111000111101010101<br />
C 6 = 0011001010101011111111000011<br />
D 6 = 1001100111100011110101010101<br />
C 7 = 1100101010101111111100001100<br />
D 7 = 0110011110001111010101010110<br />
C 8 = 0010101010111111110000110011<br />
D 8 = 1001111000111101010101011001<br />
C 9 = 0101010101111111100001100110<br />
D 9 = 0011110001111010101010110011<br />
C 10 = 0101010111111110000110011001<br />
D 10 = 1111000111101010101011001100<br />
C 11 = 0101011111111000011001100101<br />
D 11 = 1100011110101010101100110011<br />
C 12 = 0101111111100001100110010101
D 12 = 0001111010101010110011001111<br />
C 13 = 0111111110000110011001010101<br />
D 13 = 0111101010101011001100111100<br />
C 14 = 1111111000011001100101010101<br />
D 14 = 1110101010101100110011110001<br />
C 15 = 1111100001100110010101010111<br />
D 15 = 1010101010110011001111000111<br />
C 16 = 1111000011001100101010101111<br />
D 16 = 0101010101100110011110001111<br />
Agora montamos as chaves K n<br />
, para 1
K 6 = 011000 111010 010100 111110 010100 000111 101100 101111<br />
K 7 = 111011 001000 010010 110111 111101 100001 100010 111100<br />
K 8 = 111101 111000 101000 111010 110000 010011 101111 111011<br />
K 9 = 111000 001101 101111 101011 111011 011110 011110 000001<br />
K 10 = 101100 011111 001101 000111 101110 100100 011001 001111<br />
K 11 = 001000 010101 111111 010011 110111 101101 001110 000110<br />
K 12 = 011101 010111 000111 110101 100101 000110 011111 101001<br />
K 13 = 100101 111100 010111 010001 111110 101011 101001 000001<br />
K 14 = 010111 110100 001110 110111 111100 101110 011100 111010<br />
K 15 = 101111 111001 000110 001101 001111 010011 111100 001010<br />
K 16 = 110010 110011 110110 001011 000011 100001 011111 110101<br />
Em relação às subchaves é só. Agora vamos dar uma olhada na mensagem.<br />
Passo 2: Codificar cada bloco de 64 bits de dados<br />
Existe uma permutação inicial IP dos 64 bits de dados da mensagem M. Isto<br />
rearranja os bits de acordo com a seguinte tabela, onde as entradas da tabela<br />
mostram o novo arranjo de bits a partir da ordenação inicial. O 58º bit de M<br />
torna-se o primeiro bit de IP. O 50º bit de M passa a ser o segundo bit de IP. O<br />
7º bit de M será o último bit de IP.<br />
IP<br />
-----------------------------------------<br />
58 50 42 34 26 18 10 2<br />
60 52 44 36 28 20 12 4<br />
62 54 46 38 30 22 14 6<br />
64 56 48 40 32 24 16 8<br />
57 49 41 33 25 17 9 1<br />
59 51 43 35 27 19 11 3<br />
61 53 45 37 29 21 13 5<br />
63 55 47 39 31 23 15 7<br />
-----------------------------------------<br />
Exemplo: Aplicando a permutação inicial ao bloco de texto M citado<br />
anteriormente obtemos<br />
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100<br />
1101 1110 1111<br />
IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111<br />
0000 1010 1010<br />
Aqui, o 58º bit de M é "1" e se torna o primeiro bit de IP. O 50º bit de M também
é "1" e torna-se o segundo bit de IP. O 7º bit de M é "0", o qual se torna o último<br />
bit de IP.<br />
Em seguida dividimos o bloco permutado IP numa metade esquerda L 0<br />
de 32<br />
bits e numa metade direita R 0<br />
de 32 bits.<br />
Exemplo: Obtemos L 0<br />
e R 0<br />
de IP<br />
L 0 = 1100 1100 0000 0000 1100 1100 1111 1111<br />
R 0 = 1111 0000 1010 1010 1111 0000 1010 1010<br />
Agora prosseguimos com 16 iterações, para 1
32 1 2 3 4 5<br />
4 5 6 7 8 9<br />
8 9 10 11 12 13<br />
12 13 14 15 16 17<br />
16 17 18 19 20 21<br />
20 21 22 23 24 25<br />
24 25 26 27 28 29<br />
28 29 30 31 32 1<br />
----------------------------------<br />
Portanto, os primeiros três bits de E(R n-1<br />
) são os bits das posições 32, 1 e 2 de<br />
R n-1<br />
, enquanto que os dois últimos bits de E(R n-1<br />
) são os bits da posição 32 e 1.<br />
Exemplo: Calculamos E(R 0<br />
) de R 0<br />
da seguinte maneira:<br />
R 0 = 1111 0000 1010 1010 1111 0000 1010 1010<br />
E(R 0 ) = 011110 100001 010101 010101 011110 100001 010101 010101<br />
(Note que cada bloco de 4 bits originais foi expandido para um bloco de 6 bits de<br />
saída).<br />
A seguir, no cálculo de f, fazemos um XOR na saída E(R n-1<br />
) com a chave K n<br />
. O<br />
motivo de se utilizar o XOR lógico é porque este é reversível. Se A xor B = C,<br />
então A xor C = B e B xor C = A. A reversibilidade é importante para podermos<br />
reverter o processo quando quisermos decifrar a mensagem cifrada.<br />
Exemplo: Para K 1<br />
, E(R 0<br />
), temos<br />
K n + E(R n-1 )<br />
K 1 = 000110 110000 001011 101111 111111 000111 000001 110010<br />
E(R 0 ) = 011110 100001 010101 010101 011110 100001 010101 010101<br />
K 1 +E(R 0 ) = 011000 010001 011110 111010 100001 100110 010100 100111<br />
Ainda não terminamos o cálculo da função f. Até este ponto, expandimos R n-1<br />
de<br />
32 para 48 bits, usando a tabela de seleção E, e XORamos o resultado com a<br />
chave K n<br />
. Com este processo obtivemos 48 bits ou oito grupos de 6 bits. Agora<br />
fazemos uma coisa meio estranha com cada grupo de seis bits: usamo-os como<br />
endereços em tabelas denominadas "S boxes", ou "caixas S". Cada grupo de seis<br />
bits nos dará um endereço numa caixa S diferente. Um número de 4 bits estará<br />
localizado neste endereço. Este número de 4 bits irá substituir os 6 bits originais.<br />
O principal resultado é que os oito grupos de 6 bits são transformados em oito<br />
grupos de 4 bits (as saídas de 4 bits das caixas S) num total de 32 bits.<br />
Escrevemos o resultado anterior, que tem 48 bits, na forma:
K n<br />
+ E(R n-1<br />
) = B1B2B3B4B5B6B7B8<br />
onde cada B i<br />
é um grupo de seis bits. Agora calculamos<br />
S 1<br />
(B 1<br />
)S 2<br />
(B 2<br />
)S 3<br />
(B 3<br />
)S 4<br />
(B 4<br />
)S 5<br />
(B 5<br />
)S 6<br />
(B 6<br />
)S 7<br />
(B 7<br />
)S 8<br />
(B 8<br />
)<br />
onde S i<br />
(B i<br />
) se refere à iésima saída da caixa S.<br />
Repetindo, cada uma das funções S 1<br />
, S 2<br />
, ..., S 8<br />
, pega um bloco de 6 bits como<br />
entrada e devolve um bloco de 4 bits como saída. A tabela para determinar S 1<br />
é<br />
mostrada e explicada abaixo:<br />
Função S1<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7<br />
1 | 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8<br />
2 | 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0<br />
3 | 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13<br />
Se S 1<br />
é a função definida nesta tabela e B é um bloco de 6 bits, então S 1<br />
(B) é<br />
determinada da seguinte maneira: O primeiro e o último bit de B representam<br />
um número na base 2 com valor decimal entre 0 e 3 (ou binário 00 a 11). Que<br />
este número seja i. Os 4 bits centrais de B representam um número na base 2<br />
com valor decimal entre 0 e 15 (ou binário de 0000 a 1111). Que este número<br />
seja j. Procure o número na tabela localizado na j-ésima coluna e na i-ésima<br />
linha. É um número que varia de 0 a 15 e é unicamente representado por um<br />
bloco de 4 bits. Este bloco é a saída S 1<br />
(B) de S 1<br />
para a entrada B. Por exemplo,<br />
para o bloco de entrada B = 011011, o primeiro bit é "0" e o último é "1",<br />
indicando a linha 01. Os quatro bits centrais são "1101". Este é o equivalente<br />
binário do decimal 13, de modo que a coluna será a de número 13. Na linha 1,<br />
coluna 13, aparece 5. Isto determina a saída; 5 é o binário 0101, de modo que a<br />
saída é 0101. Portanto, S 1<br />
(011011) = 0101.<br />
As tabelas definindo as funções S 2<br />
, ..., S 8<br />
são as seguintes:<br />
Função S2<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10<br />
1 | 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5<br />
2 | 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15<br />
3 | 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9<br />
Função S3<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8<br />
1 | 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1<br />
2 | 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7<br />
3 | 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Função S4<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15<br />
1 | 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9<br />
2 | 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4<br />
3 | 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14<br />
Função S5<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9<br />
1 | 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6<br />
2 | 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14<br />
3 | 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3<br />
Função S6<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11<br />
1 | 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8<br />
2 | 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6<br />
3 | 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13<br />
Função S7<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1<br />
1 | 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6<br />
2 | 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2<br />
3 | 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12<br />
Função S8<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
| --------------------------------------------------------------<br />
0 | 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7<br />
1 | 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2<br />
2 | 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8<br />
3 | 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11<br />
Exemplo: Para a primeira rodada, obtemos como saída das oito caixas S:<br />
K 1<br />
+ E(R 0<br />
) = 011000 010001 011110 111010 100001 100110 010100 100111<br />
S 1<br />
(B 1<br />
)S 2<br />
(B 2<br />
)S 3<br />
(B 3<br />
)S 4<br />
(B 4<br />
)S 5<br />
(B 5<br />
)S 6<br />
(B 6<br />
)S 7<br />
(B 7<br />
)S 8<br />
(B 8<br />
) = 0101 1100 1000 0010<br />
1011 0101 1001 0111<br />
O estágio final do cálculo de f é fazer uma permutação P da saída da caixa S<br />
para obter o valor final de f:<br />
f = P(S 1<br />
(B 1<br />
)S 2<br />
(B 2<br />
)...S 8<br />
(B 8<br />
))
A permutação P é definida pela tabela a seguir. P devolve uma saída de 32 bits a<br />
partir de uma entrada de 32 bits permutando os bits do bloco de entrada.<br />
Exemplo: Da saída das oito caixas S<br />
P<br />
------------------<br />
16 7 20 21<br />
29 12 28 17<br />
1 15 23 26<br />
5 18 31 10<br />
2 8 24 14<br />
32 27 3 9<br />
19 13 30 6<br />
22 11 4 25<br />
------------------<br />
S 1<br />
(B 1<br />
)S 2<br />
(B 2<br />
)S 3<br />
(B 3<br />
)S 4<br />
(B 4<br />
)S 5<br />
(B 5<br />
)S 6<br />
(B 6<br />
)S 7<br />
(B 7<br />
)S 8<br />
(B 8<br />
) = 0101 1100 1000 0010<br />
1011 0101 1001 0111<br />
obtemos<br />
f = 0010 0011 0100 1010 1010 1001 1011 1011<br />
Agora possuimos todos os elementos necessários para calcular R 1<br />
, ou seja, R 1<br />
=<br />
L 0<br />
+ f(R 0<br />
,K 1<br />
)<br />
L 0 = 1100 1100 0000 0000 1100 1100 1111 1111<br />
f(R 0 , K 1 ) + 0010 0011 0100 1010 1010 1001 1011 1011<br />
R 1 = 1110 1111 0100 1010 0110 0101 0100 0100<br />
Na próxima rodada obteremos L 2<br />
= R 1<br />
, que é o sub-bloco que acabamos de<br />
calcular, e depois precisamos calcular R 2<br />
= L 1<br />
+ f(R 1<br />
, K 2<br />
) e assim<br />
sucessivamente por 16 rodadas. No final da décima sexta rodada temos os subblocos<br />
L 16<br />
e R 16<br />
. Invertemos então a ordem dos dois sub-blocos num bloco de 64<br />
bits, ou seja, R 16<br />
L 16<br />
, e aplicamos a permutação final IP -1 definida na seguinte<br />
tabela:<br />
IP -1<br />
---------------------------------------------<br />
40 8 48 16 56 24 64 32<br />
39 7 47 15 55 23 63 31<br />
38 6 46 14 54 22 62 30<br />
37 5 45 13 53 21 61 29<br />
36 4 44 12 52 20 60 28<br />
35 3 43 11 51 19 59 27<br />
34 2 42 10 50 18 58 26<br />
33 1 41 9 49 17 57 25<br />
---------------------------------------------
É isto aí, a saída do algoritmo possui o bit 40 do bloco de pre-saída como seu<br />
primeiro bit, bit 8 como seu segundo bit, e assim sucessivamente, até o bit 25 do<br />
bloco de pre-saída como seu último bit.<br />
Exemplo: Se processarmos todos os 16 blocos usando o método definido<br />
previamente, obteremos, na 16ª rodada<br />
L 16<br />
= 0100 0011 0100 0010 0011 0010 0011 0100<br />
R 16<br />
= 0000 1010 0100 1100 1101 1001 1001 0101<br />
Invertendo a ordem destes dois blocos e aplicando a permutação final em<br />
R 16<br />
L 16<br />
= 00001010 01001100 11011001 10010101 01000011 01000010<br />
00110010 00110100<br />
IP -1 = 10000101 11101000 00010011 01010100 00001111 00001010 10110100<br />
00000101<br />
o que, em formato hexadecimal, é 85E813540F0AB405.<br />
Portanto, a forma cifrada de M = 0123456789ABCDEF é C =<br />
85E813540F0AB405.<br />
Decifrar é simplesmente o inverso de cifrar, seguindo os mesmos passos acima<br />
descritos porém invertendo a ordem das sub-chaves aplicadas.<br />
MODOS DE OPERAÇÃO DO DES<br />
O algoritmo DES transforma um bloco de mensagem M de 64 bits num bloco<br />
cifrado C. Se cada bloco de 64 bits for cifrado individualmente, então o modo de<br />
encriptação é denominado Electronic Code Book (ECB). Existem outros dois<br />
modos de cifragem DES, os modos Chain Block Coding (CBC) e Cipher Feedback<br />
(CFB), os quais tornam cada bloco cifrado dependente de todos os outros blocos<br />
de mensagem anteriores através de uma operação inicial de XOR.<br />
QUEBRANDO O DES<br />
Antes que o DES fosse adotado como padrão nacional (estadunidense), durante o<br />
período em que o NBS estava solicitando comentários sobre o algoritmo<br />
proposto, os criadores da criptografia de chave pública, Martin Hellman e<br />
Whitfield Diffie, registraram algumas objeções quanto ao uso do DES como<br />
algoritmo de encriptação. Hellman escreveu: "Whit Diffie e eu ficamos<br />
preocupados com o fato de que o padrão de encriptação de dados proposto,<br />
enquanto provavelmente seguro em relação a assaltos comerciais, pode ser<br />
extremamente vulnerável a ataques efetuados por uma organização de<br />
inteligência" (carta ao NBS, 22 de Outubro de 1975).<br />
Diffie e Hellman planejaram então um ataque de "força bruta" ao DES ("força<br />
bruta" significa aplicar sequencialmente as 2 56 chaves possíveis até encontrar a<br />
chave correta que decifra a mensagem cifrada). Propuseram o uso específico de<br />
"computadores paralelos usando um milhão de chips para testar um milhão de
chaves cada um" por segundo e estimaram o custo de uma máquina deste tipo<br />
em US$ 20 milhões.<br />
Um salto para 1998. Sob a direção de John Gilmore do EFF, uma equipe gastou<br />
menos do que US$ 250.000 para construir uma máquina que analisou todo o<br />
espaço de chaves de 56 bits do DES e precisou, em média, 4.5 dias para<br />
completar a tarefa. Em 17 de Julho de 1998 eles anunciaram que haviam<br />
quebrado uma chave de 56 bits em 46 horas. O computador, chamado de Deep<br />
Crack, usa 27 placas, cada uma com 64 chips, e é capaz de testar 90 bilhões de<br />
chaves por segundo.<br />
Apesar disso, em 8 de Junho de 1998, Robert Litt, principal representante<br />
procurador geral do Departamento de Justiça dos Estados Unidos, negou que<br />
fosse possível o FBI quebrar o DES: "Deixe-me colocar o problema técnico no<br />
contexto: foram precisos 14.000 computadores Pentium trabalhando durante<br />
quatro meses para decifrar uma única mensagem... Não estamos falando apenas<br />
do FBI e da NSA [precisando de um poder de processamento maciço], estamos<br />
falando a respeito de cada departamento de polícia."<br />
Respondeu o especialista em criptografia Bruce Schneier: "... o FBI ou é<br />
incompetente ou está mentindo, ou ambos". Schneier continua: "A única solução<br />
neste caso é pegar um algoritmo com uma chave maior; não existe silício<br />
suficiente na galáxia ou tempo suficiente antes do sol se apagar para quebrar<br />
com força bruta o triple-DES" (Crypto-Gram, Counterpane Systems, 15 de Agosto<br />
de 1998).<br />
TRIPLE-DES<br />
O triple-DES é apenas o DES com duas chaves de 56 bits aplicadas. Dada uma<br />
mensagem em texto claro, a primeira chave é usada para cifrar a mensagem em<br />
DES. A segunda chave é usada para decifrar o DES da mensagem cifrada. Como<br />
a segunda chave não é a correta para decifrar, esta decifração apenas embaralha<br />
ainda mais os dados. A mensagem duplamente embaralhada é, então, cifrada<br />
novamente com a primeira chave para se obter o criptograma final. Este<br />
procedimento em três etapas é chamado de triple-DES ou triplo DES.<br />
Triple-DES é apenas o DES efetuado três vezes com duas chaves usadas numa<br />
determinada ordem. O triple-DES também pode ser feito usando-se três chaves<br />
diferentes, ao invés de apenas duas. No primeiro caso, o espaço das chaves é de<br />
2 112 , no segundo, é de 2 168 .<br />
Cifras de fluxo<br />
A grande maioria dos algoritmos criptográficos atuais são cifras de bloco. As<br />
cifras de fluxo, que convertem o texto claro em texto cifrado bit a bit, ainda são<br />
objeto de pesquisa e têm uma aplicação prática muito discreta. O motivo é que<br />
as cifras de fluxo dependem de geradores randômicos de chaves que, apesar da<br />
aparente simplicidade, são difíceis de implementar através de software ou de
hardware.<br />
Um hash, também chamado de "digesto", é uma espécie de "assinatura" ou<br />
"impressão digital" que representa o conteúdo de um fluxo de dados. Com certa<br />
frequência os hashes são chamados de checksum, o que provoca alguma<br />
confusão com os verdadeiros checksums, os quais têm aplicações e cálculos<br />
totalmente diferentes. Um hash pode ser comparado com um selo de embalagem<br />
que indica clara e inequivocamente se a embalagem já foi aberta ou violada.<br />
Via única<br />
Hashes não são cifragens, são digestos! As cifragens transformam os dados do<br />
texto claro num criptograma e vice-versa, ou seja, é uma operação de duas<br />
vias. Além disso, o tamanho do criptograma geralmente é igual ao comprimento<br />
do texto claro. Hashes, por sua vez, transformam os dados do texto (claro ou<br />
cifrado) num pequeno digesto, de tamanho fixo, numa operação de via única.<br />
Uma operação de via única não tem volta, ou seja, não é possível obter o texto<br />
claro a partir de um resultado hash.<br />
Saída de comprimento fixo<br />
Os hashes produzem "selos de segurança" de comprimento fixo, não importa o<br />
comprimento do fluxo de dados ou do arquivo que representem. Qualquer<br />
alteração efetuada no arquivo, por mínima que seja, altera substancialmente o<br />
resultado hash. Isto ocorre porque, mesmo se apenas um dos bits do arquivo for<br />
alterado, muitos bits do resultado serão afetados. Este comportamento é<br />
conhecido como efeito avalanche.<br />
O efeito avalanche fica bastante claro quando observamos o impacto da mudança<br />
de apenas um bit no resultado hash. Para exemplificar, vamos usar os caracteres<br />
ASCII "A" e "a". Note que apenas o sexto bit (contando da direita para a<br />
esquerda e iniciando pelo bit zero) é diferente:<br />
Caracter ASCII ASCII<br />
(decimal) (binário)<br />
----------------------------------<br />
A 65 0100 0001<br />
a 97 0110 0001<br />
Usando o algoritmo MD5, o resultado hash obtido para os textos "Aldeia<br />
NumaBoa" e "aldeia NumaBoa", cuja diferença reside num único bit, é<br />
completamente diferente:<br />
Aldeia NumaBoa<br />
aldeia NumaBoa<br />
3cdb658425ee484e4bff3d4583f6f851<br />
9c1f41ef263026b0283676d63df21fd1<br />
Transformando o valor hexadecimal do hash dos dois textos nos seus<br />
correspondentes binários, o efeito avalanche fica evidente pois a alteração de<br />
apenas um bit no texto ocasionou a alteração de 62 bits do resultado hash:<br />
3cdb6584 0011 1100 1101 1011 0110 0101 1000 0100
9c1f41ef 1001 1100 0001 1111 0100 0001 1110 1111<br />
x.x. .... xx.. .x.. ..x. .x.. .xx. x.xx<br />
12 bits diferentes<br />
25ee484e 0010 0101 1110 1110 0100 1000 0100 1110<br />
263026b0 0010 0110 0011 0000 0010 0110 1011 0000<br />
.... ..xx xx.x xxx. .xx. xxx. xxxx xxx. 20 bits diferentes<br />
4bff3d45 0100 1011 1111 1111 0011 1101 0100 0101<br />
283676d6 0010 1000 0011 0110 0111 0110 1101 0110<br />
.xx. ..xx xx.. x..x .x.. x.xx x..x ..xx<br />
83f6f851 1000 0011 1111 0110 1111 1000 0101 0001<br />
3df21fd1 0011 1101 1111 0010 0001 1111 1101 0001<br />
x.xx xxx. .... .x.. xxx. .xxx x... ....<br />
16 bits diferentes<br />
14 bits diferentes<br />
Aplicações práticas do hash<br />
Se os dados originais não podem ser recuperados a partir do hash gerado pelos<br />
mesmos, então para que servem os hashes? Apesar de parecer contraditório, é<br />
exatamente esta característica que possibilita o uso de algoritmos hash sempre<br />
que uma autenticação ou uma validação seja necessária. Dentre as inúmeras<br />
aplicações destacam-se as seguintes:<br />
Integridade de arquivos<br />
Qualquer tipo de arquivo, por exemplo um arquivo de texto ou um programa de<br />
computador, é um fluxo de dados que produz um resultado hash único. Quando<br />
um arquivo é disponibilizado para download, não existe a garantia de que o<br />
arquivo baixado seja idêntico ao original. Basta que ocorra um pequeno<br />
problema durante a transmissão que altere os dados recebidos para que a<br />
"cópia" não seja perfeita. Uma das maneiras de poder verificar se o arquivo<br />
baixado é idêntico ao disponibilizado é conhecer o hash do arquivo original. Após<br />
o download é possível calcular o hash do arquivo baixado e, se os dois hashes<br />
forem idênticos, a integridade da cópia é comprovada. É importante lembrar que<br />
hashes parecidos ou "quase iguais" indicam sempre que os dados que os<br />
produziram são diferentes, e nunca parecidos ou quase iguais!<br />
Segurança de senhas<br />
Guardar senhas em texto claro é dar chance para o azar. Se um arquivo de<br />
senhas for roubado ou um banco de dados com registros de senhas for hackeado,<br />
o estrago pode ser enorme. Como um hash não é reversível e, para serem<br />
usadas, as senhas precisam ser conferidas, é muito mais prudente armazenar os<br />
resultados hash das senhas do que as próprias senhas. O uso de uma senha<br />
pressupõe que um usuário a digite. Tendo a senha como entrada, é fácil e rápido<br />
calcular o resultado hash da senha fornecida e compará-lo com o valor<br />
arquivado. Se forem idênticos, a senha confere, mostrando que o usuário<br />
conhecia uma senha válida. Este procedimento reduz sensivelmente os riscos<br />
porque o único momento em que a senha pode ser roubada é enquanto está
sendo digitada e antes de ser transformada em hash.<br />
Assinaturas digitais<br />
Para se obter uma assinatura digital válida são necessárias duas etapas. A<br />
primeira é criar um hash do documento. Este hash identifica unicamente e<br />
inequivocamente o documento do qual ele se originou. A seguir, o assinante<br />
submete o hash a um método criptográfico usando sua chave privada. Como o<br />
hash criptografado só pode ser recuperado usando a chave pública do assinante,<br />
isto comprova a identidade da pessoa que assinou - é a chamada assinatura<br />
digital - e como o hash recuperado identifica o documento, a assinatura está<br />
associada unicamente a este documento.<br />
Vulnerabilidades<br />
Pelo que foi visto até agora, o cenário parece perfeito: usando métodos que<br />
produzam hashes de 128 bits, o número de hashes possíveis atinge um valor<br />
astronômico. São, nada mais, nada menos do que 2 128 = 3,4 x 10 38 possíveis.<br />
Mais exatamente, as possibilidades somam<br />
340.282.366.920.938.463.463.374.607.431.768.211.456 hashes de 128 bits<br />
Apesar deste valor enorme, como o número de conjuntos de dados é<br />
praticamente infinito, a possibilidade de que dois conjuntos de dados diferentes<br />
produzam o mesmo hash não pode ser ignorada. Esta coincidência de resultados<br />
é conhecida como colisão. Existem duas formas básicas de se diminuir a<br />
ocorrência de colisões: aumentando o número de bits do resultado hash e<br />
criando algoritmos que produzam hashes menos vulneráveis. Existem algumas<br />
medidas que avaliam as vulnerabilidades. As principais são mostradas a seguir.<br />
Resistência a colisões<br />
A resistência a colisões mede a dificuldade de encontrar duas entradas que<br />
produzam o mesmo resultado hash. O valor hash pode ser qualquer um, o<br />
objetivo é encontrar duas entradas diferentes que forneçam um resultado<br />
idêntico.<br />
Se for possível obter o mesmo resultado hash para duas entradas diferentes, as<br />
assinaturas digitais deixam de ser confiáveis. Imagine um "compromisso de<br />
compra" que possa ser substituído por outro sem que o valor hash se modifique.<br />
Se os documentos forem trocados por alguém com más intenções poderemos ter<br />
surpresas bastante desagradáveis. Um dos ataques mais conhecidos para<br />
encontrar colisões é o ataque do aniversário. Se você estiver interessado, leia o<br />
texto Paradoxo do Aniversário que se encontra na Confraria do Segredo, em<br />
Curiosidades.
Colisão: procura de dois textos que produzam um mesmo hash qualquer<br />
Neste caso, a assinatura digital também não pode garantir a autenticidade do<br />
documento. Pior do que isto, a assinatura digital coloca nossa anuência no<br />
documento! Como já foi visto, a alteração de um simples bit costuma alterar<br />
substancialmente o resultado hash. Vai aqui uma sugestão: antes de colocar a<br />
sua assinatura digital, faça uma pequena alteração "cosmética" no documento<br />
que será assinado. Basta adicionar um espaço ou retirar uma vírgula. Como os<br />
dois documentos, o correto e o fraudulento, precisam ser preparados com<br />
antecedência para produzirem o mesmo hash, pegamos o fraudador de calças<br />
curtas se alterarmos o documento e, consequentemente, seu valor hash no<br />
último instante<br />
Resistência de pre-imagem<br />
A resistência de pre-imagem mede a dificuldade de criar um conjunto de dados<br />
que resulte num determinado valor hash, sem conhecer o texto que o originou.<br />
Pre-imagem: criação de determinado valor hash sem conhecer o texto original<br />
Se a resistência de pre-imagem for pequena, será mais fácil criar um texto<br />
qualquer cujo hash seja igual a um conhecido. Imagine o caso das senhas. Se,<br />
conhecendo o valor hash de uma delas, for possível criar uma senha qualquer<br />
que resulte num hash idêntico, a segurança de um sistema que faça a<br />
autenticação exclusivamente com hashes de senhas estará seriamente<br />
comprometido. Mesmo digitando a senha "fabricada", o resultado será aceito.<br />
Resistência de segunda pre-imagem<br />
A resistência de segunda pre-imagem mede a dificuldade de criar um conjunto<br />
de dados que resulte num determinado valor hash, conhecendo o texto que o<br />
originou.
Segunda pre-imagem: criação de determinado valor hash conhecendo o texto<br />
original<br />
Assim como a resistência de pre-imagem, se a resistência de segunda preimagem<br />
for baixa, a criação de um conjunto de dados que resulte num hash<br />
conhecido torna-se mais fácil. É comum encontrarmos software para download<br />
acompanhado de seus valores hash, portanto, é fácil obter a matéria prima que<br />
pode ser fraudada. Se alguém com más intenções alterar o software, mas<br />
conseguir preservar seu resultado hash, os usuários que fizerem o download do<br />
"safadoware" não terão como identificar o software adulterado e potencialmente<br />
perigoso!<br />
As funções hash<br />
Funções hash são funções que recebem dados de comprimento arbitrário,<br />
comprimem estes dados e devolvem um número fixo de bits, o resultado hash. Se<br />
uma função deste tipo satisfizer requisitos adicionais, ela pode ser usada em<br />
aplicações criptográficas como, por exemplo, proteger a autenticidade de<br />
mensagens enviadas através de canais inseguros. A idéia básica é que o<br />
resultado hash forneça uma identidade única para uma mensagem e que a<br />
proteção de uma pequena identidade é mais fácil de ser obtida do que a proteção<br />
da mensagem como um todo.<br />
Os códigos de autenticação de mensagens (MAC - message authentication codes)<br />
têm relação com as funções hash. Estes também são funções que comprimem<br />
uma entrada de comprimento arbitrário num número fixo de bits, mas o processo<br />
depende de uma entrada secundária de comprimento fixo, a chave. É por este<br />
motivo que os MACs também são chamados de funções hash com chave. Em<br />
aplicações práticas, a chave que orienta os cálculos de um MAC precisa ser<br />
mantida em segredo.<br />
Funções hash criptográficas<br />
Para uma função (sem chave) hash, o requisito para que o resultado hash sirva<br />
como identidade única para uma mensagem é que seja impossível ou<br />
impraticável encontrar pares de mensagens que colidam (isto é, mensagens que<br />
produzam hashs iguais). Em algumas aplicações, no entanto, é suficiente que,<br />
para cada resultado hash, seja impraticável encontrar a mensagem<br />
correspondente; ou que, dada uma mensagem, seja impraticável encontrar outra
mensagem que produza o mesmo hash. De acordo com estas premissas, existem<br />
duas definições informais para dois tipos diferentes de funções hash.<br />
Um hash de via única (one way hash) é uma função que satisfaz as seguintes<br />
condições:<br />
1. A entrada X pode ter um comprimento arbitrário e o resultado h(X) possui<br />
um número fixo de n bits.<br />
2. Dados h e um input X, o cálculo de h(X) precisa ser 'fácil'.<br />
3. A função precisa ser de via única, ou seja, para um dado Y na imagem de h,<br />
seja 'difícil' achar uma mensagem X de modo que h(X) = Y (resistência de<br />
preimagem) e, dados X e h(X), seja 'difícil' encontrar uma mensagem X'<br />
diferente de X onde h(X') = h(X) (resistência da segunda preimagem).<br />
Uma função hash resistente a colisões é uma função h que satisfaz as<br />
seguintes condições:<br />
1. A entrada X pode ter um comprimento arbitrário e o resultado h(X) possui<br />
um número fixo de n bits.<br />
2. Dados h e um input X, o cálculo de h(X) é 'fácil'.<br />
3. A função é de via única, isto é, é resistente à preimagem e à segunda<br />
preimagem.<br />
4. A função precisa ser resistente a colisões: isto significa que é 'difícil'<br />
encontrar duas mensagens distintas que produzam o mesmo resultado<br />
hash.<br />
Num código de autenticação de mensagem MAC, o cálculo (portanto, o resultado<br />
MAC) depende de uma entrada secundária, a chave secreta. O propósito<br />
principal é que o adversário, sem conhecer esta chave, não seja capaz de forjar o<br />
resultado MAC de qualquer mensagem, mesmo se muitas mensagens e seus<br />
MACs correspondentes forem conhecidos. Um código de autenticação de<br />
mensagem ou MAC é uma função h que satisfaz as seguintes condições:<br />
1. A entrada X pode ter um comprimento arbitrário e o resultado h(K,X)<br />
possui um comprimento fixo de n bits. A função possui como entrada<br />
secundária uma chave K com um número fixo de k bits.<br />
2. Dados h, K e uma entrada X, o cálculo de h(K,X) precisa ser 'fácil'.<br />
3. Dada uma mensagem X (mas com K desconhecido), o cálculo de h(K,X)<br />
precisa ser 'difícil'.<br />
Aplicações de funções hash e de MACs<br />
Funções hash e MACs têm as mais diversas aplicações. Entre outras, podem ser<br />
utilizadas na autenticação de mensagens, assinaturas digitais, datação<br />
(timestamping) de documentos e sistemas de senhas.<br />
Autenticação de mensagens com hash<br />
O problema da proteção da autenticidade de informações tem dois aspectos: a<br />
integridade dos dados e a autenticação da origem dos dados. A integridade dos
dados é a garantia de que os dados não tenham sido alterados, sem autorização,<br />
desde o momento em que foram criados, transmitidos ou armazenados por uma<br />
fonte autorizada. Já a autenticação da origem dos dados é um tipo de<br />
autenticação que garante a fonte (origem) dos dados. Por definição, a<br />
autenticação da origem dos dados inclui a integridade dos dados (informação<br />
que tenha sido modificada com autorização tem uma nova fonte).<br />
Digamos que um remetente queira enviar uma mensagem para determinado<br />
destinatário através de um canal de comunicação inseguro. Para garantir que o<br />
destinatário esteja recebendo a mensagem da fonte correta e que a mensagem<br />
não foi modificada durante a transmissão, o remetente cria um hash da<br />
mensagem e transmite esta pequena sequência de bits através de um canal<br />
autêntico. Um canal autêntico não é necessariamente um canal seguro, ele pode<br />
ser interceptado e o segredo não é garantido. O telefone, por exemplo, é um<br />
canal deste tipo onde a autenticação é feita através do reconhecimento da voz.<br />
Depois disso, o remetente pode enviar a mensagem através de um canal<br />
inseguro. O destinatário, por sua vez, usando o mesmo algoritmo hash, cria um<br />
resultado hash para a mensagem recebida e o compara com o hash que lhe foi<br />
enviado. Se os dois hashes coincidirem, o destinatário tem a certeza de que a<br />
mensagem não foi alterada durante o trajeto.<br />
Autenticação hash combinada com criptografia<br />
Uma outra forma de enviar mensagens autenticadas é adicionar o hash à<br />
mensagem clara e cifrar o conjunto com algum método criptográfico cuja chave<br />
seja conhecida tanto pelo remetente quanto pelo destinatário. O destinatário<br />
decifra o conjunto, obtendo o hash e a mensagem. Este método precisa de um<br />
canal autêntico e com privacidade para poder transmitir a chave do método<br />
criptográfico.<br />
Autenticação de mensagens com MAC<br />
Neste caso, o remetente cria um resultado MAC usando uma chave. Depois,<br />
adiciona este MAC à mensagem e a envia através de um canal inseguro. Também<br />
aqui existe a necessidade de usar um canal autêntico e com privacidade para<br />
transmitir a chave do algoritmo MAC.<br />
Otimização de assinaturas digitais<br />
Esquemas de assinatura digital são um tipo diferente de primitivo criptográfico.<br />
São usados para a proteção da autenticidade, só que, adicionalmente, oferecem o<br />
serviço de não repúdio. Isto significa que é impossível para um remetente negar<br />
a autoria de uma mensagem autenticada. Assinaturas digitais baseiam-se em<br />
criptografia de chave pública.<br />
Por exemplo, o usuário A possui o par de chaves SA e PA, onde SA é a chave<br />
privada (secreta) e PA é a chave pública. Inicialmente ele comprime sua<br />
mensagem M com a função hash h. O resultado hash h(M) é usado como entrada<br />
do algoritmo de assinatura. Este algoritmo depende da chave privada SA e
calcula um valor assinatura SA<br />
( h(M) ), que pode ser expresso como s(M). O<br />
usuário associa a assinatura s(M) à mensagem M e envia o conjunto através de<br />
um canal inseguro. O destinatário separa a assinatura s(M) e a usa como entrada<br />
do algoritmo de verificação. Este algoritmo depende da chave pública PA e<br />
calcula o valor ver PA<br />
( s(M) ). A assinatura e o algoritmo de verificação são<br />
projetados de tal forma que, se o par de chaves PA e SA estiver correto, o<br />
resultado hash h(M) corresponde à mensagem M. O destinatário calcula o hash<br />
da mensagem, compara os dois hashes e, se coincidirem, tanto a assinatura,<br />
quanto a mensagem, são autênticas.<br />
Aplicações como funções de via única (one-way)<br />
Funções de via única são parecidas com as funções hash de via única - a<br />
diferença é que a entrada tem um comprimento fixo. Estas funções podem ser<br />
obtidas de vários modos, por exemplo, a partir de funções hash criptográficas ou<br />
de cifras de bloco.<br />
Nos sistemas de identificação baseados em senhas, ao invés de armazenar a<br />
senha, armazena-se para cada usuário o resultado de uma função de via única.<br />
Para verificar se uma senha informada pelo usuário (identificação) está correta,<br />
o sistema aplica a função de via única na senha fornecida e compara o resultado<br />
obtido com o resultado armazenado.<br />
Uma outra aplicação, também muito útil para identificações, é a chamada<br />
confirmação de conhecimento. Neste caso, as partes provam que conhecem um<br />
segredo S sem revelar o segredo. Para isto, basta cada um enviar para o outro<br />
uma função de via única de S.<br />
Funções de via única também podem ser aplicadas para calcular uma sequência<br />
de chaves que são usadas para proteger sessões de comunicação sucessivas.<br />
Começando com uma chave mestra K0, a chave da primeira sessão é calculada<br />
como K1 = f(K0), a da segunda sessão como K2 = f(K1) e assim sucessivamente.<br />
Um exemplo típico é a derivação de chaves usada em sistemas de pagamento em<br />
terminais de pontos de venda onde a divulgação de uma chave atualmente ativa<br />
não pode comprometer a segurança de transações anteriores. Esta propriedade é<br />
chamada de segurança futura. Outro exemplo é a geração de senhas num<br />
sistema de senhas de uso único. Neste caso, cria-se uma sequência de senhas<br />
que serão usadas na ordem inversa da criação. Aplicando-se a função de via<br />
única a uma das senhas, o resultado precisa coincidir com a senha anterior. A<br />
propriedade de via única impede que um adversário, que conheça a senha atual,<br />
possa calcular qualquer uma das senhas futuras.<br />
Datação digital<br />
A datação digital é um serviço que fornece uma autenticação temporal. Em<br />
particular, uma datação digital fornece provas da existência de certos<br />
fragmentos de informação antes da data e da hora indicada na datação. Isto tem<br />
aplicação na proteção de direitos de propriedade intelectual e em procedimentos<br />
seguros de auditoria. Por exemplo:
• Um pesquisador que queira provar um "primeiro a inventar" ou "primeiro a<br />
informar".<br />
• Uma empresa que queira provar a integridade de seus registros<br />
eletrônicos, mostrando que estes não foram manipulados ou tiveram suas<br />
datas alteradas.<br />
A datação também é vital para serviços de não-repúdio confiáveis. Em<br />
documentos assinados que tenham um ciclo de validade longo, várias<br />
verificações podem ser necessárias. Entretanto, o ciclo de validade de<br />
assinaturas digitais é limitado por várias razões:<br />
• A chave privada da assinatura pode se tornar comprometida.<br />
• O certificado que prova o elo entre o usuário e sua chave pública tem prazo<br />
de validade.<br />
• O algoritmo criptográfico usado no esquema da assinatura pode ser<br />
quebrado.<br />
Estes problema pode ser contornado se um serviço seguro de datação for<br />
utilizado. Um usuário que cria uma assinatura num documento e requisita uma<br />
datação da informação assinada prova que a assinatura foi gerada antes da<br />
marca temporal indicada na datação, ou seja, antes de qualquer incidente<br />
eventualmente venha a invalidar a sua assinatura.<br />
A segurança das funções hash<br />
Em termos práticos, a segurança das funções criptográficas hash pode ser<br />
medida apenas em relação à sua resistência a ataques. Normalmente os<br />
adversários procuram uma preimagem, segunda preimagem ou colisão em<br />
funções hash ou produzem dados forjados para um MAC.<br />
Ataque randômico<br />
Este é o tipo de ataque mais óbvio. O adversário simplesmente seleciona uma<br />
entrada ao acaso e espera pelo resultado hash. Dado o hash de uma mensagem<br />
h(M), o adversário tenta criar um outro documento, M', de modo que h(M) =<br />
h(M'). Se a função hash possuir um comportamento 'randômico', sua<br />
probabilidade de sucesso é considerável (cerca de 50%). Na prática, o ataque<br />
pode ser efetuado em paralelo, usando a computação distribuída num grande<br />
número de máquinas com uma chance não desprezível de se obter uma<br />
preimagem ou uma segunda preimagem.<br />
Ataque do aniversário<br />
Este ataque se baseia na idéia de que num grupo de 23 pessoas a probabilidade<br />
de que, pelo menos, duas pessoas façam aniversário no mesmo dia é maior do<br />
que 50%. Intutitivamente, a impressão geral é que o grupo de pessoas deveria<br />
ser muito maior para que isto acontecesse, motivo pelo qual esta constatação é<br />
chamada de paradoxo do aniversário.<br />
Este tipo de ataque é mais sutil do que o anterior e baseia-se num problema
padrão da estatística. Quantas pessoas precisam estar numa sala para que a<br />
chance de uma delas fazer aniversário no mesmo dia que você seja maior do que<br />
50%? A resposta é 253. Agora, se a pergunta for "Quantas pessoas precisam<br />
estar numa sala para que a chance de duas delas comemorarem aniversário no<br />
mesmo dia seja maior do que 50%?", o resultado é surpreendente baixo. Com<br />
apenas 23 pessoas na sala, a chance de que duas façam aniversário no mesmo<br />
dia é maior do que 50%. É que, apesar do número baixo de pessoas, existem<br />
mais de 500 pares diferentes de pessoas na sala. Caso você tenha interesse em<br />
saber como os cálculos são efetuados, visite a seção de curiosidades da Confraria<br />
do Segredo.<br />
Achar alguém com um aniversário específico é análogo ao primeiro ataque;<br />
achar duas pessoas com o mesmo aniversário randômico é análogo a este<br />
segundo ataque, também conhecido como ataque do aniversário.<br />
Imagine que determinada função hash siga todas as propriedades citadas acima<br />
e que a melhor forma de atacá-la seja através da força bruta. Se esta função<br />
criar um resultado hash de m bits, encontrar uma mensagem que resulte no hash<br />
procurado requer 2 m mensagens randômicas. Agora, encontrar duas mensagens<br />
que produzam o mesmo hash requer apenas 2 m/2 mensagens randômicas. Um<br />
computador que seja capaz de processar um milhão de mensagens por segundo<br />
levaria 600.000 anos para encontrar uma segunda mensagem para determinado<br />
hash de 64 bits. A mesma máquina pode achar um par de mensagens que<br />
resultam num hash de 64 bits igual em cerca de uma hora!<br />
Resta saber como um ataque do aniversário pode ser usado para fins escusos.<br />
Imagine que um safado prepare dois contratos, um favorável para o bonzinho e<br />
outro no qual o bonzinho transfere todos os seus bens para o safado. De posse<br />
destes dois documentos, o safado faz várias pequenas alterações nos dois<br />
documentos: troca espaço por espaço-backspace-espaço, insere um ou dois<br />
espaços antes das quebras de linha, etc. Introduzindo (ou não) estas pequenas<br />
alterações em cada uma de 32 linhas de texto, o safado consegue gerar 2 32<br />
documentos diferentes. Depois disto, o safado compara os hashes dos<br />
documentos até encontrar um par, tarefa perfeitamente possível de ser realizada<br />
se o resultado hash tiver apenas 64 bits. Encontrando estes dois documentos, um<br />
do contrato bom e outro do contrato alterado, o safado pede para o bonzinho<br />
assinar o documento bom usando um protocolo no qual ele apenas assina o valor<br />
hash. Quando lhe convier, o safado troca os contratos e não há cristão que possa<br />
provar que não seja o documento original assinado pelo bonzinho<br />
Este cenário não tem nada de surreal, é perfeitamente possível de ocorrer. E<br />
tudo por conta do ataque do aniversário aplicado a funções hash de 64 bits. Por<br />
este motivo, a maioria das funções produzem hashes de pelo menos 128 bits. Isto<br />
força qualquer atacante a utilizar, no mínimo, 2 64 documentos randômicos para<br />
encontrar dois cujos hashes tenham o mesmo valor. Mas como é possível obter<br />
hashes com mais de 64 bits? Dentre os métodos propostos, o seguinte é bastante<br />
eficiente:<br />
1. Gerar o valor hash de uma mensagem, usando uma função hash de via<br />
única.
2. Concatenar a mensagem e o hash obtido.<br />
3. Gerar um novo hash da mensagem com o hash concatenado.<br />
4. Criar um valor hash maior que consiste da valor hash gerado na etapa 1<br />
concatenado ao hash gerado na etapa 3.<br />
5. Repetir as etapas 1 a 3 o quanto se desejar.<br />
As funções hash mais conhecidas<br />
• SNEFRU é uma função hash de via única desenvolvida por Ralph Merkle<br />
que cria resultados hash de 128 ou de 256 bits.<br />
• N-HASH é um algoritmo inventado por pesquisadores da Nippon Telephone<br />
and Telegraph, os mesmos que inventaram o FEAL. Usa blocos de 128 bits<br />
de mesnagem e produz um resultado hash também de 128 bits.<br />
• MD4, onde MD vem de message digest, é uma função hash de via única<br />
desenvolvida por Ron Rivest que também produz um valor hash de 128<br />
bits.<br />
• MD5 é uma versão melhorada do MD4. Também de Ron Rivest, produz um<br />
resultado hash de 128 bits.<br />
• SHA, o Secure Hash Algorithm, foi desencolvido pelo NIST e pela NSA.<br />
Produz um hash de 160 bits, também chamado de message digest.<br />
• RIPE-MD foi desenvolvido para o projeto RACE da Comunidade Européia.<br />
Seu algoritmo é uma variação do MD4.<br />
• HAVAL é uma função hash de via única de tamanho variável inventada por<br />
Yulian Zheng, Josef Pieprzyk e Jennifer Seberry. É uma modificação do<br />
MD5.<br />
SHA-1<br />
O SHA-1 (Secure Hash Algorithm - Algoritmo Hash Seguro) foi aprovado pelo<br />
governo dos EUA em 1995 para ser usado por todos os departamentos e<br />
agências federais na autenticação de documentos digitais.<br />
O que é o SHA-1<br />
O SHA-1 é um padrão usado para calcular a representação condensada de uma<br />
mensagem ou arquivo de dados. Partindo de uma mensagem menor do que 2 64<br />
bits, o SHA-1 produz uma saída de 160 bits chamada de digesto da mensagem.<br />
Este digesto pode ser a entrada para o DSA (Digital Signature Algorithm -<br />
Algoritmo de Assinatura Digital), o qual gera ou faz a verificação da assinatura<br />
da mensagem. Criar uma assinatura para o digesto, ao invés de criar uma para a<br />
mensagem, costuma melhorar a eficiência do processo porque o digesto da<br />
mensagem habitualmente é muito menor do que a mensagem. Tanto o<br />
verificador, quanto o criador, precisam usar o mesmo algoritmo hash para gerar<br />
e verificar uma assinatura digital.
O SHA-1 foi considerado seguro porque é impraticável encontrar uma mensagem<br />
que corresponda a um determinado digesto ou encontrar duas mensagens<br />
diferentes que produzam o mesmo digesto. Qualquer alteração feita numa<br />
mensagem em trânsito, com grande probabilidade dará como resultado um<br />
digesto diferente e a assinatura não poderá ser confirmada. O SHA-1 é uma<br />
revisão técnica do SHA - foi adicionada uma operação de deslocamento circular<br />
para a esquerda para aumentar a segurança oferecida por este padrão. O SHA-1<br />
foi baseado em princípios semelhantes aos usados no algoritmo MD4, criado pelo<br />
professor do MIT, Ronald L. Rivest.<br />
Aplicações do SHA-1<br />
O SHA-1 pode ser aplicado, juntamente com o DSA, em e-mails, transferências<br />
eletrônicas de fundos, distribuição de software, armazenamento de dados e<br />
outras aplicações que requeiram garantia de integridade de dados e<br />
autenticação da origem dos dados. O SHA-1 também pode ser utilizado sempre<br />
que for necessário gerar uma versão condensada de uma mensagem.<br />
O MD5 foi desenvolvido por Ron Rivest em 1991. É basicamente o MD4 com um<br />
"cinto de segurança" - os cálculos são um pouco mais lentos mas, em<br />
compensação, é muito mais seguro.<br />
Da mesma forma que outras funções hash, o MD5 é usado em assinaturas<br />
digitais onde um texto longo precisa ser "comprimido" de forma segura antes de<br />
ser cifrado com uma chave privada (secreta) por um criptossistema de chave<br />
pública. Foi projetado para máquinas de 32 bits, podendo ser facilmente<br />
programado de forma compacta. O autor colocou o algoritmo no domínio público<br />
em abril de 1992.<br />
Como o texto sobre a função hash MD4 é bastante minucioso e o MD5 é muito<br />
parecido, não há a necessidade de entrar em muitos detalhes. Caso você tenha<br />
dúvidas, complemente a leitura com o texto MD4.<br />
Descrição do algoritmo MD5<br />
O entrada do MD5 é um fluxo de dados (mensagem) que pode ter um número<br />
arbitrário de bits, representado por b, um número inteiro positivo que varia de<br />
zero até o infinito. Para obter o digesto da mensagem, seus bits, representados<br />
por m0, m1, ..., m{b-1}, onde b = número de bits da mensagem, são submetidos<br />
a diversas operações. Este processo é dividido em cinco etapas ou passos.<br />
Base64 *
Base64 é um sistema numérico posicional cuja base é 64 (da mesma forma que o<br />
sistema decimal é um sistema posicional de base 10). É a maior potência de base<br />
2 que pode ser representada usando-se apenas caracteres ASCII. Devido a esta<br />
característica, a Base64 é usada, entre outras coisas, como codificação de<br />
transferência de e-mails. Todas as variações mais conhecidas pelo nome de<br />
Base64 usam caracteres de A a Z, a-z e 0-9 (nesta ordem) para os primeiros 62<br />
dígitos, mas os símbolos usados para os dois últimos variam consideravelmente<br />
de acordo com o sistema. Vários outros métodos de codificação, como o<br />
UUEncode e as versões mais atuais do BinHex, usam um conjunto diferente de<br />
64 caracteres para representar 6 dígitos binários - só que estes métodos nunca<br />
são chamados de Base64.<br />
O formato MIME<br />
O formato MIME talvez seja o mais conhecido dos Base64. É um esquema de<br />
codificação que transforma binários em texto, ou seja, transforma uma sequência<br />
qualquer de bytes numa sequência de caracteres ASCII que podem ser<br />
impressos. O MIME foi projetado para codificar a transferência de conteúdo de<br />
e-mails através da Internet. Os únicos caracteres utilizados são os do alfabeto<br />
latino maiúsculo e minúsculo (A-Z e a-z), os numerais (0-9) e os símbolos + e /.<br />
Além disso, o símbolo = é um sufixo especial.<br />
Como transformar binários em MIME<br />
A sequência MIME é:<br />
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/<br />
Digamos que se queira "mimeficar" SOL. Neste caso, procura-se o valor ASCII de<br />
cada um dos caracteres, transforma-se estes valores em valores binários, tomase<br />
os valores dos bits seis a seis e transforma-se estes valores novamente em<br />
valores ASCII. Acompanhe na tabela abaixo:<br />
Conteúdo S O L<br />
ASCII (bytes) 83 79 76<br />
Binário 0 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 0 1 0 0 1 1 0 0<br />
Índice 20 52 61 12<br />
Sabendo que,<br />
na Base64, as<br />
letras A-Z<br />
correspondem<br />
às posições de<br />
0 a 25, as<br />
Código Base64 U 0 9 M<br />
letras a-z ficam nas posições 26 a 51 e que os dígitos 0-9 ocupam as posições de<br />
52 a 61, fica fácil deduzir que o valor 20 corresponde à letra U, o valor 52<br />
corresponde a zero e assim por diante. Neste caso, o correspondente Base64 de<br />
SOL é U09M. Também fica fácil perceber que a codificação MIME é maior do<br />
que o texto original porque, para cada três caracteres originais obtemos quatro<br />
caracteres MIME.<br />
Neste exemplo existem exatos 3 bytes. Nos casos em que o texto original é<br />
composto por um número de bytes que não seja múltiplo de 3, usa-se a seguinte<br />
regra:
número de bytes / 3 dá resto 2 -> adiciona-se o sinal = no final<br />
número de bytes / 3 dá resto 1 -> adiciona-se dois sinais == no final<br />
Introdução aos dispositivos criptográficos<br />
Antes de existir uma mensagem secreta é necessário que exista uma mensagem<br />
clara. A mensagem clara pode ser escondida de tantas formas diferentes quantas<br />
forem criadas pela imaginação humana. Para isto podem ser usados artifícios<br />
que envolvam sons, imagens, símbolos, sinais ou qualquer outra coisa que possa<br />
ser percebida pelos sentidos. Se quisermos, até o gosto de uma refeição ou o<br />
cheiro de um perfume pode ser usado para transmitir uma mensagem secreta.<br />
O fator primordial, analisando a criptologia por este aspecto, são os CINCO<br />
SENTIDOS: visão, audição, tato, olfato e paladar (o sexto sentido deixamos para<br />
a criptanálise ). Todos eles podem ser receptores de mensagens secretas. As<br />
máquinas e os dispositivos podem ser utilizados quando um dos sentidos falha ou<br />
quando quisermos facilitar a percepção de mensagens secretas. Esta é uma das<br />
suas aplicações.<br />
Você deve se lembrar do caso do gás Sarin no metrô de Tóquio. Não que o gás<br />
tenha sido uma mensagem secreta... era secreto porque era invisível! O olfato<br />
humano não detecta o Sarin, ou seja, não recebe a mensagem de perigo. O<br />
"dispositivo" usado pela equipe de socorro foi algo insólito: canários. Utilizaram<br />
a extrema sensibilidade deste pássaro como um detector do gás. Foi muito<br />
estranho ver como o pessoal do socorro entrava nas estações subterrâneas<br />
carregando gaiolas, só que, se o pássaro tivesse um troço... o socorrista voltava<br />
correndo para o ar livre!<br />
Para que um receptor possa receber uma mensagem, a ação de um transmissor<br />
é obrigatória, pois é o transmissor que vai tentar alertar ou fornecer informações<br />
a um dos cinco sentidos do receptor. O agente humano pode usar a fala e os<br />
gestos ou pode fazer uso de máquinas e dispositivos que facilitem e/ou melhorem<br />
a transmissão. Pode-se simplesmente falar em código, mas, para vencer a<br />
distância, também podemos falar em código pelo telefone. Pode-se batucar uma<br />
mensagem secreta ou então usar o telégrafo. Podemos entregar bits gravados<br />
num disquete ou enviá-los pela Internet.<br />
Para que a mensagem secreta enviada pelo transmissor possa chegar ao receptor<br />
é preciso colocá-la num substrato qualquer e escolher um meio de transporte.<br />
Se eu falar algumas palavras em código para um ouvinte-receptor que esteja ao<br />
meu lado, a mensagem é constituída por ondas sonoras (o substrato) que se<br />
propagam pelo ar (o meio)... e depois se perdem. Se eu fizer alguns gestos para<br />
um receptor que esteja me vendo de longe, a mensagem é constituída pelas<br />
"figuras" no espaço que os gestos (o substrato) representam. Mas também é<br />
possível desenhar (meio) mensagens em pedras (substrato), escrevê-las (meio)<br />
em papel (substrato) ou gravá-las (meio) em fitas ou discos magnéticos (meio),<br />
todos processos diferentes, mas que funcionam perfeitamente.<br />
E onde entram os dispositivos criptográficos? São úteis sempre que se queira<br />
agilizar, diminuir a ocorrência de erros e facilitar ou automatizar qualquer
processo criptográfico, seja na elaboração, na transmissão, na recepção ou na<br />
decifração.<br />
OS DISPOSITIVOS MAIS ANTIGOS<br />
O uso de dispositivos ou máquinas criptográficas existe desde a Antiguidade. O<br />
mais antigo dispositivo de criptografia talvez seja o Bastão de Licurgo, uma<br />
"máquina" de criptografia datada de 487 a.C. e descrita nas transposições. Outro<br />
artefato muito interessante, datado de 200 a.C. é o telégrafo ótico de Políbio,<br />
cuja descrição você encontra nas substituições tomográficas.<br />
AS MÁQUINAS DA RENASCENÇA<br />
Foi apenas na Renascença, a partir de 1300, que começaram a surgir os<br />
primeiros dispositivos criptográficos de importância. Os primeiros foram os<br />
discos de cifragem, inventados nesta época. Como exemplo pode-se citar o Disco<br />
de Alberti (substituições) e a Grelha de Cardano (esteganografia).<br />
AS MÁQUINAS RECENTES<br />
A sofisticação dos dispositivos criptográficos foi aumentando a medida que a<br />
construção de máquinas em geral, o descobrimento de novos materiais e a<br />
engenharia foram evoluindo. Métodos criptográficos mais elaborados também<br />
acabaram gerando a necessidade de máquinas auxiliares, desde as menores e<br />
mais simples até engenhosos "dinossauros" mecânicos. Existem alguns exemplos<br />
muito interessantes que são descritos nesta seção de dispositivos criptográficos:<br />
• Régua de Saint-Cyr<br />
• Cilindros Cifrantes<br />
• O princípio dos rotores<br />
• Máquina das Diferenças<br />
A máquina das diferenças foi inventada por Charles Babbage e foi incluída nesta<br />
lista porque a considero a tataravó do computador<br />
AS MÁQUINAS E DISPOSITIVOS ATUAIS<br />
Nem é preciso dizer que o principal dispositivo da atualidade é o computador.<br />
Mas não é o único e muito menos o primeiro. Nesta mesma seção são referidos<br />
alguns exemplos.<br />
A Régua de Saint-Cyr<br />
Este instrumento deve seu nome à academia militar francesa situada na cidade<br />
de Saint-Cyr onde, entre 1880 e o início do século XX, serviu para instruir<br />
estudantes de criptologia. Foi o holandês Auguste Kerckhoff, figura de destaque
na criptologia, quem batizou esta régua com o nome de Saint-Cyr.<br />
O instrumento, parecido com as antigas réguas de cálculo, é relativamente<br />
simples. É composto por uma tira longa de papel ou cartolina, denominada<br />
"estator" ou parte fixa, a qual contém um alfabeto ordenado clássico, e por uma<br />
segunda tira, móvel e mais comprida do que a primeira, contendo dois alfabetos<br />
sucessivos. Tradicionalmente, o alfabeto claro é colocado na parte fixa.<br />
AS APLICAÇÕES<br />
Fig. 1 - A Régua de Saint-Cyr<br />
Esta régua permite fazer substituições monoalfabéticas do tipo do Código de<br />
César. Basta deslocar a parte móvel o número de letras que corresponde ao<br />
deslocamento desejado. Para cifrar o texto, troca-se a letra da parte fixa pela<br />
letra correspondente da parte móvel. De acordo com a Fig.1, cujo módulo é 5,<br />
quando se cifra NUMABOA, obtém-se SZRFGTF. Para decifrar, faz-se o<br />
contrário: troca-se a letra da parte móvel pela letra correspondente da parte fixa.<br />
Com um pouco de prática, a régua de Saint-Cyr também pode ser usada nas<br />
substituições polialfabéticas. Neste caso, a cada troca de alfabeto cifrante,<br />
desloca-se a parte móvel de modo a obter o módulo desejado. No caso da cifra de<br />
Vigenère, por exemplo, desloca-se a parte móvel a cada letra do texto claro de<br />
modo que a "letra da vez" da palavra-chave esteja posicionada abaixo da letra A<br />
da parte fixa.<br />
Fig. 2 - N da parte fixa alinhado com o A da parte<br />
móvel<br />
letra pelo T.<br />
Por exemplo, para cifrar<br />
GRANDE IDEIA com a<br />
palavra-chave<br />
NUMABOA,<br />
primeiramente desloca-se<br />
a parte móvel para<br />
alinhar o N com o A da<br />
parte fixa (Fig. 2). A<br />
seguir, procura-se o G na<br />
parte fixa e substitui-se a
Fig. 3 - U alinhado com A<br />
Para substituir a segunda letra posiciona-se a parte móvel da régua de modo que<br />
o U fique alinhado com o A da parte fixa. Depois se localiza o R no alfabeto claro<br />
e troca-se pelo L (Fig. 3). Desloca-se novamente a parte móvel para alinhar o M<br />
com o A da parte fixa e se substitui o A por M, e assim sucessivamente. O<br />
resultado obtido será TLMNES IQYUA.<br />
É um vai e vem da parte móvel que dá gosto, mas, apesar disto, a margem de<br />
erro é muito menor do que trabalhar com as Carreiras de Vigenère.<br />
Cilindros cifrantes<br />
Os cilindros cifrantes são constituídos por vários discos com um orifício central,<br />
montados sobre um eixo. Devem poder rodar de forma independente e, na sua<br />
superfície mais externa, possuem alfabetos permutados. O cilindro é montado<br />
com discos que possuam sequências de letras diferentes.<br />
O número de cilindros corresponde<br />
ao número de letras que podem ser<br />
cifradas em cada etapa. Por exemplo,<br />
se um cilindro possuir 10 discos, uma<br />
mensagem clara de 25 letras deverá<br />
ser cifrada em 3 etapas: 2 blocos de<br />
10 letras e 1 bloco de 5 letras.<br />
A cifragem é efetuada girando-se os<br />
discos de modo que o bloco de texto<br />
claro seja legível numa linha do<br />
cilindro. Para introduzir um fator<br />
randômico no processo, o que<br />
Fig. 1 - Cilindro cifrante M-94B com alguns<br />
discos retirados do eixo<br />
aumenta a segurança do método, escolhe-se aleatoriamente um bloco do texto<br />
cifrado de qualquer outra linha do cilindro. As linhas do cilindro são<br />
denominadas de "generatrix". A primeira linha abaixo do texto claro é a primeira<br />
geratriz, a segunda linha abaixo do texto é a segunda geratriz e assim por diante.<br />
A decifração é feita de modo inverso: os discos são girados de forma que uma<br />
linha reproduza o texto cifrado e, depois, localiza-se uma outra linha que<br />
contenha o texto claro. Na regra, existe apenas uma linha que mostra o texto<br />
decifrado.
Com este tipo de cilindros é possível<br />
obter cifras usando-se alfabetos<br />
independentes através de um<br />
procedimento fácil e pouco sujeito a<br />
erros. Ao contrário das tabelas, de<br />
produção trabalhosa e que exigem<br />
muita concentração para serem<br />
utilizadas, os discos rotantes são<br />
práticos, com um porém: só fornecem<br />
Fig. 2 - Foto de um cilindro M-94 usado alfabetos que "andam par e passo"<br />
pelo exército dos EUA de 1922 a 1943 com o alfabeto primário.<br />
Os discos podem ser colocados no eixo em diversas sequência e esta disposição<br />
funciona como uma chave. O número de chaves utilizáveis é constituído por<br />
todas as possíveis permutações dos discos e pode ser aumentado se houver<br />
discos sobressalentes. Portanto, o conjunto de chaves pode ser ampliado com<br />
facilidade.<br />
Por outro lado, os alfabetos únicos gravados na superfície dos discos não são<br />
apropriados como chaves. Eles podem cair em mãos erradas se um cilindro for<br />
obtido pelo inimigo. Além do mais, não é fácil alterar a disposição das letras dos<br />
discos.<br />
UM POUCO DE HISTÓRIA<br />
Apesar de haver exemplares mais antigos, os cilindros cifrantes são uma<br />
invenção tipicamente do século XIX. Foram utilizados pelos militares no século<br />
XX, até a Segunda Guerra Mundial.<br />
Fredrik GRIEPENSTIERNA (1728-1804) construíu um dispositivo cifrante<br />
cilíndrico para o rei Gustavo III da Suécia em 1786. Seu sistema, no entanto, é<br />
um pouco diferente do acima descrito.<br />
Thomas Jefferson (1743-1826), de 1801 a 1809 terceiro presidente dos Estados<br />
Unidos, desenvolveu em 1795 um dispositivo com 36 discos, mas que nunca<br />
chegou a ser utilizado.<br />
A idéia só se tornou realmente atual depois que Kasiski demonstrou com que<br />
facilidade as cifras polialfabéticas periódicas podiam ser quebradas e depois que<br />
Kerckhoff deixou claro como a dependência dos alfabetos pode ser explorada.<br />
Étienne BAZERIES (1846-1931) construíu em 1891 um dispositivo com 20 discos<br />
e sugeriu que a força militar francesa o utilizasse. Como, logo após, De Viaris<br />
quebrou o sistema, o dispositivo nunca chegou a ser usado.<br />
Em 1893, Arthur Hermann sugeriu o uso de dispositivos rotantes equivalentes.<br />
Estes acabaram sendo utilizados a partir da Primeira Guerra pelo exército dos<br />
EUA.<br />
Em 1922, conforme sugestão de Friedman, o exército dos EUA passou a utilizar o<br />
dispositivo M-94, de 25 discos, em diversas variações e com vários<br />
aperfeiçoamentos (por exemplo, o M-138-A com 30 discos originários de um
estoque de 100) até o fim da Segunda Grande Guerra. O sistema destes<br />
dispositivos foram em parte quebrados pelos alemães (Rohrbach).<br />
PEÇA RARA<br />
Fig. 3 - Cilindro cifrante do<br />
Museu Criptológico<br />
Nacional da NSA. Acreditase<br />
ser o dispositivo mais<br />
antigo do gênero.<br />
Este dispositivo de cifragem e decifragem foi<br />
adquirido pela NSA no início dos anos 80. Imaginouse<br />
inicialmente tratar-se de um modelo do "Jefferson<br />
cipher wheel", porém a conexão não foi provada.<br />
Sabe-se que estes dispositivos já haviam sido<br />
descritos em épocas muito mais remotas, por<br />
exemplo, por Francis Bacon em 1605. Além disso,<br />
parecem ter sido muito comuns nas "black<br />
chambers" de governos europeus.<br />
Tudo indica que este cilindro cifrante tenha sido<br />
projetado para o idioma francês, que era a língua<br />
usada na diplomacia até o final da Primeira Guerra<br />
Mundial. Sua origem é West Virginia e desconhece-se como tenha chegado até<br />
lá.<br />
O princípio dos rotores<br />
Máquinas de cifragem com rotores trabalham com uma sequência de<br />
substituições monoalfabéticas, alternadas a cada letra do texto claro. Esta troca<br />
de alfabeto cifrante a cada letra é efetuada por um "rotor". Para entender o<br />
princípio de funcionamento destas máquinas, vamos inicialmente ver como<br />
funciona um rotor.<br />
O princípio da substituição<br />
Fig. 1 - Disco rotor<br />
com contatos (face de<br />
saída)<br />
Um rotor é constituído por um<br />
disco que possui contatos na<br />
borda externa em ambas as<br />
faces. O número de contatos é<br />
igual ao número de letras que o<br />
alfabeto do disco possui. Os<br />
contatos da face A estão<br />
ligados aos contatos da face B<br />
de forma irregular. Por<br />
exemplo, o contato 1 é ligado<br />
ao 5, o 2 ao 18, etc. Como<br />
consequência dos contatos<br />
trocados obtém-se uma<br />
substituição monoalfabética<br />
Fig. 2 - Disco rotor com<br />
contatos (face de entrada)
que ocorre da seguinte maneira:<br />
• Numa das faces - a face de entrada - os contatos são ligados a um teclado.<br />
Na outra face - a face de saída - os contatos são ligados a pequenas<br />
lâmpadas identificadas por uma letra ou são ligados a uma impressora ou<br />
outro dispositivo de impressão.<br />
• Na face de entrada cada uma das teclas do teclado está ligada a um<br />
contato. Como as ligações entre os contatos da face de entrada e os da face<br />
de saída estão trocados, a saída é de letras diferentes das correspondentes<br />
à face de entrada.<br />
Na tabela abaixo está um<br />
exemplo fictício do que pode<br />
ocorrer. A primeira linha<br />
corresponde às letras do<br />
teclado. A segunda linha<br />
contém a sequência dos<br />
contatos da face de entrada,<br />
nesta etapa do exemplo<br />
ligados aos contatos das<br />
letras correspondentes do<br />
Fig. 3 - Contatos trocados no teclado. A terceira contém a<br />
rotor da máquina Enigma sequência das ligações entre<br />
os contatos da face de entrada e os da face de saída e,<br />
finalmente, a quarta linha indica a letra cifrada, resultado<br />
da substituição.<br />
No exemplo foi ressaltada a letra "a" do teclado, ligada ao contato da letra "A" na<br />
face de entrada. Esta, por sua vez, está ligada ao contato que corresponde à letra<br />
"K" na face de saída. Como resultado, a letra "a" é substituída pela letra "K".<br />
Da mesma forma podemos verificar que a letra "i", por exemplo, será substituída<br />
pela letra "H", a "e" por "C" e assim por diante.<br />
Teclado a b c d e f g h i j k l m n o p q r s t u v w x y z<br />
Entrada A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />
Saída Q W E R T Z U I O P A S D F G H J K L Y X C V B N M<br />
CIFRA A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />
Tabela exemplo de substituição por rotor<br />
O princípio da rotação<br />
Fig. 4 - Contatos<br />
trocados no rotor<br />
Hebern<br />
Após a substituição de uma letra, o rotor é girado para ocupar uma nova posição.<br />
Desta forma é obtida uma substituição polialfabética.<br />
Substituindo as letras por números (o que não altera o processo), vamos analisar<br />
o exemplo acima depois do rotor ter rodado uma posição: a letra "a" do teclado<br />
se encontra agora no contato Z=25, a letra "b" do teclado no contato A=00 e<br />
assim sucessivamente. Observe as tabelas abaixo:
Posição Inicial<br />
Avanço de 1 Posição<br />
a — 00 + 16<br />
A<br />
b 01 | 22 B<br />
c 02 | 04 C<br />
d 03 | 17 D<br />
e 04 | 19 E<br />
f 05 | 25 F<br />
g 06 | 20 G<br />
h 07 | 08 H<br />
i 08 | 14 I<br />
j 09 | 15 J<br />
k<br />
10 + 00 — K<br />
l 11 18 L<br />
m 12 03 M<br />
a — 25 + 12 A<br />
b 00 | 16 B<br />
c 01 | 22 C<br />
d 02 | 04 D<br />
e 03 | 17 E<br />
f 04 | 19 F<br />
g 05 + 25 — G<br />
h 06 20 H<br />
i 07 08 I<br />
j 08 14 J<br />
k 09 15 K<br />
l 10 00 L<br />
m 11 18 M<br />
Na posição inicial, a letra "a" do teclado foi substituída pela letra "K". Após o<br />
avanço de uma posição do rotor, a mesma letra "a" passa a ser substituída por<br />
"G".<br />
O alfabeto primário, o qual descreve a posição inicial do rotor, encontra-se na<br />
linha 0. Os alfabetos acompanhantes são chamados de alfabetos "rotantes".<br />
Os alfabetos rotantes, como de costume, podem ser escolhidos progressivamente<br />
ou através de uma chave.<br />
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z -> claro<br />
---------------------------------------------------<br />
0 K X V M C N O P H Q R S Z Y I J A D L E G W B U T F -> primário<br />
1 G L Y W N D O P Q I R S T A Z J K B E M F H X C V U<br />
2 V H M Z X O E P Q R J S T U B A K L C F N G I Y D W<br />
3 X W I N A Y P F Q R S K T U V C B L M D G O H J Z E<br />
4 F Y X J O B Z Q G R S T L U V W D C M N E H P I K A<br />
5 B G Z Y K P C A R H S T U M V W X E D N O F I Q J L<br />
6 M C H A Z L Q D B S I T U V N W X Y F E O P G J R K<br />
7 L N D I B A M R E C T J U V W O X Y Z G F P Q H K S<br />
8 T M O E J C B N S F D U K V W X P Y Z A H G Q R I L<br />
9 M U N P F K D C O T G E V L W X Y Q Z A B I H R S J<br />
10 K N V O Q G L E D P U H F W M X Y Z R A B C J I S T<br />
11 U L O W P R H M F E Q V I G X N Y Z A S B C D K J T<br />
12 U V M P X Q S I N G F R W J H Y O Z A B T C D E L K<br />
13 L V W N Q Y R T J O H G S X K I Z P A B C U D E F M<br />
14 N M W X O R Z S U K P I H T Y L J A Q B C D V E F G<br />
15 H O N X Y P S A T V L Q J I U Z M K B R C D E W F G<br />
16 H I P O Y Z Q T B U W M R K J V A N L C S D E F X G<br />
17 H I J Q P Z A R U C V X N S L K W B O M D T E F G Y
18 Z I J K R Q A B S V D W Y O T M L X C P N E U F G H<br />
19 I A J K L S R B C T W E X Z P U N M Y D Q O F V G H<br />
20 I J B K L M T S C D U X F Y A Q V O N Z E R P G W H<br />
21 I J K C L M N U T D E V Y G Z B R W P O A F S Q H X<br />
22 Y J K L D M N O V U E F W Z H A C S X Q P B G T R I<br />
23 J Z K L M E N O P W V F G X A I B D T Y R Q C H U S<br />
24 T K A L M N F O P Q X W G H Y B J C E U Z S R D I V<br />
25 W U L B M N O G P Q R Y X H I Z C K D F V A T S E J<br />
Algumas considerações fazem-se necessárias. Observe que cada diagonal da<br />
tabela, da esquerda para a direita e de cima para baixo, contém um alfabeto<br />
padrão. Além disso, as representações possíveis de uma letra não estão<br />
uniformemente distribuídas.<br />
Como na coluna correspondente à letra "A" do alfabeto claro não aparecem todas<br />
as letras, os inícios das linhas não são apropriadas para orientarem a escolha de<br />
um alfabeto através de uma chave. Devido a isto, é mais fácil escolher o número<br />
da linha, uma vez que este corresponde às letras do alfabeto (0=A, 1=B, ...,<br />
25=Z).<br />
Hardware de Encriptação<br />
Hardware de encriptação é um peça de hardware criada especificamente para<br />
manipular processos criptográficos. Pode ser um chip especial colocado na placa<br />
mãe, um disco rígido especial ou uma placa acessória.<br />
Alguns dispositivos apenas aceleram os processos de cifragem,<br />
independentemente do método utilizado. Chips dedicados gerenciam e atendem<br />
unicamente os processos criptográficos liberando a CPU desta tarefa, o que<br />
representa um ganho significativo na performance de encriptações e<br />
decifragens. Estes chips geralmente são otimizados para alguns tipos específicos<br />
de chaves mas, ainda assim, são muito rápidos mesmo que uma chave não seja<br />
do tipo otimizado. Um HD com dispositivo de encriptação faz a<br />
cifragem/decifração automaticamente toda vez que houver escrita/leitura de<br />
dados neste disco. Normalmente este tipo de dispositivo não permite escolher a<br />
chave ou o comprimento de chave. Existem também placas especiais de<br />
encriptação, projetadas especialmente para certos tipos/comprimentos de chave.<br />
Costumam ser utilizadas em tarefas específicas, como a encriptação SSL, e são<br />
incrivelmente rápidas. Para o usuário comum, o chip na placa mãe geralmente é<br />
a melhor escolha (muitas placas mãe VIA já vêm com um chip deste tipo).<br />
A segurança oferecida por qualquer sistema de encriptação depende unicamente<br />
da sua chave. As placas aceleradoras e os HDs geralmente são fornecidos com<br />
chaves e comprimentos de chave bastante seguros. O inconveniente destes<br />
sistemas, além de serem mais caros, é que não se pode fazer upgrades. Se a<br />
chave ou o comprimento de chave deixarem de fornecer a segurança desejada,<br />
os dispositivos precisam ser trocados. Já o chip onboard aceita qualquer chave<br />
que você fornecer. Com as chaves otimizadas, o processamento é mais rápido e,<br />
com as não otimizadas, apenas um pouco mais demorado.
A criptologia é uma ciência que se ocupa da criptografia e da criptoanálise. A<br />
criptografia é o estudo dos métodos e das técnicas de cifragem. A criptoanálise,<br />
por sua vez, se ocupa do estudo das formas de se "quebrar" sistemas. É coisa de<br />
hacker<br />
Criptoanálise é a ciência de quebrar uma mensagem cifrada. Veja bem, quebrar<br />
não é o mesmo que decifrar. Decifrar é obter a mensagem original quando se<br />
conhece o sistema e usando a chave também conhecida. Quebrar é hackear o<br />
sistema e descobrir a chave.<br />
Desde que existe a criptografia também existiram os hackers de plantão.<br />
Durante a Idade Média, época de extrema paradeira e de uma desvairada<br />
perseguição aos "demônios" da criptografia na Europa, a civilização árabeislâmica<br />
deu uma enorme contribuição: foi o berço da criptoanálise. De 700 a<br />
1200, incríveis estudos estatísticos e figuras de destaque como al-Khalil, al-Kindi,<br />
Ibn Dunainir e Ibn Adlan marcaram época. Na Idade Moderna, merecem<br />
destaque o holandês Kerckoff e o alemão Kasiski.<br />
Uma vez que a criptoanálise se ocupa em quebrar sistemas, é óbvio que um dos<br />
temas relevantes seja a segurança. É natural intuir que, quanto mais seguro for<br />
um sistema, mais difícil será quebrá-lo. Porém, como medir o nível de<br />
segurança? Existem sistemas a prova de hackers? Para ter uma idéia do que vem<br />
a ser segurança, traduzi um artigo do guru da atualidade, Bruce Schneier que<br />
rebatizei com o título O seguro morreu de bits. Já que você caiu nesta página,<br />
aproveite a oportunidade e dê uma lida para avaliar a complexidade do assunto.<br />
TEXTO RETIRADO DO SITE<br />
http://www.numaboa.com
IPSEC<br />
IPsec is a suite of protocols for securing network connections, but the details<br />
and many variations quickly become overwhelming. This is particularly the case<br />
when trying to interoperate between disparate systems, causing more than one<br />
engineer to just mindlessly turn the knobs when attempting to bring up a new<br />
connection.<br />
One of the first things that one notices when trying to set up IPsec is that there<br />
are so many knobs and settings: even a pair of entirely standards-conforming<br />
implementations sports a bewildering number of ways to impede a successful<br />
connection. It's just an astonishingly-complex suite of protocols.<br />
One cause of the complexity is that IPsec provides mechanism, not policy: rather<br />
than define such-and-such encryption algorithm or a certain authentication<br />
function, it provides a framework that allows an implementation to provide<br />
nearly anything that both ends agree upon.<br />
In this section, we'll touch on some of the items in the form of a glossary, with a<br />
compare-and-contrast to show which terms relate to which other terms. This is<br />
not even remotely complete.<br />
AH versus ESP<br />
"Authentication Header" (AH) and "Encapsulating Security Payload" (ESP)<br />
are the two main wire-level protocols used by IPsec, and they authenticate<br />
(AH) and encrypt+authenticate (ESP) the data flowing over that connection.<br />
They are typically used independently, though it's possible (but uncommon)<br />
to use them both together.<br />
Tunnel mode versus Transport mode<br />
Transport Mode provides a secure connection between two endpoints as it<br />
encapsulates IP's payload, while Tunnel Mode encapsulates the entire IP<br />
packet to provide a virtual "secure hop" between two gateways. The latter is<br />
used to form a traditional , where the tunnel generally creates a secure<br />
tunnel across an untrusted Internet.<br />
MD5 versus versus versus versus versus blah blah blah<br />
Setting up an IPsec connection involves all kinds of crypto choices, but this<br />
is simplified substantially by the fact that any given connection can use at<br />
most two or (rarely) three at a time.<br />
Authentication calculates an Integrity Check Value (ICV) over the packet's<br />
contents, and it's usually built on top of a cryptographic hash such as MD5<br />
or SHA-1. It incorporates a secret key known to both ends, and this allows<br />
the recipient to compute the ICV in the same way. If the recipient gets the<br />
same value, the sender has effectively authenticated itself (relying on the<br />
property that cryptographic hashes can't practically be reversed). AH<br />
always provides authentication, and ESP does so optionally.<br />
Encryption uses a secret key to encrypt the data before transmission, and<br />
this hides the actual contents of the packet from eavesdroppers. There are
quite a few choices for algorithms here, with DES, 3DES, Blowfish and AES<br />
being common. Others are possible too.<br />
versus manual keys<br />
Since both sides of the conversation need to know the secret values used in<br />
hashing or encryption, there is the question of just how this data is<br />
exchanged. Manual keys require manual entry of the secret values on both<br />
ends, presumably conveyed by some out-of-band mechanism, and IKE<br />
(Internet Key Exchange) is a sophisticated mechanism for doing this online.<br />
Main mode versus aggressive mode<br />
These modes control an efficiency-versus-security tradeoff during initial IKE<br />
key exchange. "Main mode" requires six packets back and forth, but affords<br />
complete security during the establishment of an IPsec connection, while<br />
Aggressive mode uses half the exchanges providing a bit less security<br />
because some information is transmitted in cleartext.<br />
We'll certainly face more options as we unwrap IPsec.<br />
The IP Datagram<br />
Since we're looking at IPsec from the bottom up, we must first take a brief<br />
detour to revisit the IP Header itself, which carries all of the traffic we'll be<br />
considering. Note that we are not trying to provide comprehensive coverage to<br />
the IP header — there are other excellent resources for that (the best being<br />
TCP/IP Illustrated, vol 1).
ver<br />
This is the version of the protocol, which is now 4=IPv4<br />
hlen<br />
IP Header length, as a four-bit number of 32-bit words ranging from 0..15. A<br />
standard IPv4 header is always 20 bytes long (5 words), and IP Options — if<br />
any — are indicated by a larger hlen field up to at most 60 bytes. This<br />
header length never includes the size of payload or other headers that<br />
follow.<br />
TOS<br />
Type of Service<br />
This field is a bitmask that gives some clues as to the type of service this<br />
datagram should receive: optimize for bandwidth? Latency? Low cost?<br />
Reliability?<br />
pkt len<br />
Overall packet length in bytes, up to 65535. This count includes the bytes of<br />
the header, so this suggests that the maximum size of any payload is at least<br />
20 bytes less. The vast majority of IP datagrams are much, much smaller.<br />
ID<br />
The ID field is used to associate related packets that have been fragmented<br />
(large packets broken up into smaller ones).<br />
flgs<br />
These are small flags that mainly control fragmentation: one marks the<br />
packet as ineligible for fragmentation, and the other says that more<br />
fragments follow.<br />
frag offset<br />
When a packet is fragmented, this shows where in the overall "virtual"<br />
packet this fragment belongs.<br />
TTL<br />
This is the Time to Live, and is decremented by each router that passes this<br />
packet. When the value reaches zero, it suggests some kind of routing loop,<br />
so it's discarded to prevent it from running around the Internet forever.<br />
proto<br />
This represents the protocol carried within this packet, and it's going to be<br />
central to most of our discussions. Though the datagram itself is IP, it<br />
always encapsulates a subsidiary protocol (TCP, UDP, ICMP, etc. — see the<br />
chart below) within. It can be thought of as giving the type of the header<br />
that follows.<br />
header cksum<br />
This holds a checksum of the entire IP header, and it's designed to detect<br />
errors in transit. This is not a cryptographic checksum, and it doesn't cover<br />
any part of the datagram that follow the IP header.<br />
src IP address<br />
The 32-bit source IP address, which the recipient uses to reply to this<br />
datagram. Generally speaking, it's possible to spoof these addresses (i.e., lie<br />
about where the datagram is coming from).<br />
dst IP address<br />
The 32-bit destination IP address, which is where the packet is intended to<br />
arrive.
IP Options<br />
These are an optional part of the IP header that contains application-specific<br />
information, though they are not commonly used for routine traffic. The<br />
presense of IP options is indicated by a hlen greater than 5, and they (if<br />
present) are included in the header checksum.<br />
Payload<br />
Each protocol type implies its own format for what follows the IP header,<br />
and we've used TCP here just to show an example.<br />
These proto codes are defined by IANA — the Internet Assigned Numbers<br />
Authority — and there are many more than would ever be used by any single<br />
installation, but most will ring a bell with a network-savvy technician. These<br />
representative types are taken from the IANA website listing protocols:<br />
Some IP protocol codes<br />
Protocol<br />
Protocol Description<br />
code<br />
1 ICMP — Internet Control Message Protocol<br />
2 IGMP — Internet Group Management Protocol<br />
4 IP within IP (a kind of encapsulation)<br />
6 TCP — Transmission Control Protocol<br />
17 UDP — User Datagram Protocol<br />
41 IPv6 — next-generation TCP/IP<br />
47 GRE — Generic Router Encapsulation (used by PPTP)<br />
50 IPsec: ESP — Encapsulating Security Payload<br />
51 IPsec: AH — Authentication Header<br />
We'll be studying the last two in detail.<br />
AH: Authentication Only<br />
AH is used to authenticate — but not encrypt — IP traffic, and this serves the<br />
treble purpose of ensuring that we're really talking to who we think we are,<br />
detecting alteration of data while in transit, and (optionally) to guard against<br />
replay by attackers who capture data from the wire and attempt to re-inject that<br />
data back onto the wire at a later date.<br />
Authentication is performed by computing a cryptographic hash-based message<br />
authentication code over nearly all the fields of the IP packet (excluding those<br />
which might be modified in transit, such as TTL or the header checksum), and<br />
stores this in a newly-added AH header and sent to the other end.
This AH header contains just five interesting fields, and it's injected between the<br />
original IP header and the payload. We'll touch on each of the fields here, though<br />
their utility may not be fully apparent until we see how they're used in the larger<br />
picture.<br />
next hdr<br />
This identifies the protocol type of the following payload, and it's the<br />
original packet type being encapsulated: this is how the IPsec header(s) are<br />
linked together.<br />
AH len<br />
This defines the length, in 32-bit words, of the whole AH header, minus two<br />
words (this "minus two words" proviso springs from the format of IPv6's<br />
RFC 1883 Extension Headers, of which AH is one).<br />
Reserved<br />
This field is reserved for future use and must be zero.<br />
Security Parameters Index<br />
This is an opaque 32-bit identifier that helps the recipient select which of<br />
possibly many ongoing conversations this packet applies. Each AH-protected<br />
connection implies a hash algorithm (MD5, SHA-1, etc.), some kind of secret<br />
data, and a host of other parameters. The SPI can be thought of as an index<br />
into a table of these settings, allowing for easy association of packet with<br />
parameter.<br />
Sequence Number<br />
This is a monotonically increasing identifier that's used to assist in<br />
antireplay protection. This value is included in the authentication data, so<br />
modifications (intentional or otherwise) are detected.<br />
Authentication Data<br />
This is the Integrity Check Value calculated over the entire packet —<br />
including most of the headers — The recipient recomputes the same hash;<br />
Mismatched values mark the packet as either damaged in transit, or not<br />
having the proper secret key. These are discarded.<br />
Transport Mode<br />
The easiest mode to understand is Transport Mode, which is used to protect an
end-to-end conversation between two hosts. This protection is either<br />
authentication or encryption (or both), but it is not a tunneling protocol. It has<br />
nothing to do with a traditional VPN: it's simply a secured IP connection.<br />
In AH Transport Mode, the IP packet is modified only slightly to include the new<br />
AH header between the IP header and the protocol payload (TCP, UDP, etc.), and<br />
there is a shuffling of the protocol code that links the various headers together.<br />
This protocol shuffling is required to allow the original IP packet to be<br />
reconstituted at the other end: after the IPsec headers have been validated upon<br />
receipt, they're stripped off, and the original protocol type (TCP, UDP, etc.) is<br />
stored back in the IP header. We'll see this chain of next header fields again and<br />
again as we examine IPsec.<br />
When the packet arrives at its destination and passes the authentication check,<br />
the AH header is removed and the Proto=AH field in the IP header is replaced<br />
with the saved "Next Protocol". This puts the IP datagram back to its original<br />
state, and it can be delivered to the waiting process.
Tunnel Mode<br />
Tunnel Mode forms the more familiar functionality, where entire IP packets are<br />
encapsulated inside another and delivered to the destination.<br />
Like Transport mode, the packet is sealed with an Integrity Check Value to<br />
authenticate the sender and to prevent modification in transit. But unlike<br />
Transport mode, it encapsulates the full IP header as well as the payload, and<br />
this allows the source and destination addresses to be different from those of the<br />
encompassing packet: This allows formation of a tunnel.<br />
When a Tunnel-mode packet arrives at its destination, it goes through the same
authentication check as any AH-type packet, and those passing the check have<br />
their entire IP and AH headers stripped off. This effectively reconstitutes the<br />
original IP datagram, which is then injected into the usual routing process.<br />
Most implementations treat the Tunnel-mode endpoint as a virtual network<br />
interface — just like an Ethernet interface or localhost — and the traffic entering<br />
or leaving it is subject to all the ordinary routing decisions.<br />
The reconstituted packet could be delivered to the local machine or routed<br />
elsewhere (according to the destination IP address found in the encapsulated<br />
packet), though in any case is no longer subject to the protections of IPsec. At<br />
this point, it's just a regular IP datagram.<br />
Though Transport mode is used strictly to secure an end-to-end connection<br />
between two computers, Tunnel mode is more typically used between gateways<br />
(routers, firewalls, or standalone VPN devices) to provide a Virtual Private<br />
Network (VPN).<br />
Transport or Tunnel?<br />
Curiously, there is no explicit "Mode" field in IPsec: what distinguishes Transport<br />
mode from Tunnel mode is the next header field in the AH header.<br />
When the next-header value is IP, it means that this packet encapsulates an<br />
entire IP datagram (including the independent source and destination IP<br />
addresses that allow separate routing after de-encapsulation). This is Tunnel<br />
mode.
Any other value (TCP, UDP, ICMP, etc.) means that it's Transport mode and is<br />
securing an endpoint-to-endpoint connection.<br />
The top-level of the IP datagram is structured the same way regardless of mode,<br />
and intermediate routers treat all flavors IPsec/AH traffic identically without<br />
deeper inspection.<br />
We'll note that a host — as opposed to a gateway — is required to support both<br />
Transport and Tunnel modes, but when creating a host-to-host connection, it<br />
seems a little superfluous to use Tunnel mode.<br />
Furthermore, a gateway (router, firewall, etc.) is only required to support Tunnel<br />
mode, though supporting Transport mode is useful only when creating an<br />
endpoint to the gateway itself, as in the case of network management functions.<br />
Authentication Algorithms<br />
AH carries an Integrity Check Value in the Authentication Data portion of the<br />
header, and it's typically (but not always) built on top of standard cryptographic<br />
hash algorithms such as MD5 or SHA-1.<br />
Rather than use a straight checksum, which would provide no real security<br />
against intentional tampering, it uses a Hashed Message Authentication Code<br />
(HMAC) which incorporates a secret value while creating the ICV. Though an<br />
attacker can easily recompute a hash, without the secret value he won't be able<br />
to recreate the proper ICV.<br />
HMAC is described by RFC 2104, and this illustration shows how the message<br />
data and secret contribute to the final Integrity Check Value:
We'll note that IPsec/AH doesn't define what the authentication function must be,<br />
it instead provides a framework which allows any reasonable implementation<br />
agreed to by both ends to use. It's possible to use other authentication functions,<br />
such as a digital signature or an encryption function as long as both sides<br />
provide for it.<br />
AH and NAT — Not Gonna Happen<br />
Though AH provides very strong protection of a packet's contents because it<br />
covers everything that can be possibly considered immutable, this protection<br />
comes at a cost: AH is incompatible with NAT (Network Address Translation).
NAT is used to map a range of private addresses (say, 192.168.1.X) to and from a<br />
(usually) smaller set of public address, thereby reducing the demand for<br />
routable, public IP space. In this process, the IP header is actually modified on<br />
the fly by the NAT device to change the source and/or destination IP address.<br />
When the appropriate source or header IP address is changed, it forces a<br />
recalculation of the header checksum. This has to be done anyway, because the<br />
NAT device typically serves as one "hop" in the path from source to destination,<br />
and this requires the decrement of the TTL (Time To Live) field.<br />
Because the TTL and header checksum fields are always modified in flight, AH<br />
knows to excludes them from coverage, but this does not apply to the IP<br />
addresses. These are included in the Integrity Check Value, and any modification<br />
will cause the check to fail when verified by the recipient. Because the ICV<br />
incorporates a secret key which is unknown by intermediate parties, the NAT<br />
router is not able to recompute the ICV.<br />
This same difficulty also applies to PAT (Port Address Translation), which maps<br />
multiple private IP addresses into a single external IP address. Not only are the<br />
IP addresses modified on the fly, but the UDP and TCP port numbers (and<br />
sometimese even to payload). This requires much more intelligence on the part<br />
of the NAT device, and more extensive modifications to the whole IP datagram.<br />
For this reason, AH — whether in Tunnel or Transport mode — is entirely<br />
incompatible with NAT, and it may only be employed when the source and<br />
destination networks are reachable without translation.<br />
We'll note that this particular difficulty doesn't apply to ESP, as its
authentication and encryption do not incorporate the IP header being modified<br />
by NAT. Nevertheless, NAT does impose some challenges even on ESP.<br />
NAT translates IP addresses on the fly — but it has to keep track of which<br />
connections are flowing through it so that replies can be properly associated<br />
with sources. When using TCP or UDP, this is commonly done with port numbers<br />
(whether rewritten on the fly or not), but IPsec provides no hook to allow this.<br />
At first one might suspect the SPI, which appears to be a useful identifier, but<br />
because the SPI is different in both directions, the NAT device has no way to<br />
associate the returning packet with the outgoing connection.<br />
Addressing this requires special facilities for NAT traversal, something not<br />
covered in this paper.<br />
ESP — Encapsulating Security<br />
Payload<br />
Adding encryption makes ESP a bit more complicated because the encapsulation<br />
surrounds the payload rather than preceeds it as with AH: ESP includes header<br />
and trailer fields to support the encryption and optional authentication. It also<br />
provides Tunnel and Transport modes which are used in by-now familar ways.<br />
The IPsec RFCs don't insist upon any particular encryption algorithms, but we<br />
find DES, triple-DES, AES, and Blowfish in common use to shield the payload<br />
from prying eyes. The algorithm used for a particular connection is specified by<br />
the Security Association (covered in a later section), and this SA includes not<br />
only the algorithm, but the key used.<br />
Unlike AH, which provides a small header before the payload, ESP surrounds the<br />
payload it's protecting. The Security Parameters Index and Sequence Number
serve the same purpose as in AH, but we find padding, the next header, and the<br />
optional Authentication Data at the end, in the ESP Trailer.<br />
It's possible to use ESP without any actual encryption (to use a NULL algorithm),<br />
which nonetheless structures the packet the same way. This provides no<br />
confidentiality, and it only makes sense if combined with ESP authentication. It's<br />
pointless to use ESP without either encryption or authentication (unless one is<br />
simply doing protocol testing).<br />
Padding is provided to allow block-oriented encryption algorithms room for<br />
multiples of their blocksize, and the length of that padding is provided in the pad<br />
len field. The next hdr field gives the type (IP, TCP, UDP, etc.) of the payload in<br />
the usual way, though it can be thought of as pointing "backwards" into the<br />
packet rather than forward as we've seen in AH.<br />
In addition to encryption, ESP can also optionally provide authentication, with<br />
the same HMAC as found in AH. Unlike AH, however, this authentication is only<br />
for the ESP header and encrypted payload: it does not cover the full IP packet.<br />
Surprisingly, this does not substantially weaken the security of the<br />
authentication, but it does provide some important benefits.<br />
When an outsider examines an IP packet containing ESP data, it's essentially<br />
impossible to make any real guesses about what's inside save for the usual data<br />
found in the IP header (particularly the source and destination IP addresses).<br />
The attacker will certainly know that it's ESP data — that's also in the header —<br />
but the type of the payload is encrypted with the payload.<br />
Even the presense or absense of Authentication Data can't be determined by<br />
looking at the packet itself (this determination is made by using the Security<br />
Parameters Index to reference the preshared set of parameters and algorithms<br />
for this connection).<br />
However, it should be noted that sometimes the envelope provides hints that the
payload does not. With more people sending inside ESP over the internet, the<br />
taggings are in the outside header and is fairly obvious what traffic is VoIP<br />
signaling (IP precedence 3) and what is RTP traffic (IP precedence 5). It's not a<br />
sure thing, but it might be enough of a clue to matter in some circumstances.<br />
ESP in Transport Mode<br />
As with AH, Transport Mode encapsulates just the datagram's payload and is<br />
designed strictly for host-to-host communications. The original IP header is left<br />
in place (except for the shuffled Protocol field), and it means that — among other<br />
things — the source and destination IP addresses are unchanged.
ESP in Tunnel Mode<br />
Our final look of standalone ESP is in Tunnel mode, which encapsulates an entire<br />
IP datagram inside the encrypted shell:<br />
Providing an encrypted Tunnel Mode connection is getting very close to the<br />
traditional VPN that springs to mind when most of us think about IPsec, but we<br />
have to add authentication of one type or another to complete the picture: this is<br />
covered in the following section.<br />
Unlike AH, where an onlooker can easily tell whether traffic is in Tunnel or<br />
Transport mode, this information is unavailable here: the fact that this is Tunnel<br />
mode (via next=IP) is part of the encrypted payload, and is simply not visible to<br />
one unable to decrypt the packet.
Putting it all together: Building a<br />
real VPN<br />
With coverage of the Authenticating Header and Encapsulating Security Payload<br />
complete, we're ready to enable both encryption and authentication to build a<br />
real VPN. The whole purpose of a Virtual Private Network is to join two trusted<br />
networks across an untrusted intermediate network, as is by stringing a very<br />
long Ethernet cable between the two. This is commonly used to connect branch<br />
offices with company headquarters, allowing all users to share sensitive<br />
resources without fear of interception.<br />
Clearly, a secure VPN requires both authentication and encryption. We know<br />
that ESP is the only way to provide encryption, but ESP and AH both can provide<br />
authentication: which one do we use?
The obvious solution of wrapping ESP inside of AH is technically possible, but in<br />
practice is not commonly used because of AH's limitations with respect to<br />
Network Address Translation. By using AH+ESP, this tunnel could never<br />
successfully traverse a NAT'ed device.<br />
Instead, ESP+Auth is used in Tunnel mode to fully encapsulate the traffic on its<br />
way across an untrusted network, protected by both encryption and<br />
authentication in the same thing.<br />
Traffic protected in this manner yields nearly no useful information to an<br />
interloper save for the fact that the two sites are conntected by a VPN. This<br />
information might help an attacker understand trust relationships, but nothing<br />
about the actual traffic itself is revealed. Even the type of encapsulated protocol<br />
— TCP, UDP, or ICMP — is hidden from outsiders.
What's particularly nice about this mode of operation is that the end-user hosts<br />
generally know nothing about the VPN or other security measures in place. Since<br />
a VPN implemented by a gateway device treats the VPN as yet another interface,<br />
traffic destined for the other end is routed normally.<br />
This packet-in-a-packet can actually be nested yet more levels: Host A and Host<br />
B can establish their own authenticated connection (via AH), and have this<br />
routed over the VPN. This would put an AH inner packet inside an enclosing<br />
ESP+Auth packet.<br />
Update - it's important to use authentication even if encryption is used, because<br />
encrypt-only implementations are subject to effective attack as described in the<br />
paper Cryptography in Theory and Practice: The Case of Encryption in IPsec; see<br />
the Resources section for more information.<br />
Touching on Other Matters<br />
IPsec is a very complex suite of protocols, and this Tech Tip cannot possibly give<br />
proper justice to more than a small part of it. In this section we'll mention a few<br />
areas that beg for more coverage.<br />
Security Associations and the SPI<br />
It seems self-evident that if two endpoints or gateways are going to establish a<br />
secure connection, some kind of shared secret is required to seed the<br />
authentication function and/or key the encryption algorithm. The matter of just<br />
how these are secrets are established is a substantial topic to be addressed<br />
elsewhere, and for the purposes of this discussion we shall just assume that the<br />
keys have magically landed where they belong.<br />
When an IPsec datagram — either AH or ESP — arrives at an interface, just how<br />
does the interface know which set of parameters (key, algorithm, and policies) to<br />
use? Any host could have many ongoing conversations, each with a different set<br />
of keys and algorithms, and something must be able to direct this processing.<br />
Unsure!<br />
It's been pointed out that the SADB only uses the protocol type and SPI to select<br />
an entry, not the partner IP address; we simply don't know.<br />
This might depend on whether the association is configured with main mode or<br />
aggressive mode, but we welcome clarifications.<br />
This is specified by the Security Association (SA), a collection of connectionspecific<br />
parameters, and each partner can have one or more Security<br />
Associations. When a datagram arrives, three pieces of data are used to locate<br />
the correct SA inside the Security Associations Database (SADB):<br />
• Partner IP address
• IPsec Protocol (ESP or AH)<br />
• Security Parameters Index<br />
In many ways this triple can be likened to an IP socket, which is uniquely<br />
denoted by the remote IP address, protocol, and port number.<br />
Security Associations are one way, so a two-way connection (the typical case)<br />
requires at least two. Furthermore, each protocol (ESP/AH) has its own SA in<br />
each direction, so a full AH+ESP VPN requires four Security Associations. These<br />
are all kept in the Security Associations Database.<br />
A tremendous amount of information is kept in the SADB, and we can only touch<br />
on a few of them:<br />
• AH: authentication algorithm<br />
• AH: authentication secret<br />
• ESP: encryption algorithm<br />
• ESP: encryption secret key<br />
• ESP: authentication enabled yes/no<br />
• Many key-exchange parameters<br />
• Routing restrictions<br />
• IP filtering policy<br />
Some implementations maintain the SPD (Security Policy Database) with<br />
command-line tools, others with a GUI, while others provide a web-based<br />
interface over the network. The amount of detail maintained by any particular<br />
implementation depends on the facilities offered, as well as whether it's<br />
operating in Host or Gateway mode (or both).<br />
Key Management<br />
Finally, we briefly visit the very complex matter of key management. This area<br />
includes several protocols and many options, and the bulk of this will be covered<br />
in a future paper. This section is necessarily highly incomplete.<br />
IPsec would be nearly useless without the cryptographic facilities of<br />
authentication and encryption, and these require the use of secret keys known to<br />
the participants but not to anyone else.<br />
The most obvious and straightforward way to establish these secrets is via<br />
manual configuration: one party generates a set of secrets, and conveys them to<br />
all the partners. All parties install these secrets in their appropriate Security<br />
Associations in the SPD.<br />
But this process does not scale well, nor is it always terribly secure: the mere act<br />
of conveying the secrets to another site's SPD may well expose them in transit. In<br />
a larger installation with many devices using the same preshared key,<br />
compromise of that key makes for a very disruptive re-deployment of new keys.<br />
IKE — Internet Key Exchange — exists to allow two endpoints to properly set up<br />
their Security Associations, including the secrets to be used. IKE uses the<br />
ISAKMP (Internet Security Association Key Management Protocol) as a
framework to support establishment of a security association compatible with<br />
both ends.<br />
Multiple key-exchange protocols themselves are supported, with Oakley being<br />
the most widely used. We'll note that IPsec key exchange typically takes place<br />
over port 500/udp.<br />
Texto retirado do Site<br />
http://www.unixwiz.net/techtips/iguide-ipsec.html
NAT<br />
Com o crescimento exponencial da utilização da Internet, começa a haver a<br />
possibilidade de uma escassês de endereços IP válidos, ou seja, endereços que<br />
sejam roteáveis na Internet. Nesse contexto, torna-se útil um protocolo que<br />
permita que o crescimento da utilização da rede global não seja freado e<br />
que, ao mesmo tempo, não esgote os endereços que são previstos pelo IPV4<br />
( Internet Protocol Version 4) .<br />
O NAT, que é o protocolo abordado nesse trabalho, vem sendo<br />
largamente utilizado por muitos administradores de rede para atender a essa<br />
demanda.<br />
A razão pela qual o NAT é tão importante é, como já dissemos, que o IPV4<br />
fornece um número limitado de endereços (existem 4 octetos, totalizando 32<br />
bits de endereçamento). Com o advento da RFC 1918, foram criadas regras<br />
que permitiam a utilização de endereços não-roteáveis nas redes locais, evitando<br />
que toda e qualquer máquina que quisesse se conectar a uma rede tivesse que<br />
ser reconhecida por um único e exclusivo endereço em toda a Internet. Com<br />
isso, criam-se redes isoladas. Ainda há a necessidade de essas redes se<br />
comunicarem. É aí que entra a tradução de endereços.<br />
O NAT normalmente em um roteador ou em um firewall, que são<br />
dispositivos que recebem conexões de diferentes redes em seus terminais, como<br />
podemos ver no desenho abaixo:
Figura 1: roteador interligando a Rede Pública e a Rede Local<br />
Figura 2: Firewall interligando 2 Redes Locais à Rede Pública<br />
Nota-se que nas 2 figuras existem 253 máquinas na rede local querendo acessar<br />
a rede pública ou válida.<br />
Em uma situação normal - sem NAT - , haveria a necessidade de 255<br />
endereços válidos para prover esse acesso.<br />
Com a tradução de endereços, esse problema passa a não existir. É possível<br />
atribuir-se endereços não-roteáveis à rede interna e traduzir esses<br />
endereços para um único ou mais endereços válidos.<br />
Entenda-se por endereços não-roteáveis aqueles definidos pela IANA<br />
(Internet Assigned Numbers Authority) para serem utilizados em redes locais.<br />
Segundo a RFC 1918, seguem estes endereços:<br />
Classe de Endereçamento<br />
A<br />
Faixa de Endereços<br />
10.0.0.0 - 10.255.255.255
B<br />
C<br />
172.16.0.0 - 172.31.255.255<br />
192.168.0.0 - 192.168.255.255<br />
tabela 1: alocação segundo a IANA de endereços não-roteáveis segundo a RFC<br />
1918<br />
Os ISPs ( Internet Service Providers) são os que mais tiram vantagens dessa<br />
solução, pois evita que eles tenham que registrar uma grande quantidade de<br />
endereços no IANA. Além disso, as empresas podem e gerenciar o seu próprio<br />
plano de endereçamento IP, utilizando e pagando por um número reduzido de Ips<br />
válidos.<br />
Conexões IP – Uma breve revisão<br />
Antes de detalhar o funcionamento do NAT, faz-se necessária uma análise<br />
do funcionamento de uma conexão IP.<br />
Existem 65535 portas de conexão (o número de portas disponíveis é<br />
determinado pelo valor máximo que se consegue gerar a partir dos 16 bits<br />
alocados ao port number do pacote IP). As primeiras 1023 são reservadas aos<br />
serviços mais comuns de comunicação, conhecidos pela sigla WKS ( Well<br />
Known Services), como por exemplo o Telnet, ftp, gopher, www e outros. Por<br />
serem resevados, não podem ser utilizados por outros processos clientes.<br />
Considere-se uma conexão entre 2 computadores, A e B. O<br />
computador A, ao teclar telnet servidorB.com, faz com que o sistema<br />
operacional deste selecione uma porta acima da porta 1023 (digamos 1025)<br />
para abrir a seção de Telnet. Daí, o computador A conecta B na porta 23 - esta é<br />
a porta reservada pelo IANA para seções telnet. Entretanto, a informação que<br />
segue no pacote IP informa a B que o endereço de origem do telnet abriu a<br />
conexão na porta 1025. Esta definição desmistifica a idéia de que uma conexão<br />
entre 2 máquinas se faz apenas em uma porta - no caso do exemplo acima,<br />
porta 23.<br />
Este ítem serve como base para a definição de Port Address Translation (PAT), a<br />
ser tratada adiante.<br />
Funcionamento:<br />
Tome-se como exemplo a rede exibida abaixo:
Figura 3: Usuários Locais querendo acesso ao servidor 200.244.37.76<br />
Nessa rede, os usuários da rede local 10.40.1.0/24 pretendem acessar o servidor<br />
do site de busca Cadê, que possui um endereço roteável (válido) 200.244.37.76.<br />
O administrador dessa rede seguiu a RFC 1918<br />
mas agora encontra um problema: como sua rede 10.40.1.0 /24 - não roteável -<br />
vai acessar o servidor do Cadê ? A resposta é óbvia: fazendo um NAT, no caso do<br />
exemplo, no Firewall. Conforme foi mencionado anteriormente, este poderia ser<br />
feito no roteador sem problemas.<br />
Com o NAT habilitado, o usuário ao chamar a página Web em questão no seu<br />
browser, fará com que a sua máquina envie um pacote endereçado a<br />
200.244.37.76. O endeço IP da origem (por exemplo 10.40.1.10) e a porta de<br />
origem ( por exemplo a 1500) estão no pacote, assim como o endereço de<br />
destino(200.244.37.76) e a porta de destino(80).Quando o pacote chega ao<br />
Firewall, ele o deencapsulará e o reescreverá.O pacote que ele enviará para a<br />
Rede Pública conterá o endereço da interface do Firewall que está a ela<br />
conectada - ou um outro endereço previamente acertado que seja roteável - como<br />
endereço de origem, a porta de origem alocada de uma lista de portas livres<br />
no Firewall e o resto do pacote será uma cópia do pacote original.
Figura 4: Funcionamento do NAT saindo da rede local<br />
O Firewall também vai adicionar uma entrada em uma tabela de tradução onde<br />
mapeará a requisição de seção, ou seja, ele relaciona o endereço interno que<br />
fez a requisição e sua porta com o endereço e a porta a serem utilizadas como<br />
tradução. Segue abaixo um modelo dessa tabela:
Figura 5: tabela de tradução de endereços do Firewall<br />
Esta informação é de vital importância para o próximo passo da comunicação<br />
entre as máquinas. Quando o servidor www.cade.com.br responder à requisição,<br />
este responderá ao Firewall e não diretamente a máquina na Rede Interna. O<br />
pacote, ao chegar no Firewall, será alterado por este, respeitando a<br />
tabela de tradução acima. No exemplo, o pacote chega ao Firewall com<br />
endereço de destino 200.182.30.1 e porta de destino igual a 45000. O Firewall<br />
consulta a tabela e verifica que este equivale ao endereço 10.40.1.10 na porta<br />
1500, fazendo, então, as alterações necessárias.
Figura 6: Funcionamento do NAT recebendo o retorno da rede externa<br />
TIPOS DE NAT<br />
É possível se praticar 3 formas de tradução de endereços. São elas:<br />
NAT Estático<br />
NAT Dinâmico<br />
PAT - Port Address Translation<br />
NAT Estático:<br />
Como o próprio nome indica, o NAT estático define um endereço fixo de tradução<br />
de uma máquina da Rede Local para a Rede Pública.<br />
Esse tipo de NAT é muito utilizado quando se quer ocultar o endereçamento<br />
interno de uma máquina para a Rede Pública e também torná-la visível para a<br />
mesma. Veja o exemplo abaixo:
Verifica-se que existem 2 servidores alocados na rede chamada DMZ<br />
(Rede não-militarizada).<br />
Essa rede é normalmente configurada para abrigar servidores que apresentam<br />
maiores riscos de serem atacados por usuários externos. A primeira máquina é o<br />
servidor Web e a segunda é um servidor de mensagens.<br />
Ambas precisam ter endereços declarados na Rede Pública e, por isso, podem<br />
ser vistos por qualquer usuário - por isso a preocupação com a questão de<br />
segurança sobre essas máquinas é redobrada. Ao se colocar as mesmas em<br />
uma rede separada da rede principal (Rede Local), caso um usuário malintencionado<br />
consiga "atacar"a máquina e ganhar acesso à rede, este terá acesso<br />
a uma rede sem máquinas que contenham informações de maior importância.<br />
Nessa situação, é feito um NAT Estático da máquina Web de 10.40.3.3 para<br />
200.182.30.9. Um usuário do UOL, por exemplo, com o IP 200.192.188.9, para<br />
acessar o servidor Web, vai acessar uma "máquina virtual" que responderá<br />
pelo endereço de NAT acima mencionado. O mesmo é feito para o servidor de<br />
Mensagens ( 10.40.3.4 para 200.182.30.10).<br />
- NAT dinâmico:<br />
Este conceito de tradução, em oposição ao anterior, diz que a tradução só deve<br />
ocorrer quando houver uma solicitação que demande tradução. Nesta técnica,<br />
trabalha-se com uma faixa de endereços que ficam à disposição do<br />
dispositivo tradutor (Firewall ou Roteador) para realizar a conversão de<br />
endereços. A cada requisição feita, ele consulta essa faixa e utiliza-se do<br />
primeiro endereço livre que<br />
encontar. Este modelo é considerado o mais flexível, pois permite uma série<br />
de diferentes soluções para fazer a conversão. Existem 3 modelos de NAT<br />
dinâmico:<br />
- Conversão 1x1: este modelo de NAT é pouco utilizado pois não<br />
auxilia no controle da utilização de endereços públicos. Ele diz que cada<br />
máquina solicitante da rede interna terá um endereço de tradução na rede<br />
pública. Apenas apresenta a vantagem de "esconder" o endereçamento<br />
interno.
Figura 8: um exemplo de NAT Dinâmico 1x1<br />
- Conversão N x M ( N > M): este modelo é utilizado quando a quantidade de<br />
endereços na rede interna é maior que o número de endereços presentes na<br />
faixa . É um misto entre a conversão 1x1 e o PAT (a ser definido em<br />
seguida). O tradutor, ao receber as requisições, vai utilizar os endereços da<br />
faixa como se estivesse fazendo uma conversão 1x1. Ao esgotarem-se os<br />
endereços , ele começa a fazer Port Address Translation - PAT.<br />
Esse modelo é bastante empregado quando há a necessidade de se interligar<br />
2 redes que estejam seguindo a RFC 1918. Segue abaixo, um exemplo da sua<br />
utilização:
Figura 9: um exemplo de NAT Dinâmico N x M<br />
Nesse exemplo, há a interligação de 2 redes locais, via um link de dados: uma no<br />
Rio de Janeiro(Matriz) e outra em São Paulo (Filial). As máquinas da Matriz<br />
pretendem acessar as máquinas da filial via NAT.<br />
Na figura acima, pode-se notar que existem menos endereços na faixa de<br />
endereços do NAT (rede 192.168.1.0 com máscara 255.255.255.0) do que<br />
na Rede Local Matriz (rede 10.40.1.0 com máscara 255.255.248.0). Se todas<br />
as máquinas forem fazer as requisições para a rede 192.x.x.x ao mesmo tempo,<br />
a máquina 10.40.1.254 será a última a conseguir ter associado o seu IP<br />
diretamente a um endereço da faixa. A máquina seguinte, 10.40.2.1,<br />
necessitará realizar um Port Address Translation.<br />
- Conversão Nx1 ou PAT: este modelo , por ser bastante empregado, será<br />
melhor detalhado no próximo ítem.<br />
- Port Address Translation:<br />
O Port Address Translation - PAT - é o tipo de NAT que mais economiza<br />
endereços válidos
(roteáveis) pois a tradução é feita no modelo N para 1, ou seja, todos os<br />
endereços da Rede Local são traduzidos para um único endereço válido. Esse<br />
tipo de NAT é, na verdade, um caso especial do NAT dinâmico pois neste caso,<br />
assim como no anterior, as traduções são feitas sob demanda, ou seja, só existe a<br />
tradução quando houver uma requisição realizada.<br />
Este modelo apresenta uma limitação para o número máximo de conexões<br />
simultâneas. Como é sabido, há uma limitação do número de portas de<br />
comunicação - já mencionado anteriormente. Por existir um total de 65535<br />
portas disponíveis para comunicação, só é possível, em teoria, se traduzir<br />
um número menos que 65000 endereços simultâneos ( não se pode contar com<br />
as portas dos serviços WKS para a tradução).<br />
Essa limitação não chega a ser uma desvantagem para o modelo pois,<br />
exceto em casos de redes extremamente grandes, 65000 conexões simultâneas é<br />
um número bastante aceitável.<br />
Abaixo, segue um exemplo do modelo:<br />
Figura 10: um exemplo de Port Address translation
No exemplo, temos usuários alocados na rede 10.40.1.0/24 - Rede Interna -<br />
querendo acessar o site www.cade.com.br . O administrador de rede tem<br />
aproximadamente 250 usuários em sua rede<br />
local querendo acessar a Internet porém o ISP (Internet Service Provider) só lhe<br />
forneceu um range de endereços 200.182.30.0 /29 - o que le dá apenas 3<br />
endereços válidos. Com essa escassês de endereços, a única solução para<br />
garantir acesso simultâneo a todos é o PAT. Nesse exemplo, todos saem com o<br />
endereço 200.182.30.1.<br />
Abaixo, segue um exemplo da tabela de tradução do dispositivo tradutor<br />
(Roteador ou Firewall), baseado em PAT. Considera-se a tabela com 10 conexões<br />
simultâneas.<br />
Figura 11: tabela de tradução para PAT com 10 conexões simultâneas<br />
Nota-se que todas as traduções são feitas para um único endereço e que as<br />
portas não podem ser repetidas. Foram marcados 2 casos especiais nessa<br />
tabela, um indicado com a cor vermelha e outro com a cor azul. O primeiro caso<br />
mostra que a máquina 10.40.1.2 está tentando abrir mais de uma conexão<br />
com a Rede Pública (por exemplo, ele pode estar acessando - no exemplo - 3<br />
endereços Web distintos). Veja que o dispositivo tradutor (Firewall ou Roteador)<br />
irá tratar essa situação sem dar importância ao fato das requisições virem da<br />
mesma máquina. Para ele, são solicitações de seções independentes. No segundo
caso, ocorre a coincidência de 2 máquinas distintas abrirem conexões<br />
utilizando a mesma porta de origem. Mais uma vez, o dispositivo tradutor tratará<br />
as requisições sem maiores problemas, pois, apesar de possuirem a mesma<br />
porta de origem, tem IPs de origem distintos.<br />
Vantagens:<br />
Conectividade bi-direcional transparente entre redes com diferentes<br />
endereçamentos<br />
Eliminam se gastos associados a mudança de endereços de<br />
servidores/rede<br />
Economia de endereços roteáveis do IPV4<br />
Facilita o desenho/implementação de Redes<br />
Aumenta a proteção das redes locais<br />
1. Conectividade bi-direcional transparente entre redes com diferentes<br />
endereçamentos:<br />
Essa característica faz com que seja transparente para os elementos de rede que<br />
não estejam diretamente<br />
envolvidos com a tradução a utilização do NAT. Para eles, o pacote IP que sofreu<br />
NAT é um pacote omo outro qualquer. É importante ressaltar que apenas o<br />
elemento tradutor "sabe" que o endereço foi alterado.<br />
2. Eliminam se gastos associados a mudança de endereços de<br />
servidores/rede:<br />
Como foi dito no início do trabalho, sem a existência da RFC1918 e do NAT,<br />
qualquer máquina que quisesse ser visualizada na Rede Pública deveria possuir<br />
endereços válidos. Nessa situação, qualquer alteração no endereçamento de<br />
uma simples máquina implicaria em replicar a mudança em TODAS as máquinas<br />
roteáveis. Isso demandaria um gasto muito alto com tempo e mão-de-obra<br />
necessários para configurar as máquinas.<br />
Imagine-se aqui um exemplo em que um administrador de rede resolver mudar o
seu ISP. Na situação exposta acima, para mudar o seu provedor, o administrador<br />
deveria mudar o endereço de todas as máquinas de sua rede. Com o NAT,<br />
basta fazer a alteração em um único ponto (elemento tradutor) e este será<br />
incumbido da responsabilidade de fornecer o IP à máquina solicitante -seguindo<br />
a RFC1918- o IP da nova faixa de IPs fornecida pelo novo provedor.<br />
3. Economia de endereços roteáveis do IPV4:<br />
Como foi dito acima, há uma melhor gerência do endereçamento IP com o NAT.<br />
Custuma-se dizer que passa a haver uma utilização racional de endereços. Com a<br />
redução da faixa de endereços solicitada ao ISP, há uma redução no custo dos<br />
links.<br />
3. Facilita o desenho/implementação de Redes:<br />
Devido ao uso racional de IPs, há uma menor preocupação com a criação dos<br />
mapas de endereçamento de rede, facilitando a implementação/interligação das<br />
mesmas.<br />
4. Aumenta a proteção das redes locais:<br />
O NAT evita que se precise publicar o endereçamento interno das redes locais<br />
nas redes públicas. Assim, fica mais difícil para um usuário mal-intencionado<br />
montar qualquer tipo de ataque direto à Rede Interna.<br />
Um intruso precisa tentar um ataque direto ao endereço de NAT antes de<br />
conseguir atacar a Rede Local.<br />
Além dessa vantagem, é possível se implementar filtros de pacote nos 2<br />
elementos que possibilitam a tradução. No próximo ítem, será dado um<br />
exemplo do uso do Firewall como tradutor e filtro de pacotes.<br />
Desvantagens:<br />
Impossibilidade de se rastrear o caminho do pacote<br />
Aumento do processamento no dispositivo tradutor<br />
Impossibilidade de se rastrear o caminho do pacote
Com a utilização da tradução, fica impossível se utilizar o comando traceroute<br />
para se identificar o caminho que o pacote segue até<br />
encontrar o seu destino, pois o elemento tradutor não permite a tradução<br />
reversa (resposta da rede externa para a local) com resposta indicando<br />
"esgotado tempo limite" - TTL (Time to Live).<br />
O traceroute é um comando muito utilizado para se verificar conectividade entre<br />
2 pontos. Caso não se consiga conectividade entre 2 pontos, é possível, com esse<br />
comando, se identificar onde o pacote está "parando" por falta de rotas ou<br />
problemas de interligação.<br />
Aumento do processamento no dispositivo tradutor<br />
Como foi dito acima, o NAT requer que a máquina que fará a tradução altere<br />
o pacote IP. Essa manobra exige que a máquina deixe dedicado para<br />
essa tarefa parte do seu potencial de processamento. Por essa razão, há<br />
que se ter cuidado na escolha do tradutor. Deve-se atentar para a demanda<br />
extra de processamento.<br />
Nesse sentido, os fabricantes de equipamentos utilizam-se de 2 linhas de<br />
produtos para realizar a tradução. São elas:<br />
- tradução via software: existe uma aplicação que funciona em um<br />
servidor que faz o papel de tradutor. A tradução, nesse caso é feita via<br />
software.<br />
- tradução via hardware: nesse caso, é desenvolvido um hardware<br />
específico para desempenhar aquela função. O sistema é desenvolvido de forma<br />
a otimizar a performance do equipamento ao desempenhar a tradução.<br />
A escolha da linha de produtos que irá atender a uma certa demanda depende da<br />
necesside, ou seja, a escolha certa do produto varia de caso a caso. A utilização<br />
da tradução via hardware permite uma maior velocidade na tradução e, muitas<br />
vezes, um gasto menor na implantação; porém existem limitações com relação à<br />
flexibilidade do equipamento. Já com a tradução via software, ocorre o contrário.<br />
A tradução é feita com maior lentidão, os recursos utilizados não são<br />
otimizados, porém permite uma grande<br />
flexibilidade no seu uso diário. Por funcionar "sobre" um sistema operacional, é<br />
possível se utilizar este<br />
último para incorporar novas funcionalidades à aplicação, por exemplo.<br />
Utilização do NAT em conjunto com listas de acesso:<br />
Como foi dito inicialmente, há uma grande preocupação com a proteção das
edes locais. Essa preocupação<br />
é justificada pelo fato de nessas redes estarem localizados, por muitas vezes,<br />
servidores que contém dados<br />
de elevada importância (pesquisas científicas, dados de clientes, etc) e<br />
servidores que estejam em produção.<br />
Caso essas máquinas sejam invadidas por usuários mal-intencionados e os<br />
dados das mesmas forem corrompidos, muitos interesses serão seriamente<br />
afetados.<br />
Sabe-se que o NAT tem a vantagem de ocultar o endereçamento interno das<br />
redes e que, para ganhar acesso a uma máquina, um usuárioexterno terá que<br />
fazer um ataque direto a 2 endereço - primeiro o de tradução e depois o real.<br />
Porém, a simples utilização do NAT não garante a segurança da rede. Os ataques<br />
podem ser efetuados em qualquer uma das 65535 portas existentes em um<br />
computador.<br />
Veja um exemplo em que a utilização do NAT não protege a rede: imagine que<br />
um usuário A da rede interna resolva acessar a Internet. Ele inicia um telnet na<br />
rede pública. Após alguns minuto, ele termina o comando e fecha a janela de<br />
comunicação. Até esse ponto, tudo parece estar bastante normal, porém, o que<br />
não se percebe facilmente é que o dispositivo tradutor terá, por um pequeno<br />
porém significativo período de tempo a conexão do usuário A armazenada em<br />
suas tabelas de tradução. É nesse curto intervalo de tempo que um usuário malintencionado<br />
pode se aproveitar e tentar acessar a rede interna. Caso ele envie<br />
um pacote IP na porta onde o usuário A teria a resposta da sua conexão de<br />
Telnet, este será aceito. Dessa forma, usuários da rede pública podem enviar<br />
pacotes IP para a rede interna contendo dados que possam danificar algum<br />
componente na rede ( derrubar um servidor, etc). É nesse contexto que atuam os<br />
filtros de pacotes.<br />
Por uma questão de conveniência, os 2 elementos mencionados neste trabalho<br />
como tradutores de endereço (firewall e roteador) realizam o papel de filtro de<br />
pacotes. Eles só permitem que passem por eles pacotes que contenham<br />
caracter'siticas que estejam descritas no filtro ( por exemplo, só se aceitam<br />
conexões na porta 80 para o servidor B ou só se aceitam conexões provenientes<br />
de um endereço específico da rede pública, etc).<br />
Segue agora um exemplo prático. É muito comum a presença de servidores web.<br />
Este serviço, como foi dito, está enquadrado nas WKS - porta 80.Assim sendo,<br />
nenhuma outra porta deve estar liberada para o acesso,ou seja, qualquer<br />
tentativa de conexão em outra porta que não esta pode ser considerada como<br />
tentativa de invasão.
Figura 12: um usuário acessa a porta 80 do Servidor Web com autorização do<br />
Firewall<br />
No exemplo acima um úsuário com IP público tenta acessar o servidor Web na<br />
porta 80. Para acessá-lo, primeiro ele faz uma requisição para o endereço virtual<br />
(200.182.30.9). Este manda a informação para o Firewall e este verificará se<br />
tem alguma regra que permita pacotes para o servidor web na porta<br />
80. No exemplo, o firewall terá essa regra e permitirá a passagem do pacote<br />
por ele. O resto do<br />
processo funciona como um NAT normal.<br />
No próximo exemplo, o mesmo usuário vai tentar acessar a porta 1433 no mesmo<br />
servidor.
Figura 13: o Firewall rejeita a tentativa de conexão na porta 1433<br />
O funcionamento é o mesmo mostrado anteriormente, sendo que o Firewall, ao<br />
verificar que não existem regras que permitam o acesso ao servidor Web na<br />
porta 1433 irá descartar o pacote que chegou a ele, não permitindo a conexão.<br />
Conclui-se que a utilização da tradução de endereços - NAT - permite que<br />
se utilize o espaço de endereçamento fornecido pelo IPV4 de uma forma<br />
mais inteligente e racional, em conjunto com as especificações propostas na<br />
RFC1918.<br />
Além da questão pura do endereçamento, ele permite que se aumente a<br />
segurança das redes locais contra possíveis investidas de usuários externos com<br />
o objetivo de comprometer a estrutura de dados que é mantida localmente.<br />
Este aumento da segurança é obtido graças ao fato de usuários externos<br />
ficarem impossibilitados de conhecer o endereçamento local.<br />
Por essas e outras razões, acredita-se que o NAT venha a ser cada vez mais<br />
utilizado pelos administradores de rede em todo o mundo.<br />
Bibliografia:
1) Commer, Douglas E.<br />
Internetworking with TCP/IP - volume I<br />
Prentice Hall - 1995<br />
ISBN 0-13-216987-8 (V.1)<br />
2) Soares, Luiz Fernando G. (Luiz Fernando Gomes)<br />
Redes de Computadores: das LANs, MANs e WANs às Redes ATM<br />
Campus - 1995<br />
ISBN 85-7001-954-8<br />
Páginas Web<br />
http://www.kentrox.com/support/KB/Common/Public/GENL475.htm<br />
http://alumni.caltech.edu/~dank/peer-nat.html<br />
http://www.dalantech.com/nat.shtml<br />
http://www.bsdtoday.com/2001/May/Features478.html<br />
http://www.networkmagazine.com/article/printableArticle?doc_id=PIT20000629<br />
S0020<br />
http://www.technet.com<br />
http://www.cisco.com.br<br />
http://www.checkpoint.com<br />
1) Cite 2 vantagens de se utilizar o NAT?<br />
R: Pode-se citar como a primeira vantagem o fato de permitir a utilização de<br />
endereços roteáveis na rede pública de forma racional. Uma segunda vantagem<br />
seria a possibilidade de ocultar o endereçamento das redes locais,<br />
dificultando o acesso de usuários mal-intencionados à rede local.<br />
2) Quais as 3 formas de se realizar um NAT?<br />
R: Existem 3 formas de se realizar um NAT:<br />
- NAT Estático
- NAT Dinâmico<br />
- PAT - Port Address Translation<br />
3)Como funciona o PAT (Port Address Translation)?<br />
R: Quando a solicitação de uma máquina da rede interna chega ao elemento<br />
tradutor, este altera o cabeçalho do pacote retirando do campo entitulado<br />
"endereço de origem" o endereço da rede<br />
local e colocando um endereço da rede pública. A tradução de todas as<br />
requisições é feita para um único endereço. Por essa razão, há a necessidade<br />
de se ter um outro elemento que isole as diferentes solicitações. Isto é feito<br />
se mudando o endereço da porta de origem. O elemento tradutor armazena<br />
essas mudanças em uma área chamada TABELA DE TRADUÇÃO. Esta será<br />
consultada para se fazer o NAT reverso ( da rede externa para a interna).<br />
4) Cite 1 desvantagem de se realizar NAT?<br />
R: a utilização do NAT impossibilita a utilização do comando traceroute que<br />
permite se verificar o caminho que um pacote percorre desde a origem até o seu<br />
destino.<br />
5) Em qual situação se enquadra a utilização de um NAT Estático?<br />
R: o NAT Estático é utilizado quando se deseja declarar um servidor<br />
da rede local na rede pública. Exemplos de máquinas que comumente<br />
sofrem NAT estático na maioria das redes são os servidores de<br />
Mensagens (Mail) e os servidores Web (porta 80). O usuário externo não<br />
acessa diretamente a máquina, e sim um endereço virtual.<br />
RETIRADO DO SITE: http://www.gta.ufrj.br/grad/01_2/nat/
Diretrizes do design<br />
FIREWALL<br />
Este módulo considera os requisitos para um firewall interno em uma rede<br />
corporativa, os tipos de dispositivos que podem atender a esses requisitos e as<br />
opções disponíveis para a implantação. Infelizmente, as invasões em redes de<br />
usuários internos e externos têm se tornado um evento regular, o que significa<br />
que as empresas devem instalar uma proteção. O firewall tem o seu preço e cria<br />
um obstáculo ao fluxo do tráfego. Por isso, você deve certificar–se de que o<br />
firewall tenha sido criado para ser o mais econômico e eficiente possível.<br />
Arquitetura de rede<br />
Geralmente, a arquitetura de rede de uma empresa possui três zonas:<br />
•Rede de limite<br />
Essa rede está voltada diretamente para a Internet por meio de um roteador<br />
que fornece uma camada de proteção inicial na forma de filtragem básica de<br />
tráfego de rede. Ela alimenta dados pela rede de perímetro por meio de um<br />
firewall de perímetro.<br />
•Rede de perímetro<br />
Essa rede, geralmente chamada de DMZ (zona desmilitarizada) ou rede de<br />
borda, vincula usuários de entrada a servidores Web ou a outros serviços. Em<br />
seguida, os servidores Web os vinculam às redes internas por meio de um<br />
firewall interno.<br />
•Redes internas<br />
As redes internas vinculam os servidores internos, como o SQL Server e os<br />
usuários internos.<br />
Em uma empresa, normalmente existem dois firewalls diferentes — o firewall de<br />
perímetro e o firewall interno. Embora as tarefas desses firewalls sejam<br />
semelhantes, a ênfase dada é diferente, já que o firewall de perímetro concentra–<br />
se no fornecimento de uma limitação aos usuários externos não confiáveis,<br />
enquanto o firewall interno se concentra em impedir que os usuários externos<br />
acessem a rede interna e em limitar as atividades dos usuários internos. Para<br />
obter mais informações sobre o design de firewall de perímetro, consulte "Design<br />
de firewall de perímetro".<br />
As redes estão descritas na Figura 1
Figura 1<br />
Arquitetura de rede de uma empresa<br />
Entradas do design<br />
O firewall verifica os pacotes IP que chegam e bloqueia os que detecta como<br />
invasores. Alguns bloqueios podem ser feitos reconhecendo, por padrão, que<br />
determinados pacotes são ilegais. Uma outra opção é configurar o firewall para<br />
bloquear determinados pacotes. O protocolo TCP/IP foi criado há muitos anos,<br />
sem qualquer conceito de entrada ilegal ou invasão de computadores, portanto,<br />
possui muitos pontos fracos. Por exemplo, o protocolo ICMP foi projetado para<br />
ser um mecanismo de sinalização no TCP/IP, no entanto, está vulnerável a<br />
abusos, podendo ter problemas, como ataques DoS (Negação de Serviço). Um<br />
firewall interno possui requisitos mais precisos que um firewall de perímetro.<br />
Isso ocorre porque é mais difícil controlar o tráfego interno, uma vez que o seu<br />
destino legítimo pode ser qualquer servidor na rede interna.<br />
Existem muitos tipos de firewall, diferenciados, em parte, pelo preço, mas<br />
também pelos recursos e pelo desempenho. Geralmente, o firewall mais caro é o<br />
que possui maior capacidade e mais recursos. Posteriormente, neste módulo, os<br />
firewalls serão agrupados em classes para serem diferenciados, no entanto,<br />
antes de escolher um firewall, você deve identificar quais são as suas<br />
necessidades. Observe as considerações a seguir:<br />
•Orçamento<br />
•Recursos existentes<br />
•Disponibilidade<br />
•Escalabilidade<br />
•Recursos necessários
Orçamento<br />
Qual é o orçamento disponível? Todos os firewalls do ambiente de rede devem<br />
oferecer um serviço da mais alta qualidade e ser, ao mesmo tempo, econômicos.<br />
No entanto, esteja ciente de como a sua empresa pode ser prejudicada se o<br />
firewall for muito limitado pelo fator preço. Considere o custo do tempo de<br />
inatividade na sua empresa caso o serviço seja suspenso devido a um ataque de<br />
negação de serviço.<br />
Recursos existentes<br />
Existem recursos existentes que possam ser usados para reduzir custos? Talvez<br />
já existam firewalls no ambiente que possam ser reutilizados e roteadores que<br />
possam ter um conjunto de recursos de firewall instalado.<br />
Disponibilidade<br />
A sua empresa precisa que o firewall esteja permanentemente disponível? Se<br />
você oferecer um recurso de servidor Web público que precise estar sempre<br />
disponível, será necessário que o firewall funcione ininterruptamente.<br />
Independentemente do firewall, sempre há uma probabilidade de falha. Então,<br />
como você pode minimizar esse problema? A disponibilidade de um firewall pode<br />
ser melhorada por meio de dois métodos:<br />
•Componentes redundantes<br />
A duplicação de alguns componentes com maior probabilidade de falha, como a<br />
fonte de alimentação, aumenta a resistência do firewall, uma vez que seu<br />
funcionamento não é afetado mediante a falha de um componente.<br />
Normalmente, os firewalls de baixo custo não dispõem de opções redundantes,<br />
pois estas, além de caras, não acrescentam nada ao seu poder de<br />
processamento.<br />
•Dispositivos duplicados<br />
A duplicação do dispositivo do firewall proporciona um sistema totalmente<br />
resistente, mas novamente a um custo considerável, uma vez que ele também<br />
exige um cabeamento de rede totalmente duplicado e conectividade dupla nos<br />
roteadores ou switches aos quais o firewall se conecta. No entanto, dependendo<br />
do firewall, é possível duplicar a taxa de transferência para compensar.<br />
Teoricamente, todos os firewalls, do menor ao maior, podem ser duplicados,<br />
mas na prática é necessário um mecanismo de alternância de software que<br />
firewalls menores podem não conter.<br />
Escalabilidade<br />
Quais são os requisitos de taxa de transferência dos firewalls? A taxa de<br />
transferência pode ser considerada em termos de bits por segundo e de pacotes<br />
transferidos por segundo. Se esta for a primeira vez que você lida com isso,
talvez não saiba quais são as taxas de transferência e, mesmo que tudo dê certo,<br />
a taxa de transferência da Internet pode aumentar rapidamente. Como você<br />
poderá lidar com um aumento? Você deve selecionar uma solução de firewall que<br />
possa aumentar de acordo com o aumento da taxa de transferência. O firewall<br />
pode aumentar com a adição de mais componentes ou você pode instalar outro<br />
firewall paralelamente?<br />
Recursos necessários<br />
São necessários quais recursos de firewall? Com base em avaliações de risco<br />
relativas aos serviços prestados na empresa, você pode determinar quais tipos de<br />
recurso de firewall são necessários para proteger seus computadores. Há<br />
necessidade de VPNs (Redes Virtuais Privadas), já que o design é afetado?<br />
Início da página<br />
Defesa e ataques contra o sistema<br />
Esta seção apresenta um resumo dos ataques ao sistema mais conhecidos,<br />
juntamente com as razões para usar o serviço do firewall como uma primeira<br />
linha de defesa.<br />
Ataques externos<br />
Com freqüência, a Internet é usada como ferramenta por pessoas que desejam<br />
prejudicar empresas ou roubar segredos comerciais para obter vantagem<br />
competitiva. Se você instalar um firewall de perímetro e verificar o log de<br />
invasões, ficará surpreso pelo volume. A maioria das invasões é apenas para ver<br />
se a máquina responde e quais serviços estão sendo executados. Isso pode<br />
parecer inofensivo, mas se o atacante descobrir a sua máquina, ele poderá<br />
atacar o seu serviço e identificar seus pontos fracos.<br />
Ataques internos<br />
Nem todos os ataques são provenientes da Internet. Você também deve proteger<br />
dados sigilosos de usuários internos que estão na rede corporativa. A maioria das<br />
empresas possui dados sigilosos que devem ser protegidos contra determinados<br />
usuários na rede interna, inclusive funcionários, fornecedores, empreiteiros e<br />
clientes.<br />
Ameaças de invasão<br />
As ameaças de invasão podem tomar muitas formas, e descrevê–las aqui serviria<br />
apenas a uma finalidade restrita, pois são criadas ameaças novas todos os dias.<br />
Algumas invasões, como efetuar ping em um endereço de servidor, podem<br />
parecer inofensivas. No entanto, depois de descobrir a presença de um servidor,
o hacker poderá tentar um ataque mais sério. Isso significa que todas as invasões<br />
devem ser consideradas potencialmente prejudiciais. Eis algumas das principais<br />
invasões:<br />
•Sniffers de pacotes<br />
Um sniffer é um aplicativo de software ou um dispositivo de hardware que se<br />
conecta à LAN e captura informações de quadros Ethernet. A intenção original<br />
desses sistemas foi solucionar problemas e analisar o tráfego da Ethernet ou<br />
investigar detalhadamente os quadros para examinar pacotes IP individuais. Os<br />
sniffers operam em modo promíscuo, ou seja, eles escutam todos os pacotes<br />
que passarem pelo cabo físico. Muitos aplicativos, como o Telnet, enviam<br />
informações sobre nome de usuário e senha em texto não criptografado que<br />
pode ser exibido pelos sniffers. Isso significa que um hacker pode acessar<br />
muitos aplicativos utilizando um sniffer.<br />
A ação do sniffer não pode ser impedida por um firewall, uma vez que ele não<br />
gera tráfego de rede, e muitos dos invasores que podem estar utilizando um<br />
sniffer são os seus próprios usuários, dentro de um firewall. É possível baixar<br />
facilmente um software sniffer grátis pela Internet, e seus usuários podem<br />
executá–lo em PCs, examinando os pacotes à medida que passam. Se você<br />
estiver executando sistemas operacionais Microsoft® Windows® nos PCs,<br />
normalmente os usuários irão precisar de direitos de acesso de administrador<br />
para executar um sniffer, o que limita o número de usuários que podem tentar<br />
uma ação como essa. No entanto, os usuários com direitos de administrador,<br />
que podem ser muitos, conseguem executar um sniffer. Além do acesso a dados<br />
confidenciais, eles podem ver senhas em texto não criptografado, como<br />
mencionado anteriormente. Como muitas pessoas usam a mesma senha para os<br />
aplicativos, os invasores podem deduzir quais serão as senhas codificadas e<br />
obter conseguir acesso. Existem várias medidas para combater a ação do<br />
sniffer. A principal medida é usar senhas criptografadas (mas este tópico não<br />
será abordado neste módulo).<br />
•Spoofing de IP<br />
O spoofing de IP ocorre quando o endereço de origem de um pacote IP é<br />
alterado para ocultar a identidade do remetente. O roteamento na Internet usa<br />
apenas o endereço de destino para enviar um pacote, ignorando o endereço de<br />
origem. Por isso, um hacker consegue enviar um pacote destrutivo para o seu<br />
sistema, ocultando a origem para que você não saiba de onde ele veio. O<br />
spoofing não é necessariamente destrutivo, mas sinaliza que uma invasão está<br />
próxima. O endereço pode estar fora de sua rede (para ocultar a identidade do<br />
invasor) ou pode ser um de seus endereços internos confiáveis com acesso<br />
privilegiado. O spoofing, em geral, é usado por ataques de negação de serviço,<br />
descritos posteriormente neste módulo.<br />
•Ataques de negação de serviço<br />
Os ataques de DoS (negação de serviço) são um dos mais difíceis de evitar. Eles<br />
são diferentes dos outros tipos de ataque porque não causam dano permanente<br />
à rede. Em vez disso, eles tentam interromper o funcionamento da rede,<br />
bombardeando um computador específico (dispositivo de servidor ou de rede)
ou degradando a taxa de transferência de conexões de rede até chegar ao ponto<br />
em que o desempenho é tão lento, que provoca irritação dos clientes e a perda<br />
de negócios para a empresa. O DDoS (ataque de negação de serviço<br />
distribuído) é um ataque iniciado em vários computadores, que concentra o<br />
bombardeamento no seu sistema. Os computadores de ataque não iniciam o<br />
ataque sozinho, mas se infiltram devido à vulnerabilidades em sua própria<br />
segurança.<br />
•Ataques contra a camada de aplicativo<br />
Os ataques à camada de aplicativo normalmente são os mais divulgados e,<br />
geralmente, aproveitam os pontos fracos já conhecidos de aplicativos, como em<br />
servidores Web e de bancos de dados. O problema, particularmente para os<br />
servidores Web, é que eles são criados para serem acessados por usuários<br />
públicos desconhecidos e não confiáveis. A maioria dos ataques é feita contra<br />
deficiências já conhecidas no produto. Isso significa que a melhor defesa é<br />
instalar as últimas atualizações dos fabricantes. O terrível worm Slammer do<br />
SQL (Structured Query Language) afetou 35.000 sistemas em muito pouco<br />
tempo desde seu lançamento em janeiro de 2003. O worm explorou um<br />
problema conhecido no Microsoft® SQL Server 2000, para o qual a Microsoft<br />
tinha emitido uma correção em agosto de 2002. Esse worm aproveitou o fato de<br />
que muitos administradores não haviam aplicado a atualização recomendada e<br />
não tinham adquirido firewalls adequados (que poderiam descartar os pacotes<br />
destinados à porta usada pelo worm). O firewall é apenas uma barreira nessas<br />
situações. Os fabricantes recomendam que as atualizações sejam aplicadas a<br />
todos os produtos, particularmente para impedir ataques à camada de<br />
aplicativo.<br />
•Varredura de rede<br />
A varredura de rede é a verificação de redes para descobrir endereços IP<br />
válidos, nomes DNS (Sistema de Nome de Domínio) e portas IP antes de se<br />
iniciar um ataque. A varredura de rede em si não é prejudicial. No entanto,<br />
descobrir quais endereços estão em uso pode ajudar alguém a iniciar um<br />
ataque hostil. Se você procurar um firewall nos logs, verificará que a maioria<br />
das invasões é dessa natureza. As investigações comuns incluem o exame das<br />
portas de escuta dos protocolos TCP e UDP, bem como de outras portas de<br />
escuta bastante conhecidas, como as usadas pelo Microsoft SQL Server,<br />
NetBIOS, HTTP e por servidores SMTP. Todas essas investigações buscam uma<br />
resposta, que informa ao hacker que o servidor existe e executa um desses<br />
serviços. Muitos desses exames podem ser impedidos pelo roteador de limite ou<br />
um firewall, mas desligar alguns dos serviços pode restringir a capacidade de<br />
diagnóstico de rede.<br />
Início da página<br />
Definição do dispositivo<br />
Um firewall é um mecanismo para controlar o fluxo do tráfego IP entre duas
edes. Os dispositivos de firewall costumam operar no L3 do modelo OSI, embora<br />
alguns modelos também possam operar em níveis superiores.<br />
Um firewall interno, em geral, proporciona os seguintes benefícios:<br />
•Defender os servidores internos contra ataques de rede.<br />
•Aplicar restrições às diretivas de uso e acesso à rede.<br />
•Monitorar o tráfego e gerar alertas ao detectar padrões suspeitos.<br />
É importante observar que os firewalls reduzem apenas alguns tipos de riscos de<br />
segurança. Um firewall geralmente não evita o dano que pode ser causado a um<br />
servidor com uma vulnerabilidade de software. Os firewalls devem ser<br />
implementados como parte da ampla arquitetura de segurança de uma empresa.<br />
Início da página<br />
Recursos de firewall<br />
Dependendo dos recursos que um firewall pode suportar, o tráfego será<br />
permitido ou bloqueado por meio de várias técnicas. Essas técnicas oferecem<br />
diferentes graus de proteção com base na capacidade do firewall. Os recursos de<br />
firewall a seguir estão listados em ordem crescente de complexidade:<br />
•Filtros de entrada de adaptador de rede<br />
•Filtros estáticos de pacotes<br />
•NAT (Conversão de Endereço de Rede)<br />
•Inspeção com informações de estado<br />
•Inspeção no nível de circuito<br />
•Filtragem da camada de aplicativo<br />
Em geral, os firewalls que oferecem recursos complexos também oferecem<br />
suporte para os recursos mais simples. No entanto, você deve ler atentamente as<br />
informações do fornecedor ao escolher um firewall, pois podem existir diferenças<br />
sutis entre a capacidade implícita e a real de um firewall. A seleção de um<br />
firewall normalmente envolve o questionamento sobre os recursos e o teste para<br />
garantir que o produto possa de fato ter um desempenho segundo as<br />
especificações.<br />
Filtros de entrada de adaptador de rede<br />
A filtragem de entrada do adaptador de rede examina os endereços de origem ou<br />
de destino e outras informações no pacote de entrada, assim como bloqueia ou
permite que esse pacote prossiga. Essa filtragem aplica–se apenas ao tráfego de<br />
entrada e não pode controlar o tráfego de saída. Ela compara os endereços IP e<br />
os números de porta para UDP e TCP, bem como o protocolo do tráfego, TCP,<br />
UDP e GRE (Generic Routing Encapsulation). A filtragem de entrada para o<br />
adaptador de rede permite uma negação rápida e eficiente de pacotes de entrada<br />
padrão que atendem aos critérios configurados no firewall. No entanto, ela pode<br />
ser facilmente contornada, uma vez que compara apenas os cabeçalhos do<br />
tráfego IP e trabalha com base na hipótese básica de que o tráfego sendo filtrado<br />
segue os padrões IP e não é capaz de escapar da filtragem.<br />
Filtros estáticos de pacotes<br />
Os filtros estáticos de pacotes são parecidos com os filtros de entrada de<br />
adaptador de rede no sentido de que eles simplesmente fazem correspondência<br />
com cabeçalhos de IP para determinar se será ou não permitida a passagem do<br />
tráfego pela interface. No entanto, os filtros estáticos de pacotes permitem o<br />
controle sobre as comunicações de entrada e de saída com uma interface. Além<br />
disso, normalmente os filtros estáticos de pacotes permitem uma função<br />
adicional sobre a filtragem do adaptador de rede que é a de verificar se o bit<br />
ACK (Acknowledged) está definido no cabeçalho IP. O bit ACK informa sobre a<br />
possibilidade de o pacote ser uma solicitação nova ou uma solicitação de retorno<br />
de uma solicitação original. Ele não verifica se o pacote foi originalmente<br />
enviado pela interface que o recebe, apenas verifica se o tráfego que chega à<br />
interface parece ser de retorno com base nas convenções dos cabeçalhos IP.<br />
Essa técnica aplica–se apenas ao protocolo TCP e não ao UDP. Assim como a<br />
filtragem de entrada do adaptador de rede, a filtragem estática de pacotes é<br />
muito rápida, mas sua capacidade é limitada, podendo ser evitada por um<br />
tráfego com habilidades específicas.<br />
Conversão de endereço de rede<br />
No intervalo de endereços IP mundial, determinados intervalos são designados<br />
como endereços particulares. Esses intervalos de endereços devem ser usados<br />
na empresa e não possuem significado na Internet. Como o tráfego destinado a<br />
qualquer um desses endereços IP não pode ser roteado pela Internet, a<br />
atribuição de um endereço particular a seus dispositivos internos oferece–lhes<br />
alguma proteção contra invasões. No entanto, esses dispositivos internos<br />
freqüentemente precisam acessar a Internet e, por isso, a NAT converte o<br />
endereço particular em um endereço da Internet.<br />
Embora a NAT não seja estritamente uma tecnologia de firewall, ocultar o<br />
endereço IP real de um servidor impede que os atacantes obtenham informações<br />
valiosas sobre o servidor.<br />
Inspeção com informações de estado<br />
Na inspeção com informações de estado, todo o tráfego de saída é registrado em
uma tabela de estado. Quando o tráfego de conexão volta para a interface, a<br />
tabela de estado é verificada para garantir que o tráfego tenha sido originado<br />
nessa interface. A inspeção com informações de estado é um pouco mais lenta do<br />
que a filtragem estática de pacotes. No entanto, ela garante que o tráfego poderá<br />
passar apenas se corresponder aos requisitos do tráfego de saída. A tabela de<br />
estado contém itens como endereço IP de destino, endereço IP de origem, a<br />
porta que está sendo chamada e host originador.<br />
Determinados firewalls podem armazenar mais informações (como os fragmentos<br />
IP enviados e recebidos) na tabela de estado enquanto outros armazenam menos.<br />
O firewall pode verificar se o tráfego é processado quando todas ou somente<br />
algumas informações fragmentadas retornam. Cada fornecedor de firewall<br />
implementa o recurso de inspeção com informações de estado de forma<br />
diferente. Por isso, você deve ler atentamente a documentação do firewall. O<br />
recurso de inspeção com informações de estado geralmente ajuda a reduzir o<br />
risco causado pelo reconhecimento de rede e pelo spoofing de IP.<br />
Inspeção no nível de circuito<br />
Com a filtragem no nível de circuito é possível inspecionar sessões em oposição<br />
às conexões ou pacotes. Uma sessão pode incluir várias conexões. Assim como a<br />
filtragem dinâmica de pacotes, as sessões são estabelecidas apenas em resposta<br />
à solicitação de um usuário. A filtragem do nível de circuito oferece suporte<br />
embutido para protocolos com conexões secundárias, como FTP e fluxo de mídia.<br />
Normalmente, ela ajuda a reduzir o risco apresentado pelo reconhecimento de<br />
rede, DoS e ataques de spoofing de IP.<br />
Filtragem da camada de aplicativo<br />
O nível mais sofisticado de inspeção do tráfego de firewall é a filtragem no nível<br />
do aplicativo. Filtros de aplicativo de boa qualidade permitem a análise do fluxo<br />
de dados de um determinado aplicativo e fornecem um processamento específico<br />
ao aplicativo. Esse processamento inclui a inspeção, a triagem ou o bloqueio, o<br />
redirecionamento e a modificação de dados à medida que passam pelo firewall.<br />
Este mecanismo é usado para proteger contra, por exemplo, comandos SMTP<br />
sem segurança ou ataques contra DNS interno. Normalmente, podem ser<br />
adicionadas ao firewall ferramentas de terceiros para triagem de conteúdo, como<br />
detecção de vírus, análise léxica e categorização de sites.<br />
O firewall na camada de aplicativo pode inspecionar muitos protocolos diferentes<br />
com base no tráfego que passa por ele. Diferentemente de um firewall de proxy<br />
que em geral inspeciona o tráfego na Internet, como HTTP, download de FTP e<br />
SSL, o firewall na camada de aplicativo possui um controle muito maior sobre a<br />
maneira como qualquer tráfego passa por ele. Por exemplo, um firewall de<br />
camada de aplicativo pode permitir somente a passagem do tráfego de UDP que<br />
se origina no limite do firewall. Se for preciso que um host da Internet examine a<br />
porta em relação a um firewall com informações de estado para ver se ele<br />
permitiu o tráfego DNS no ambiente, o exame da porta provavelmente mostrará
que a famosa porta associada ao DNS estava aberta, no entanto, uma vez que o<br />
ataque é armado, o firewall com informações de estado recusará as solicitações<br />
porque não foram originadas internamente. Um firewall na camada de aplicativo<br />
pode abrir portas de forma dinâmica com base na possibilidade de o tráfego se<br />
originar internamente.<br />
O recurso do firewall na camada de aplicativo ajuda a reduzir o risco<br />
apresentado pelo spoofing de IP, DoS, alguns ataques na camada de aplicativo,<br />
reconhecimento de rede e ataques de vírus e cavalos de Tróia. A desvantagem de<br />
um firewall na camada de aplicativo é que ele exige uma capacidade de<br />
processamento muito maior e, normalmente, são mais lentos na passagem do<br />
tráfego do que os firewalls com informações de estado ou de filtragem estática.<br />
O mais importante ao usar firewalls na camada de aplicativo é determinar sua<br />
atividade nessa camada.<br />
A filtragem de camada de aplicativo é amplamente usada para proteger os<br />
serviços expostos publicamente. Se a sua empresa possuir uma loja online que<br />
coleta números de cartão de crédito e outras informações pessoais sobre os<br />
clientes, será prudente tomar as precauções de mais alto nível para proteger<br />
esses dados. O recurso de camada de aplicativo garante que o tráfego que está<br />
passando por uma porta seja apropriado. Diferentemente dos firewalls de filtro<br />
de pacote ou de inspeção com informações de estado, que simplesmente<br />
verificam a porta e os endereços IP de origem e de destino, os firewalls que<br />
oferecem suporte ao recurso de filtragem de camada de aplicativo podem<br />
inspecionar os dados e os comandos que passam de um lado para o outro.<br />
A maioria dos firewalls que oferecem suporte ao recurso de camada de aplicativo<br />
possui apenas a filtragem de camada de aplicativo para o tráfego de texto não<br />
criptografado, como um serviço de mensagens com reconhecimento de proxy,<br />
HTTP e FTP. É importante lembrar que um firewall que oferece suporte a esse<br />
recurso pode controlar o tráfego que entra e sai do ambiente. Outra vantagem<br />
desse recurso é a capacidade de inspecionar o tráfego DNS para que procure<br />
comandos específicos ao DNS à medida que passa pelo firewall. Essa camada<br />
adicional de proteção garante que os usuários ou os invasores não irão<br />
dissimular informações em tipos de tráfego permitidos.<br />
Início da página<br />
Classes de firewall<br />
A seção a seguir apresenta várias classes de firewalls, cada uma fornecendo<br />
determinados recursos de firewall. É possível usar classes de firewall específicas<br />
para responder a solicitações específicas no design de uma arquitetura de TI.<br />
O agrupamento de firewalls em classes permite a abstração do hardware em<br />
relação às solicitações do serviço. As solicitações de serviço podem ser<br />
comparadas aos recursos da classe. Contanto que um firewall se encaixe em uma<br />
classe específica, ele poderá oferecer suporte a todos os serviços dessa classe de<br />
firewalls.
As diversas classes são as seguintes:<br />
•Classe 1 – Firewalls pessoais<br />
•Classe 2 – Firewalls de roteador<br />
•Classe 3 – Firewalls de hardware low–end<br />
•Classe 4 – Firewalls de hardware high–end<br />
•Classe 5 – Firewalls de servidor high–end<br />
É importante compreender que há sobreposição de algumas dessas classes. Isso<br />
ocorre naturalmente porque a sobreposição permite que um tipo de solução de<br />
firewall estenda várias classes. Muitas classes também podem ser atendidas por<br />
mais de um modelo de hardware do mesmo fornecedor, de modo que a empresa<br />
possa escolher um modelo adequado às suas necessidades atuais e futuras. Além<br />
do preço e do conjunto de recursos, os firewalls podem ser classificados com<br />
base no desempenho (ou taxa de transferência). No entanto, os fabricantes não<br />
fornecem nenhum dado de taxa de transferência para a maioria das classes de<br />
firewalls. Nos locais em que eles são fornecidos (geralmente para dispositivos de<br />
firewall de hardware), nenhum processo de medida padrão é adotado, o que<br />
dificulta a comparação entre os fabricantes. Por exemplo, uma medida é o<br />
número de bps (bits por segundo), mas como o firewall na verdade está<br />
transportando pacotes IP, essa medida não terá sentido se o tamanho do pacote<br />
usado para medir a taxa não for incluído.<br />
As subseções a seguir definem detalhadamente as classes de firewall.<br />
Início da página<br />
Classe 1—Firewall pessoal<br />
Um firewall pessoal é definido como um serviço de software executado em um<br />
sistema operacional que oferece ao PC (Computador Pessoal) a capacidade de<br />
um firewall simples. Com o crescimento do número de conexões permanentes<br />
com a Internet (em oposição às conexões dial–up), o uso de firewalls pessoais<br />
aumentou.<br />
Embora o firewall pessoal tenha sido criado para proteger um único computador<br />
pessoal, ele também é capaz de proteger uma rede pequena, se o computador no<br />
qual ele estiver instalado compartilhar a conexão de Internet com outros<br />
computadores da rede interna. No entanto, o desempenho de um firewall pessoal<br />
é limitado e degradará o desempenho do computador pessoal no qual se<br />
encontra instalado. Os mecanismos de proteção normalmente são menos<br />
eficientes do que uma solução de firewall dedicada, pois eles, em geral, se<br />
limitam a bloquear endereços IP e de porta, embora a necessidade de proteção<br />
em um computador pessoal seja menor.<br />
Os firewalls pessoais podem vir gratuitamente em um sistema operacional ou a
um custo muito baixo. Eles são adequados para a finalidade pretendida, mas não<br />
devem ser considerados para uso corporativo, mesmo que para pequenas filiais<br />
satélite, devido à limitação de desempenho e funcionalidade. No entanto, eles<br />
são ideais para usuários móveis em computadores laptop.<br />
A tabela a seguir mostra os recursos que podem estar disponíveis em firewalls<br />
pessoais. Eles podem variar muito no que se refere a capacidade e preço. No<br />
entanto, a falta de um recurso específico, especialmente em um laptop, pode não<br />
ter muita importância.<br />
Tabela 1: Classe 1—Firewalls pessoais<br />
Atributo do firewall<br />
Recursos básicos que<br />
contam com suporte<br />
Valor<br />
A maioria dos firewalls pessoais tem suporte para filtros<br />
estáticos de pacotes, NAT e de inspeção com<br />
informações de estado, enquanto alguns têm suporte<br />
para filtragem de inspeção no nível de circuito e/ou na<br />
camada de aplicativo.<br />
Configuração<br />
Bloquear ou permitir<br />
endereços IP<br />
Bloquear ou permitir<br />
números de protocolo<br />
ou de porta<br />
Bloquear ou permitir<br />
mensagens ICMP de<br />
entrada<br />
Controlar o acesso de<br />
saída<br />
Proteção do aplicativo<br />
Alertas audíveis ou<br />
visíveis<br />
Arquivo de log de<br />
ataques<br />
Alertas em tempo real<br />
Suporte a VPN<br />
Automática (opção manual também disponível)<br />
Sim<br />
Sim<br />
Sim<br />
Sim<br />
Possivelmente<br />
Possivelmente<br />
Possivelmente<br />
Depende do produto<br />
Geralmente não<br />
Gerenciamento remoto Geralmente não
Atributo do firewall<br />
Suporte do fabricante<br />
Opção de alta<br />
disponibilidade<br />
Número de sessões<br />
simultâneas<br />
Valor<br />
Varia muito (depende do produto)<br />
Não<br />
de 1 a 10<br />
Capacidade de<br />
atualização modular<br />
(hardware ou software)<br />
De nenhuma a limitada<br />
Faixa de preço<br />
Acessível (gratuito em alguns casos)<br />
Vantagens<br />
As vantagens dos firewalls pessoais são:<br />
•Preço acessível<br />
Quando for necessário apenas um número limitado de licenças, os firewalls<br />
pessoais serão uma opção econômica. Um firewall pessoal está integrado a<br />
versões do Windows XP. Produtos adicionais que funcionam com outras versões<br />
do Windows ou outros sistemas operacionais estão disponíveis gratuitamente<br />
ou a um preço acessível.<br />
•Fáceis de configurar<br />
Os produtos de firewall pessoal tendem a ter configurações básicas que<br />
funcionam facilmente, com opções de configuração simples e diretas.<br />
Desvantagens<br />
As desvantagens dos firewalls pessoais são:<br />
•Difíceis de gerenciar de modo centralizado<br />
Os firewalls pessoais precisam ser configurados em cada cliente, o que adiciona<br />
sobrecarga ao gerenciamento.<br />
•Possuem somente controle básico<br />
A configuração tende a ser uma combinação de filtragem estática de pacotes e<br />
bloqueio baseado em permissões somente de aplicativos.<br />
•Limitações de desempenho<br />
Os firewalls pessoais são criados para proteger um único PC. Usá–los em um<br />
computador pessoal que serve como roteador para uma pequena rede levará a<br />
uma degradação do desempenho.
Início da página<br />
Classe 2—Firewall de roteador<br />
Os roteadores geralmente oferecem suporte a um ou mais recursos de firewall<br />
abordados anteriormente; eles podem ser subdivididos em dispositivos low–end<br />
criados para conexões com a Internet e em roteadores tradicionais high–end. Os<br />
roteadores low–end oferecem recursos básicos de firewall para bloquear e<br />
permitir endereços IP específicos e números de portas, bem como usar NAT para<br />
ocultar endereços IP internos. Eles geralmente oferecem o recurso de firewall<br />
como padrão, otimizado para bloquear invasões da Internet e, embora não<br />
precisem de configuração, eles podem ser refinados com mais configurações.<br />
Os roteadores high–end podem ser configurados para restringir o acesso<br />
impedindo as invasões mais óbvias, como os pings, e implementando outras<br />
restrições de endereço IP e de porta por meio do uso de ACLs (Listas de Controle<br />
de Acesso). Outros recursos de firewall podem estar disponíveis para<br />
proporcionar uma filtragem de pacote com informações de estado em alguns<br />
roteadores. Em roteadores high-end, a capacidade do firewall é semelhante ao<br />
de um dispositivo de firewall de hardware, a um custo menor, porém, também<br />
com baixa taxa de transferência.<br />
Tabela 2 Classe 2—Firewall de roteador<br />
Atributo do firewall<br />
Recursos básicos que<br />
contam com suporte<br />
Valor<br />
A maioria dos firewalls de roteador oferece suporte a<br />
filtros estáticos de pacotes. Normalmente, os roteadores<br />
low-end têm suporte para NAT, e os roteadores high-end<br />
podem ter suporte para a filtragem de inspeção com<br />
informações de estado e/ou na camada de aplicativo.<br />
Configuração<br />
Bloquear ou permitir<br />
endereços IP<br />
Bloquear ou permitir<br />
números de protocolo<br />
ou de porta<br />
Bloquear ou permitir<br />
mensagens ICMP de<br />
entrada<br />
Controlar o acesso de<br />
saída<br />
Geralmente automática em roteadores low-end (com<br />
opções manuais). Freqüentemente manual em roteadores<br />
high-end<br />
Sim<br />
Sim<br />
Sim<br />
Sim
Atributo do firewall Valor<br />
Proteção do aplicativo Possivelmente<br />
Alertas audíveis ou<br />
visíveis<br />
Arquivo de log de<br />
ataques<br />
Geralmente<br />
Em muitos casos<br />
Alertas em tempo real Em muitos casos<br />
Suporte para VPN<br />
Gerenciamento<br />
remoto<br />
Freqüentemente em roteadores low-end, não tão comum<br />
em roteadores high-end. Há disponibilidade de servidores<br />
ou dispositivos separados. dedicados a esta tarefa.<br />
Sim<br />
Suporte do fabricante Normalmente limitado em roteadores low-end e bom em<br />
roteadores high-end.<br />
Opção de alta<br />
disponibilidade<br />
disponível<br />
Número de sessões<br />
simultâneas<br />
Capacidade de<br />
atualização modular<br />
(hardware ou<br />
software)<br />
Faixa de preço<br />
Ponto mínimo: não<br />
Ponto máximo: sim<br />
10 – 1.000<br />
Ponto mínimo: não<br />
Ponto máximo: limitado<br />
Baixo a alto<br />
Vantagens<br />
As vantagens dos firewalls de roteador são:<br />
•Solução de baixo custo<br />
A ativação de um recurso de firewall de roteador existente não pode adicionar<br />
nenhum custo ao preço do roteador e não requer hardware adicional.<br />
•A configuração pode ser consolidada<br />
A configuração de firewalls de roteador pode ser realizada quando o roteador<br />
for configurado para operações normais, minimizando assim o esforço de
gerenciamento. Essa solução é ideal para escritórios satélite, já que o hardware<br />
de rede e o gerenciamento são simplificados.<br />
•Proteção do investimento<br />
A configuração e o gerenciamento de firewalls de roteador são conhecidos pela<br />
equipe operacional, não exigindo um novo treinamento. O cabeamento da rede<br />
é simplificado porque nenhum outro hardware foi instalado, o que também<br />
simplifica o gerenciamento da rede.<br />
Desvantagens<br />
As desvantagens dos firewalls de roteador são:<br />
•Funcionalidade limitada<br />
Em geral, os roteadores low–end oferecem somente recursos básicos de<br />
firewall. Normalmente, os roteadores high–end oferecem recursos de firewall<br />
de nível superior, porém, pode ser necessária uma configuração significativa.<br />
Muito dessa configuração se faz pela adição de controles que são facilmente<br />
esquecidos, dificultando, de alguma forma, a configuração correta.<br />
•Possuem somente controle básico<br />
A configuração tende a ser uma combinação de filtragem estática de pacotes e<br />
bloqueio baseado em permissões somente de aplicativos.<br />
•Impacto no desempenho<br />
O uso de um roteador como um firewall prejudica o desempenho do roteador e<br />
torna a função de roteamento lenta, o que é sua principal tarefa.<br />
•Desempenho do arquivo de log<br />
O uso de um arquivo de log para capturar atividades incomuns pode reduzir<br />
drasticamente o desempenho do roteador, especialmente quando ele já estiver<br />
sendo atacado.<br />
Início da página<br />
Classe 3—Firewall de hardware low–end<br />
No ponto mínimo do mercado de firewall de hardware encontram–se as unidades<br />
Plug and Play, exigindo uma configuração menor ou nenhuma configuração.<br />
Esses dispositivos freqüentemente incorporam uma funcionalidade de switch<br />
e/ou de VPN. Os firewalls de hardware low–end são adequados para as pequenas<br />
empresas e para uso interno em empresas maiores. Eles costumam oferecer<br />
recursos de filtragem estática e funcionalidade básica de gerenciamento remoto.<br />
Os dispositivos oferecidos por fabricantes maiores podem executar o mesmo<br />
software que os dispositivos high–end, proporcionando um caminho de<br />
atualização, caso necessário.
Tabela 3 Classe 3—Firewall de hardware low–end<br />
Atributo do firewall<br />
Recursos básicos que<br />
contam com suporte<br />
Configuração<br />
Bloquear ou permitir<br />
endereços IP<br />
Valor<br />
A maioria dos firewalls de hardware low–end tem<br />
suporte para filtros estáticos de pacotes e NAT e pode<br />
ter suporte para a filtragem de inspeção com<br />
informações de estado e/ou na camada de aplicativo.<br />
Automática (opção manual também disponível)<br />
Sim<br />
Bloquear ou permitir<br />
números de protocolo ou<br />
de porta<br />
Sim<br />
Bloquear ou permitir<br />
mensagens ICMP de<br />
entrada<br />
Controlar o acesso de<br />
saída<br />
Proteção do aplicativo<br />
Alertas audíveis ou<br />
visíveis<br />
Arquivo de log de<br />
ataques<br />
Alertas em tempo real<br />
Suporte para VPN<br />
Gerenciamento remoto<br />
Suporte do fabricante<br />
Opção de alta<br />
disponibilidade<br />
disponível<br />
Número de sessões<br />
simultâneas<br />
Capacidade de<br />
Sim<br />
Sim<br />
Geralmente não<br />
Geralmente não<br />
Geralmente não<br />
Geralmente não<br />
Às vezes<br />
Sim<br />
Limitada<br />
Geralmente não<br />
> 10–7500<br />
Limitada
Atributo do firewall<br />
atualização modular<br />
(hardware ou software)<br />
Faixa de preço<br />
Valor<br />
Acessível<br />
Vantagens<br />
As vantagens dos firewalls de hardware low–end são:<br />
•Baixo custo<br />
Os firewalls low–end podem ser adquiridos por um baixo custo.<br />
•Configuração simples<br />
Quase nenhuma configuração é necessária.<br />
Desvantagens<br />
As desvantagens dos firewalls de hardware low–end são:<br />
•Funcionalidade limitada<br />
Em geral, os firewalls de hardware low–end oferecem somente funcionalidades<br />
básicas de firewall. Eles não podem ser executados ao mesmo tempo devido à<br />
redundância.<br />
•Taxa de transferência baixa<br />
Os firewalls de hardware low–end não foram criados para lidar com conexões<br />
com alta taxa de transferência, o que pode causar gargalos.<br />
•Suporte limitado do fabricante<br />
Como são itens de baixo custo, o suporte do fabricante costuma ser limitado a<br />
Emails e/ou a um site.<br />
•Capacidade de atualização limitada<br />
Geralmente, não pode haver atualizações de hardware, embora normalmente<br />
existam atualizações periódicas de firmware disponíveis.<br />
Início da página<br />
Classe 4—Firewall de hardware high–end<br />
No ponto máximo do mercado de firewall de hardware, existem produtos<br />
altamente resistentes e de alto desempenho, adequados à empresa ou ao<br />
provedor de serviços. Em geral, eles oferecem a melhor proteção, sem afetar o<br />
desempenho da rede.
A resistência é alcançada adicionando–se um segundo firewall, executado como<br />
uma unidade de espera ativa que mantém a tabela das conexões atuais por meio<br />
da sincronização automática com informações de estado.<br />
Redes conectadas à Internet precisam usar firewalls, pois as invasões são<br />
constantes. A tentativa de ataques DoS, roubos e corrupção de dados ocorrem o<br />
tempo todo. Deve–se considerar a implantação de unidades de firewall de<br />
hardware high–end em escritórios centrais ou matrizes.<br />
Tabela 4: Classe 4—Firewall de hardware high–end<br />
Atributo do firewall<br />
Recursos básicos que<br />
contam com suporte<br />
Valor<br />
A maioria dos firewalls de hardware high–end tem<br />
suporte para filtros estáticos de pacotes e NAT e pode<br />
ter suporte para a filtragem de inspeção com<br />
informações de estado e/ou na camada de aplicativo.<br />
Configuração<br />
Bloquear ou permitir<br />
endereços IP<br />
Geralmente manual<br />
Sim<br />
Bloquear ou permitir Sim<br />
números de protocolo ou<br />
de porta<br />
Bloquear ou permitir<br />
mensagens ICMP de<br />
entrada<br />
Controlar o acesso de<br />
saída<br />
Proteção do aplicativo<br />
Alertas audíveis ou<br />
visíveis<br />
Arquivo de log de<br />
ataques<br />
Alertas em tempo real<br />
Suporte a VPN<br />
Gerenciamento remoto<br />
Suporte do fabricante<br />
Sim<br />
Sim<br />
Potencialmente<br />
Sim<br />
Sim<br />
Sim<br />
Potencialmente<br />
Sim<br />
Bom
Atributo do firewall<br />
Opção de alta<br />
disponibilidade<br />
disponível<br />
Número de sessões<br />
simultâneas<br />
Capacidade de<br />
atualização modular<br />
(hardware ou software)<br />
Faixa de preço<br />
Valor<br />
Sim<br />
> 7500–500.000<br />
Sim<br />
Elevado<br />
Vantagens<br />
As vantagens dos firewalls de hardware high–end são:<br />
•Alto desempenho<br />
Os produtos de firewall de hardware foram criados para uma única finalidade e<br />
oferecem altos níveis de bloqueio contra invasões, juntamente com uma<br />
degradação mínima do desempenho.<br />
•Alta disponibilidade<br />
Os firewalls de hardware high–end podem ser conectados uns aos outros para<br />
obter a disponibilidade e o balanceamento de carga ideais.<br />
•Sistemas modulares<br />
O hardware e o software podem ser atualizados de acordo com os novos<br />
requisitos. As atualizações de hardware podem incluir portas Ethernet<br />
adicionais, ao passo que as atualizações de software podem incluir a detecção<br />
de novos métodos contra invasão.<br />
•Gerenciamento remoto<br />
A funcionalidade de gerenciamento remoto dos firewalls de hardware high–end<br />
é melhor que a de seus equivalentes low–end.<br />
•Resistência<br />
Os firewalls de hardware high–end podem ter recursos de disponibilidade e<br />
resistência, como o modo de espera ativo com uma segunda unidade.<br />
•Filtragem de camada de aplicativo<br />
Diferentemente dos firewalls low–end, que em geral fazem apenas a filtragem<br />
na camada 3 e, possivelmente, na camada 4 do modelo OSI, os firewalls de<br />
hardware high–end fornecem filtragem nas camadas de 5 a 7 para os<br />
aplicativos já conhecidos.
Desvantagens<br />
As desvantagens dos firewalls de hardware high–end são:<br />
•Alto custo<br />
Os firewalls de hardware high–end costumam ser caros. Embora possam ser<br />
adquiridos por $100, o custo de um firewall corporativo é muito superior e, com<br />
freqüência, tem como base o número de sessões simultâneas, a taxa de<br />
transferência e os requisitos de disponibilidade.<br />
•Configuração e gerenciamento complexos<br />
Como esta classe de firewalls conta com capacidade muito maior do que os<br />
firewalls low–end, sua configuração e seu gerenciamento também são mais<br />
complexos.<br />
Início da página<br />
Classe 5—Firewall de servidor high–end<br />
Os firewalls de servidor high–end adicionam capacidade de firewall a um<br />
servidor high–end, fornecendo proteção robusta e rápida em sistemas de<br />
hardware e software padrão. Esta abordagem se beneficia do uso de hardware<br />
ou software conhecido. Isso proporciona um número reduzido de itens de<br />
inventário, treinamento e gerenciamento simplificados, confiabilidade e<br />
capacidade de expansão. Muitos firewalls de hardware high–end são<br />
implementados em plataformas de hardware com padrão de mercado que<br />
executam sistemas operacionais padrão (porém ocultos) e, portanto, possuem<br />
pouca diferença, tecnicamente e em desempenho, com relação a um firewall de<br />
servidor. No entanto, como o sistema operacional ainda está visível, o recurso de<br />
firewall de servidor pode ser atualizado e ficar mais resistente por meio de<br />
técnicas como o agrupamento.<br />
Como o firewall de servidor é executado em um sistema operacional<br />
normalmente usado, é possível adicionar mais software, recursos e<br />
funcionalidade ao firewall de vários fornecedores (não de apenas um, como<br />
ocorre com o firewall de hardware). O conhecimento do sistema operacional<br />
também pode proporcionar uma proteção de firewall mais eficaz, pois para<br />
algumas das outras classes é preciso ter bastante experiência para executar a<br />
configuração de forma total e correta.<br />
Esta classe é adequada caso haja grande investimento em uma determinada<br />
plataforma de hardware ou software, pois usar a mesma plataforma para o<br />
firewall simplifica seu gerenciamento. O recurso de cache dessa classe também<br />
pode ser muito eficaz.<br />
Tabela 5: Classe 5—Firewall de servidor high–end<br />
Atributo do firewall<br />
Recursos que contam<br />
Valor<br />
A maioria dos firewalls de servidor high–end tem
Atributo do firewall<br />
com suporte<br />
Configuração<br />
Bloquear ou permitir<br />
endereços IP<br />
Valor<br />
suporte para filtros estáticos de pacotes e NAT e pode<br />
ter suporte para a filtragem de inspeção com<br />
informações de estado e/ou na camada de aplicativo.<br />
Geralmente manual<br />
Sim<br />
Bloquear ou permitir Sim<br />
números de protocolo ou<br />
de porta<br />
Bloquear ou permitir<br />
mensagens ICMP de<br />
entrada<br />
Controlar o acesso de<br />
saída<br />
Proteção do aplicativo<br />
Alertas sonoros/visuais<br />
Arquivo de log de<br />
ataques<br />
Alertas em tempo real<br />
Suporte a VPN<br />
Gerenciamento remoto<br />
Suporte do fabricante<br />
Opção de alta<br />
disponibilidade<br />
disponível<br />
Número de sessões<br />
simultâneas<br />
Capacidade de<br />
atualização modular<br />
(hardware ou software)<br />
Outros<br />
Sim<br />
Sim<br />
Potencialmente<br />
Sim<br />
Sim<br />
Sim<br />
Potencialmente<br />
Sim<br />
Bom<br />
Sim<br />
acima de 50.000 (em vários segmentos de rede)<br />
Sim<br />
Sistema operacional usado com freqüência
Atributo do firewall<br />
Valor<br />
Faixa de preço<br />
Elevado<br />
Vantagens<br />
As vantagens dos firewalls de servidor são:<br />
•Alto desempenho<br />
Quando executados em um servidor de tamanho adequado, esses firewalls<br />
podem oferecer altos níveis de desempenho.<br />
•Integração e consolidação de serviços<br />
Os firewalls de servidor podem usar os recursos do sistema operacional no qual<br />
são executados. Por exemplo, o software de firewall executado no sistema<br />
operacional do Windows Server 2003 pode aproveitar a funcionalidade do<br />
balanceamento de carga de rede embutida no sistema operacional. Além disso,<br />
o firewall pode servir como servidor VPN, usando novamente a funcionalidade<br />
do sistema operacional do Windows Server 2003.<br />
•Disponibilidade, resistência e escalabilidade<br />
Como esse firewall é executado em um hardware de PC padrão, ele possui<br />
todos os recursos de disponibilidade, resistência e escalabilidade da plataforma<br />
do PC no qual é executado.<br />
Desvantagens<br />
As desvantagens dos firewalls de servidor são:<br />
•Exigem hardware high–end<br />
Para obter um alto desempenho, a maioria dos produtos de firewall de servidor<br />
exige hardware high–end no que se refere à CPU (unidade de processamento<br />
central), memória e interfaces de rede.<br />
•Suscetíveis a vulnerabilidades<br />
Como os produtos de firewall de servidor são executados em sistemas<br />
operacionais conhecidos, eles estão suscetíveis às vulnerabilidades presentes<br />
no sistema operacional e em outros softwares executados no servidor. Embora<br />
esse também seja o caso dos firewalls de hardware, seus sistemas operacionais<br />
geralmente não são tão conhecidos pelos invasores quanto a maioria dos<br />
sistemas operacionais de servidor.<br />
Uso do firewall interno<br />
Um firewall interno existe para controlar o acesso a e proveniente da rede
interna. Os tipos de usuário são:<br />
•Confiáveis<br />
Funcionários da empresa, que podem ser usuários internos saindo para a zona<br />
de perímetro ou para a Internet; usuários externos, como os funcionários de<br />
filiais; usuários remotos ou usuários que trabalham em casa.<br />
•Parcialmente confiáveis<br />
Parceiros comerciais da empresa para os quais existe um nível de confiança<br />
maior do que para usuários não confiáveis. No entanto, este com freqüência é<br />
um nível inferior de confiança do que o existente para os funcionários da<br />
empresa.<br />
•Não confiáveis<br />
Por exemplo, usuários do site público da empresa.<br />
Os usuários não confiáveis da Internet devem, teoricamente, acessar apenas os<br />
servidores Web na sua zona de perímetro. Caso precisem acessar seus servidores<br />
internos para, por exemplo, verificar os níveis de estoque, o servidor Web<br />
confiável fará a pesquisa em nome deles. Portanto, os usuários não confiáveis<br />
nunca devem ter permissão para ultrapassar o firewall interno.<br />
Há vários pontos que devem ser considerados ao selecionar a classe de firewall a<br />
ser usada nessa capacidade. A tabela a seguir realça essas questões.<br />
Tabela 6. Pontos para escolha da classe do firewall interno<br />
Questão<br />
Capacidades de firewall<br />
necessárias, conforme<br />
especificado pelo<br />
administrador de<br />
segurança<br />
Características típicas de um firewall implementado<br />
nesta capacidade<br />
É um equilíbrio entre o grau de segurança necessário<br />
versus o custo do recurso e a degradação potencial do<br />
desempenho que o aumento na segurança pode causar.<br />
Enquanto muitas empresas desejam aproveitar a<br />
máxima segurança oferecida por um firewall que atende<br />
a esta capacidade, outras não querem aceitar a redução<br />
no desempenho associada. Para sites que não sejam de<br />
comércio eletrônico com volume muito alto, por<br />
exemplo, são permitidos níveis inferiores de segurança<br />
com base nos níveis superiores de taxa de transferência<br />
obtidos pelo uso de filtros estáticos de pacotes em vez<br />
da filtragem na camada de aplicativo.<br />
Se o dispositivo será um depende do desempenho exigido, da confidencialidade<br />
dispositivo físico dos dados e da freqüência da necessidade de acesso<br />
dedicado, oferecerá pela zona de perímetro.<br />
outra funcionalidade ou<br />
será um firewall lógico<br />
em um dispositivo físico<br />
Requisitos da<br />
Normalmente, usa–se alguma forma de registro; no
Questão<br />
Características típicas de um firewall implementado<br />
nesta capacidade<br />
capacidade de<br />
entanto, um mecanismo de monitoramento de evento<br />
gerenciamento para o também é necessário. Você pode optar por não permitir<br />
dispositivo de acordo a administração remota aqui para impedir que um<br />
com o especificado pela usuário mal–intencionado administre o dispositivo<br />
arquitetura de<br />
remotamente.<br />
gerenciamento da<br />
empresa<br />
Os requisitos de taxa de<br />
transferência<br />
provavelmente serão<br />
determinados pelos<br />
administradores de<br />
rede e de serviços na<br />
empresa<br />
Eles irão variar para cada ambiente, mas a capacidade<br />
do hardware no dispositivo ou servidor e os recursos de<br />
firewall usados irão determinar a taxa geral de<br />
transferência de rede.<br />
Requisitos de<br />
disponibilidade<br />
Novamente, este ponto depende dos requisitos de<br />
acesso dos servidores Web. Se eles devem<br />
principalmente manipular as solicitações de informações<br />
atendidas pelo fornecimento de páginas da Web, o fluxo<br />
para as redes internas será lento. No entanto, altos<br />
níveis de disponibilidade serão necessários no caso do<br />
comércio eletrônico.<br />
Regras para firewall interno<br />
Os firewalls internos monitoram o tráfego entre as zonas de confiança de<br />
perímetro e as internas. Os requisitos técnicos para os firewalls internos são<br />
consideravelmente mais complexos do que aqueles para os firewalls de<br />
perímetro, devido à complexidade dos tipos de tráfego e dos fluxos entre essas<br />
redes.<br />
Esta seção faz referência aos "bastion hosts". Bastion hosts são servidores<br />
localizados na rede de perímetro que fornecem serviços a usuários internos e<br />
externos. Exemplos de bastion hosts incluem os servidores Web e os servidores<br />
VPN. Normalmente, o firewall interno necessitará da implantação das seguintes<br />
regras, por padrão ou por configuração:<br />
•Bloquear todos os pacotes por padrão.<br />
•Na interface do perímetro, bloqueie os pacotes de entrada que parecem ter sido<br />
originados a partir de um endereço IP interno para impedir o spoofing.<br />
•Na interface interna, bloqueie os pacotes de saída que parecem ter sido<br />
originados a partir de um endereço IP externo para restringir um ataque
interno.<br />
•Permitir consultas baseadas em UDP e respostas dos servidores DNS internos<br />
para o bastion host do DNS Resolver.<br />
•Permitir consultas baseadas em UDP e respostas do bastion host do DNS<br />
Resolver para os servidores DNS internos.<br />
•Permitir consultas baseadas em TCP dos servidores DNS internos ao bastion<br />
host do DNS Resolver, inclusive as respostas para essas consultas.<br />
•Permitir consultas baseadas em TCP do bastion host do DNS Resolver para os<br />
servidores DNS internos, inclusive as respostas para essas consultas.<br />
•Permitir transferências de zonas entre o bastion host do servidor DNS externo e<br />
os hosts de servidores DNS internos.<br />
•Permitir Email de saída do servidor de Emails SMTP interno para o bastion host<br />
SMTP de saída.<br />
•Permitir Email de entrada do bastion host SMTP de entrada para o servidor de<br />
Emails SMTP interno.<br />
•Permitir que o tráfego que se origina no back–end nos servidores VPN<br />
alcancem os hosts internos e as respostas retornem para os servidores VPN.<br />
•Permitir o tráfego de autenticação para os servidores RADIUS na rede interna e<br />
que as respostas retornem aos servidores VPN.<br />
•Permitir que o acesso de saída da Web dos clientes internos passe por um<br />
servidor proxy e as respostas retornem a eles.<br />
•Suportar tráfego de autenticação de domínio do Microsoft Windows 2000/2003<br />
entre segmentos de rede tanto para o domínio de perímetro como para o<br />
domínio interno.<br />
•Suportar pelo menos cinco segmentos de rede.<br />
•Realizar inspeção de pacotes com informações de estado entre todos os<br />
segmentos de rede que unem (firewall na camada de circuito – camadas 3 e 4).<br />
•Suportar recursos de alta disponibilidade como failover com informações de<br />
estado.<br />
•Rotear tráfego por todos os segmentos de rede conectados sem usar a<br />
conversão de endereço de rede.<br />
Início da página
Requisitos do hardware<br />
Os requisitos de hardware para um firewall são diferentes para firewalls<br />
baseados em software e em hardware, da seguinte forma:<br />
•Firewalls baseados em hardware<br />
Esses dispositivos geralmente executam código especializado em uma<br />
plataforma de hardware personalizada. Esses firewalls são, em geral, escalados<br />
(com preço determinado) com base no número de conexões que podem aceitar<br />
e na complexidade do software que devem executar.<br />
•Firewalls baseados em software<br />
Também são configurados com base no número de conexões simultâneas e na<br />
complexidade do software de firewall. Existem calculadoras que podem<br />
computar a velocidade do processador, o tamanho da memória e o espaço em<br />
disco necessário para um servidor com base no número de conexões<br />
suportadas. Você deve considerar outro software que possa ser executado no<br />
servidor do firewall, como o software de balanceamento de carga e VPN. Além<br />
disso, considere os métodos para colocar o firewall em escala para cima e para<br />
fora. Esses métodos incluem o aumento da capacidade do sistema ao adicionar<br />
mais processadores, memória e placas de rede e, ainda, ao usar vários sistemas<br />
e o balanceamento de carga para espalhar a tarefa do firewall em todos eles.<br />
Alguns produtos utilizam o SMP (Multiprocessamento Simétrico) para aumentar<br />
o desempenho. O serviço de Balanceamento de carga de rede do Windows<br />
Server 2003 pode oferecer tolerância a falhas, alta disponibilidade, eficiência e<br />
aprimoramentos no desempenho para alguns produtos de firewall.<br />
Início da página<br />
Disponibilidade<br />
Para aumentar a disponibilidade do firewall, este pode ser implementado como<br />
um único dispositivo de firewall com ou sem componentes redundantes ou como<br />
um par redundante de firewalls, incorporando algum tipo de failover e/ou<br />
mecanismo de balanceamento de carga. As vantagens e desvantagens dessas<br />
opções são apresentadas nas subseções a seguir.<br />
Firewall único sem componentes redundantes<br />
A figura a seguir apresenta a descrição de um firewall único, sem componentes<br />
redundantes:
Figura 2<br />
Firewall único, sem componentes redundantes<br />
Vantagens<br />
As vantagens de se ter um firewall único incluem:<br />
•Baixo custo<br />
Como existe somente um firewall, os custos de hardware e licenciamento são<br />
baixos.<br />
•Gerenciamento simplificado<br />
O gerenciamento é simplificado, pois há somente um firewall para o site ou<br />
para a empresa.<br />
•Uma única fonte de log<br />
Todo o log de tráfego é centralizado em um dispositivo.<br />
Desvantagens<br />
As desvantagens de um firewall único sem redundância são:<br />
•Ponto único de falha<br />
Existe um ponto único de falha para o acesso de entrada e/ou saída.<br />
•Possibilidade de gargalo no tráfego<br />
Um firewall único poderia causar um gargalo no tráfego, dependendo do<br />
número de conexões e da taxa de transferência necessária.
Firewall único com componentes redundantes<br />
A figura a seguir apresenta a descrição de um firewall único com componentes<br />
redundantes:<br />
Figura 3<br />
Firewall único, com componentes redundantes<br />
Vantagens<br />
As vantagens de se ter um firewall único incluem:<br />
•Baixo custo<br />
Como existe somente um firewall, os custos de hardware e licenciamento são<br />
baixos. O custo dos componentes redundantes, como uma fonte de alimentação,<br />
não é alto.<br />
•Gerenciamento simplificado<br />
O gerenciamento é simplificado, pois há somente um firewall para o site ou<br />
para a empresa.<br />
•Uma única fonte de log<br />
Todo o log de tráfego é centralizado em um dispositivo.<br />
Desvantagens<br />
As desvantagens de se ter um firewall único incluem:<br />
•Ponto único de falha
Dependendo do número de componentes redundantes, pode ainda existir um<br />
ponto único de falha para o acesso de entrada e saída.<br />
•Custo<br />
O custo é mais alto do que o de um firewall sem redundância e também pode<br />
exigir uma classe superior de firewall para poder conseguir incorporar a<br />
redundância.<br />
•Possibilidade de gargalo no tráfego<br />
Um firewall único poderia causar um gargalo no tráfego, dependendo do<br />
número de conexões e da taxa de transferência necessária.<br />
Firewalls tolerantes a falhas<br />
Um conjunto de firewall tolerante a falhas inclui um mecanismo para duplicar<br />
cada firewall como na figura a seguir.<br />
Figura 4
Firewalls tolerantes a falhasVantagens<br />
As vantagens de um conjunto de firewalls tolerantes a falhas são:<br />
•Tolerância a falhas<br />
Usar pares de servidores ou dispositivos pode ajudar a fornecer o nível<br />
necessário de tolerância a falhas.<br />
•Log de tráfego central<br />
O log de tráfego é mais confiável quando um ou ambos firewalls podem<br />
registrar atividade para o outro parceiro ou para um servidor separado.<br />
•Possibilidade de compartilhamento de estado<br />
Dependendo do produto, os firewalls nesse conjunto conseguem compartilhar o<br />
estado de sessões.<br />
Desvantagens<br />
As desvantagens de um conjunto de firewalls tolerantes a falhas são:<br />
•Maior complexidade<br />
A instalação e o suporte deste tipo de solução são mais complexos devido à<br />
natureza de vários caminhos do tráfego de rede.<br />
•Configuração complexa<br />
Os conjuntos separados de regras de firewall podem levar a falhas de<br />
segurança e problemas de suporte se não forem configurados corretamente.<br />
•Maior custo<br />
Como há a necessidade de pelo menos dois firewalls, o custo aumenta no<br />
conjunto de um único firewall.<br />
Configurações do firewall tolerante a falhas<br />
Ao implementar um conjunto de firewalls tolerantes a falhas (geralmente<br />
conhecido como cluster), existem duas abordagens principais, conforme descrito<br />
nas seções a seguir.<br />
Conjunto ativo/passivo de firewall tolerante a falhas<br />
Em um conjunto ativo/passivo de firewall tolerante a falhas, um dispositivo<br />
(também conhecido como nó ativo) manipula todo o tráfego, enquanto o outro<br />
dispositivo (o nó passivo) não encaminha o tráfego nem executa a filtragem, mas<br />
permanece ativo, monitorando o estado do nó ativo. Normalmente, cada nó<br />
comunica a sua disponibilidade e/ou o estado da sua conexão ao nó parceiro.<br />
Geralmente, essa comunicação recebe o nome de pulsação, pois cada sistema<br />
avisa o outro, várias vezes por segundo, para garantir que as conexões estejam
sendo manipuladas pelo nó parceiro. Se o nó passivo não receber uma pulsação<br />
do nó ativo em um intervalo específico superior ao definido pelo usuário,<br />
indicando que o nó ativo falhou, então, o nó passivo assumirá a função de ativo.<br />
A figura a seguir apresenta a descrição de um conjunto ativo/passivo de firewall<br />
tolerante a falhas.<br />
Figura 5<br />
Conjunto ativo/passivo de firewall tolerante a falhas<br />
Vantagens<br />
As vantagens de um conjunto ativo/passivo de firewall tolerante a falhas são:<br />
•Configuração simples<br />
Esta configuração é mais simples de se fazer e solucionar do que a opção a<br />
seguir, ativo/ativo, porque apenas um único caminho de rede está ativo a todo o<br />
momento.<br />
•Carga de failover previsível<br />
Como toda a carga de tráfego alterna para o nó passivo em failover, o tráfego<br />
que o nó passivo deve gerenciar poderá ser facilmente planejado.
Desvantagens<br />
As desvantagens de um conjunto ativo/passivo de firewall tolerante a falhas são:<br />
•Utilização ineficiente<br />
O conjunto ativo/passivo de firewall tolerante a falhas é ineficiente porque o nó<br />
passivo não fornece uma função útil à rede durante a operação normal e não<br />
aumenta a taxa de transferência.<br />
Conjunto ativo/ativo de firewall tolerante a falhas<br />
Em um conjunto ativo/ativo de firewall tolerante a falhas, dois ou mais nós<br />
ouvem ativamente todas as solicitações enviadas para um endereço IP virtual<br />
que cada nó compartilha. A carga é distribuída entre os nós por meio de<br />
algoritmos exclusivos para o mecanismo de tolerância a falhas em uso ou por<br />
meio de uma configuração estática baseada no usuário. Qualquer que seja o<br />
método, o resultado é que cada nó filtra ativamente um tráfego diferente. No<br />
caso de um nó falhar, os nós sobreviventes distribuem o processamento da carga<br />
que tinha sido assumida anteriormente pelo nó que falhou. A figura a seguir<br />
apresenta a descrição de um conjunto ativo/ativo de firewall tolerante a falhas:
Figura 6<br />
Conjunto ativo/ativo de firewall tolerante a falhas<br />
Vantagens<br />
As vantagens de um conjunto ativo/ativo de firewall tolerante a falhas incluem:<br />
•Maior eficiência<br />
Como todos os firewalls estão fornecendo um serviço à rede, o uso deles é mais<br />
eficiente.<br />
•Taxa de transferência maior<br />
Durante a operação normal, esta configuração pode manipular níveis superiores<br />
de tráfego se comparada à configuração ativo/passivo, já que todos os firewalls<br />
podem fornecer o serviço à rede simultaneamente.<br />
Desvantagens<br />
As desvantagens de um conjunto ativo/ativo de firewall tolerante a falhas são:<br />
•Sujeito a possíveis sobrecargas<br />
Se um nó falhar, os recursos de hardware no(s) nó(s) restante(s) poderão ser<br />
insuficientes para atender ao requisito de taxa de transferência total. É<br />
importante planejar-se adequadamente para isso, entendendo que a degradação<br />
do desempenho provavelmente irá ocorrer, já que os nós sobreviventes<br />
assumem a carga de trabalho adicional, quando um nó falha.<br />
•Maior complexidade<br />
Como o tráfego de rede pode passar por várias rotas, a solução de problemas<br />
torna–se mais complexa.<br />
Início da página<br />
Segurança<br />
A segurança de produtos de firewall é de suma importância. Embora não existam<br />
padrões para a segurança de firewall, o fornecedor independente ICSA<br />
(International Computer Security Association) executa um programa de<br />
certificação para testar a segurança de produtos de firewall disponíveis<br />
comercialmente. A ICSA testa um número significativo de firewalls disponíveis<br />
no mercado atual. Para obter mais informações, consulte a seguinte URL:<br />
www.icsalabs.com (em inglês)<br />
É preciso ter cuidado para garantir que um firewall alcance os padrões de<br />
segurança necessários e uma maneira para fazer isso é escolher um firewall que<br />
conquiste a certificação ICSA. Além disso, deve existir um histórico para o<br />
firewall escolhido. Há vários bancos de dados de vulnerabilidade de segurança
disponíveis na Internet. Você deve verificá–los para obter informações sobre as<br />
vulnerabilidades do produto que pretende comprar. Infelizmente, todos os<br />
produtos (baseados em hardware e software) têm bugs. Além de determinar a<br />
quantidade e a gravidade dos bugs do produto que pretende comprar, também é<br />
importante avaliar a capacidade de resposta do fornecedor para as<br />
vulnerabilidades expostas.<br />
Início da página<br />
Escalabilidade<br />
Essa seção trata sobre o requisito de escalabilidade de uma solução de firewall.<br />
A escalabilidade de firewalls é determinada basicamente pelas características de<br />
desempenho dos dispositivos usados. É prudente selecionar um tipo de firewall<br />
que será escalado para atender às situações que enfrentará na prática. Há duas<br />
maneiras básicas para se alcançar a escalabilidade:<br />
•Escala vertical (ascendente)<br />
Se o firewall for um dispositivo de hardware ou uma solução de software<br />
executada em um servidor, a variação de graus de escalabilidade poderá ser<br />
atingida com o aumento da quantidade de memória, da capacidade de<br />
processamento da CPU e da taxa de transferência de interfaces de rede. No<br />
entanto, há um limite para cada dispositivo ou servidor no que se refere à<br />
distância em que pode ser escalada verticalmente. Por exemplo, se você<br />
comprar um servidor com suporte para quatro processadores e começar com<br />
dois, será possível adicionar apenas mais dois processadores.<br />
•Escala horizontal (lateral)<br />
Uma vez que um servidor tenha sido escalado verticalmente até o seu limite, a<br />
escala horizontal passará a ser importante. A maioria dos firewalls (baseados<br />
em hardware e software) pode ser escalada lateralmente usando alguma forma<br />
de balanceamento de carga. Em uma situação como essa, vários servidores são<br />
organizados em um cluster e vistos como um pelos clientes na rede. Esse caso é<br />
essencialmente o mesmo do cluster ativo/ativo descrito na seção<br />
"Disponibilidade", neste módulo. A tecnologia usada para oferecer essa<br />
funcionalidade pode ou não ser a mesma que a descrita anteriormente, e<br />
dependerá do fornecedor.<br />
A escala vertical de firewalls pode ser difícil. No entanto, alguns fabricantes de<br />
firewall de hardware oferecem soluções de escala lateral por meio das quais os<br />
seus dispositivos podem ser empilhados para operar como uma única unidade de<br />
carga equilibrada.<br />
Alguns softwares baseados em firewalls foram criados para fornecer uma escala<br />
ascendente, usando vários processadores. O multiprocessamento é controlado<br />
pelo sistema operacional subjacente, e o software de firewall não precisa<br />
conhecer os demais processadores. No entanto, é possível que nem todos os<br />
benefícios dos vários processadores sejam alcançados a menos que o software de<br />
firewall possa operar em um modo de multitarefas. Esta abordagem permite uma
escala em dispositivos simples ou redundantes em oposição aos firewalls<br />
baseados em hardware ou do tipo dispositivo, que normalmente devem seguir as<br />
limitações de hardware neles embutidas no momento da fabricação. A maioria<br />
dos firewalls do tipo dispositivo é classificada pelo número de conexões<br />
simultâneas que os dispositivos podem manipular. É freqüente a necessidade de<br />
substituição dos dispositivos de hardware se os requisitos de conexão excederem<br />
o que está disponível para o modelo de escala fixa do dispositivo.<br />
Como já foi abordado, a tolerância a falhas pode estar embutida em um sistema<br />
operacional de servidor de firewall. Para um firewall de hardware, a tolerância a<br />
falhas representará, provavelmente, um custo extra.<br />
Início da página<br />
Consolidação<br />
Consolidação significa incorporar o serviço de firewall em outro dispositivo ou<br />
incorporar outros serviços no firewall. Os benefícios da consolidação são:<br />
•Preço de compra menor<br />
Ao incorporar o serviço de firewall em outro serviço, por exemplo, em um<br />
roteador, o custo de um dispositivo de hardware será evitado, embora ainda<br />
seja necessário comprar o software de firewall. Da mesma forma, se for possível<br />
incorporar outros serviços no firewall, o custo de hardware adicional será<br />
evitado.<br />
•Custos reduzidos de inventário e gerenciamento<br />
A redução no número de dispositivos de hardware faz com que os custos<br />
operacionais sejam reduzidos. Uma vez que a necessidade de atualizações de<br />
hardware é menor, o cabeamento fica simplificado e o gerenciamento torna–se<br />
mais simples.<br />
•Melhor desempenho<br />
Dependendo da consolidação alcançada, o desempenho pode ser melhor. Por<br />
exemplo, a incorporação de cache de servidor Web no firewall pode afastar a<br />
necessidade de dispositivos adicionais e os serviços se comunicam em alta<br />
velocidade, e não por um cabo Ethernet.<br />
Entre os exemplos de consolidação, estão:<br />
•Adição de serviços de firewall a um roteador<br />
A maioria dos roteadores pode ter um serviço de firewall incorporado. Os<br />
recursos desse serviço de firewall podem ser muito simples em roteadores de<br />
baixo custo, mas os roteadores high–end geralmente terão um serviço de<br />
firewall muito eficiente. É provável que você tenha pelo menos um roteador<br />
conectando os segmentos da Ethernet na sua rede interna. Você economizará<br />
com a incorporação do firewall nele. Mesmo que você implemente dispositivos<br />
de firewall específicos, a implantação de alguns recursos de firewall nos
oteadores poderá ajudar a limitar as invasões internas.<br />
•Adição de serviços de firewall ao switch interno<br />
Dependendo do switch interno selecionado, é possível adicionar o firewall<br />
interno como "blade", reduzindo custos e melhorando o desempenho.<br />
Ao considerar a consolidação de outros serviços no mesmo servidor ou<br />
dispositivo que ofereça o serviço de firewall, você deverá ter cuidado para<br />
garantir que o uso de um determinado serviço não comprometa a<br />
disponibilidade, a segurança ou a facilidade de gerenciamento do firewall.<br />
Também é importante considerar o desempenho, já que a carga gerada por<br />
serviços adicionais irá degradar o desempenho do serviço de firewall.<br />
Uma abordagem alternativa para consolidar serviços no mesmo dispositivo ou<br />
servidor que hospeda o serviço de firewall é consolidar um dispositivo de<br />
hardware de firewall como uma "blade" em um switch. Essa abordagem<br />
normalmente custa menos do que um firewall autônomo de qualquer tipo e pode<br />
aproveitar os recursos de disponibilidade do switch, como as fontes de<br />
alimentação duplas. Uma configuração como essa também é mais fácil de ser<br />
gerenciada por não envolver um dispositivo separado. Além disso, esta solução<br />
normalmente é executada com mais rapidez porque usa o barramento no switch,<br />
que é mais veloz que um cabeamento externo.<br />
Início da página<br />
Padrões e diretrizes<br />
A maioria dos protocolos de Internet que usa a versão 4 do protocolo IP (IPv4)<br />
pode ser protegida por um firewall. Isso inclui os protocolos de nível inferior,<br />
como o TCP e o UDP, e os protocolos de nível superior, como o HTTP, o SMTP e<br />
o FTP. Ao analisar o produto de firewall que pretende adquirir, verifique se ele<br />
realmente oferece suporte ao tipo necessário de tráfego. Alguns firewalls<br />
também podem interpretar o GRE, que é o protocolo de encapsulamento para o<br />
protocolo PPTP (Point–to–point Tunneling Protocol), usado em algumas<br />
implementações de VPN.<br />
Alguns firewalls têm filtros da camada de aplicativo embutidos para protocolos,<br />
como HTTP, SSL, DNS, FTP, SOCKS v4, RPC, SMTP, H. 323 e POP (Post Office<br />
Protocol).<br />
Deve–se considerar também o futuro do protocolo TCP/IP e IPv6, bem como se<br />
esse será um requisito obrigatório para qualquer firewall, mesmo se o IPv4<br />
estiver sendo usado no momento.<br />
Início da página<br />
Resumo<br />
Este módulo apresentou um método prático para a seleção bem–sucedida de
produtos de firewall. Esse método abrange todos os aspectos do design de<br />
firewall, inclusive os diversos métodos de avaliação e classificação necessários<br />
para escolher uma solução.<br />
Nenhum firewall é 100% seguro. A única maneira de se garantir que a rede não<br />
será atacada eletronicamente pelo lado de fora é implementar uma barreira<br />
entre ele e todos os outros sistemas e as outras redes. O resultado seria uma<br />
rede segura quase inutilizável. Os firewalls permitem implementar um nível<br />
adequado de segurança, quando sua rede é conectada a uma rede externa ou são<br />
unidas duas redes internas.<br />
As estratégias do firewall e os processos de design apresentados neste módulo<br />
devem ser considerados apenas como parte de uma estratégia geral de<br />
segurança. Um firewall sólido possui valor limitado se existirem pontos fracos<br />
em outras partes da rede. A segurança deve ser aplicada em todo componente da<br />
rede e a política de segurança que encaminha os riscos inerentes ao ambiente<br />
deve ser definida para cada componente.
VPN<br />
1. Histórico<br />
O termo VPN esteve associado no passado a serviços remotos de<br />
conectividade, como o a rede de telefonia pública comutada (RTPC) ou os PVCs<br />
(Permanent Virtual Circuits/Channel) do Frame Relay, mas hoje já está associado<br />
ao uso de infra-estruturas públicas de comunicação para simular redes privadas<br />
IP. Antes da utilização deste novo conceito de VPN, as corporações gastavam<br />
grandes quantias de recursos para montar complexas redes privadas, chamadas<br />
Intranets, entre suas diversas unidades. Essas redes utilizavam serviços caros,<br />
como linhas privadas, Frame Relay e ATM para incorporar filiais à rede interna<br />
da companhia. Para escritórios ou usuários móveis, eram utilizados servidores de<br />
acesso remoto (com modens e linhas de discagem gratuita como o 0800) ou<br />
conexões RDSI (Rede Digital de Serviços Integrados). Ao mesmo tempo,<br />
empresas pequenas ou médias, que não tem recursos para manter conexões<br />
dedicadas tão caras, utilizavam serviços de comutação de circuito de baixa<br />
velocidade.<br />
A medida em que a Internet tornou-se mais e mais acessível, e a capacidade de<br />
transmissão disponível aumentou, as companhias passaram a migrar suas<br />
Intranet para a web, criando as chamadas Extranets, ligando usuários internos e<br />
externos. Apesar do baixo custo e a grande disponibilidade da Internet, há um<br />
problema fundamental: a segurança das informações que trafegam na rede.<br />
As VPN aparecem para superar o problema de segurança. Usando protocolos<br />
de tunelamento e procedimentos de encriptação, a integridade e autenticidade<br />
dos dados é garantida. Como as operações ocorrem sobre uma rede pública, a<br />
implementação e manutenção de uma VPN custa significativamente menos do<br />
que os serviços dedicados descritos no primeiro parágrafo.<br />
Apesar de as primeiras VPNs que surgiram necessitarem de especialistas para<br />
serem colocadas em funcionamento, a tecnologia desenvolveu-se a um nível em<br />
que sua implantação é simples e adequada a negócios de quaisquer tamanhos,<br />
incluindo pequenas empresas antes afastadas deste tipo de solução.<br />
Utilizando a Internet, as companhias podem conectar suas filiais, parceiros de<br />
negócio e clientes à rede corporativa. Usuários móveis dispõem de comunicações<br />
seguras, bastando para isso fazer uma ligação para um provedor de serviço de<br />
Internet (ISP, Internet Service Provider). Com VPNs, as empresas reduzem de<br />
forma imediata o custo com as ligações de longa distância (principalmente as<br />
companhias com atuação internacional), aluguel de linhas privadas e<br />
equipamentos de conexão, como banco de modens e servidores de autenticação.
2. Tecnologias<br />
A Internet é uma rede pública compartilhada, com protocolos abertos de<br />
transmissão. Assim, VPNs devem possuir meios de encapsular pacotes<br />
(tunelamento), encriptação e autenticação, de forma a permitir que dados<br />
importantes cheguem aos seus destinos sem que sejam vistos ou modificados por<br />
terceiros.<br />
2.1 Firewall<br />
O firewall é um importante mecanismo de segurança para qualquer usuário da<br />
Internet. Disponível em software ou hardware especializado, previne que<br />
usuários e dados não autorizados entrem ou saiam da rede da empresa, através<br />
de regras que especificam quais protocolos, locais ou destinos são permitidos ou<br />
proibidos. No entanto, eles não oferecem proteção aos dados após estes saírem<br />
da rede interna da empresa para a Internet; assim que os dados passam pelo<br />
firewall, nomes de usuário, senhas, números de contas, endereços de servidores<br />
e outras informações particulares estão visíveis aos hackers. Túneis VPN, feitos<br />
pelo uso de algoritmos de encriptação, fornecem a capacidade de se utilizar uma<br />
rede pública e compartilhada como a Internet para a transmissão segura de<br />
informações após elas deixarem a área protegida pelo firewall.<br />
2.2 Túneis<br />
É o que faz com que as Redes Privadas Virtuais sejam realmente privadas.<br />
Mesmo utilizando a Internet, uma rede pública, podemos dizer que estamos na<br />
verdade na rede privada da empresa, devido à privacidade fornecida pelos<br />
túneis. Apesar do termo túnel parecer se referir a um caminho fixo entre a<br />
origem e o destino, ele se comporta como qualquer outro tráfego na Internet,<br />
que pode passar por diferentes caminhos para chegar a um destino. O que faz da
transmissão VPN um túnel é o fato de apenas o destino, no final do túnel, poder<br />
ver a informação original.<br />
As tecnologias de tunelamento encriptam e encapsulam um determinado<br />
protocolo de rede dentro de um pacote IP. Desta forma, ele pode ser roteado,<br />
filtrado e serem aplicados dispositivos para controle de custo da mesma forma<br />
que é feitos com WAN tradicionais.<br />
2.3 Encriptação<br />
Encritação é a técnica de desordenar e colocar novamente em ordem a<br />
informação. A informação original é chamada de texto claro (clear-text) enquanto<br />
que a desordenada é chamada de texto codificado (cipher-text). Em cada lado de<br />
um túnel VPN está um dispositivo VPN, em hardware ou software; o dispositivo<br />
do emissor encripta a informação para texto codificado antes de enviá-la através<br />
do túnel, e o dispositivo no receptor decripa a informação de volta para texto<br />
claro.<br />
Os algoritmos de encriptação são funções matemáticas que estabelecem a<br />
relação entre a mensagem encriptada e a mensagem original, com a<br />
possibilidade de utilização de outros parâmetros. Os primeiros algoritmos de<br />
encriptação que surgiram garantiam a segurança mantendo em segredo a forma<br />
como a informação era desordenada; este método foi muito utilizado nas<br />
primeira e segunda guerra mundial. No entanto, a partir do momento em que o<br />
método era descoberto, toda a informação que tivesse sido enviada por ele<br />
tornava-se vulnerável. Assim, passou-se a pesquisar algoritmos em que a<br />
segurança seria garantida de outra forma que não o segredo sobre o algoritmo; a<br />
resposta foi a utilização de chaves para segurança de algoritmos públicos e<br />
testados, como o DES (Data Encryption Standard).<br />
DES e 3DES<br />
O DES utiliza chaves simétricas de 56 bits para encriptar blocos de 64 bits de
dados. Apesar deste método fornecer mais de 72.000 trilhões de possíveis<br />
combinações de chaves, que levariam pelo menos 10 anos para que um<br />
computador comum rodasse todas estas combinações, utilizando-se um conjunto<br />
de máquinas podemos quebrá-lo em menos de um minuto. Desenvolveu-se então<br />
o 3DES, que encripta a informação mais de uma vez; no 3DES, a mensagem é<br />
encriptada com uma chave, seus resultado decriptado com outra, então<br />
encriptado novamente com a chave original, para ser enviada ao destinatário,<br />
que realiza as mesmas operações de forma inversa; apenas ao fim das três<br />
operações é que teremos a mensagem original. Essa técnica faz com que o<br />
tamanho efetivo da chave aumento de 56 para 168 bits.<br />
Figura 1: Encriptação utilizando 3DES<br />
2.4 Chaves<br />
A chave é um código secreto utilizado por algoritmos de encriptação para criar<br />
versões únicas do texto codificado; isto faz com que uma mensagem, ao ser<br />
encriptada com chaves diferentes, apresente textos codificados diferentes.<br />
De forma intuitiva, podemos dizer que a segurança da transmissão será<br />
diretamente proporcional ao tamanho de chave utilizado. Utilizando uma chave<br />
de 16 bits, um atacante terá que fazer no máximo 65536 tentativas antes de<br />
revelar a combinação; para computadores, esta seria uma tarefa praticamente<br />
imediata. É por este motivo que os produtos VPN hoje utilizam chaves de 168<br />
bits, criando um número de combinações que necessitariam de alguns séculos<br />
para serem descobertas por computadores.<br />
Apesar da tentação para utilizar a chave com o maior número de bits possível,<br />
devemos levar em consideração que quanto maior a chave, maior será o tempo<br />
levado pelo dispositivos VPN para encriptar e decriptar as mensagens. Deve-se<br />
utilizar um tamanho de chave adequado para a importância da informação que se<br />
quer transmitir.<br />
Uma política mais eficiente é de utilizar chaves não muito grandes, mas
trocadas periodicamente. O período de tempo em que uma determinada chave é<br />
utilizada é chamado de crypto-period. As chaves podem ser trocadas de acordo<br />
com um determinado nível de transmissão de dados, no início de cada nova<br />
sessão ou quando o tráfego for baixo.<br />
Chaves simétricas<br />
Significa que a mesma chave é utilizada em cada terminação de um túnel para<br />
encriptar e decriptar as informações. Como a chave simétrica é compartilhada<br />
pelas duas partes, devem ser tomadas as medidas adequadas de forma a manter<br />
a chave secreta; por este motivo são também chamadas de “chaves secretas”.<br />
Estas chaves são mais difíceis de serem distribuídas, já que elas devem<br />
permanecer secretas. Uma técnica denominada “divisão de chave” pode ser<br />
empregada para reduzir o potencial de revelação da chave durante a troca, o que<br />
permite a utilização de canais públicos, como a Internet. A distribuição da chave<br />
também pode ser feita manualmente, utilizando papéis ou mídias removíveis<br />
(como disquetes e CDs).<br />
Chaves assimétricas<br />
Chaves assimétricas são um pouco mais complicadas, mas muito mais fáceis<br />
de gerenciar. Elas permitem que a informação seja encriptada por uma chave e<br />
decriptada por outra. As duas chaves utilizadas nesse cenário são chamadas de<br />
chave pública, que é distribuída, e chave privada, que deve ser mantida em<br />
segredo. Com chaves assimétricas, os parceiros no negócio trocam suas chaves<br />
públicas para se comunicar, mas mantém suas chaves privadas em segredo.<br />
Criptografia assimétrica
Gerenciamento de chaves<br />
Configurar previamente chaves secretas em pequenas VPNs não necessita de<br />
automação por software ou grandes investimentos em infra-estrutura.<br />
Entretanto, redes grandes beneficiam-se da implementação de uma infraestrutura<br />
de chaves públicas (Public Key Infrastructure, PKI) para criar,<br />
distribuir e emitir certificados digitais para cada usuário. Certificados digitais<br />
são procedimentos que verificam a associação entre uma chave pública e a<br />
identidade de um usuário, impedindo a falsificação de identidade. Pode-se<br />
utilizar os serviços de Autoridades Certificadoras fornecidos por terceiros, ou<br />
usar uma própria; estes serviços são especialmente importantes para grandes<br />
companhias que precisam gerenciar uma grande quantidade de chaves, tanto de<br />
seus usuários quanto de seus parceiros e clientes.<br />
2.5 Autenticação<br />
Por meio da autenticação, o destinatário de um dado pode determinar se o<br />
emissor é realmente quem ele diz ser (autenticação de usuário ou dispositivo) ou<br />
se o dado foi redirecionado ou corrompido no caminho entre a origem e o destino<br />
(autenticação de dados).<br />
Autenticação usuários ou dispositivos<br />
Numa comunicação entre A e B, A recebe uma mensagem assinada por B; A<br />
então escolhe um número aleatório e ecripta utilizando uma chave que somente<br />
B será capaz de decodificar. B então decripta o número aleatório e re-encripta<br />
utilizando uma chave que somente A será capaz de decodificar. Quando A recebe<br />
o número aleatório de volta, ele pode garantir que é realmente B que está na<br />
outra ponta da comunicação.<br />
Autenticação de dados<br />
Para verificar que pacotes de dados chegaram inalterados, os sistemas VPN<br />
geralmente utilizam uma técnica que envolve funções de hash. Esta função cria<br />
uma espécie de impressão digital do dado original. Ela calcula um número único<br />
para a mensagem em questão, chamado de hash, formado por uma cadeia fixa ou<br />
variável de bits. O emissor então anexa este número ao pacote de dados antes da<br />
etapa de encriptação. Quando o destinatário recebe e decripta este dado, ele<br />
pode calcular o hash da mensagem recebida de forma independente. O resultado<br />
é então comparado com o valor anexado pelo emissor; se os dois não
coincidirem, então é assumido que os dados foram alterados no caminho.<br />
Assinatura Digital<br />
Conferindo a Assinatura Digital de uma pessoa<br />
3. Protocolos de tunelamento e encriptação<br />
IPSec é o protocolo padrão da Internet para tunelamento, encriptação e<br />
autenticação. Ele foi projetado para proteger o tráfego da rede levando em<br />
consideração os seguintes aspectos: controle de acesso, integridade da conexão,<br />
autenticação da origem dos dados, proteção contra reenvio de pacotes e<br />
privacidade no tráfego de dados.<br />
O protocolo permite dois modos de operação. No modo túnel, tudo que estiver<br />
após o cabeçalho IP é protegido. No modo túnel, todo o pacote é protegido e um<br />
novo cabeçalho é gerado. Uma abordagem mais detalhado do IPSec pode ser<br />
encontrada na página seguinte.<br />
Além do IPSec, o Layer 2 Tunneling Protocol (L2TP) é utilizado para<br />
tunelamento. Neste caso, os pacotes de qualquer protocolo que não possa ser<br />
encaminhado na Internet (como IPX, SNa ou AppleTalk) são encapsulados num<br />
quadro L2TP, que por sua vez é colocado em uma pacote IP para roteamento até<br />
o final do túnel L2TP. Porém, devemos utilizar outros protocolos sobre o L2TP
para garantir a segurança dos dados. Uma análise mais profunda sobre o L2TP é<br />
feita mais adiante.<br />
4. Políticas de segurança<br />
As políticas de segurança definem privilégios de acesso aceitáveis, que podem<br />
depender de diversos fatores, como: cargo na empresa, projetos em que o<br />
funcionário trabalha, necessidades de informação e nível de confiança. Além<br />
disso, as políticas devem ser suficientemente granulares para permitir a<br />
diferenciação dependendo da organização, servidores, grupos e até mesmo níveis<br />
de usuários. Devemos levar em conta que estamos traçando uma linha de divisão<br />
entre o acesso limitado e a computação colaborativa; as políticas devem proteger<br />
os recursos no maior nível possível, ou seja, aquele que não prejudique a<br />
produtividade dos empregados.<br />
5. Aplicações VPN<br />
5.1 Acesso remoto<br />
Profissionais de negócios que viajam freqüentemente ou que trabalham em<br />
casa utilizam VPN para acessar a rede interna da empresa e realizar suas<br />
tarefas. Não importa onde eles estão, o acesso seguro à empresa está a apenas<br />
uma ligação telefônica para um ISP. Esta solução também é útil para os casos em<br />
que importantes funcionários da empresa precisam estar longe por um bom<br />
período de tempo.<br />
Acesso remoto antes das VPNs<br />
A conexão de usuários móveis ou remotos era tradicionalmente conseguida<br />
utilizando serviços comutados. Pequenos escritórios que não pudessem arcar<br />
com os custos de uma conexão permanente à Intranet corporativa utilizariam<br />
linhas discadas.<br />
As tarifas de longa distância são os maiores custos deste tipo de<br />
conectividade. Outros custos incluem investimentos em Servidores de Acesso<br />
Remoto na matriz e pessoal especializado para configurar e manter os<br />
servidores.
Acesso remoto após as VPNs<br />
Usuários remotos podem estabelecer conexões discadas para ISP locais, e<br />
conectar, via Internet, a um servidor VPN na sede da empresa. Utilizando as<br />
conexões rápidas existentes atualmente (DSL ou a cabo), empregados podem<br />
acessar os recursos corporativos em velocidades maiores do que 500 kbps. Na<br />
maior parte das vezes, isto é como se o funcionário estivesse dentro da sede da<br />
empresa, permitindo um trabalho rápido e eficiente.<br />
Neste tipo de aplicação, os benefícios proporcionados pela VPN incluem a<br />
substituição das ligações de longa distância ou serviços 0800, a eliminação da<br />
necessidade de Servidores de Acesso Remoto modens, e o acesso a todos os<br />
dados e aplicativos da empresa (não somente email e servidores de transferência<br />
de arquivos). Estudos mostram que a economia gerada nas ligações de longa<br />
distância pagam os custos de instalação da VPN em alguns meses, o que é<br />
seguido pela diminuição recorrente das despesas.<br />
5.2 Intranet<br />
O mercado hoje muitas vezes exige que empresas estabeleçam escritórios<br />
regionais ou internacionais. A opção sempre foi usar linhas privadas ou o mesmo<br />
tipo de acesso discado de usuários móveis. Além das perdas com infra-estrutura,<br />
as empresas ainda devem levar em consideração as perdas de oportunidade<br />
associadas à ineficiência no acesso às informações ou aplicações centralizadas.<br />
Intranet antes das VPNs<br />
Para conectar escritórios às sedes, o primeiro passo era equipar cada<br />
escritório com um roteador que o conectasse a um roteador de backbone de uma<br />
LAN ou WAN. Os roteadores remotos também conectavam os escritórios com<br />
outras localidades remotas. Todos estes roteadores eram freqüentemente<br />
conectados por uma rede de linhas privadas ou serviço de Frame Relay.<br />
O custo dessa configuração inclui os roteadores de backbone e de cada<br />
escritório e tarifas dos serviços de telecomunicações, mais significativamente as<br />
de longa distância.
Intranet após as VPNs<br />
Usando uma solução VPN para esta aplicação, o backbone WAN e o hardware<br />
associado são substituídos pela Internet. Cada escritório adicional acarretará o<br />
custo de uma conexão à Internet, do tipo DSL, RDSI ou a cabo. Também<br />
eliminamos a necessidade dos roteadores de backbone e sua administração,<br />
configuração e suporte. O Retorno de Investimento (ROI) nesta aplicação<br />
também é rápido e provê economias recorrentes.<br />
6. Produtos VPN<br />
6.1 Repassando as responsabilidades a um ISP<br />
Uma das opções para implementação de VPN é repassar as responsabilidades<br />
sobre gerenciamento para um ISP. É adequado para empresas que não possuam<br />
trabalhadores qualificados para esta área ou que não queiram perder o foco de<br />
seu negócio.<br />
É preciso levar em consideração os locais em que o ISP está presente, a<br />
existência de equipamentos redundantes, funcionários qualificados e um suporte<br />
adequado.<br />
6.2 Assumindo a responsabilidade na própria companhia<br />
Ao implementar VPNs, há quatro áreas principais que devem ser levadas em<br />
consideração: o serviço de Internet, o servidor com as políticas de segurança, o<br />
sistema de PKI e o dispositivo VPN que será utilizado.<br />
Os dispositivos se dividem em duas categorias, os independentes e os<br />
integrados a outros produtos. Estes dispositivos são:<br />
Roteador: adicionando suporte a VPN no roteador pode manter os custos de<br />
atualização baixos. As funcionalidades podem ser adicionadas tanto por software<br />
ou por placas de expansão.<br />
Firewall: a utilização de firewall para a criação de VPNs é uma solução prática
para redes pequenas e com baixo volume de tráfego. No entanto, devido ao<br />
processamento realizado pelos firewall, eles não são adequados para<br />
tunelamento em empresas com alto volume de tráfego.<br />
Independentes: são projetados especificamente para tunelamento, encriptação<br />
e autenticação de usuários, e geralmente são mais fáceis de instalar do que a<br />
implementação em roteadores e firewalls. Há uma grande variedade de<br />
dispositivos com diferentes taxas de dados e capacidade de gerenciar conexões<br />
simultâneas.<br />
Software: softwares para criação e gerenciamento de túneis VPN estão<br />
disponíveis para serem usados entre pares de dispositivos ou entre um usuário<br />
remoto e um dispositivo VPN. Estes softwares são boas opções de baixo custo<br />
para poucos túneis que não precisem processam muito tráfego; o software pode<br />
rodar em servidores já existentes.<br />
7. Qualidade de Serviço (QoS)<br />
A Internet é um ambiente complexo com uma enorme mistura de dados e<br />
aplicações em tempo real, que se movem em diferentes direções através de infraestruturas<br />
desconhecidas. Deve-se esperar encontrar gargalos e<br />
congestionamento. QoS geralmente trata de alocação de banda, prioridade e<br />
controle sobre a latência da rede. Mas a Internet é uma rede “sem conexão” que<br />
não provê garantias, apenas o melhor esforço. Quando transmitimos informações<br />
de missão críticas, que devem chegar ao destinatário com o menor atraso<br />
possível, QoS torna-se uma parte importante das implementações VPN. IPv6, a<br />
próxima versão do protocolo IP, deve mudar muitos destes fatores ao incluir<br />
provisões para QoS diretamente ao protocolo, mas ele ainda não é plenamente<br />
utilizado. É este o motivo para separar os requisitos de QoS dos requisitos de<br />
VPN, se é que a qualidade de serviço é importante para a empresa. Em outras<br />
palavras, deve-se escolher um ISP com um nível de qualidade de serviço<br />
adequado e então escolher a solução VPN mais adequada.
L2TP - Layer 2 Tunneling Protocol<br />
Protocolo para Tunelamento na<br />
Camada de Enlace<br />
1. Introdução<br />
L2TP é uma extensão do PPP (Point-to-Point Protocol), unindo características de<br />
outros dois protocolos proprietários: o L2F (Layer 2 Forwarding) da Cisco e o<br />
PPTP (Point-to-Point Tunneling Protocol) da Microsoft. É um padrão da IETF<br />
(Internet Engineering Task Force), que conta com a participação da Cisco e do<br />
PPTP fórum, entre outros líderes de mercado.<br />
O L2TPv3, analisado neste trabalho é uma atualização da RFC2661 (L2TPv2), e<br />
foi originalmente definido como um método para tunelamento para quadros PPP<br />
através de uma rede de comutação de pacotes. Surgiu então a necessidade de<br />
atualizar o método, para que ele incluísse todos os encapsulamentos da camada<br />
2 que necessitassem de tunelamento através de redes de comutação de pacotes.<br />
Entre as mudanças para a versão 3, temos: retirada de todas as partes<br />
específicas ao PPP do cabeçalho L2TP, garantindo assim a generalização para<br />
outras aplicações, e a mudança para um formato que possibilitasse o<br />
desencapsulamento de forma mais rápida.<br />
O L2TP fornece a flexibilidade e escalabilidade do IP com a privacidade do<br />
Frame Relay ou ATM (Asynchronous Transfer Mode), permitindo que serviços de<br />
rede sejam enviados em redes roteadas IP. As decisões são tomadas nas<br />
terminações dos túneis ou VPNs, e comutadas sem a necessidade de<br />
processamento nos nós intermediários.<br />
As seguintes vantagens são oferecidas pelo L2TP:<br />
o<br />
o<br />
o<br />
o<br />
permite o transporte de protocolos que não o IP, como o IPX (Internetwork<br />
Packet Exchange, da Novell/Xerox) e o SNA, assim como outros protocolos<br />
dos terminais;<br />
mecanismo simples de tunelamento para implementar funcionalidades de<br />
LAN e IP de forma transparente, possibilitando serviços de VPN IP de<br />
forma bastante simples;<br />
simplifica a interação entre as redes do cliente e do provedor;<br />
fácil configuração para o cliente.
2. Funcionamento<br />
Nesta seção, analisaremos um tunelamento baseado em interfaces, onde todo o<br />
tráfego entre duas redes de um cliente é encapsulado em pacotes IP e enviado<br />
por uma rede IP. Os roteadores internos da rede IP tratam o tráfego como<br />
qualquer outro, e não precisam de informações sobre as redes do cliente. Este<br />
processo é chamado de tunelamento da camada 2.<br />
Como mostrado na figura 1, os roteadores R1 e R2 fornecem o serviço L2TP.<br />
Estes roteadores comunicam-se por protocolo IP, através do caminho composto<br />
pela interface Int2, a rede IP e a interface Int3. Neste exemplo, os roteadores R3<br />
e R4 comunicam-se por interfaces POS (Packet-over-SONET) utilizando um túnel<br />
L2TP. O túnel Tu1 é estabelecido entre as interfaces Int1 de R1 e Int4 de R2.<br />
Qualquer pacote que chegue na interface Int1 de R1 é encapsulado pelo L2TP e<br />
enviado pelo túnel Tu1 para R2. R2 então desencapsula o pacote e o transmite na<br />
interface Int4 para R4. Quando R4 precisa enviar um pacote para R3, o mesmo<br />
caminho, de forma inversa, é seguido.<br />
Podemos fazer algumas observações a respeito da operação do L2TP:<br />
o todos os pacotes recebidos na interface Int1 serão redirecionados para R4.<br />
R3 e R4 não vêem a rede que está entre eles;<br />
o o mesmo método é utilizado para interfaces Ethernet: qualquer pacote<br />
recebido da LAN1 por R1 na interface E1 será encapsulado pelo L2TP e<br />
enviado pelo túnel Tu2 até a interface E2 de R2, ao que será transmitido<br />
para a LAN2.<br />
o o mesmo vale para Frame-Relay: qualquer pacote recebido pela LAN1 por<br />
R1 em uma sub-interface será encapsulado pelo L2TP e enviado por um<br />
túnel até a sub-interface de R2, onde será transmitido na LAN2.
Funcionamento do L2TP<br />
3. Cabeçalhos L2TP<br />
Quando dados entram por uma interface de entrada de um túnel L2TP, eles são<br />
encapsulados por um cabeçalho adicional L2TP, como mostrado na figura 2. O<br />
cabeçalho L2TP é composto pelos seguintes parâmetros:<br />
• Cabeçalho para entrega (Delivery header): o cabeçalho necessário para<br />
transmitir os pacotes L2TP através da rede. Este é um cabeçalho IPv4, com<br />
20 octetos;<br />
• Cabeçalho L2TP: contém as informações necessárias para identificar de<br />
maneira única um túnel no local em que ele será desencapsulado, e contém<br />
12 octetos;<br />
• Informações (payload): o que será transportado pelo L2TP, podendo ser<br />
tanto um quadro da camada de enlace quanto um pacote da camada de<br />
rede.<br />
A parte do L2TP pode ser decomposta nos seguintes campos:<br />
• Identificador do túnel: identifica o túnel no sistema que desencapsula o<br />
pacote. O valor da identificação do túnel é escolhido de forma a otimizar a<br />
otimizar a identificação sistema que o desencapsulará. Este sistema pode<br />
então escolher trabalhar com um número menor de bits neste campo;<br />
trabalhando com 10 bits, por exemplo, serão possíveis 1023 túneis, já que<br />
o identificador zero é reservado para uso pelo protocolo.<br />
• Cookie: uma assinatura contendo 8 octetos, que é compartilhada entre as<br />
duas extremidades do túnel L2TP. Este cookie reduz as chances de que<br />
dois tráfegos sejam misturados após o desencapsulamento devido a erros<br />
de configuração; as assinaturas nos roteadores de origem em destino<br />
devem coincidir, ou os dados serão descartados.
Encapsulamento L2TP<br />
O L2TP comporta o tunelamento de dados dos seguintes quadros:<br />
o<br />
o<br />
o<br />
o<br />
o<br />
Frame Relay<br />
Ethernet: todo o quadro é encapsulado no roteador de origem, para<br />
posterior desencapsulamento no destino, e nenhum campo do quadro é<br />
analisado<br />
VLAN (802.1q): tanto as baseadas em portas quanto as baseadas na<br />
marcação de quadros<br />
HDLC (High-Level Data Link Control)<br />
PPP: o L2TP não influencia na negociação ou manutenção da ligação<br />
O protocolo L2TP pode ser dividido em duas partes: uma responsável por iniciar<br />
a conexão e outra responsável pelo tunelamento dos quadros da camada 2.<br />
A sinalização do L2TP é responsável por negociar os parâmetros da parte de<br />
controle, identificadores de sessão, cookies, autenticação e a troca de<br />
parâmetros de configuração.<br />
3.1 Ordenação dos quadros<br />
Apesar do ordenamento dos quadros da camada 2 ser garantido por alguma<br />
tecnologia desta camada (pela natureza do enlace, com um linha serial), ou pelo<br />
próprio protocolo, os quadros podem ser perdidos, duplicados ou reordenados<br />
enquanto ele passam pela como pacotes da rede IP; se o protocolo da camada 2<br />
não fornece um mecanismo de reordenamento de maneira explícita, o L2TP pode<br />
ser configurado para ordenar seus pacotes de acordo com um mecanismo<br />
descrito na RFC.<br />
IPSec - Protoclo de Segurança IP<br />
O Protocolo de Segurança IP (IP Security Protocol, mais conhecido pela sua<br />
sigla, IPSec) visa a ser o método padrão para o fornecimento de privacidade,<br />
integridade e autenticidade das informações transferidas através de redes IP.<br />
A Internet tem mudado a maneira como negócios são feitos, mas até mesmo o<br />
rápido crescimento da Internet tem sido atingido pela inerente falta de<br />
segurança, por ser uma rede pública. Algumas das principais ameaças a que ela<br />
está sujeita são:<br />
o<br />
perda de privacidade na troca de dados: os dados podem ser vistos por
o<br />
o<br />
o<br />
terceiros;<br />
perda da integridade dos dados: em algum local no caminho entre a origem<br />
e o destino, os dados podem ser modificados por terceiros;<br />
falsificação de identidade: a origem dos dados pode ser forjada, fazendo<br />
com que pessoas assumam o papel de outras;<br />
ataques de negação de serviço (Denial of Service, DoS): muitas vezes feitos<br />
através da união de diversas máquinas, que fazem requisições excessivas<br />
de um determinado serviço, tornando-o indisponível aos outros usuários.<br />
O IPSec tem como objetivo tratar de todas estas ameaças na própria camada de<br />
rede (camada Internet do modelo TCP/IP), para que não sejam necessárias<br />
modificações nos terminais (host) ou aplicativos. Um dos meios para se<br />
conseguir isto, por exemplo, é através da implementação de IPSec nos<br />
roteadores de borda, por onde passa todo o tráfego externo de uma<br />
empresa/instituição; desta forma, a segurança atuaria de forma transparente<br />
para o usuário.<br />
O IPSec é voltado para a encriptação de camada IP, e seu padrão define alguns<br />
formatos de pacote novos: Autenticação de Cabeçalho (Authentication Header,<br />
AH) para fornecer a integridade dos pacotes entre origem e destino, e o<br />
Encapsulamento Seguro da Informação (Encapsulating Security Payload, ESP). O<br />
gerenciamento de chaves, associações de segurança (Security Associations, SA)<br />
e os parâmetros para a comunicação IPSec entre dois dispositivos são<br />
negociados através do IKE (Inernet Key Exchange, anteriormente chamado de<br />
Internet Security Association Key Management Protocol ou ISAKMP/Oakley). O<br />
IKE utiliza Certificados Digitais (que garantem a identidade de uma pessoa,<br />
evitando a falsificação de identidades) para autenticação de dispositivos,<br />
permitindo a criação de grandes redes seguras. Sem o suporte dos Certificados<br />
Digitais, as soluções IPSec não seriam escaláveis para a Internet. Todos estes<br />
elementos serão explicados ao longo do texto. Atualmente, o protocolo já é<br />
encontrado em roteadores, firewalls e em sistemas operacionais Windows e<br />
UNIX.<br />
Começaremos com a motivação para o desenvolvimento do IPSec, para depois<br />
entrar em detalhes de seus mecanismos de segurança.<br />
1. Fundamentos<br />
Uma rede, para ser considerada segura, deve basear-se numa forte política de<br />
segurança, que defina a liberdade de acesso à informação para cada usuário,<br />
assim como a localização dos mecanismos de segurança na rede. Há várias<br />
soluções para se construir uma infra-estrutura segura para a Internet, Extranets,<br />
Intranets e redes para acesso remoto, que oferecem autenticação do usuário,<br />
acompanhamento de suas ações e privacidade dos dados. Privacidade,<br />
integridade e autenticidade são conseguidas através encriptação na camada de
ede, certificação digital e autenticação de dispositivos, palavras-chave quando<br />
falamos de IPSec, ou mais genericamente, de mecanismos de segurança em<br />
redes públicas.<br />
2. Mudança na comunicação das empresas<br />
A Internet está modificando rapidamente a forma como são feitos os negócios. Ao<br />
mesmo tempo em que a velocidade de comunicação aumenta, seu custo diminui.<br />
Há um grande espaço para o aumento de produtividade, aproveitando esta<br />
situação, através das seguintes topologias, também mostradas na figura 1:<br />
- Extranet: as companhias podem facilmente estabelecer enlaces com seus<br />
fornecedores, clientes ou parceiros. Até pouco tempo atrás, isto era feito através<br />
de linhas privadas (dedicadas) ou ligações telefônicas (de baixa velocidade). A<br />
Internet permite uma comunicação instantânea, de alta velocidade e sempre<br />
disponível.<br />
- Intranet: a maior parte das empresas utiliza WANs (Wide-Area Networks) para<br />
conectar as redes de sua sede e filiais. Esta solução é cara, e apesar de seu custo<br />
ter caído nos últimos anos, ainda há uma grande margem de redução de custos<br />
pelo uso da Internet.<br />
- Usuários remotos: a Internet fornece uma alternativa de baixo custo para a<br />
conexão destes usuários às redes corporativas. Em vez de a empresa ter que<br />
manter bancos de modens e arcar com os custos das ligações telefônicas (muitas<br />
vezes interurbanas ou até internacionais), elas podem permitir que seus usuários<br />
acessem sua rede através da Internet. Com uma ligação local a um provedor de<br />
acesso à Internet (Internet Service Provider, ISP), um usuário pode ter acesso à<br />
rede corporativa.
Compartilhamento da rede interna de uma empresa<br />
Estas e outras aplicações da Internet estão mudando a forma com as empresas<br />
se comunicam. A Internet fornece uma infra-estrutura pública de comunicações<br />
que faz com que tudo isso se torne possível. No entanto, há fraquezas geradas<br />
por esta infra-estrutura compartilhada: segurança, qualidade de serviço e<br />
confiabilidade. Neste momento aparece o IPSec como peça-chave no<br />
fornecimento de segurança nas comunicações de rede.<br />
3. Qual a função do IPSec?<br />
Como visto nos itens anteriores, a Internet apresenta grandes vantagens, mas<br />
também alguns riscos. Sem os mecanismos adequados de controle, os dados<br />
estão sujeitos a diversos tipos de ataques. Estes ataques são:<br />
3.1 Perda de privacidade<br />
O atacante pode observar dados confidenciais enquanto eles atravessam a<br />
Internet. Esta é uma das principais ameaças ao comércio pela Internet hoje. Sem<br />
encriptação, todas as mensagens enviadas podem ser lidas por pessoas não<br />
autorizadas, como mostrado na figura 2. Estas técnicas são chamadas de<br />
“sniffing”, e os programas utilizados para isso de “sniffers”; até usuários com<br />
pouco conhecimento já são capazes de bisbilhotar o conteúdo que trafega na<br />
rede.
Pessoas não autorizadas podem bisbilhotar o conteúdo de mensagens<br />
3.2 Perda de integridade dos dados<br />
Mesmo que os dados não sejam confidenciais, também devemos nos preocupar<br />
com a integridade deles. Por exemplo, uma pessoa pode não se importar que<br />
alguém veja suas mensagens do dia a dia, mas certamente se preocupará se os<br />
dados puderem ser alterados; uma ordem para a promoção de um funcionário<br />
geralmente não precisa ser secreta, mas quem a enviou estará realmente<br />
preocupado ser ela puder ser trocada por uma outra indicando uma demissão. O<br />
mesmo vale para mensagens secretas, já que o emissor deseja que seus bits não<br />
sejam alterados no caminho, o que poderia causar uma alteração no significado<br />
da mesma. Mecanismos de integridade dos dados garantem que a mensagem<br />
chega ao destino como saiu da origem.<br />
3.3 Falsificação de identidade (Identity spoofing)<br />
Além da proteção do dado, também devemos ter a garantia de que uma pessoa é<br />
realmente quem ela diz ser. Como mostrado na figura 3, um atacante pode tentar<br />
se passar por uma outra pessoa, para ter acesso a informações confidenciais.<br />
Muitos sistemas ainda confiam no endereço IP para identificar um usuário de<br />
forma única; no entanto, este sistema já é facilmente enganado.<br />
Uma pessoa se passa por diretor da empresa, obtendo acesso à<br />
informações confidenciais
3.4 Negação de serviço (DoS)<br />
Ao migrar para a Internet, uma organização deve tomar as medidas necessárias<br />
para garantir que seus sistemas estarão disponíveis aos usuários. Aproveitando<br />
brechas de segurança, atacantes fazem com que computadores da empresa<br />
sejam levados ao limite, até o ponto em que parem de oferecer o serviço que<br />
deveriam. Mesmo que o atacante não consiga acesso a informações<br />
privilegiadas, ele sem dúvida causará danos à empresa.<br />
4. IPSec: Visão<br />
4.1 Abordando o problema<br />
Não há respostas simples para a segurança na Internet. Todas as soluções<br />
necessitam de muitos elementos, incluindo uma boa política de segurança,<br />
padrões que definam o que deve ser protegido, um conjunto de procedimentos<br />
que detalham como implementar as políticas e um conjunto de tecnologias que<br />
forneçam a proteção.<br />
Confidencialidade, integridade e autenticidade são os serviços-chave para a<br />
proteção contra as ameaças descritas na seção anterior. Com a encriptação<br />
garantimos a privacidade dos dados, com uma forte autenticação feita na<br />
camada de rede podemos garantir a origem dos dados.<br />
4.2 O que é IPSec<br />
IPSec não é o mecanismo de encriptação ou autenticação, mas sim o que vem<br />
gerenciar estes. Em poucas palavras, é um framework (um conjunto de diversas<br />
ferramentas, compondo um sistema) de padrões abertos que visa a garantir uma<br />
comunicação segura em redes IP. Baseado em padrões desenvolvidos pela IETF<br />
(Internet Engineering Task Force, organização que desenvolve os padrões da<br />
Internet), o IPSec busca garantir confidencialidade, integridade e autenticidade<br />
nas comunicações de dados em uma rede IP pública.<br />
Encriptação e autenticação podem ser implementadas tanto na camada de rede,<br />
quanto na de enlace ou aplicação. Antes do IPSec, as redes adotavam soluções<br />
parciais, que resolviam apenas parte dos problemas. Por exemplo, a utilização de
SSL (Secure Sockets Layer, que simulam túneis seguros entre aplicativos)<br />
fornece encriptação no nível de aplicação, muito usado em navegadores de<br />
Internet, por exemplo, para acesso à serviços bancários. Uma das deficiências da<br />
encriptação no nível de aplicação é que ela protege somente os dados enviados<br />
pela aplicação que a está usando, mas não de todas as outras. Cada sistema ou<br />
aplicativo deve estar adaptado a SSL, para que uma segurança geral possa ser<br />
garantida. Atualmente, a maior parte dos aplicativos não utiliza SSL.<br />
Já em instituições militares, o que vem sendo usado há anos é a encriptação no<br />
nível do enlace de dados. Neste esquema, todas as comunicações estarão<br />
protegidas por dispositivos de encriptação colocados em cada fim do enlace.<br />
Apesar de oferecer excelente cobertura, este tipo de encriptação necessita de um<br />
par de dispositivos de encriptação a cada enlace, o que pode ser inviável;<br />
também não é adequado para a Internet, já que apenas os enlaces dentro de um<br />
sistema autônomo estarão ao alcance das empresas/instituições.<br />
O IPSec implementa encriptação e autenticação na camada de rede, fornecendo<br />
uma solução de segurança fim-a-fim, ao contrário da anterior (enlace), que é<br />
ponto-a-ponto. O IPSec pode ser implementado nos roteadores ou no sistema<br />
operacional dos terminais, assim os aplicativos não precisam de alterações para<br />
poder utilizar comunicações seguras. Como os pacotes encriptados têm o mesmo<br />
formato de pacotes IP comuns, eles podem ser roteados sem problemas em<br />
qualquer rede IP, e sem qualquer alteração nos equipamentos de rede<br />
intermediários. Os únicos dispositivos de rede que precisam ser alterados são os<br />
do início e fim das comunicações IPSec, reduzindo assim os custos de<br />
implementação e gerenciamento.<br />
A figura 4 mostra onde a encriptação atua nas diferentes camadas.
Encriptação na camada de enlace, na de rede e na aplicação.<br />
4.3 Tecnologias<br />
IPSec combina diversas tecnologias diferentes de segurança em um sistema<br />
completo que provê confidencialidade, integridade e autenticidade, empregando<br />
atualmente:<br />
• mecanismo de troca de chaves de Diffie-Hellman;<br />
• criptografia de chave pública para assinar as trocas de chave de Diffie-<br />
Hellman, garantindo assim a identidade das duas partes e evitando ataques<br />
do tipo man-in-the-middle (onde o atacante se faz passar pela outra parte<br />
em cada um dos sentidos da comunicação);<br />
• algoritmos de encriptação para grandes volumes de dados, como o DES<br />
(Data Encryption Standard);<br />
• algoritmos para cálculo de hash (resto de uma divisão, de tamanho fixo)<br />
com utilização de chaves, com o HMAC, combinado com os algoritmos de<br />
hash tradicionais como o MD5 ou SHA, autenticando os pacotes;<br />
• certificados digitais assinados por uma autoridade certificadora, que agem<br />
como identidades digitais.
4.4 Detalhes do IPSec<br />
Na realidade, além das tecnologias mencionadas no item anterior, o IPSec<br />
também se refere a diversos outros protocolos (mencionados nas RFCs 2401-<br />
2411 e 2451) para proteger datagramas IP. Estes padrões são:<br />
• Protocolo de Segurança IP, que define que informações adicionar ao<br />
pacote IP para permitir o controle da confidencialidade, autenticidade e<br />
integridade, assim como a forma em que os dados devem ser encriptados;<br />
• Internet Key Exchange (IKE), que negocia Associações de Segurança<br />
(Security Association, SA) entre duas entidades e realiza a troca de chaves.<br />
O uso da IKE não é obrigatório, mas a configuração manual de Associações<br />
de Segurança é difícil e trabalhosa, torna-se impossível para comunicações<br />
seguras em larga escala.<br />
Pacotes IPSec<br />
É definido um novo conjunto de cabeçalhos a serem adicionados em datagramas<br />
IP. Os novos cabeçalhos são colocados após o cabeçalho IP e antes do cabeçalho<br />
da camada superior (como o dos protocolos de transporte TCP ou UDP). Estes<br />
novos cabeçalhos é que dão as informações para proteção das informações<br />
(payload) do pacote IP:<br />
• Authentication Header (AH): este cabeçalho, ao ser adicionado a um<br />
datagrama IP, garante a integridade e autenticidade dos dados, incluindo<br />
os campos do cabeçalho original que não são alterados entre a origem e o<br />
destino; no entanto, não fornece confidencialidade. É utilizada uma função<br />
hash com chave, ao invés de assinatura digital, pois o mecanismo de<br />
assinatura digital é bem mais lento e poderia reduzir a capacidade da rede.<br />
• Encapsulating Security Payload (ESP): este cabeçalho protege a<br />
confidencialidade, integridade e autenticidade da informação. Se o ESP for<br />
usado para validar a integridade, ele não inclui os campos invariantes do<br />
cabeçalho IP.<br />
AH e ESP podem ser usados separadamente ou em conjunto, mas para a maioria<br />
das aplicações apenas um deles é suficiente. Para os dois cabçalhos, o IPSec não<br />
especifica quais algoritmos de segurança devem ser utilizados, mas dá uma<br />
relação dos possíveis algoritmos, todos padronizados e bastante difundidos.<br />
Inicialmente, quase todas as implementações trabalham com MD5 (da RSA Data<br />
Security) e o Secure Hash Algorithm (SHA, do governo dos EUA) para<br />
integridade e autenticação. O DES é o algoritmo mais comumente usado para a<br />
encriptação dos dados, apesar de muitos outros estarem disponíveis, de acordo<br />
com as RFCs, como o IDEA, Blowfish e o RC4.
Modos de operação<br />
O IPSec fornece dois modos de operação, como mostrado nas figuras 5 e 6.<br />
No modo de transporte, somente a informação (payload) é encriptada, enquanto<br />
o cabeçalho IP original não é alterado. Este modo tem a vantagem de adicionar<br />
apenas alguns octetos a cada pacote, deixando que dispositivos da rede pública<br />
vejam a origem e o destino do pacote, o que permite processamentos especiais<br />
(como de QoS) baseados no cabeçalho do pacote IP. No entanto, o cabeçalho da<br />
camada 4 (transporte) estará encriptado, limitando a análise do pacote. Passando<br />
o cabeçalho sem segurança, o modo de transporte permite que um atacante faça<br />
algumas análises de tráfego, mesmo que ele não consiga decifrar o conteúdo das<br />
mensagens.<br />
No modo de tunelamento, todo o datagrama IP original é encriptado e passa a<br />
ser o payload de um novo pacote IP. Este modo permite que um dispositivo de<br />
rede, como um roteador, aja como um Proxy IPSec (o dispositivo realiza a<br />
encriptação em nome dos terminais). O roteador de origem encripta os pacotes e<br />
os envia ao longo do túnel IPSec; o roteador de destino decripta o datagrama IP<br />
original e o envia ao sistema de destino. A grande vantagem do modo de<br />
tunelamento é que os sistemas finais não precisam ser modificados para<br />
aproveitarem os benefícios da segurança IP; além disto, esse modo também<br />
protege contra a análise de tráfego, já que o atacante só poderá determinar o<br />
ponto de início e de fim dos túneis, e não a origem e o destino reais.<br />
Cabeçalho genérico para o modo de transporte<br />
Exemplo de um cabeçalho do modo túnel<br />
Como definido pelo IETF, o modo de transporte só pode ser utilizado quanto<br />
tanto a origem quanto o destino “entendem” IPSec. Na maior parte dos casos, é<br />
mais fácil trabalhar com o modo de tunelamento, o que permite a implementação
do IPSec sem que sistemas operacionais ou aplicativos nos terminais e<br />
servidores precisem ser alterados.<br />
Associações de Segurança (Security Association, SA)<br />
Como visto, o IPSec fornece diversas opções para executar a encriptação e<br />
autenticação na camada de rede. Quando dois nós desejam se comunicar com<br />
segurança, eles devem determinar quais algoritmos serão usados (se DES ou<br />
IDEA, MD5 ou SHA). Após escolher os algoritmos, as chaves de sessão devem ser<br />
trocadas. Como vemos, há uma certa quantidade de informações que precisam<br />
ser negociadas. A Associação de Segurança é o método utilizado pelo IPSec para<br />
lidar com todos estes detalhes de uma determinada sessão de comunicação. Uma<br />
SA representa o relacionamento entre duas ou mais entidades que descreve<br />
como estas utilizarão os serviços de segurança para se comunicarem. As SAs<br />
também podem ser utilizadas por outras entidades, como IKEs, para descrever<br />
os parâmetros de segurança entre dois dispositivos IKE.<br />
As SAs são unidirecionais, o que significa que para cada par de sistemas que se<br />
comunicam, devemos ter pelo menos duas conexões seguras, uma de A para B e<br />
outra de B para A. As SAs são identificadas de forma única pela associação entre<br />
um número aleatório chamado SPI (Security Parameter Index) e o endereço IP<br />
de destino. Quando um sistema envia um pacote que requer proteção IPSec, ele<br />
olha as SAs armazenadas em seus banco de dados, processa as informações, e<br />
adiciona o SPI da SA no cabeçalho IPSec. Quando o destino IPSec recebe o<br />
pacote, ele procura a SA em seus banco de dados de acordo com o endereço de<br />
destino a de SPI, e então processa o pacote da forma necessária. As SAs são<br />
simplesmente o relatório das políticas de segurança que serão usadas entre dois<br />
dispositivos.<br />
Protocolo de gerenciamento de chaves (Internet Key Management<br />
Protocol, IKMP)<br />
O IPSec assume que as SAs já existem para ser utilizado, mas não especifica<br />
como elas serão criadas. O IETF decidiu dividir o processo em duas partes: o<br />
IPSec fornece o processamento dos pacotes, enquanto o IKMP negocia as<br />
associações de segurança. Após analisar as alternativas disponíveis, o IETF<br />
escolheu o IKE como o método padrão para configuração das SAs para o IPSec.<br />
O IKE cria um túnel seguro e autenticado entre duas entidades, para depois<br />
negociar SAs para o IPSec. Este processo requer que duas entidades se<br />
autentiquem entre si e estabeleçam chaves compartilhadas.
Autenticação<br />
As duas partes devem ser autenticadas entre si. O IKE é bastante flexível e<br />
suporta diversos tipos de autenticação. As duas entidades devem escolher o<br />
protocolo de autenticação que será utilizado através de negociação. Neste<br />
momento, os seguintes mecanismos são implementados:<br />
• chaves compartilhadas já existentes: a mesma chave é instalada em cada<br />
entidade. Os dois IKEs autenticam-se enviando ao outro um hash com<br />
chave de um conjunto de dados que inclui a chave compartilhada existente.<br />
Se o receptor conseguir criar o mesmo hash usando sua chave já existente,<br />
ele sabe que os dois IKE possuem a mesma chave, autenticando assim a<br />
outra parte;<br />
• criptografia de chave pública: cada parte gera um número aleatório, e<br />
encripta este número com a chave pública da outra parte. A capacidade de<br />
cada parte computar um hash com chave contendo o número aleatório da<br />
outra parte, decriptado com a chave privada local, assim como outras<br />
informações disponíveis pública e privadamente, autentica as duas partes<br />
entre si. Este método permite que as transações sejam negadas, ou seja,<br />
uma das partes da troca pode, plausivelmente, negar que tenha feito parte<br />
da troca. Somente o algoritmo de chave pública RSA é suportado<br />
atualmente.<br />
• assinatura digital: cada dispositivo assina digitalmente um conjunto de<br />
dados e o envia para a outra parte. Este método a similar ao anterior, mas<br />
ele não permite que uma entidade repudie a participação na troca. Tanto o<br />
algoritmo de chave pública RSA quanto o DSS (Digital Signature Standard)<br />
são suportados atualmente.<br />
Tanto a assinatura digital quanto a criptografia de chave pública necessitam o<br />
uso de certificados digitais para validar o mapeamento entre a chave pública e a<br />
chave privada. O IKE permite que certificados sejam acessados<br />
independentemente (por exemplo, através do DNSSEC), ou que dois dispositivos<br />
troquem explicitamente os certificados como parte do IKE.<br />
Troca de chaves<br />
As duas partes devem possuir uma chave de sessão compartilhada para poderem<br />
encriptar o túnel IKE. O protocolo de Diffie-Hellman é usado para que as<br />
entidades concordem em uma chave de sessão. A troca é autenticada como<br />
descrito acima para prevenir contra ataques do tipo “man-in-the-middle”.
Utilizando o IKE com o IPSec<br />
A autenticação e a troca de chaves criam a SA entre os IKEs, um túnel seguro<br />
entre os dois dispositivos. Um dos lados do túnel oferece um conjunto de<br />
algoritmos, e o outro deve aceitar uma das ofertas ou rejeitar a conexão. Quando<br />
os dois lados concordam com os algoritmos que serão utilizados, eles devem<br />
produzir as chaves que serão utilizadas pelo IPSec no AH ou ESP, ou os dois. A<br />
chave compartilhada pelo IPSec é diferente da compartilhada pelos IKEs; ela<br />
pode ser obtida pelo método de Diffie-Hellman novamente, para garantir o sigilo,<br />
ou atualizando a criada pela troca original para gerar a SA IKE, fazendo o hash<br />
com outro número aleatório. O primeiro método, apesar de fornecer maior<br />
segurança, é mais lento. Após esse passos, a SA IPSec é estabelecida.<br />
Como mostrado na figura 8, o IPSec usa o IKE para iniciar uma SA. O primeiro<br />
pacote de A para B que deve ser encriptado inicia o processo. O processo IKE<br />
monta um túnel seguro entre B e A, onde a SA IPSec será negociada. A então<br />
pode usar esta SA para enviar dados de forma segura para B.<br />
Uso do IKE pelo IPSec<br />
Juntando todos os passos descritos anteriormente, temos o seguinte exemplo. B<br />
quer iniciar uma comunicação segura com A, enviando o primeiro pacote de<br />
dados. Quando o roteador de B recebe este pacote, ele olha suas políticas de<br />
segurança e vê este pacote deve ser encriptado; a política de segurança, que<br />
deve ser configurada anteriormente, também diz que o outro ponto do túnel<br />
IPSec será o roteador de A. O roteador de B procura se já há alguma SA IPSec<br />
com o roteador. Se ainda não existe, ele pede uma para o IKE; se os dois<br />
roteadores já compartilham uma SA IKE, a SA IPSec pode ser rapidamente<br />
gerada. Se ainda não compartilham uma SA IKE, ela deve ser criada antes que<br />
possa ser negociada uma SA IPSec. Como parte deste processo, os dois<br />
roteadores trocam certificados digitais, que estão assinados por alguma<br />
autoridade certificadora que os roteadores de A e B confiam. Quando a sessão<br />
IKE é ativada, os dois roteadores podem então negociar a SA IPSec; quando esta<br />
última é ativada, significa que os dois roteadores concordaram num algoritmo de<br />
encriptação (por exemplo o DES) e um de autenticação (como o MD5), e agora<br />
compartilham de uma chave de sessão. Agora o roteador de B pode encriptar o<br />
pacote IP que B que enviar a A, colocá-lo em um novo pacote IPSec enviá-lo ao
oteador de A. Quando o roteador de A recebe o pacote IPSec, ele faz uma busca<br />
na SA IPSec, e então processa o pacote e envia o datagrama original para A.<br />
Note que todos os passos são feitos pelos roteadores de A e B, deixando o<br />
processo transparente aos usuários.<br />
Na prática a política de segurança pode ser bastante flexível: os roteadores<br />
podem decidir quais pacotes devem ser encriptados ou autenticados, de acordo<br />
com alguma combinação entre os endereços de origem e destino, portas e<br />
protocolo de transporte. Cada um dos tipos de comunicação pode ser autenticado<br />
e encriptado separadamente, com chaves diferentes.
VPN - Virtual Private<br />
Network<br />
Rede Privada Virtual<br />
Introdução<br />
“Virtual Private Network” ou Rede Privada Virtual, é uma rede privada<br />
construída sobre a infra-estrutura de uma rede pública, normalmente a<br />
Internet. Ou seja, ao invés de se utilizar links dedicados ou redes de pacotes<br />
(como Frame Relay ou X.25) para conectar redes remotas, utiliza-se a infraestrutura<br />
da Internet.<br />
O conceito de VPN surgiu da necessidade de se utilizar redes de comunicação<br />
não confiáveis para trafegar informações de forma segura. As redes públicas são<br />
consideradas não confiáveis, tendo em vista que os dados que nelas trafegam<br />
estão sujeitos a interceptação e captura. Em contrapartida, estas redes públicas<br />
tendem a ter um custo de utilização inferior aos necessários para o<br />
estabelecimento de redes proprietárias, envolvendo a contratação de circuitos<br />
exclusivos e independentes.<br />
A principal motivação no uso das VPNs é a financeira, como alternativa para<br />
redução dos custos de comunicação de dados, oferecendo transporte de pacotes<br />
IPs de modo seguro através de Internet, com o objetivo de conectar vários sites .
Com o explosivo crescimento da Internet, o constante aumento de sua área de<br />
abrangência, e a expectativa de uma rápida melhoria na qualidade dos meios de<br />
comunicação associado a um grande aumento nas velocidades de acesso e<br />
backbone, esta passou a ser vista como um meio conveniente para as<br />
comunicações corporativas. No entanto, a passagem de dados sensíveis pela<br />
Internet somente se torna possível com o uso de alguma tecnologia que torne<br />
esse meio altamente inseguro em um meio confiável. Com essa abordagem, o uso<br />
de VPN sobre a Internet parece ser uma alternativa viável e adequada. No<br />
entanto, veremos que não é apenas em acessos públicos que a tecnologia de VPN<br />
pode e deve ser empregada.<br />
Aplicativos desenvolvidos para operar com o suporte de uma rede privada não<br />
utilizam recursos para garantir a privacidade em uma rede pública. A migração<br />
de tais aplicações é sempre possível, no entanto, certamente incorreria em<br />
atividades dispendiosas e exigiriam muito tempo de desenvolvimento e testes. A<br />
implantação de VPN pressupõe que não haja necessidade de modificações nos<br />
sistemas utilizados pelas corporações, sendo que todas as necessidades de<br />
privacidade que passam a ser exigidas sejam supridas pelos recursos adicionais<br />
que sejam disponibilizados nos sistemas de comunicação.<br />
Tipos de VPN<br />
Existem vários tipos de implementação de VPN's. Cada uma tem suas<br />
especificações próprias, assim como características que devem ter uma atenção<br />
especial na hora de implementar.<br />
Entre os tipos de VPN, destacam-se três principais:<br />
Intranet VPN<br />
Extranet VPN
Acesso Remoto VPN<br />
Intranet VPN<br />
Em uma Intranet VPN, que pode, por exemplo facilitar a comunicação entre<br />
departamentos de uma empresa, um dos quesitos básicos a considerar é a<br />
necessidade de uma criptografia rápida, para não sobrecarregar a rede (que tem<br />
de ser rápida).<br />
Outro requisito essencial é a confiabilidade que garanta a prioridade de<br />
aplicações críticas, como por exemplo, sistemas financeiros, banco de dados. E<br />
por último, é importante a facilidade de gerenciamento, já que numa rede<br />
interna, tem-se constantes mudanças de usuários, seus direitos,etc.<br />
Acesso Remoto VPN<br />
Uma VPN de acesso remoto conecta uma empresa à seus empregados que<br />
estejam distante fisicamente da rede. Neste caso torna-se necessário um<br />
software cliente de acesso remoto. Quanto aos requisitos básicos, o mais<br />
importante é a garantia de QoS(Quality of Service), isto porque, geralmente<br />
quando se acessa remotamente de um laptop, você está limitado à velocidade do<br />
modem. Outro item não menos importante é uma autenticação rápida e eficiente,<br />
que garanta a identidade do usuário remoto. E por último, um fator importante, é<br />
a necessidade de um gerenciamento centralizado desta rede, já que ao mesmo<br />
tempo, pode-se ter muitos usuários remotos logados, o que torna necessário que<br />
todas as informações sobre os usuários, para efeitos de autenticação por<br />
exemplo, estejam centralizadas num único lugar.<br />
Extranet VPN<br />
Extranet VPN's são implementadas para conectar uma empresa à seus sócios,<br />
fornecedores, clientes, etc... Para isso é necessário uma solução aberta,para<br />
garantir a interoperabilidade com as várias soluções que as as empresas<br />
envolvidas possam ter em suas redes privadas. Outro ponto muito importante a<br />
se considerar é o controle de tráfego, o que minimiza o efeitos dos gargalos<br />
existentes em possíveis nós entre as redes, e ainda garante uma resposta rápida<br />
e suave para aplicações críticas.<br />
Abaixo, uma figura que melhor ilustra uma Intranet VPN.<br />
Modelo de uma VPN
Funções Básicas<br />
A utilização de redes públicas tende a apresentar custos muito menores que os<br />
obtidos com a implantação de redes privadas, sendo este, justamente o grande<br />
estímulo para o uso de VPNs. No entanto, para que esta abordagem se torne<br />
efetiva, a VPN deve prover um conjunto de funções que garanta<br />
Confidencialidade, Integridade e Autenticidade.<br />
Confidencialidade<br />
Tendo em vista que estarão sendo utilizados meios públicos de<br />
comunicação, a tarefa de interceptar uma seqüência de dados é<br />
relativamente simples. É imprescindível que os dados que trafeguem<br />
sejam absolutamente privados, de forma que, mesmo que sejam<br />
capturados, não possam ser entendidos.<br />
Integridade<br />
Na eventualidade dos dados serem capturados, é necessário garantir que estes<br />
não sejam adulterados e re-encaminhados, de tal forma que quaisquer tentativas<br />
nesse sentido não tenham sucesso, permitindo que somente dados válidos sejam<br />
recebidos pelas aplicações suportadas pela VPN.<br />
Autenticidade
Somente usuários e equipamentos que tenham sido autorizados a<br />
fazer parte de uma determinada VPN é que podem trocar dados<br />
entre si; ou seja, um elemento de uma VPN somente reconhecerá<br />
dados originados em por um segundo elemento que seguramente<br />
tenha autorização para fazer parte da VPN.<br />
Dependendo da técnica utilizada na implementação da VPN, a privacidade das<br />
informações poderá ser garantida apenas para os dados, ou para todo o pacote<br />
(cabeçalho e dados). Quatro técnicas podem ser usadas para a implementação de<br />
soluções VPN:<br />
Modo Transmissão<br />
Somente os dados são criptografados, não havendo mudança no<br />
tamanho dos pacotes. Geralmente são soluções proprietárias,<br />
desenvolvidas por fabricantes.<br />
Modo Transporte<br />
Somente os dados são criptografados, podendo haver mudança no<br />
tamanho dos pacotes. É uma solução de segurança adequada, para<br />
implementações onde os dados trafegam somente entre dois nós da<br />
comunicação.<br />
Modo Túnel Criptografado<br />
Tanto os dados quanto o cabeçalho dos pacotes são criptografados,<br />
sendo empacotados e transmitidos segundo um novo endereçamento<br />
IP, em um túnel estabelecido entre o ponto de origem e de destino.<br />
Modo Túnel Não Criptografado<br />
Tanto os dados quanto o cabeçalho são empacotados e<br />
transmitidos segundo um novo endereçamento IP, em um túnel<br />
estabelecido entre o ponto de origem e destino. No entanto,<br />
cabeçalho e dados são mantidos tal como gerados na origem, não<br />
garantindo a privacidade.
Para disponibilizar as funcionalidades descritas anteriormente, a<br />
implementação de VPN lança mão dos conceitos e recursos de criptografia,<br />
autenticação e controle de acesso.<br />
Criptografia<br />
A criptografia é implementada por um conjunto de métodos de tratamento e<br />
transformação dos dados que serão transmitidos pela rede pública. Um conjunto<br />
de regras é aplicado sobre os dados, empregando uma seqüência de bits (chave)<br />
como padrão a ser utilizado na criptografia. Partindo dos dados que serão<br />
transmitidos, o objetivo é criar uma seqüência de dados que não possa ser<br />
entendida por terceiros, que não façam parte da VPN, sendo que apenas o<br />
verdadeiro destinatário dos dados deve ser capaz de recuperar os dados<br />
originais fazendo uso de uma chave.<br />
São chamadas de Chave Simétrica e de Chave Assimétrica as tecnologias<br />
utilizadas para criptografar dados.<br />
Chave Simétrica ou Chave Privada<br />
É a técnica de criptografia onde é utilizada a mesma chave para criptografar e<br />
decriptografar os dados. Sendo assim, a manutenção da chave em segredo é<br />
fundamental para a eficiência do processo.<br />
Chave Assimétrica ou Chave Pública<br />
É a técnica de criptografia onde as chaves utilizadas para<br />
criptografar e decriptografar são diferentes, sendo, no entanto<br />
relacionadas. A chave utilizada para criptografar os dados é formada<br />
por duas partes, sendo uma pública e outra privada, da mesma forma<br />
que a chave utilizada para decriptografar.<br />
Algoritmos para Criptografia<br />
DES - Data Encryption Standard<br />
É um padrão de criptografia simétrica, adotada pelo governo dos<br />
EUA em 1977.
Triple-DES<br />
O Triple-DES é uma variação do algoritmo DES, sendo que o<br />
processo tem três fases: A seqüência é criptografada, sendo em<br />
seguida decriptografada com uma chave errada, e é novamente<br />
criptografada.<br />
RSA - Rivest Shamir Adleman<br />
É um padrão criado por Ron Rivest, Adi Shamir e Leonard<br />
Adleman em 1977 e utiliza chave pública de criptografia, tirando<br />
vantagem do fato de ser extremamente difícil fatorar o produto de<br />
números primos muito grandes.<br />
Diffie-Hellman<br />
Foi desenvolvido por Diffie e Hellman em 1976. Este algoritmo<br />
permite a troca de chaves secretas entre dois usuários. A chave<br />
utilizada é formada pelo processamento de duas outras chaves uma<br />
pública e outra secreta.<br />
Integridade<br />
A garantia de integridade dos dados trocados em uma VPN pode ser fornecida<br />
pelo uso de algoritmos que geram, a partir dos dados originais, códigos binários<br />
que sejam praticamente impossíveis de serem conseguidos, caso estes dados<br />
sofram qualquer tipo de adulteração. Ao chegarem no destinatário, este executa<br />
o mesmo algoritmo e compara o resultado obtido com a seqüência de bits que<br />
acompanha a mensagem, fazendo assim a verificação.<br />
Algoritmos para Integridade<br />
SHA-1 - Secure Hash Algorithm One<br />
É um algoritmo de hash que gera mensagens de 160 bits, a partir<br />
de uma seqüência de até 2 64 bits.
MD5 - Message Digest Algorithm 5<br />
É um algoritmo de hash que gera mensagens de 128 bits, a partir<br />
de uma seqüência de qualquer tamanho.<br />
Autenticação<br />
A Autenticação é importante para garantir que o originador dos dados que<br />
trafeguem na VPN seja, realmente, quem diz ser. Um usuário deve ser<br />
identificado no seu ponto de acesso à VPN, de forma que, somente o tráfego de<br />
usuários autenticados transite pela rede. Tal ponto de acesso fica responsável<br />
por rejeitar as conexões que não sejam adequadamente identificadas. Para<br />
realizar o processo de autenticação, podem ser utilizados sistemas de<br />
identificação/senha, senhas geradas dinamicamente, autenticação por RADIUS<br />
(Remote Authentication Dial-In User Service) ou um código duplo.<br />
A definição exata do grau de liberdade que cada usuário tem dentro do<br />
sistema, tendo como conseqüência o controle dos acessos permitidos, é mais<br />
uma necessidade que justifica a importância da autenticação, pois é a partir da<br />
garantia da identificação precisa do usuário que poderá ser selecionado o perfil<br />
de acesso permitido para ele.<br />
Protocolos para VPN<br />
IPSec<br />
IPSec é um conjunto de padrões e protocolos para segurança relacionada com<br />
VPN sobre uma rede IP, e foi definido pelo grupo de trabalho denominado IP<br />
Security (IPSec) do IETF (Internet Engineering Task Force).<br />
O IPSec especifica os cabeçalhos AH (Authentication Header) e ESP
(Encapsulated Security Payload), que podem se utilizados independentemente ou<br />
em conjunto, de forma que um pocote IPSec poderá apresentar somente um dos<br />
cabeçalhos (AH ou ESP) ou os dois cabeçalhos.<br />
Authentication Header (AH)<br />
Utilizado para prover integridade e autenticidade dos dados<br />
presentes no pacote, incluindo a parte invariante do cabeçalho, no<br />
entanto, não provê confidencialidade.<br />
Encapsulated Security Payload (ESP)<br />
Provê integridade, autenticidade e criptografia à área de dados do<br />
pacote.<br />
A implementação do IPSec pode ser feita tanto em Modo Transporte como em<br />
Modo Tunel.
L2TP e PPTP<br />
Estes são protocolos utilizados em VPDNs (Virtual Private Dial Networks), ou<br />
seja, proporcionam o acesso de usuários remotos acessando a rede corporativa<br />
através do pool de modems de um provedor de acesso.<br />
Vale aqui uma discussão preliminar a respeito da diferença entre túneis<br />
"iniciados pelo cliente" e túneis "iniciados pelo provedor de acesso" :<br />
Túneis "iniciados pelo cliente" são também chamados de "voluntários", onde os<br />
túneis são criados por requisições do usuário para ações específicas e túneis<br />
"iniciados pelo provedor de acesso" são chamados de "compulsórios", já que são<br />
criados pelo provedor não proporcionando ao usuário nenhuma escolha e/ou<br />
intromissão.<br />
L2TP é um protocolo de túnelamento "compulsório". Essencialmente um<br />
mecanismo para repassar o usuário a outro nó da rede.<br />
No momento da interligação do usuário remoto com o provedor de acesso,<br />
após a devida autenticação e carga de uma configuração, um túnel é<br />
estabelecido até um ponto de terminação ( um roteador por exemplo ) prédeterminado,<br />
onde a conexão PPP é encerrada.<br />
Já o PPTP, um protocolo "voluntário", permite que os próprios sistemas dos<br />
usuários finais estabeleçam um túnel a uma localidade arbitrária sem a<br />
intermediação do provedor de acesso.<br />
Enquanto L2TP e PPTP soam bastante parecido, existem diferenças sútis<br />
quanto a sua aplicação. Existem diferenças na determinação de quem possuí o<br />
controle sobre o túnel e porque precisa ter.<br />
Na situação onde é utilizado o protocolo PPTP, o usuário remoto tem a<br />
possibilidade de escolher o destino do túnel. Este fato é importante se os<br />
destinos mudam com muita frequência, e nenhuma modificação se torna<br />
necessária nos equipamentos por onde o túnel passa. É também siginificativo o<br />
fato de que túneis PPTP são transparentes aos provedores de acesso. Nenuma<br />
ação se torna necessária além do serviço comum de prover acesso a rede.<br />
Usuários com perfis diferenciados com relação a locais de acesso – diferentes
cidades, estados e países – se utilizam com mais frequencia do protocolo PPTP<br />
pelo fato de se tornar desnecessária a intermediação do provedor no<br />
estabelecimento do túnel. É somente necessário saber o número local para<br />
acesso que o software no laptop realiza o resto.<br />
Onde se utiliza L2TP, temos um comportamento diferente de usuários e de<br />
provedores. Agora o controle está nas mãos do provedor e ele está fornecendo<br />
um serviço extra ao somente provimento do acesso. Esta é uma certa<br />
desvantagem para o usuário e vantagem para o provedor : este serviço extra<br />
pode ser cobrado.<br />
A escolha de qual protocolo utilizar é um baseado na determinação da posse<br />
do controle: se o controle deve ficar nas mãos do provedor ou do usuário final.<br />
Nível de Segurança<br />
A especificação da VPN a ser implantada deve tomar por base o grau de<br />
segurança que se necessita, ou seja, avaliando o tipo de dado que deverá
trafegar pela rede e se são dados sensíveis ou não. Dessa definição depende a<br />
escolha do protocolo de comunicação, dos algoritmos de criptografia e de<br />
Integridade, assim como as políticas e técnicas a serem adotadas para o controle<br />
de acesso. Tendo em vista que todos esses fatores terão um impacto direto sobre<br />
a complexidade e requisitos dos sistemas que serão utilizados, quanto mais<br />
seguro for o sistema, mais sofisticados e com capacidades de processamento<br />
terão de ser os equipamentos, principalmente, no que se refere a complexidade e<br />
requisitos exigidos pelos algoritmos de criptografia e integridade.<br />
Os habilitadores das tecnologias de segurança são de conhecimento comum e<br />
são apresentados os mesmos abaixo :<br />
• CHAP Challenge Handshake Authentication Protocol<br />
• RADIUS Remote Authentication Dial-in User Service<br />
• Certificados digitais<br />
• Encriptação de Dados<br />
Os três primeiros visam autenticar usuários e controlar o acesso a rede. O<br />
último visa prover confidencialidade e integridade aos dados transmitidos.
TCPDUMP<br />
TCPDUMP(1)<br />
NOME<br />
tcpdump- captura o tráfego em uma rede<br />
SINOPSE<br />
tcpdump [ -adeflnNOpqRStvxX ] [ -c contagem ] [ -F arquivo ] [ -i interface ] [ -m<br />
módulo ] [ -r arquivo ] [ -s tamanho ] [ -T tipo ] [ -w arquivo ] [ -E algo:secret ]<br />
[ expressão ]<br />
DESCRIÇÃO<br />
Tcpdump imprime a saída dos cabeçalhos dos pacotes na interface de rede que<br />
combinam com a expressão booleana.<br />
No SunOS com nit ou bpf: Para rodar tcpdump você necessita ter permissão de<br />
acesso a /dev/nit ou /dev/bpf*.<br />
No Solaris com dlpi: Você precisa ter acesso de leitura/escrita ao pseudo<br />
dispositivo de rede, por exemplo /dev/le.<br />
No HP-UX com dlpi: Você necessita ser root ou ter este instalado com setuid<br />
para root.<br />
No IRIS com snoop: Você necessita ser root ou ter este instalado com setuid para<br />
root.<br />
No Linux: Você necessita ser root ou ter este instalado com setuid para root.<br />
No Ultrix e Digital UNIX: Somente o super-usuário tem permissão de utilizar o<br />
modo de operação promíscuo usando pfconfig(8), qualquer usuário pode rodar o<br />
tcpdump.<br />
No BSD: Você necessita ter acesso de leitura em /dev/bpf*.<br />
OPÇÕES:<br />
-a Espera para converter endereços de rede e broadcast para nomes.<br />
-c Sai após receber contagem de pacotes.<br />
-d Captura os pacotes compilados com o código do pacote em um formato<br />
humanamente legível para a saída padrão e sai.<br />
-dd Captura os pacotes com o código do pacote como um fragmento de programa<br />
em C.<br />
-ddd Captura os pacotes com o código do pacote como números decimais<br />
(precedidos de um contador).<br />
-e Imprime a camada de link do cabeçalho na linha capturada.
-E Use algo:secreto para decriptar pacotes IPsec ESP.<br />
Algoritmos costumam ser des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc,<br />
ou nenhum. O padrão é des-cbc.<br />
A habilidade de descriptar pacotes só estará presente se o tcpdump for<br />
compilado com suporte a criptografia habilitado. secreto é o texto ASCII para a<br />
chave ESP secreta.<br />
Nós não tentaremos um valor binário arbitrário neste momento.<br />
A opção assume a RFC2406 do ESP, não a RFC1827 também do ESP.<br />
A opção é somente para propósitos de depuração, e o uso desta opção com uma<br />
chave secreta TRULY é desencorajada.<br />
Pela apresentação da chave secreta do IPsec na linha de comando você consegue<br />
deixar isto visível para outros, via ps(1) e em outras ocasiões.<br />
-f Imprime a saída dos endereços internet numéricamente no lugar de<br />
simbólicamente (essa opção tenta descobrir sérios problemas em servidores YP<br />
utilizando Sun -- usualmente causa um loop eterno na conversão de não-locais<br />
números internet).<br />
-F Utiliza o arquivo para a entrada de um filtro de expressão.<br />
Qualquer expressão adicional passada via linha de comando é ignorada.<br />
-i Escute na interface. Se não especificado o tcpdump irá procurar a lista de<br />
interfaces do sistema, interfaces ativas (excluindo a de loopback).<br />
Em sistemas Linux com kernels 2.2 ou superiores, um argumento ``any'' para<br />
interfaces pode ser usado para capturar pacotes de todas as interfaces.<br />
Note que as capturas em ``any'' (todos) os dispositivos não poderá ser feita no<br />
modo promíscuo.<br />
-l Deixe a linha de saída "bufferizada". Usualmente se você quizer ver os dados<br />
enquanto são capturados.<br />
Ex: ``tcpdump -l | tee dat'' ou ``tcpdump -l > dat & tail -f dat''.<br />
-n Não converter endereços (Ex: endereços de hosts e números de portas, etc)<br />
para nomes.<br />
-N Não imprime a qualificação do domínio dos nomes de host. Ex: se você passar<br />
esta flag para o tcpdump, ele imprimirá ``nic'' ao invés de ``nic.ddn.mil''.<br />
-m Carrega as definições do módulo SMI MIB do arquivo módulo. Esta opção<br />
pode ser usada em diversas vezes para carregar severos módulos MIB no<br />
tcpdump.<br />
-O Não execute o otimizador de códigos de pacote. Isso usualmente só será<br />
utilizado se você suspeitar de uma falha no otimizador.<br />
-p Não coloca a interface em modo promíscuo. Note que esta interface pode<br />
precisar entrar em modo promíscuo por alguma outra razão; então, `-p' não<br />
poderá ser usado como uma abreviação para `ether host {local-hw- addr} ou
ether broadcast'.<br />
-q Saída rápida (quieta?). Imprime menos informações do protocolo em saídas de<br />
linhas mais curtas.<br />
-r Lê os pacotes do arquivo (isso é criado com a opção -w). A entrada padrão será<br />
utilizada se o arquivo for ``-''.<br />
-s Sniffa tamanho de bytes de arquivo deste pacote.<br />
O default é 68 (com SunOS's NIT, o mínimo é atualmente 96). 68 bytes é<br />
adequado para IP, ICMP, TCP e UDP porém pode truncar informações de<br />
protocolos de pacotes DNS e NFS (olhe na frente). Os pacotes serão truncados<br />
porque um tamanho limitado foi indicado e a saída será ``[|proto]'', onde proto é<br />
o nome do nível do protocolo onde a truncagem ocorreu.<br />
Note que aumentar muito o tamanho pode causar uma delonga no tempo para<br />
processar estes pacotes e, efetivamente, diminuir a quantidade de pacotes<br />
capturados.<br />
Isso pode causar perda de pacotes. Você deve limitar o tamanho dos pacotes<br />
para o menor possível onde você conseguirá obter a informação que lhe<br />
interessar. Coloque o tamanho em 0 para que o tcpdump capture os pacotes<br />
completos, independente dos seus tamanhos.<br />
-T Força que os pacotes selecionados pela "expressão" sejam interpretados pelo<br />
tipo especificado. Atualmente, os tipos conhecidos são cnfp (Protocolo Cisco<br />
NetFlow), rpc (Chamadas de procedimento remotas), rtp (Protocolo de<br />
aplicações em tempo real), rtcp (Protocolo de controle de aplicações em tempo<br />
real), snmp (Protocolo simples de gerenciamento de redes), vat (Aplicação de<br />
Visual Audio), e wb (Placa Branca distribuída).<br />
-R Assume que pacotes ESP/AH são baseados em especificações antigas<br />
(RFC1825 a RFC1829). Se especificado, o tcpdump não irá imprimir o campo de<br />
prevensão. No entanto, este não é um campo de versão na especificação do<br />
protocolo ESP/AH, portanto o tcpdump não poderá deduzir a versão do<br />
protocolo.<br />
-S Imprimir o absoluto, em lugar do relativo, número de sequência TCP.<br />
-t Não imprimir o timestamp na linha capturada.<br />
-tt Imprimir um não formatado timestamp na linha capturada.<br />
-v Detalhamento da saída (não muito). Por exemplo, o tempo de vida,<br />
identificação, tamanho total e opções do cabeçalho IP serão impressos. Também<br />
se habilita opções adicionais de checagem da integridade dos pacotes como<br />
verificação do checksum dos cabeçalhos IP e ICMP.<br />
-vv Saída mais detalhada. Por exemplo, campos adicionais serão impressos em<br />
pacotes NFS de resposta.
-vvv Saída mais detalhada ainda. Por exemplo, as opções telnet SB ... SE serão<br />
impressas totalmente. Com -X as opções do telnet serão impressas em HEX<br />
muito bem.<br />
-w Escreve os pacotes capturados no arquivo no lugar de selecioná-los e imprimílos.<br />
Isso poderá ser impresso utilizando-se a opção -r. A saída padrão será<br />
utilizada se o arquivo for ``-''.<br />
-x Imprime este pacote (menos seu cabeçalho de camada de link) em<br />
hexadecimal. Tamanho em bytes será impresso (opção -s).<br />
-X Se imprime em hexa, imprime em ASCII também. Se a opção -x também for<br />
selecionada, o pacote será impresso em hexa/ascii.<br />
Isso é muito útil para analizar novos protocolos. Se a opção -x não estiver<br />
selecionada, algumas partes de alguns pacotes serão impressas em hexa/ascii.<br />
expressão<br />
Seleciona quais pacotes serão capturados. Se nenhuma expressão for passada,<br />
todos os pacotes da rede serão capturados.<br />
Se informada, apenas os pacotes que tiverem a expressão como sendo verdadeira<br />
(combinarem com a expressão) serão capturados.<br />
A expressão consiste em uma ou mais primitivas.<br />
Primitivas usualmente consistem em um identificador (nome ou número)<br />
precedidas de um ou mais qualificadores. Existem 3 diferentes qualificadores:<br />
type indica qual identificador (nome ou número) ele se refere. Os tipos possíveis<br />
são: host, net e port.<br />
Exemplos:<br />
``host foo''<br />
``net 128.3''<br />
``port 20''<br />
Se nenhum qualificador type for especificado, host será assumido.<br />
dir indica a direção em que a transferência ocorrerá, para e/ou do identificador.<br />
As direções possíveis são src, dst, src or dst e src and dst<br />
Exemplos:<br />
``src foo''<br />
``dst net 128.3''<br />
''src or dst port ftp-data''<br />
Se nenhum qualificador dir for especificado, src or dst será assumido. Para<br />
camadas de link ``null'' (Ex: protocolos de ponto a ponto como o slip) os<br />
qualificadores de entrada e saída devem ser utilizados para especificar a direção<br />
desejada.<br />
proto Qualificador restrito a estipular um tipo particular de protocolo. As opções<br />
existentes de protocolo são:
ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp e udp.<br />
Ex:<br />
``ether src foo''<br />
``arp net 128.3''<br />
``tcp port 21''<br />
Se não estipulado, todos os protocolos existentes em opção serão assumidos.<br />
Ex:<br />
``src foo'' inclui<br />
``(ip or arp or rarp) src foo''<br />
``net bar'' inclui<br />
``(ip or arp or rarp) net bar'' e<br />
``port 53'' inclui<br />
``(tcp or udp) port 53''.<br />
[`fddi' é atualmente um apelido para `ether'; isso seria idêntico a mensionar ``o<br />
nível de link de dados usado nesta específica interface de rede.''<br />
Cabeçalhos FDDI possuem campos iguais ao Ethernet, de endereços de origem e<br />
destino, e também tipo de pacotes, então você pode filtrar estes campos FDDI<br />
analogamente como você faz com estes campos Ethernet.<br />
Cabeçalhos FDDI também contém outros campos, porém você não poderá<br />
especificá-los em uma expressão de filtro.<br />
Similarmente, `tr' é um apelido para `ether'; o parágrafo anterior sobre os<br />
cabeçalhos FDDI também se aplica a cabeçalhos Token Ring.]<br />
Em adição a isto, existe algumas outras diretivas especiais que não foram<br />
mencionadas: gateway, broadcast, less, greater e expressões aritméticas. Todas<br />
elas serão descritas mais adiante.<br />
Expressões de filtragem mais complexas podem ser feitas utilizando-se<br />
expressões como and, or e not combinadas com as diretivas.<br />
Ex:<br />
``host foo and not port ftp and not port ftp-data''.<br />
Para facilitar, listas de qualificadores idênticos podem ser omitidas.<br />
Ex:<br />
``tcp dst port ftp or ftp-data or domain''<br />
é exatamente o mesmo que:<br />
``tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain''.<br />
Primitivas (diretivas) permitidas são:<br />
dst host host<br />
Verdadeiro se o campo de destino de pacotes IPv4/v6 for host, este pode ser<br />
endereço ou nome.<br />
src host host<br />
Verdadeiro se o campo de origem de pacotes IPv4/v6 for host.
host host<br />
Verdadeiro se o campo de origem ou destino de pacotes IPv4/v6 for host.<br />
Qualquer uma destas expressões de host podem ser precedidas por diretivas tais<br />
como ip, arp, rarp, ou ip6, assim:<br />
ip host host<br />
isso é o equivalente a:<br />
ether proto ip and host host<br />
Se host for um nome com múltiplos endereços IP, eles serão checados para a<br />
correlação.<br />
ether dst ehost<br />
Verdadeiro se o endereço de destino ethernet for ehost. Ehost pode ser um nome<br />
de /etc/ethers ou um número (veja ethers(3N) para o formato numérico).<br />
ether src ehost<br />
Verdadeiro se o endereço de origem ethernet for ethos.<br />
ether host ehost<br />
Verdadeiro se o endereço de origem ou de destino ethernet for ehost.<br />
gateway host<br />
Verdadeiro se o host usado no pacote for um gateway. Ex: o endereço de origem<br />
ou destino ethernet seja um host diferente do endereço de origem ou destino IP.<br />
Host precisa ser um nome e ser encontrado tanto em /etc/hosts quanto<br />
/etc/ethers.<br />
(Uma expressão equivalente seria:<br />
ether host ehost and not host host<br />
que poderia ser usada com nomes ethernet ou números para host / ehost.)<br />
Esta syntax por enquanto não funciona com configurações IPv6.<br />
dst net net<br />
Verdadeiro se o endereço de destino IPv4/v6 do pacote for um número de rede.<br />
Net pode ser um nome de /etc/networks ou um número de rede (veja networks(4)<br />
para maiores detalhes).<br />
src net net<br />
Verdadeiro se o endereço de origem IPv4/v6 do pacote for um número de rede.<br />
net net<br />
Verdadeiro se o endereço de origem ou destino IPv4/v6 do pacote for um número<br />
de rede.<br />
net net mask mask<br />
Verdadeiro se o endereço IP combinar com a rede de mascará especificada. Pode<br />
ser qualificada com src ou dst. Esta syntax também não foi implementada para<br />
redes IPv6.
net net/len<br />
Verdadeiro se o endereço IPv4/v6 combinar com a rede que possua netmask len<br />
bits. Pode ser qualificada com src ou dst.<br />
dst port port<br />
Verdadeiro se o pacote for ip/tcp, ip/udp, ip6/tcp ou ip6/udp e sua porta de<br />
destino seja port.<br />
A porta pode ser um número ou um nome usado em /etc/services (veja tcp(4P) e<br />
udp(4P)).<br />
Se um nome for usado, tanto o número da porta quanto o protocolo serão<br />
checados.<br />
Se um número ou um nome ambíguo for utilizado, somente o número da porta<br />
será checado.<br />
Ex:<br />
dst port 513<br />
Irá imprimir tanto tcp/login quanto udp/who<br />
e<br />
port domain<br />
Irá imprimir tanto tcp/domain quanto udp/domain<br />
src port port<br />
Verdadeiro se o pacote tiver a porta de origem port.<br />
port port<br />
Verdadeiro se a porta de origem ou de destino do pacote for port. Todas as<br />
expressões de porta anteriores podem ser precedidas com diretivas tcp ou udp,<br />
assim:<br />
tcp src port port<br />
Irá capturar apenas pacotes tcp com porta de origem port.<br />
less length<br />
Verdadeiro se o pacote tiver um tamanho menor ou igual a length. Isso seria o<br />
equivalente a:<br />
len = length.<br />
ip proto protocol<br />
Verdadeiro se o pacote for um pacote IP (veja ip(4P)) com protocolo de tipo<br />
protocol. Protocol pode ser um número ou um dos nomes: icmp, icmp6, igmp,<br />
igrp, pim, ah, esp, udp ou tcp.<br />
Note que os identificadores tcp, udp e icmp também são diretivas que podem ser<br />
passadas via backslash (l), isso seria no C-Shell.<br />
Perceba que esta primitiva não observa a regra de protocolo do cabeçalho.
ip6 proto protocol<br />
Verdadeiro se o pacote for um pacote IPv6 com protocolo de tipo protocol.<br />
Observe que esta primitiva não observa a regra de protocolo do cabeçalho.<br />
ip6 protochain protocol<br />
Verdadeiro se o pacote for um pacote IPv6, e conter um cabeçalho de protocolo<br />
com tipo protocol na regra de protocolo do cabeçalho.<br />
Por exemplo:<br />
ip6 protochain 6<br />
combina com qualquer pacote IPv6 com o protocolo TCP definido na regra do<br />
cabeçalho que especifica o protocolo.<br />
O pacote pode conter, por exemplo, cabeçalho de autenticação, roteamento, hopby-hop,<br />
tanto IPv6 quanto TCP. O código BPF emitido por esta primitiva é<br />
complexo e não será otimizado pelo otimizador BPF do tcpdump, porque isto<br />
ficaria muito lento.<br />
ip protochain protocol<br />
Equivalente ao ip6 protochain protocol, porém este é válido para IPv4.<br />
ether broadcast<br />
Verdadeiro se o pacote for um pacote ethernet de broadcast. A diretiva ether é<br />
opcional.<br />
ip broadcast<br />
Verdadeiro se o pacote for um pacote de broadcast IP. Isso irá checar tanto por<br />
tudo-zero quanto tudo-um como convenção para broadcast, e olhará para a<br />
máscara de subrede local.<br />
ether multicast<br />
Verdadeiro se o pacote for um pacote ethernet de multicast. A diretiva ether é<br />
opcional.<br />
Isto é uma abreviação de ``ether[0] & 1 != 0''.<br />
ip multicast<br />
Verdadeiro se o pacote for um pacote IP multicast.<br />
ip6 multicast<br />
Verdadeiro se o pacote for um pacote IPv6 multicast.<br />
ether proto protocol<br />
Verdadeiro se o pacote for um pacote ethernet com tipo protocol.<br />
Protocol pode ser um número ou um dos seguintes nomes:<br />
ip, ip6, arp, rarp, atalk, aarp, dec-net, sca, lat, mopdl, moprc, ou iso.<br />
Observe que estes identificadores também são diretivas que podem ser passados<br />
via backslash (l).<br />
[ No caso do FDDI (ex: ``fddi protocol arp''), a identificação do protocolo vêm do<br />
cabeçalho 802.2 Logical Link Control (LLC), e isto poderá usualmente estar no<br />
topo da camada do cabeçalho FDDI.
O tcpdump assumirá, enquanto filtra o identificador de protocolo, que todos os<br />
pacotes FDDI incluem um cabeçalho LLC e que este cabeçalho estará no formato<br />
SNAP. O mesmo se aplica ao Token Ring.]<br />
decnet src host<br />
Verdadeiro se o endereço de origem DECNET for host, isto poderá ser um<br />
endereço na forma ``10.123'', ou um nome de host DECNET.<br />
[O suporte a nomes de host DECNET só está disponível em sistemas Ultrix<br />
configurados para rodar DECNET.]<br />
decnet dst host<br />
Verdadeiro se o endereço de destino DECNET for host.<br />
decnet host host<br />
Verdadeiro se o endereço de destino ou de origem DECNET for host.<br />
ip, ip6, arp, rarp, atalk, aarp, decnet, iso<br />
Abreviações para:<br />
ether proto p<br />
onde p é um dos protocolos mencionados anteriormente.<br />
lat, moprc, mopdl<br />
Abreviações para:<br />
ether proto p<br />
onde p é um dos protocolos mencionados anteriormente.<br />
Perceba que o tcpdump atualmente não possui "know how" para estes<br />
protocolos.<br />
vlan [vlan_id]<br />
Verdadeiro se o pacote for um pacote VLAN IEEE 802.1Q Se [vlan_id] for<br />
especificado, somente será verdadeiro o pacote que obedeça a especificação<br />
[vlan_id].<br />
Observe que esta é a primeira diretiva vlan encontrada nas mudanças em<br />
expressão com offsets de decodificação para definir que este pacote é um pacote<br />
VLAN.<br />
tcp, udp, icmp<br />
Abreviações para:<br />
ip proto p or ip6 proto p<br />
onde p é um dos protocolos mencionados anteriormente.<br />
iso proto protocol<br />
Verdadeiro se o pacote for um pacote OSI com tipo de protocolo protocol.<br />
Protocol pode ser um número ou um dos seguintes nomes: clnp, esis ou isis.<br />
clnp, esis, isis<br />
Abreviações para:<br />
iso proto p
onde p é um dos protocolos mencionados anteriormente. Observe que o tcpdump<br />
faz um trabalho incompleto para selecionar estes protocolos.<br />
expr relop expr<br />
Verdadeiro se a relação holds, onde relop é um dos seguintes: >, =,
Negação deve ser precedida. Alternação e concatenação necessitam de<br />
precedência e associam esquerda com direita.<br />
Se um identificador for passado sem uma diretiva, a mais recente diretiva será<br />
assumida.<br />
Por exemplo:<br />
not host vs and ace<br />
será igual à:<br />
not host vs and host ace<br />
mas não pode ser confundido com:<br />
not ( host vs or ace )<br />
Argumentos de expressão podem ser passados ao tcpdump como um simples<br />
argumento, ou como múltiplos argumentos.<br />
Geralmente, se a expressão contiver metacaracteres de SHELL, será mais fácil<br />
passar como um simples argumento entre aspas.<br />
Múltiplos argumentos são concatenados com espaços antes de serem analizados.<br />
EXEMPLOS<br />
Para imprimir todos os pacotes vindos de ou para o departamento sundown<br />
tcpdump host sundown<br />
Para imprimir o tráfego entre helios e hot ou ace:<br />
tcpdump host helios and ( hot or ace )<br />
Para imprimir todos os pacotes IP entre ace e qualquer host exceto helios:<br />
tcpdump ip host ace and not helios<br />
Para imprimir todo tráfego entre hosts locais e hosts em Berkeley:<br />
tcpdump net ucb-ether<br />
Para imprimir todo tráfego ftp para a internet através do gateway snup:<br />
(Observe que a expressão está entre parênteses para prevenir que o shell<br />
interprete o que está entre parênteses)<br />
tcpdump 'gateway snup and (port ftp or ftp-data)'<br />
Para imprimir o tráfego para redes fora da rede local (se você for gateway para<br />
outra rede, esta regra pode não prever isto em sua rede local).<br />
tcpdump ip and not net localnet<br />
Para imprimir pacotes de início e final de conexões (SYN e FIN) TCP envolvendo<br />
hosts não-locais.<br />
tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'<br />
Para imprimir pacotes IP maiores do que 576 bytes enviados através do gateway<br />
snup:<br />
tcpdump 'gateway snup and ip[2:2] > 576'
Para imprimir pacotes de broadcast ou multicast IP que não estão sendo<br />
enviados via broadcast ou multicat ethernet<br />
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'<br />
Para imprimir todos os pacotes ICMP que não sejam echo request/reply<br />
(não sejam ping's)<br />
tcpdump 'icmp[0] != 8 and icmp[0] != 0'<br />
RETIRADO DO SITE<br />
http://www.slacklife.com.br/article.php?sid=872
Introducing tcpdump<br />
packet capture is the real-time collection of data as it travels over a network. For<br />
our purposes, a packet is any message that has been encapsulated in various<br />
headers that uses the IP protocol to communicate. And tcpdump is a tool that<br />
does the capturing. It has a lot of switches and so the command line can become<br />
messy. Because of this I decided to structure the tutorial mostly by example. For<br />
a more systematic approach you can read the man page.<br />
decomposing a sample packet<br />
Let us start off by looking at one such packet as displayed by tcpdump:<br />
1023873914.125606 fulton.ssh > spider.1145: P 3066603742:3066603806(64) ack 1646168027 win 1<br />
4510 0068 7e87 4000 4006 3862 c0a8 011e<br />
c0a8 0128 0016 0479 b6c8 a8de 621e 87db<br />
5018 4470 1813 0000 e492 152f 23c3 8a2b<br />
4ee7 dbf8 0d48 88e8 0110 2b01 4295 39f4<br />
52c9 a05b 31d7 e3ae 1c62 2dbd d955 d604<br />
b5d2 63d1 8fbc 4ab7 1615 b382 571c 70e0<br />
a368 a03f 425b 6211<br />
What we see here does not accurately represent the structure of the packet at<br />
all. The "upper" portion is a summary of what's going on. The "lower" portion<br />
(the rows and columns), though, is the actual stuff on the wire (in "hex"). What I<br />
discovered is that the ethernet frame header (that encapsulates the IP packet) is<br />
not shown here. I determined it to be consistently 14 bytes in length (6 bytes<br />
each for destination and source mac addresses and 2 bytes for the "ethertype").<br />
Here is a breakdown:<br />
• The black stuff is the time the packet came across our network card (not<br />
part of the packet)<br />
• The dark blue stuff is the source & source port and destination &<br />
destination port of the communication taking place.<br />
• The red stuff are TCP flags<br />
• The olive stuff is the byte sequence/range<br />
• The light blue stuff is the window size of bytes that the source (sender) is<br />
currently prepared to receive<br />
• The green stuff is the TCP type of service<br />
Important: packet structure and information is dependent on the nature of the<br />
packet. This example packet involves TCP, SSH, and is part of the middle of the<br />
session. Learn more about TCP and IP by reading RFC793 and RFC791<br />
respectively.<br />
Here is a quick reference for TCP flags:
TCP Flag<br />
Flag in<br />
tcpdump<br />
Flag Meaning<br />
SYN s Syn packet, a session<br />
establishment request. The<br />
first part of any TCP<br />
connection.<br />
ACK ack Ack packet, used to<br />
acknowledge the receipt of<br />
data from the sender. May<br />
appear in conjunction with<br />
other flags.<br />
FIN f Finish flag, used to indicate<br />
the sender's intention to<br />
terminate the connection to<br />
the receiving host.<br />
RESET r Indicates the sender's<br />
intention to immediately<br />
abort the existing connection.<br />
PUSH p Signals the immediate push of<br />
data from the sending host to<br />
the receiving host. For<br />
interactive applications such<br />
as telnet, the main issue is<br />
the quickest response time,<br />
which this "push" flag signals.<br />
URGENT urg Urgent data should take<br />
precedence over other data.<br />
For example, a Ctrl-C to<br />
terminate a FTP download.<br />
Placeholder .<br />
If the connection does not<br />
have a syn, finish, reset, or<br />
push flag set, this placefolder<br />
flag will be found after the<br />
destination port. Note that it<br />
also appears in conjunction<br />
with the ack flag.<br />
Back to our sample packet...<br />
So the first line is "hidden" in the hexadecimal portion of the output. The first<br />
line happens to contain information that resides within the packet headers (here<br />
IP and TCP headers). Of course you already know that a typical IP header is 20<br />
bytes in length and TCP is another 20 bytes right? And you also know that 2<br />
digits in hex is equivalent to one byte right? Sure, so that means that the headers
lie within the first 20 chunks of hex. Here I put the IP header in yellow and the<br />
TCP header in cyan:<br />
4510 0068 7e87 4000 4006 3862 c0a8 011e<br />
c0a8 0128 0016 0479 b6c8 a8de 621e 87db<br />
5018 4470 1813 0000 e492 152f 23c3 8a2b<br />
4ee7 dbf8 0d48 88e8 0110 2b01 4295 39f4<br />
52c9 a05b 31d7 e3ae 1c62 2dbd d955 d604<br />
b5d2 63d1 8fbc 4ab7 1615 b382 571c 70e0<br />
a368 a03f 425b 6211<br />
Let's see, that's 20 chunks for the headers so we have 32 left for data. Well we<br />
see in olive that there are 64 bytes of data so there's the remaining 32 chunks.<br />
Pretty good.<br />
Now we will satisfy ourselves with decoding just a few choice bytes:<br />
The second chunk represents the total length of the thing in bytes. In our head<br />
we calculate that 0068 is 104 in decimal (6x16+8). So, again, we score because<br />
there's our 52 chunks again. Yes!<br />
The second half of chunk number 5 is the protocol we're using to carry the IP<br />
data. Bingo! It shows 6 and that means TCP:<br />
# grep tcp /etc/protocols<br />
tcp 6 TCP # transmission control protocol<br />
The last 2 chunks (4 bytes) of the IP header (chunks 9 & 10) represent the<br />
destination address. Since host spider is known to be using 192.168.1.40 we can<br />
check this out:<br />
c0 = (12 x 16) + (0 x 1) = 192<br />
a8 = (10 x 16) + (8 x 1) = 168<br />
01 = ( 0 x 16) + (1 x 1) = 1<br />
28 = ( 2 x 16) + (8 x 1) = 40<br />
Yep. Looks good.<br />
Finally, let's look in the TCP header and decode the source port. We see in dark<br />
blue that we're in the midst of a SSH session, port 22. Source port is assigned<br />
bytes 1 & 2:<br />
0016 = 22 (perfect)<br />
So that ends our look at the anatomy of a sample packet. Let's move on to the<br />
business of issueing the tcpdump command.<br />
We can run tcpdump by simply typing:<br />
# tcpdump<br />
basic usage
Resulting in:<br />
23:29:04.050167 spider.3224 > 66-28-147-032.servercentral.net.6020: . ack 36517 win 16044<br />
23:29:04.059645 66-28-147-032.servercentral.net.6020 > spider.3224: P 36517:37969(1452) ack<br />
23:29:04.092955 daffy.pmatulis.homeunix.net.netbios-ns > 192.168.1.255.netbios-ns: nbt-query<br />
23:29:04.093587 daffy.pmatulis.homeunix.net.netbios-ns > 192.168.1.255.netbios-ns: nbt-query<br />
23:29:04.093836 mudra.pmatulis.homeunix.net.netbios-ns > daffy.pmatulis.homeunix.net.netbios<br />
23:29:04.095028 mudra.pmatulis.homeunix.net.netbios-ns > daffy.pmatulis.homeunix.net.netbios<br />
23:29:04.097645 daffy.pmatulis.homeunix.net.netbios-ns > 192.168.1.255.netbios-ns: nbt-regis<br />
23:29:04.098410 mudra.pmatulis.homeunix.net.netbios-ns > daffy.pmatulis.homeunix.net.netbios<br />
23:29:04.143267 66-28-147-032.servercentral.net.6020 > spider.3224: P 37969:39421(1452) ack<br />
23:29:04.145122 spider.3224 > 66-28-147-032.servercentral.net.6020: . ack 39421 win 13140<br />
This is a sample of traffic on my network. From this we discover some of<br />
tcpdump's default behaviour. For instance, it attempts to resolve fully qualified<br />
domain names. It also displays a timestamp in a different format from what we<br />
saw in our first sample packet. And most importantly, it does not look past the<br />
headers (hex is nowhere to be seen).<br />
Often, we want to take a sample of traffic and save it somewhere. We accomplish<br />
this in standard Unix fashion:<br />
# tcpdump > textfile<br />
Proceed like this if you want to view the capture as it is being saved:<br />
# tcpdump -l | tee textfile<br />
That's fine but we will now really begin our study of tcpdump. We will do this by<br />
acquainting ourselves with the concept of tracefiles (or dumpfiles). Tracefiles are<br />
binary versions of the traffic samples. They require less processing power (and<br />
space) as no parsing is required to give us legible text files (so, yes, tracefiles are<br />
always created by tcpdump, whether internally or externally). The data is raw<br />
(and quite unintelligible by humans). Here is how to save a tracefile:<br />
# tcpdump -w tracefile &<br />
Presumably we will one day want to use that tracefile so here we go:<br />
# tcpdump -r tracefile<br />
This will produce legible output as if we ran tcpdump with no switches at all. So<br />
remember, the "w" and "r" switches are useless by themselves; each implies the<br />
other.<br />
intermediate usage<br />
Let us proceed to the next level by taming tcpdump; so far he's been quite wild.<br />
There are 4 approaches at our disposal. They involve telling tcpdump:<br />
1. how to behave (program control)<br />
2. what packet information to show
3. what traffic to capture (packet filtering)<br />
4. how to display that packet information (data formatting)<br />
1. controlling tcpdump<br />
The switches we have seen so far (l,w,r) fall in this catagory. Here are a few<br />
more:<br />
# tcpdump -i xl0 -c 100 -s 400<br />
Ok, so that tells tcpdump to listen on the xl0 network interface, capture only the<br />
first 100 packets that come across it, and suck up the first 400 bytes of data from<br />
each packet (which includes the 14 bytes from the ethernet frame). The<br />
corresponding defaults are: the "lowest" interface (example: eth0 and not eth1);<br />
an indefinite number of packets; and 96 bytes.<br />
2. what packet information to show<br />
For the traffic that is captured we have a say in what information is shown. A few<br />
things you can try are to tell tcpdump to be "quiet", "verbose", or "very verbose".<br />
The corresponding switches are "-q", "-v", and "-vv" and, quite frankly, they are<br />
no big deal. The switches that are more interesting are "-e" and "-x". The former<br />
tells tcpdump to display the source and destination mac/ethernet addresses and<br />
the latter tells it to show us the payload of a packet in hexadecimal. This last<br />
switch is one of the more important switches available to us and it is what we<br />
used to display that first packet in the tutorial. Here are some examples:<br />
Let's say we're just interested in the mac addresses:<br />
# tcpdump -qec1<br />
00:57:06.154240 0:a0:4d:3:e0:1d 0:50:be:2b:44:8f 60: spider.4454 > fulton.pmatulis.homeunix.<br />
The two mac addresses you see are the source and destination. So here, spider<br />
has mac address 0:a0:4d:3:e0:1d and fulton has mac address 0:50:be:2b:44:8f. I<br />
used the quiet option to cut down on the clutter and requested a count of only 1<br />
packet.<br />
Let's go further and tell tcpdump to include some data in the capture:<br />
# tcpdump -qec1 -x<br />
01:04:18.762895 0:50:ba:2b:44:8f 0:a0:4b:3:e0:1d 118: fulton.pmatulis.homeunix.net.ssh > spi<br />
4510 0068 ca56 4000 4006 ec92 c0a8 011e<br />
c0a8 0128 0016 1166 fe89 6677 1140 5338<br />
5018 4470 9250 0000 3b6e e13e c39e cebe<br />
6ad5 5a78 8d62 090c 7dcf e1f1 37e0 9f64<br />
1c54 0ef7 8534 1ec9 0240 d02d c8a1 e54b<br />
fa3b<br />
A final and very useful switch for controlling tcpdump is to have the packet<br />
payload converted to ASCII. Normally this is used in conjunction with hex (the
"x" switch) even though, when using this ASCII switch, hex is often displayed<br />
whether demanded or not. To display ASCII we employ the "X" switch:<br />
# tcpdump -qec1xX<br />
On another system this gave me info on some Samba exchanges:<br />
21:04:34.339233 0:c:6e:77:68:8d 0:c0:4f:ac:12:3b 107: bureau.danville.ca.2343 > candyman.dan<br />
0x0000 4500 005d 138d 4000 8006 635e c0a8 013f E..]..@...c^...?<br />
0x0010 c0a8 0120 0927 008b 8fba 2130 aa33 e823 .....'....!0.3.#<br />
0x0020 5018 fe64 030d 0000 0000 0031 ff53 4d42 P..d.......1.SMB<br />
0x0030 2b00 0000 0018 43c0 0000 0000 0000 0000 +.....C.........<br />
0x0040 0000 0000 ffff fffe 0000 feff 0101 000c ................<br />
0x0050 004a .J<br />
3. what traffic to capture<br />
We can capture traffic based on:<br />
1. address<br />
2. protocol<br />
3. port<br />
4. packet characteristics<br />
5. combinations thereof<br />
address filtering<br />
• An address can refer to a host, a network, a multicast/broadcast,<br />
or a mac/ethernet address<br />
• An address can be a source or a destination<br />
So if I am interested in all IP traffic involving host mudra:<br />
# tcpdump host mudra<br />
Let's say I want only traffic where mudra is the destination:<br />
# tcpdump dst host mudra<br />
Obviously, if you use names (instead of IP addresses) name resolution<br />
must be set up.<br />
Below we capture IP traffic involving a source ethernet address of<br />
0:a0:3b:3:e1:1d<br />
# tcpdump ether src host 0:a0:3b:3:e1:1d<br />
Note the syntax: ether host {mac address}<br />
Here we will display the first 100 packets involving network<br />
192.168.1.0 with a netmask of 255.255.255.0 and save everything to a
text file (called net_1.0.txt.dump):<br />
# tcpdump -c 100 -l | tee net_1.0.txt.dump net 192.168.1.0 mask<br />
255.255.255.0<br />
Note that the switches must come first.<br />
protocol filtering<br />
• Five common protocols can be specified by name (also called<br />
keywords):<br />
ip<br />
tcp<br />
udp<br />
icmp<br />
igmp<br />
• The remaining protocols must be specified by number.<br />
So if I want to capture all udp related packets:<br />
# tcpdump udp<br />
If I wanted to do the same but save 300 bytes of data per packet to a<br />
tracefile (called udp1000hits.dump) containing the first 1000 hits on<br />
interface vr0 then:<br />
# tcpdump -c 1000 -i vr0 -s 300 -w udp1000hits.dump udp<br />
Here I am telling tcpdump to capture esp related packets:<br />
# tcpdump proto 50<br />
Note the syntax: proto {protocol number} (see /etc/protocols)<br />
port filtering<br />
For example, I am sniffing around my network for any Telnet activity:<br />
# tcpdump port 23<br />
Note the syntax: port {port number} (see /etc/services)<br />
packet characteristics filtering<br />
Remember in the beginning when we were decoding fields in the<br />
headers of a packet? Well we can filter using the same strategy. Here is
the syntax:<br />
tcpdump "{protocol}[{bypass n bytes}] = {number}"<br />
The available protocols are: ip, tcp, udp, icmp, ether, arp, rarp, and<br />
fddi. What "protocol" refers to is a little murky. If we use "ip" then it<br />
represents the IP header. If we use "icmp" (there is no such thing as an<br />
ICMP header) it represents the payload or data portion of the packet.<br />
An indirect way to capture all icmp traffic is like this:<br />
# tcpdump "ip[9]=1"<br />
This works because the transport protocol is given by the tenth byte of<br />
the IP header. And we know that icmp's protocol number is "1".<br />
Now given that host daffy is currently pinging host spider, the following<br />
command will capture only the echo replies of spider:<br />
# tcpdump -x "icmp[0]=0"<br />
04:20:22.056929 spider > daffy.pmatulis.homeunix.net: icmp: echo reply<br />
4500 0054 c20e 0000 8001 f4db c0a8 0128<br />
c0a8 0146 0000 6354 d87b 0000 3d09 a7a8<br />
000d f46d 0809 0a0b 0c0d 0e0f 1011 1213<br />
1415 1617 1819 1a1b 1c1d 1e1f 2021 2223<br />
2425 2627 2829 2a2b 2c2d 2e2f 3031 3233<br />
3435<br />
Focus your attention on the first 2 digits of chunk 11. That's byte 1 of<br />
the data portion of the packet and it is zero. Well the first byte of an<br />
ICMP message is it's type and by golly type "0" means echo reply.<br />
Let's try that again but this time we'll capture only what we need for<br />
the test (the 14 bytes for the frame header, the first 20 bytes for the IP<br />
header, and 1 byte for the ICMP type). We'll test for echo requests on<br />
the part of daffy this time (echo request is type "8"):<br />
# tcpdump -x -s 35 "icmp[0]=8"<br />
04:56:12.618507 daffy.pmatulis.homeunix.net > spider: [|icmp]<br />
4500 0054 8c8e 0000 ff01 ab5b c0a8 0146<br />
c0a8 0128 08<br />
Pretty good. Exactly as expected.<br />
Something else that's fun is to filter on TCP flags. The key here is to
find where the flags are located in the TCP header. Well, they are found<br />
at byte 14 (we need to bypass 13 bytes). Therefore, we can do the<br />
following if we want to identify all packets containing the RESET flag<br />
(which must necessarily also contains the ACK flag):<br />
# tcpdump -x "tcp[13]=20"<br />
Why? Well first, its actually only the last 6 bits of byte 14 that supply<br />
flag information:<br />
|U|A|P|R|S|F|<br />
|R|C|S|S|Y|I|<br />
|G|K|H|T|N|N|<br />
Therefore ACK and RST gives us a byte of 00010100. I think the first<br />
two bits are always zero (?). Converting binary to decimal (we do not<br />
use hex [which would of been 14 or 0x14]) gives us "20".<br />
Sometimes it may be useful to identify (datagram) fragments. In this<br />
case we filter on fields in the IP header where information regarding<br />
fragmentation is stored. Without elaborating on fragmentation theory,<br />
suffice it to say that if there is no "fragment offset" listed in the IP<br />
header then that packet is either not a fragment or it is the datagram's<br />
very first fragment.<br />
The offset is given by bytes 7 and 8 with the exception of the first 3 bits:<br />
reserved (always zero?), "do not fragment" (DF), and "more fragments<br />
to follow" (MF). Any one datagram will therefore have these two bytes<br />
looking like this:<br />
type bytes 7 and 8<br />
non-fragment 0?00000000000000<br />
first fragment 0010000000000000<br />
intervening<br />
fragment<br />
001xxxxxxxxxxxx<br />
last fragment 000xxxxxxxxxxxx<br />
Where ? may be "1" or "0" and the string of x's contains at least one "1".<br />
So if we can do a bitwise AND operation on those two bytes with the<br />
following binary number then we know our datagram is of the first two<br />
types providing the result is zero:<br />
0001111111111111<br />
So this will sniff non-fragments or "frag zeroes" (initial fragments):
# tcpdump "ip[6:2] & 0001111111111111=0"<br />
Why? Well we bypass 6 bytes and examine the next two (bytes 7 and 8).<br />
We then perform the AND operation and specify a result of zero.<br />
In hexadecimal the expression becomes:<br />
# tcpdump "ip[6:2] & 0x1fff=0"<br />
compound filtering<br />
Compound filtering is where we combine multiple filtering options in<br />
the same tcpdump command. This is very common on real networks. I<br />
can either specify exactly what I want or specify what I don't what. We<br />
do this through the use of three operators:<br />
1. Negation -- (not or !)<br />
2. Concatenation -- (and or &&)<br />
3. Alternation -- (or or ||)<br />
An example: Say I am working with tcpdump remotely by SSH and I<br />
want to take a sample capture of my network traffic and store it in a<br />
tracefile. Now I don't want to contaminate my capture with the remote<br />
session traffic itself so here is what I must do:<br />
# tcpdump -w tracefile not port 22<br />
But wait. This is no good. What if there is SSH activity on my network<br />
to begin with? Hmmm. I will tell tcpdump to forget about SSH activity<br />
between me (spider) and the remote host (fulton):<br />
# tcpdump -w tracefile not port 22 and host spider and host fulton<br />
Good idea but the syntax is all wrong. This is the correct command:<br />
# tcpdump -w tracefile not (port 22 and host spider and host fulton)<br />
We're saying to ignore anything that makes the entire contents of the<br />
parentheses true. This means packets that involve port 22 AND host<br />
spider AND host fulton will be ignored. But still, tcpdump will complain.<br />
The real final command is this:<br />
# tcpdump -w tracefile not "(port 22 and host spider and host fulton)"<br />
One big bonus is that we can specify the filtering expression in a filter file. We<br />
work with such files using the "-F" switch:
# cat > filterfile<br />
dst host spider and "(udp or proto 51)" and not "(src host daffy or src host fulton)"<br />
Ctrl-D<br />
# tcpdump -F filterfile<br />
So we can save compound filters that interest us and capture traffic with ease.<br />
By the way, the above command captures all IP traffic involving host spider as<br />
destination but not involving host daffy nor host fulton as sources. A second<br />
protocol must be either UDP or AH.<br />
4. how to display packet information<br />
The fourth and final approach at taming tcpdump is specifying how our data is to<br />
be displayed. It is important to realize that our filter (or the lack of one)<br />
determines what data is actually captured. After that, we tell tcpdump how to<br />
output that data. We have already looked at how to output certain kinds of data<br />
(subsection 2). In this section, we look at how to format that output.<br />
We can format data output in the following ways:<br />
1. "-a " -- force all name resolution (the default)<br />
2. "-n " -- remove all name resolution<br />
3. "-N " -- remove domain name resolution<br />
4. "-f " -- remove all remote host name resolution<br />
5. "-t " -- remove timestamp<br />
6. "-tt " -- no timestamp formatting (use epoch time)<br />
7. "-ttt " -- format timestamp with day and month<br />
So there's nothing spectacular here. The most we can say is that removing name<br />
resolution can speed things up. Removing timestamps also unclutters the screen<br />
quite well. I leave it up to you, dear reader, to experiment with these formatting<br />
options.<br />
Let me end with two more examples.<br />
Let's say I am working at my desk and I want to keep tabs at what bastards are<br />
bombarding my firewall with junk. I could issue the following command and take<br />
a look from time to time:<br />
# tcpdump -i tun0 -nq \<br />
not "(port 22 and host spider)" \<br />
and not "(port 53 or 80 or 110 or 119 or 443)" \<br />
and dst host 216.209.50.188<br />
on my system the interface is 'tun0'<br />
so as not to have my ssh session interfer<br />
so as not to show valid packets<br />
if this is the IP currently assigned to t<br />
What if I am interested in what my firewall is actually sending out onto the<br />
internet? I can remove some known good outgoing traffic and observe the rest<br />
(which ideally should not exist):<br />
# tcpdump -i tun0 -nq \<br />
and not port '(20 or 21 or 25 or 53 or 80 or 110 or 119 or 123 or 443)' \<br />
and not icmp \
and src host 216.209.50.188<br />
I became alarmed when I was seeing outgoing traffic to Microsoft ports 135 and<br />
445. After some frantic research I discovered that I was indeed sending<br />
responses back to internet hosts but it was due to the way my OpenBSD firewall<br />
was set up. It was resetting connections instead of allowing them to time out.
OPENVPN TUTORIAL<br />
Server (PC1) Configuration:<br />
urpmi openvpn<br />
cd /etc/openvpn/<br />
cp -r /usr/share/openvpn/easy-rsa/ /etc/openvpn/<br />
in case of self build rpm, replace the last command from above by:<br />
cp -r /usr/share/doc/openvpn-2.x.x/easy-rsa/ /etc/openvpn/<br />
Then:<br />
cp /usr/share/openvpn/sample-config-files/server.conf /etc/openvpn/<br />
or, in case of self build rpm, replace the last command from above by:<br />
cp /usr/share/doc/openvpn-2.x.x/sample-config-files/server.conf /etc/openvpn/<br />
cd /etc/openvpn/easy-rsa<br />
or, if openvpn version is >= 2.1.x:<br />
cd /etc/openvpn/easy-rsa/1.0/<br />
Now edit the /etc/openvpn/easy-rsa/vars file and set the KEY_COUNTRY,<br />
KEY_PROVINCE, KEY_CITY, KEY_ORG, and KEY_EMAIL parameters. Don't leave any<br />
of these parameters blank.<br />
Next, initialize the PKI:<br />
source vars<br />
./clean-all<br />
./build-ca<br />
Each time you need to create new keys using easy-rsa, launch the source vars<br />
command first.<br />
The ./clean-all command is to be used only the first time, because it deletes<br />
the ca and all keys.<br />
Answer to the interactive questions when building the CA and answer yes when<br />
prompted to auto sign the certificate.<br />
The above command creates a certificate of authority: /etc/openvpn/easyrsa/keys/ca.crt<br />
and /etc/openvpn/easy-rsa/keys/ca.key.<br />
Then, create a /keys/server.key:<br />
./build-key-server $SERVER<br />
replace $SERVER with the name you want to give to the server certificate.<br />
the command could be:<br />
./build-key-server server
create a client key (for PC2):<br />
./build-key client1 ( or any name other than "client1" )<br />
And create a client key to revoke ( for revocation list ):<br />
./build-key revokekey ( or any name other than "revokekey" )<br />
and run :<br />
./revoke-full revokekey<br />
This builds a /etc/openvpn/easy-rsa/keys/crl.pem file.<br />
ln keys/crl.pem /etc/openvpn/<br />
Beware, create a hardlink as shown above (ln without the -s option).<br />
OpenVPN needs to have the crl.pem file in a world readable directory because<br />
OpenVPN executes as nobody:nogroup once launched , and it checks this file on<br />
each client connection . You do not wish to set /etc/openvpn/easy-rsa/keys/ world<br />
readable.<br />
Build the Diffie-Hellman parameters for the server side:<br />
./build-dh<br />
Then edit the server configuration file and modify the following elements in<br />
/etc/openvpn/server.conf this way:<br />
(before change -->> after change)<br />
ca ca.crt -->> ca /etc/openvpn/easy-rsa/keys/ca.crt<br />
cert server.crt -->> cert /etc/openvpn/easy-rsa/keys/server.crt<br />
key server.key -->> key /etc/openvpn/easy-rsa/keys/server.key<br />
dh dhxxx.pem -->> dh /etc/openvpn/easy-rsa/keys/dhxxx.pem<br />
Replace the above /etc/openvpn/easy-rsa by the correct path (i.e<br />
/etc/openvpn/easy-rsa/1.0/ for openvpn >= 2.0).<br />
Add the following lines:<br />
# CRL (certificate revocation list) verification<br />
crl-verify /etc/openvpn/crl.pem<br />
And continue with these changes:<br />
;user nobody -->> user nobody<br />
;group nobody -->> group nogroup<br />
Don't forget to delete the : and to change nobody to nogroupin the lines just<br />
above.<br />
Save the file.
Now, you may desire to configure the server to push the routes of your lan to the<br />
client. If you have the following configuration:<br />
_________<br />
| OpenVPN |<br />
WAN(IP=81.82.83.84)---| Server |---LAN(192.168.0.X/255.255.255.0)<br />
|_________|<br />
you will configure /etc/openvpn/server.conf as follows:<br />
# Push routes to the client to allow it<br />
# to reach other private subnets behind<br />
# the server. Remember that these<br />
# private subnets will also need<br />
# to know to route the OpenVPN client<br />
# address pool (10.8.0.0/255.255.255.0)<br />
# back to the OpenVPN server.<br />
push "route 192.168.0.0 255.255.255.0"<br />
If you wish to redirect the gateway threw the vpn uncomment the following line:<br />
push "redirect-gateway"<br />
and you may also wish to push DNS and WINS servers:<br />
# Certain Windows-specific network settings<br />
# can be pushed to clients, such as DNS<br />
# or WINS server addresses. CAVEAT:<br />
# http://openvpn.net/faq.html#dhcpcaveats<br />
push "dhcp-option DNS 10.8.0.1"<br />
push "dhcp-option WINS 10.8.0.1"<br />
Also, the clients will by default only see the server. If you wish the clients to see<br />
each other, uncomment the following line:<br />
client-to-client<br />
Select a cryptographic cipher:<br />
Last but not least, default encryption is cipher BF-CBC (Blowfish 128 bits)<br />
If you wish to use another cryptographic cipher, or more then 128 bits, read the<br />
following. Otherwize if the default is OK for you, go to the next section :<br />
Configure Shorewall, or to the Client (PC2) Configuration, or back to the Table of<br />
contents.<br />
In the following section of /etc/openvpn/server.conf:<br />
# Select a cryptographic cipher.<br />
# This config item must be copied to<br />
# the client config file as well.<br />
;cipher BF-CBC # Blowfish (default)<br />
;cipher AES-128-CBC # AES<br />
;cipher DES-EDE3-CBC # Triple-DES
Leaving everything commented (as is), is identical as uncommenting the<br />
following line:<br />
cipher BF-CBC<br />
# Blowfish (default)<br />
The result is the same.<br />
But you may wish to use another type of encryption such as this one:<br />
cipher AES-256-CBC<br />
With the above line, you will the have 256-bit version of AES (Advanced<br />
Encryption Standard).<br />
When using another encryption type then the default cipher BF-CBC, you will<br />
need to set the same on the client side.<br />
To obtain a list of the different types of encryption supported by openvpn, type<br />
the following command:<br />
openvpn --show-ciphers<br />
The displayed result will look like this:<br />
The following ciphers and cipher modes are available<br />
for use with OpenVPN. Each cipher shown below may be<br />
used as a parameter to the --cipher option. The default<br />
key size is shown as well as whether or not it can be<br />
changed with the --keysize directive. Using a CBC mode<br />
is recommended.<br />
DES-CBC 64 bit default key (fixed)<br />
IDEA-CBC 128 bit default key (fixed)<br />
RC2-CBC 128 bit default key (variable)<br />
DES-EDE-CBC 128 bit default key (fixed)<br />
DES-EDE3-CBC 192 bit default key (fixed)<br />
DESX-CBC 192 bit default key (fixed)<br />
BF-CBC 128 bit default key (variable)<br />
RC2-40-CBC 40 bit default key (variable)<br />
CAST5-CBC 128 bit default key (variable)<br />
RC5-CBC 128 bit default key (variable)<br />
RC2-64-CBC 64 bit default key (variable)<br />
AES-128-CBC 128 bit default key (fixed)<br />
AES-192-CBC 192 bit default key (fixed)<br />
AES-256-CBC 256 bit default key (fixed)<br />
if you want to change the default keysize chose a cipher mode with variable key<br />
size from the list above, and do as the following example in<br />
/etc/openvpn.server.conf:<br />
cipher BF-CBC<br />
keysize 512<br />
But don't forget to set the same in the client configuration file.
Now, start the server:<br />
service openvpn start<br />
Run : ifconfig<br />
You can see a new interface tun0 : this is the vpn interface<br />
Note on pkcs#11: (you can skip this part if not interested and go to the next<br />
part: Configure Shorewall, or go back to the Table of contents).<br />
With the Beta 2.1 of OpenVPN and on a cooker or Mandriva 2007 you can<br />
generate pkcs11 certificates.<br />
2006 can work with these certitficates, but not generate them.<br />
To generate pkcs#11 certificates on a cooker or Mandriva 2007 use one of the<br />
apropriate openvpn-2.1 rpms here:<br />
RPMs<br />
And then do as follows:<br />
urpmi opensc engine_pkcs11 openct openvpn-2.1_beta14-1.i586.rpm<br />
service openct start<br />
Then :<br />
cp -r /usr/share/doc/openvpn-2.1_beta14/easy-rsa/ /etc/openvpn/<br />
cd /etc/openvpn/easy-rsa/2.0/<br />
In /etc/openvpn/easy-rsa/2.0/ edit openssl.cnf and modify this section:<br />
[ engine_section ]<br />
#<br />
# If you are using PKCS#11<br />
# Install engine_pkcs11 of opensc (www.opensc.org)<br />
# And uncomment the following<br />
# verify that dynamic_path points to the correct location<br />
#<br />
#pkcs11 = pkcs11_section<br />
[ pkcs11_section ]<br />
engine_id = pkcs11<br />
dynamic_path = /usr/lib/engines/engine_pkcs11.so<br />
MODULE_PATH = $ENV::PKCS11_MODULE_PATH<br />
PIN = $ENV::PKCS11_PIN<br />
init = 0<br />
to make it like this:<br />
[ engine_section ]<br />
#<br />
# If you are using PKCS#11<br />
# Install engine_pkcs11 of opensc (www.opensc.org)<br />
# And uncomment the following<br />
# verify that dynamic_path points to the correct location<br />
#<br />
pkcs11 = pkcs11_section
[ pkcs11_section ]<br />
engine_id = pkcs11<br />
#dynamic_path = /usr/lib/engines/engine_pkcs11.so<br />
dynamic_path = /usr/lib/openssl/engines/engine_pkcs11.so<br />
#MODULE_PATH = $ENV::PKCS11_MODULE_PATH<br />
MODULE_PATH = /usr/lib/opensc-pkcs11.so<br />
#PIN = $ENV::PKCS11_PIN<br />
init = 0<br />
Do not forget to comment out pkcs11 = pkcs11_section as shown above.<br />
Now, do as with the normal pki (as described previously), but from<br />
/etc/openvpn/easy-rsa/2.0/ instead of /etc/openvpn/easy-rsa/ or<br />
/etc/openvpn/easy-rsa/1.0/.<br />
If you wish to create a certificate directly in a usb token, use the --pkcs11 option<br />
to the easy-rsa scripts.<br />
But I'd recommend to build certificates localy, and to place the keys in the usb<br />
token manualy.<br />
To do so, do as follows:<br />
Initialise the usb token if it has not been done:<br />
pkcs15-init --erase-card -T<br />
pkcs15-init --create-pkcs15 -T<br />
pkcs15-init --store-pin --auth-id 0 --label "YourLabelToTheKey"<br />
To store a CA do as follows:<br />
pkcs15-init --store-certificate keys/ca.crt --authority --label "Mandriva CA" --id<br />
"D1:FB:AF:27:EB:B7:34:99:52:20:D2:33:19:C0:E8:69:51:7A:ED:B6" --auth-id 0<br />
In the above example, I decided to use the key's fingerprint as an id, but you can<br />
use omit this and automatic default id's will be set (i.e. id "46" is a standard).<br />
The --auth-id 0 is compulsary parameter.<br />
How did I previously read the id of my CA? Well with this command:<br />
openssl x509 -noout -text -in keys/ca.crt | less<br />
Do the same the read the other certificates ids.<br />
To store a public key do as follows:<br />
pkcs15-init --store-certificate keys/client1.crt --label "Client1" --id<br />
"DC:EF:ED:19:74:73:DA:44:B6:A4:EE:F5:8B:1F:C5:43:33:2D:1F:A0" --auth-id 0<br />
To store a private key, first store the public key as explained above, and then<br />
store the private key as follows:<br />
pkcs15-init --store-private-key keys/client1.key --public-key-label "Client1" --<br />
label "Client1 Private Key" --id<br />
"DC:EF:ED:19:74:73:DA:44:B6:A4:EE:F5:8B:1F:C5:43:33:2D:1F:A0" --auth-id 0
Important : the --id has to be the exact same as the one you used to store the<br />
client1.crt<br />
(here:DC:EF:ED:19:74:73:DA:44:B6:A4:EE:F5:8B:1F:C5:43:33:2D:1F:A0)<br />
Now, to access the key with openvpn you can use the following commands:<br />
openvpn --show-pkcs11-slots /usr/lib/opensc-pkcs11.so<br />
openvpn --show-pkcs11-objects /usr/lib/opensc-pkcs11.so 0<br />
Note this part of the output (example from my test key):<br />
You can access this token using<br />
--pkcs11-slot-type "label" --pkcs11-slot "OpenSC Card (PKyves)" options.<br />
And note also the subject for the client1 keyring. which in my example is:<br />
Object<br />
Type:<br />
Certificate<br />
CKA_ID:<br />
dc ef ed 19 74 73 da 44 b6 a4 ee f5 8b 1f c5 43<br />
33 2d 1f a0<br />
CKA_LABEL:<br />
Client1<br />
subject:<br />
/C=FR/ST=Ile-de-<br />
France/L=Paris/O=Mandriva/CN=client1/emailAddress=ybourhis@mandriva.com<br />
serialNumber: 03<br />
notBefore:<br />
060621144856Z<br />
after having noted these down, I will modifie the client's configuratin file<br />
(/etc/openvpn.client.conf) by removing the cert and key lines, and I'll replace<br />
them with what follows:<br />
pkcs11-providers /usr/lib/opensc-pkcs11.so<br />
pkcs11-slot-type "label"<br />
pkcs11-slot "OpenSC Card (PKyves)"<br />
pkcs11-id-type subject<br />
pkcs11-id "/C=FR/ST=Ile-de-<br />
France/L=Paris/O=Mandriva/CN=client1/emailAddress=ybourhis@mandriva.com"<br />
Now, each time the client is started, the PIN key will be asked before connection.<br />
Next, Configure Shorewall or go back to the Table of contents<br />
Client (PC2) Configuration:<br />
urpmi openvpn<br />
cd /etc/openvpn/<br />
cp -r /usr/share/openvpn/sample-config-files/client.conf /etc/openvpn/<br />
in case of self build rpm, replace the last command from above by:<br />
cp -r /usr/share/doc/openvpn-2.x.x/sample-config-files/client.conf /etc/openvpn/
You will need some PKI Certificates from the server.<br />
Go back to PC1(server) and type:<br />
scp /etc/openvpn/easy-rsa/keys/ca.crt user@ip:/etc/openvpn/<br />
scp /etc/openvpn/easy-rsa/keys/client1.crt root@PC2ip:/etc/openvpn/<br />
scp /etc/openvpn/easy-rsa/keys/client1.key root@PC2ip:/etc/openvpn/<br />
Where PC2ip is the client's IP.<br />
Then, Go back to PC2<br />
On PC2 (client), edit the client's /etc/openvpn/client.conf configuration file<br />
and bring the following changes:<br />
(before change -->> after change)<br />
remote server -->> remote "server ip" port ( ex: remote 192.168.1.100<br />
1194 )<br />
The default port is 1194<br />
:user nobody -->> user nobody<br />
:group nobody -->> group nogroup<br />
ca ca.crt -->> ca /etc/openvpn/ca.crt<br />
cert client1.crt -->> cert /etc/openvpn/client1.crt<br />
key client1.key -->> key /etc/openvpn/client1.key<br />
:ns-cert-type server -->> ns-cert-type server<br />
save it !<br />
Also, if you do not use the default cipher BF-CBC Blowfish 128 bits encryption,<br />
add the same as on the server side.<br />
i.e.:<br />
cipher AES-256-CBC<br />
or like this:<br />
cipher BF-CBC<br />
keysize 512<br />
Now, start the client:<br />
Service openvpn start<br />
Run : ifconfig<br />
You can see a new interface tun0 : this is the vpn interface<br />
Next, Configure Shorewall or go back to the Table of contents<br />
Shorewall Configuration:<br />
If you have shorewall installed and running, you need to allow connections to the
vpn.<br />
References : Official Shorewall Open VPN Howto<br />
First, declare the VPN zone in /etc/shorewall/zones as follows if you have<br />
shorewall 2.x.x:<br />
#ZONE DISPLAY COMMENTS<br />
vpn VPN Remote subnet<br />
Or as follows in /etc/shorewall/zones if you have shorewall 3.x.x:<br />
#ZONE TYPE OPTIONS IN OUT<br />
# OPTIONS OPTIONS<br />
vpn ipv4<br />
In /etc/shorewall/interfaces add the tun0 interface:<br />
#ZONE INTERFACE BROADCAST OPTIONS<br />
vpn tun0<br />
and define the following in /etc/shorewall/tunnels :<br />
# TYPE ZONE GATEWAY GATEWAY<br />
# ZONE<br />
generic:udp:1194 net 0.0.0.0/0 vpn<br />
You can also do the following:<br />
# TYPE ZONE GATEWAY GATEWAY<br />
# ZONE<br />
openvpn net 0.0.0.0/0 vpn<br />
But I prefer the generic:udp:1194 syntax because as you can see in<br />
/etc/openvpn/server.conf or /etc/openvpn/client.conf, you can easily define<br />
any port and protocol (udp or tcp).<br />
With the generic:udp:1194 syntax you easily reflect the server configuration.<br />
the openvpn syntax is only for the standard openvpn protocol on udp port 1194.<br />
Now edit /etc/shorewall/policy and add policies as follows:<br />
#SOURCE DEST POLICY LOG LEVEL<br />
loc vpn ACCEPT<br />
vpn loc ACCEPT<br />
Where loc is the interface to the local network.<br />
If you configure shorewall on a "Standalone" Client, you would rather do the<br />
following:<br />
#SOURCE DEST POLICY LOG LEVEL<br />
fw vpn ACCEPT<br />
vpn fw ACCEPT
Also, on the server side, the clients on the LAN will receive traffic on the<br />
LAN(i.e. 192.168.0.0/255.255.255.0) from the VPN(i.e. 10.8.0.0/255.255.255.0).<br />
But, there is no way the LAN clients will guess how to reply to<br />
10.8.0.0/255.255.255.0 unless they have the route to this network.<br />
You have 3 solutions :<br />
Reconfigure the DHCP server of your LAN to add routes to the<br />
10.8.0.0/255.255.255.0 zone, but that's not trivial.<br />
Use a Bridged server, to do so, OpenVPN also needs to be reconfigured, as<br />
described in this howto : Open-VPN Ethernet Bridging HowTo.<br />
Or the most simple way is to NAT the VPN zone to your LAN from the server. To<br />
do so, edit /etc/shorewall/masq (on the OpenVPN server) as follows:<br />
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC<br />
eth0 10.8.0.0/24<br />
This above example is supposing eth0 is on your LAN.<br />
Now, restart Shorewall :<br />
service shorewall restart<br />
Back to the Table of contents<br />
PAM Authentication with Open VPN<br />
References : Using alternative authentication methods with Open VPN<br />
You may which to add PAM authentication to Open VPN.<br />
To do so, add the following in /etc/openvpn/server.conf :<br />
# tell the OpenVPN server to validate the username/password<br />
# entered by clients using the login PAM module<br />
plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login<br />
Create the users and give each one a password:<br />
useradd client1 -M -s /bin/false<br />
passwd client1<br />
Changing password for user client1.<br />
New UNIX password:<br />
Retype new UNIX password:<br />
passwd: all authentication tokens updated successfully.<br />
The -M option of useradd is to create no /home/client1 directory. The -s<br />
/bin/false is to give no shell to the user on the server for security reasons<br />
because we only want to have PAM checking the login and password, and that is<br />
all.<br />
Restart the server:
service openvpn restart<br />
Then, the client must also prompt for the user login and password. To do so, add<br />
the following in /etc/openvpn/client.conf :<br />
# This will direct the OpenVPN client to query the user for a username/password,<br />
# passing it on to the server over the secure TLS channel:<br />
auth-user-pass<br />
Restart the Client:<br />
service openvpn restart<br />
Type your login and password when prompted to do so.<br />
Each time you start the client, you will be prompted for a login and password. So<br />
you may wish to launch it manually instead of at boot time.<br />
To see if it is launched at boot type the following :<br />
chkconfig --list openvpn<br />
If you see this :<br />
openvpn 0:off 1:off 2:on 3:on 4:on 5:on 6:off<br />
run :<br />
chkconfig openvpn off<br />
If you see this:<br />
openvpn 0:off 1:off 2:off 3:off 4:off 5:off 6:off<br />
You have nothing to do.<br />
To then launch the client run:<br />
service openvpn start<br />
and stop it with:<br />
service openvpn stop<br />
ALSO, you may have multiple clients, in which case you will want to launch only<br />
specific ones manually and the others at boot time.<br />
To do so, run :<br />
chkconfig openvpn on<br />
And change the .conf extension to something else such as .config.<br />
OpenVPN's init script only launches whatever ends by .conf and which is in<br />
/etc/openvpn.<br />
To manually launch a client you will need to type this kind of command:<br />
openvpn --daemon --config /etc/openvpn/clientconf.config
Where /etc/openvpn/clientconf.config is the name you gave to the client file but it<br />
can be something else.<br />
To stop the client, list on which PID it is runing:<br />
ps ax<br />
25305 ? S
where $USER is your username on the machine), create a file (i.e. call it<br />
rpmsetup)and paste this script in it : RPM Setup Script (for i586 arch).<br />
Make it executable:<br />
chmod a+x rpmsetup<br />
And launch it:<br />
./rpmsetup<br />
Then, download the OpenVPN tarball and the GnuPG signaturehere :<br />
http://openvpn.net/download.html<br />
Import James Yonan's (OpenVPN Author) signature:<br />
gpg --recv-keys 1FBF51F3<br />
Verify the package:<br />
gpg --verify openvpn-2.1_beta14.tar.gz.asc<br />
(replace openvpn-2.1_beta14.tar.gz.asc by the version you are testing)<br />
extract the tarball:<br />
tar -xvzf openvpn-2.1_beta14.tar.gz<br />
modify the openvpn-2.1_beta14/openvpn.spec file and when you see:<br />
%if "%{_vendor}" == "MandrakeSoft"<br />
%{!?without_lzo:BuildRequires: liblzo1-devel >= 1.07}<br />
%{!?without_lzo:Requires: liblzo1 >= 1.07}<br />
%else<br />
%{!?without_lzo:BuildRequires: lzo-devel >= 1.07}<br />
%{!?without_lzo:Requires: lzo >= 1.07}<br />
add requires for the Mandriva distribution this way:<br />
%if "%{_vendor}" == "MandakeSoft"<br />
%{!?without_lzo:BuildRequires: liblzo1-devel >= 1.07}<br />
%{!?without_lzo:Requires: liblzo1 >= 1.07}<br />
%else<br />
%if "%{_vendor}" == "Mandriva"<br />
%{!?without_lzo:BuildRequires: liblzo2_2-devel >= 2.01}<br />
%{!?without_lzo:Requires: liblzo2_2 >= 2.01}<br />
%else<br />
%{!?without_lzo:BuildRequires: lzo-devel >= 1.07}<br />
%{!?without_lzo:Requires: lzo >= 1.07}<br />
create a new tarball with the modifications:<br />
mv openvpn-2.1_beta14.tar.gz openvpn-2.1_beta14.tar.gz.orig<br />
tar -cvzf openvpn-2.1_beta14.tar.gz openvpn-2.1_beta14<br />
and finally build your rpm (as a user):<br />
rpmbuild -tb openvpn-2.1_beta14.tar.gz
Eventually install (as root) the missing dependencies and relaunch (as a user) the<br />
rpmbuild.<br />
You will find your new rpm in /home/$USER/rpm/RPMS/i586/ (i.e. openvpn-<br />
2.1_beta14-1.i586.rpm) and now you just need to distribute it to the other<br />
machines for testing.
NOTAS DE AULAS<br />
<strong>CRIPTOGRAFIA</strong><br />
Existem diversos campos a serem estudados para garantir a segurança de uma<br />
rede.<br />
O ítem abordado no momento trata da confidencialidade da informação,<br />
abordando o tema da criptografia..<br />
A Criptografia também conhecido como CIFRAGEM converte dados legíveis em<br />
algo sem sentido, com a capacidade de recuperar os dados originais<br />
(DECIFRAGEM) a partir des dados sem sentido.<br />
A criptografia tem, fundamentalmente, quatro objetivos básicos:<br />
a)confidencialidade da mensagem: só o destinatário autorizado deve ser capaz de<br />
extrair o conteúdo da mensagem da sua forma encriptada. Além disso, a<br />
obtenção de informações sobre o conteúdo da mensagem (como uma distribuição<br />
estatística de certos caracteres) não deve ser possível, uma vez que, se o for, se<br />
torna mais fácil à análise criptográfica;<br />
b)integridade da mensagem: o destinatário deverá ser capaz de determinar se a<br />
mensagem foi alterada durante a transmissão;<br />
c)autenticação do remetente: o destinatário deverá ser capaz de identificar o<br />
remetente e verificar que foi mesmo ele quem enviou a mensagem;<br />
d)não-repúdio do remetente: não deverá ser possível ao remetente negar o envio<br />
da mensagem.<br />
Proporciona confidencialidade (garantir que apenas quem autorizado pode ler os<br />
dados) e a autenticação/integridade (garantir que os dados têm a origem<br />
correcta e que não foram alterados entre origem e destino).<br />
Não existem mecanismos de cifragem/decifragem 100% eficazes, numa<br />
abordagem puramente teórica é imediato que qualquer chave pode ser quebrada<br />
pela força bruta (supondo que dispõe de um exemplar de uma mesma mensagem<br />
original e cifrada, e o algoritmo é conhecido, basta tentar com todas as chaves<br />
possíveis até acertar).<br />
A solução é entrar no dominio prático e atender às capacidades do equipamento<br />
de processamento actual de modo a usar algoritmos e chaves que não possam<br />
ser descobertas em tempo útil. O tempo necessário para quebrar uma chave pela<br />
"força bruta" depende do número de chaves possiveis (número de bits da chave)<br />
e do tempo de execução do algoritmo.<br />
Por exemplo:
abcdefghijklmnopqrstuvxz<br />
Foi muito bom conhecer o professor de matematica.<br />
gpj nvjup cpn dpmifdfs p qspgfttps ef nbufnbujdb.<br />
A mensagem original é modificado utilizando um algoritmo que é aplicado sobre<br />
esta mensagem.<br />
Alguns jargões:<br />
* algoritmo - Conjunto de passos para atingir um objetivo.<br />
* crifagem (criptografar, codificar, encriptar) - Converte qualquer informações<br />
sigilosas em algo sem sentido<br />
* decifragem (decodificar, desencriptar, decriptografar) - Caminho contrário<br />
* chave de criptografia - informação que modifica o comportamento de um<br />
algoritmo<br />
* texto claro - Arquivo que observado a olho nu, faz algum sentido<br />
* texto cifrado - Arquivo que observado a olho nu, não faz qualquer sentido. Um<br />
algoritmo utiliza uma chave transformar um texto simples em um texto cifrado.<br />
* Algoritmo forte - Algoritmos que suportam um ataque o maior tempo possível.<br />
Quando o algoritmo for quebrado, a informação já não tem tanto valor.<br />
* Invasor - Alguém do qual voce quer proteger suas informações<br />
* Criptoanalista- Estudo sobre a quebra de sistemas criptográficos, isto é,<br />
procura fraquesas dos algoritmos<br />
* Criptógrafo - Desenvolve sistemas de criptografia.<br />
CHAVE DE <strong>CRIPTOGRAFIA</strong> (CHAVE DE SESSÃO).<br />
Um algoritmo sempre produz o mesmo resultado. Uma vez descoberto o<br />
algortimo, o segredo também está descoberto. Desta forma é necessário que o<br />
algoritmo seja mantido em sigilo. Sabemos que é difícil manter em segredo um<br />
algoritmo. Mesmo que não seja divulgado este algoritmo, muitos Hackers de<br />
Plantão podem utilizar a engenharia reversa (analisa o codigo executável) para<br />
obter o fonte) para obter este algoritmo.<br />
O algoritmo utilizado no exemplo acima é substitui uma letra por outra. Neste<br />
caso, a letra que foi substituida corresponde a letra seguinte.<br />
O algortimo é relativamente simples. Se alguem descobrir o funcionamento do<br />
algoritmo, então poderá decifrar qualquer texto que foi criptografado com este<br />
algoritmo.<br />
Por mais tentemos manter o algoritmo sob sigilo, alguém pode utilizar a<br />
engenharia reversa a partir de um código executável para montar o algoritmo. É<br />
muito dificil manter o sigilo de um algoritmo, por isso normalmente o algoritimo<br />
é público e o tempo de vida de um algoritmo depende do tamanho de sua chave.
Podemos melhorar o algoritmo. Em vez de simplesmente substituir o caracter<br />
por um adiante, podemos colocar um parametro (um valor númerico de tre<br />
digitos) para o algoritmo para que o resultado da substituição seja diferente<br />
dependendo do parametro passado.<br />
Por exemplo.<br />
Se passarmos o valor 1 para o algoritmo, o caracter atual ser substituido por um<br />
adiante (a por b, b por c e assim sucessivamente). Se passarmos o valor dois<br />
então o caracter atual será substituido por dois caracteres adiante. (a por c, b<br />
por d, c por e e assim sucessivamente). Desta forma, o mesmo algoritmo nunca<br />
produzirá a mesma saída partindo de uma mesma entrada com diferentes<br />
parametros passados.<br />
abcdefghijklmnopqrstuvxz<br />
Foi muito bom conhecer o professor de matematica.<br />
gpj nvjup cpn dpmifdfs p qspgfttps ef nbufnbujdb. (com o parametro 1).<br />
hqk oxkvq dqm eqnjgegt q rtqhguuqt fg ocvgocvkec. (com o parametro 2).<br />
O algoritmo funciona da mesma forma porém produz diferentes resultados<br />
conforme o parametros passado.<br />
Este parametro é conhecido como chave de criptografia para o algortimo cripto<br />
(nome de batismo inventado por mim).<br />
Logicamente se descobrirem como funciona o algoritmo é fácil descobrir a<br />
chave. Basta fazer um loop de 1 ate 999 e ir executando o algoritmo com cada<br />
valor.<br />
Ou ainda podemos utilizar valores aleatorios entre 1 e 999 para tentar descobrir<br />
o valor da chave. Com certeza vamos acabar descobrindo a chave.<br />
Esta forma de descobrir a chave é chamado de força bruta. Você vai testando<br />
todas as chaves possíveis até descobrir a verdadeira.<br />
Se o algoritmo utilizar chaves de tamanho pequeno como no nosso caso (10 bits)<br />
é fácil gerar todas as combinações possíveis e testar cada chave dentro de um<br />
período de tempo razoável. Este processo é relativamente rápido se for no nosso<br />
caso.<br />
A força de um algortimo está no tamanho de sua chave.<br />
Algoritmos que utilizam chaves grandes podem dificultar a geração de uma<br />
chave dentro de um período de tempo razoável.<br />
Uma chave com 128 bits podem gerar<br />
340282366920938463463374607431768211456 chaves.<br />
uma chave com 256 bits podem gerar
11579208923731619542357098500868790785326998466564056403945758400<br />
7913129639936 chaves.<br />
A medida que o tamanho da chave aumenta, o número de chaves geradas<br />
também aumentam, dificultando ainda mais a geração das chaves.<br />
Além do método de força bruta, existem outras variantes, como por exemplo um<br />
dicionário.<br />
Normalmente os algoritmos são publicos.<br />
Uma vez que o texto foi cifrado com uma chave, é necessário utilizar a mesma<br />
chave para obter o texto original. Este método de cifragem é conhecido como<br />
cifragem com chave simétrica. Se a chave for perdida, não será mais possível<br />
obter o texto original, a não ser que seja utiliza o metodo de força bruta ou outro<br />
método.<br />
Utilizamos a cifragem para enviar mensagem entre dois pontos para evitar que a<br />
informação seja interceptada.<br />
Assim, é necessário que o emissor e o receptor conheçam a chave de cifragem,<br />
Este conhecimento pode ser realizado através de um encontrol formal ou através<br />
de um telefonema, ou até mesmo através de uma correspondencia. O problema<br />
existirá se alguem ouvir ou interceptar esta mensagem.<br />
GERENCIAMENTO DA CHAVE DE SESSÃO.<br />
A chave utilizada para cifrar a informação é chamado de chave de sessão.<br />
Uma vez descoberto esta chave, a confidencialidade está comprometida.<br />
Para proteger esta chave podemos utilizar o conceito de Chave de criptografia da<br />
chave (KEK).<br />
A ídéia básica é utilizar uma outra chave para cifrar a chave de sessão. O usuário<br />
informa uma chave e utiliza um gerador de chave aleatória (PRNG). Este dois são<br />
mesclados por um procedimento que irá gerar uma chave. Esta chave será<br />
utilizado para cifrar a chave de sessão. Após a cifragem, a chave pode ser<br />
descartada. O que deve ser mantido é a chave original e o numero gerado pelo<br />
PRNG. A partir destes dois elementos podemos gerar a chave que foi utilizar<br />
para cifrar a chave original.<br />
Podemos utilizar também outros meios, como token e outros meios de<br />
armazenamento.<br />
Quando dois elementos necessitam conhecer a chave de cifragem, basta<br />
comunicar através de email, telefone ou pessoalmente. O problema aumenta<br />
quando o número de pessoas envolvidas no processo aumentam rapidamente, e<br />
também quando a chave possui uma validade por um curto período de tempo.<br />
Quando for necessário alterar ou informar a chave a todos, podemos convocar<br />
todos para um grande churrasco e aproveitar o momento para confraternização.
TIPOS DE CIFRAGEM.<br />
Cifragem por Bloco.(Ver texto abaixo)<br />
Cifragem por Fluxo.(Ver texto abaixo)<br />
Variantes da cifragem de Bloco.<br />
ECB - Eletronic Code Book<br />
CBC - CIPHER-BLOCK CHAINING<br />
PCBC - PROPAGATING CIPHER-BLOCK CHAINING.<br />
Qual é melhor ?<br />
Não existe o termo melhor.<br />
- A implementação do algoritmo de cifragem por fluxo é mais simples (30 linhas<br />
de código) do que a cifragem de blocos (centenas de linhas de código).<br />
- A cifragem por fluxo é mais rápida que a cifragem de blocos.<br />
- A cifragem de blocos permite a reutilização de chaves, a cifragem de fluxo não<br />
permite (?????).<br />
- Padronização. Todo mundo utiliza dois algoritmos DES e AES<br />
Algoritmos de chave Simétrica.<br />
DES - Data Encription Standard<br />
- Desenvolvido pela IBM em Maio de 1973 sob no nome de Lucifer e depois<br />
padronizado sob no nome de DES.<br />
- Utiliza chave de 56 bits em blocos de 64 bits.<br />
- Objetivo é dificultar a obtencao da chave de cifragem embora o algoritmos seja<br />
publico.<br />
- Evolucao: 3DES e DESX<br />
- Outros algortimos RC2 e RC4 (ambos da RSA)<br />
- Cifragem por bloco<br />
IDEA - International Data Encription Algoritm<br />
- Desenvolvido Zurique (Suiça) em 1990<br />
- Possui chave de 128 bits.<br />
RC2 -<br />
- Desenvolvido por Ronald Rivest<br />
- Mantido em segredo pela RSA.<br />
- Em 1996 foi revelado por uma mensagem anonima na USENET<br />
- Utiliza chave de 1 a 2048 bits<br />
RC4<br />
- Inventado em 1987 pelas RSA.<br />
- Algoritmo de cifragem de fluxo<br />
- O algoritmo nunca foi divulgado
- Já foi quebrado<br />
- É muito utilizado hoje em dia<br />
- Faz parte do protocolo SSL.<br />
RC5<br />
- Inventado em 1994 pelA RSA.<br />
- Permite que o tamanho da chave, o tamanho do bloco de dados e o número de<br />
vezes que a criptografia será realizada seja definida pelo usuário.<br />
BLOWFISH<br />
- Algoritmo de criptografia em bloco, rápido, compacto e simples<br />
- Permite criptografia com chave variável de até 448 bits<br />
- Dominio publico.<br />
AES<br />
- Enfraquecimento do DES provocou a chamada mundial para busca de um novo<br />
algoritmo de cifragem<br />
- Novo algoritmo deve ter:<br />
. cifrador de chave simétrica mais rapido e mais forte que o 3DES<br />
. utilizar chaves de 128, 192 e 256 bits<br />
. ser de dominio publico<br />
. possuir vida útil de 20 a 30 anos.<br />
- Em 1999 ficaram 5 algoritmos: MARS, RC6, Rijndel, Serpente e Twofish.<br />
- Em 2000 Rijndel foi declarado novo padrão de criptografia.<br />
- Cifragem por bloco<br />
Algoritmos de chave Assimétrica.<br />
Na criptografia assimétrica, as chaves são pares de uma combinação de ?chave<br />
privada? e ?chaves públicas?. A parte pública da chave pode ser distribuída de<br />
uma forma realmente pública, sem comprometer a parte privada, que deve ser<br />
mantida em segredo pelo seu proprietário. Uma encriptação feita com uma chave<br />
pública pode somente ser desfeita através da chave privada correspondente.<br />
O algoritmo de cifragem por chave publico/privada, utiliza relação matemática<br />
entre dois números primos.<br />
Apesar da forte seguranca que existe neste algoritmo, o problema é a troca de<br />
chave entre os computadores que desejam utilizar este algoritmo.<br />
Se alguem interceptar a comunicacao durante a troca de chave então toda<br />
seguranca estaria comprometida.<br />
Algumas solucões foram apresentadas para o problema de troca de chave. Foram<br />
desenvolvidos algoritmos assimétricos, que recebem este nome por utilizarem<br />
duas chaves distintas: uma para cifragem e outra para decifragem.<br />
- Utilizam chaves distintas para cifragem (A) e decifragem (B)<br />
- Mensagens cifradas com uma chave A, só podem ser decifrados com um chave<br />
(B)
- A descoberta de uma chave deve ser inviável mesmo conhecendo a outra<br />
- Por padrão, após a geraçao das duas chaves, uma é chamada de publica e outra<br />
de privada<br />
- A chave pública é distribuida para todos que desejam enviar uma mensagem<br />
segura para o proprietario gerador da chave.<br />
- Após a cifragem do texto, este somente pode ser decifrado com a respectiva<br />
chave privada.<br />
- A chave privada é guardada com a maior segurança possível e nunca é<br />
distribuída a ninguem.<br />
- A chave publica é derivada da chave privada.<br />
- A chave publica é distribuida a todos que querem enviar uma mensagem para o<br />
proprietário da chave.<br />
- A chave privada é mantida sob sigilo<br />
- O algoritmo mais utilizado é o RSA.<br />
Considerando que o usuário A necessita enviar uma mensagem para B utilizando<br />
o algoritmo de chave publica/privado. Neste caso, A possui o seu par de chaves e<br />
B possui outro para de chaves. O usuário A deve possuir a chave publica de B e<br />
este deve possuir a chave publica de A.<br />
O usuário utiliza a chave publica de B para cifrar a mensagem a ser enviada.<br />
Quando o usuário B receber a mensagem, deve utilizar a sua chave privada para<br />
decifrar a mensagem. Caso queira enviar uma resposta para o remetente, deverá<br />
utilizar a chave publica de A para cifrar a mensagem, e este deverá utilizar a sua<br />
chave privada para decifrar a resposta.<br />
Se alguem conseguir obter a chave privada de alguma das partes, todo processo<br />
de comunicação estará comprometido.<br />
ALGORITMOS DE CHAVE ASSIMÉTRICA:<br />
Diffie-Hellman<br />
- Não né um algoritmo de criptografia<br />
- Sistema para troca de chaves entre duas partes<br />
ElGamal<br />
- É um sistema criptográfico baseado no protocolo de troca de chaves de Diffie-<br />
Hellman<br />
- Utilizado para cifrar mensagens e servir de base para assinatura digital<br />
DSS - Digital Signature Standard - Padrão de Assinatura Digital<br />
- Desenvolvido pela NSA (Agencia nacional de segurança)<br />
- Baseado no algoritmo DSA (Digital Signature Algorithm)<br />
- Permite a utilização de qualquer tamanho de chave<br />
RSA (Ronv Rivest, Adi Shamir, Leonard Adleman) .<br />
- O mais popular algoritmo de criptografia com chave simétrica
- O mais fácil de implementar e compreender<br />
- Utiliza criptografia em bloco<br />
- Necessário alto poder computacional para quebrar a chave<br />
- Nunca foi aprovado e nem reprovado pelos criptologistas<br />
- Quando implementado em Hardware ele é 1000 vezes mais lento que o DES<br />
- Em software o DES é 100 vezes mais rápido que ele<br />
- Chave de qualquer tamanho dependendo da implementação.<br />
Assim, as principais vantagens da criptografia simétrica são:<br />
a)velocidade, pois os algoritmos são muito rápidos, permitindo cifrar uma grande<br />
quantidade de dados em pouco tempo;<br />
b)as chaves são relativamente pequenas e relativamente simples, permitindo<br />
gerar cifradores extremamente robustos;<br />
c)atinge aos objetivos de confidencialidade e de privacidade, mantendo os dados<br />
seguros.<br />
Enquanto desvantagens, pode-se citar:<br />
a)a chave secreta deve ser compartilhada, o que pode complicar a gerência de<br />
chaves;<br />
b)não permite autenticação do remetente, uma vez que qualquer pessoa poderá<br />
enviar uma mensagem criptografada com qualquer chave que esteja em seu<br />
domínio;<br />
c)não permite o não-repúdio do remetente, o que é decorrência direta do item<br />
anterior.<br />
Pode-se dizer que as principais vantagens da criptografia assimétrica são:<br />
a)a chave secreta não é compartilhada, uma vez que basta a chave pública ? de<br />
conhecimento geral ? para a troca segura de mensagens;<br />
b)provê autenticação, já que é possível validar assinatura com a chave privada<br />
através da chave pública, partindo-se do princípio que a chave privada não foi<br />
distribuída (uma vez que isso não é necessário) para ninguém;<br />
c)permite o não-repúdio, pois é possível verificar as chaves;<br />
d)é escalável, possibilitando que exista uma hierarquia de controle e distribuição<br />
de chaves, que pode ser facilmente ampliada.<br />
Em contrapartida, existem pelo menos duas grandes desvantagens:<br />
a)é lenta, pois os algoritmos, pela sua natureza matemática, são<br />
computacionalmente intensivos;<br />
b)requer uma autoridade de certificação, para que se possa garantir a identidade<br />
e ter-se chaves públicas confiáveis.<br />
A criptografia assimétrica não substitui a criptografia simétrica. O que importa é<br />
reconhecer e identificar as limitações de cada método, de forma a usá-los de uma<br />
maneira complementar para prover a segurança necessárias às partes<br />
envolvidas.<br />
UNINDO A <strong>CRIPTOGRAFIA</strong> SIMÉTRICA À ASSIMÉTRICA
Uma vez que os algoritmos simétricos são mais rápidos e, dessa forma, mais<br />
propícios à cifragem de grandes volumes de informação e os esquemas<br />
assimétricos de criptografia são mais apropriados para distribuir chaves e<br />
garantir autenticação e não-repúdio, pode-se, através de uma combinação das<br />
duas técnicas, distribuir grandes volumes de informações criptografados com<br />
chaves simétricas e, estas por sua vez, distribuídas com criptografia de chaves<br />
públicas.