23.11.2014 Views

CRIPTOGRAFIA - FESP

CRIPTOGRAFIA - FESP

CRIPTOGRAFIA - FESP

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!