Changeset View
Changeset View
Standalone View
Standalone View
head/pt_BR.ISO8859-1/articles/ipsec-must/article.xml
Property | Old Value | New Value |
---|---|---|
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
svn:mime-type | null | text/xml; charset=UTF-8 \ No newline at end of property |
<?xml version="1.0" encoding="utf-8"?> | |||||
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN" "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd"> | |||||
<!-- | |||||
The FreeBSD Documentation Project | |||||
$FreeBSD$ | |||||
--> | |||||
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.0" xml:lang="pt_BR"> | |||||
<info><title>Verificação Independente da Funcionalidade IPsec no FreeBSD</title> | |||||
<author><personname><firstname>David</firstname><surname>Honig</surname></personname><affiliation> <address><email>honig@sprynet.com</email></address> </affiliation></author> | |||||
<pubdate>1999-05-03</pubdate> | |||||
<legalnotice xml:id="trademarks" role="trademarks"> | |||||
<para>FreeBSD is a registered trademark of the FreeBSD Foundation.</para> | |||||
<para>Motif, OSF/1, and UNIX are registered trademarks and IT DialTone and The Open Group are trademarks of The Open Group in the United States and other countries.</para> | |||||
<para>Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the <quote>™</quote> or the <quote>®</quote> symbol.</para> | |||||
</legalnotice> | |||||
<releaseinfo>$FreeBSD$</releaseinfo> | |||||
<abstract> | |||||
<para>Você instalou o IPsec e ele parece estar funcionando. Como você sabe? Eu descrevo um método para verificar experimentalmente se o IPsec está funcionando.</para> | |||||
</abstract> | |||||
</info> | |||||
<sect1 xml:id="problem"> | |||||
<title>O problema</title> | |||||
<para>Primeiro, vamos assumir que você tem o <link linkend="ipsec-install"><emphasis>IPsec</emphasis> instalado </link>. Como você sabe que ele está <link linkend="caveat">funcionando</link>? Claro, sua conexão não funcionará se ele estiver mal configurado, e funcionará quando você finalmente acertar a configuração. O <citerefentry> <refentrytitle>netstat</refentrytitle><manvolnum>1</manvolnum></citerefentry>irá listá-lo. Mas você pode confirmar isso de forma independente?</para> | |||||
</sect1> | |||||
<sect1 xml:id="solution"> | |||||
<title>A solução</title> | |||||
<para>Em primeiro lugar, vejamos alguma informação teórica relevante em relação à criptografia:</para> | |||||
<orderedlist> | |||||
<listitem> | |||||
<para>Dados criptografados são uniformemente distribuídos, ou seja, possuem entropia máxima por símbolo;</para> | |||||
</listitem> | |||||
<listitem> | |||||
<para>Os dados brutos, não comprimidos são tipicamente redundantes, isto é, possuem entropia submáxima.</para> | |||||
</listitem> | |||||
</orderedlist> | |||||
<para>Suponha que você possa medir a entropia dos dados destinados para a sua interface de rede e também dos dados originados dela. Então você pode ver a diferença entre dados não criptografados e dados criptografados. Isso seria verdade mesmo que alguns dos dados no <quote>modo criptografado</quote> não estivessem criptografados --- como deve o cabeçalho IP mais externo para que o pacote seja roteável.</para> | |||||
<sect2 xml:id="MUST"> | |||||
<title>MUST</title> | |||||
<para xml:lang="en">Ueli Maurer's <quote>Universal Statistical Test for Random | |||||
Bit Generators</quote>(<link xlink:href="https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf"> | |||||
<acronym>MUST</acronym></link>) quickly measures the entropy | |||||
of a sample. It uses a compression-like algorithm. <link linkend="code">The code is given below</link> for a variant | |||||
which measures successive (~quarter megabyte) chunks of a | |||||
file.</para> | |||||
</sect2> | |||||
<sect2 xml:id="tcpdump"> | |||||
<title>Tcpdump</title> | |||||
<para>Também precisamos de uma maneira de capturar os dados brutos da rede. Um programa chamado <citerefentry><refentrytitle>tcpdump</refentrytitle> <manvolnum>1</manvolnum></citerefentry> permite que você faça isso, se você ativou a interface <emphasis>Berkeley Packet Filter</emphasis> no seu <link linkend="kernel">arquivo de configuração do kernel</link>.</para> | |||||
<para>O comando:</para> | |||||
<screen><userinput>tcpdump -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput></screen> | |||||
<para>irá capturar 4000 pacotes brutos no arquivo <replaceable>dumpfile.bin</replaceable>. Até 10.000 bytes por pacote serão capturados neste exemplo.</para> | |||||
</sect2> | |||||
</sect1> | |||||
<sect1 xml:id="experiment"> | |||||
<title>O Experimento</title> | |||||
<para>Aqui está o experimento:</para> | |||||
<procedure> | |||||
<step> | |||||
<para>Abra uma janela para um host IPsec e outra janela para um host inseguro.</para> | |||||
</step> | |||||
<step> | |||||
<para>Agora comece a <link linkend="tcpdump">capturar os pacotes</link>.</para> | |||||
</step> | |||||
<step> | |||||
<para>Na janela <quote>segura</quote>, execute o comando <trademark class="registered">UNIX</trademark> <citerefentry><refentrytitle>yes</refentrytitle><manvolnum>1</manvolnum></citerefentry>, que transmitirá o caractere <literal>y</literal>. Depois de um tempo, pare com isso. Alterne para a janela insegura e repita. Depois de um tempo, pare.</para> | |||||
</step> | |||||
<step> | |||||
<para>Agora execute o <link linkend="code">MUST</link> nos pacotes capturados. Você deve ver algo como o seguinte. O importante é notar que a conexão segura tem 93% (6,7) do valor esperado (7,18), e a conexão <quote>normal</quote> tem 29% (2,1) do valor esperado.</para> | |||||
<screen><prompt>%</prompt> <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput> | |||||
<prompt>%</prompt> <userinput>uliscan <replaceable>ipsecdemo.bin</replaceable></userinput> | |||||
Uliscan 21 Dec 98 | |||||
L=8 256 258560 | |||||
Measuring file ipsecdemo.bin | |||||
Init done | |||||
Expected value for L=8 is 7.1836656 | |||||
6.9396 -------------------------------------------------------- | |||||
6.6177 ----------------------------------------------------- | |||||
6.4100 --------------------------------------------------- | |||||
2.1101 ----------------- | |||||
2.0838 ----------------- | |||||
2.0983 -----------------</screen> | |||||
</step> | |||||
</procedure> | |||||
</sect1> | |||||
<sect1 xml:id="caveat"> | |||||
<title>Embargo</title> | |||||
<para>Esta experiência mostra que o IPsec <emphasis>parece</emphasis> estar distribuindo os dados de carga <emphasis>uniformemente</emphasis>, como a criptografia deveria. No entanto, o experimento descrito aqui <emphasis>não pode</emphasis> detectar muitas das falhas possíveis em um sistema (nenhum dos quais eu tenho qualquer evidência para). Estes incluem geração ou troca deficiente de chaves, dados ou chaves sendo visíveis para outros, uso de algoritmos fracos, subversão do kernel, etc. Estude a fonte; conheça o código.</para> | |||||
</sect1> | |||||
<sect1 xml:id="IPsec"> | |||||
<title>IPsec --- Definição</title> | |||||
<para>Extensões de segurança do protocolo Internet para o IPv4; obrigatório para o IPv6. Um protocolo para negociar criptografia e autenticação no nível IP (host para host). O SSL protege apenas um soquete de aplicativo; O <application>SSH</application> protege apenas um login;<application>PGP</application> protege apenas um arquivo ou mensagem especifico. O IPsec criptografa tudo entre dois hosts.</para> | |||||
</sect1> | |||||
<sect1 xml:id="ipsec-install"> | |||||
<title>Instalando o IPsec</title> | |||||
<para>A maioria das versões modernas do FreeBSD tem suporte a IPsec em sua fonte base. Portanto, você precisará incluir a opção <option>IPSEC</option> em sua configuração de kernel e, após a reconstrução e reinstalação do kernel, configurar as conexões IPsec usando o comando <citerefentry><refentrytitle>setkey</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para> | |||||
<para>Um guia completo sobre como executar o IPsec no FreeBSD é fornecido no <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ipsec.html">Handbook do FreeBSD</link>.</para> | |||||
</sect1> | |||||
<sect1 xml:id="kernel"> | |||||
<title>src/sys/i386/conf/KERNELNAME</title> | |||||
<para>Isto precisa estar presente no arquivo de configuração do kernel para habilitar o suporte para captura de dados de rede com o <citerefentry><refentrytitle>tcpdump</refentrytitle> <manvolnum>1</manvolnum></citerefentry>. Certifique-se de executar o <citerefentry><refentrytitle>config</refentrytitle><manvolnum>8</manvolnum> </citerefentry> depois de adicionar a linha, de recompilar e de reinstalar.</para> | |||||
<programlisting>device bpf</programlisting> | |||||
</sect1> | |||||
<sect1 xml:id="code"> | |||||
<title>Teste Estatístico Universal de Maurer (para tamanho de bloco = 8 bits)</title> | |||||
<para xml:lang="en">You can find the same code at <link xlink:href="https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt"> | |||||
this link</link>.</para> | |||||
<programlisting>/* | |||||
ULISCAN.c ---blocksize of 8 | |||||
1 Oct 98 | |||||
1 Dec 98 | |||||
21 Dec 98 uliscan.c derived from ueli8.c | |||||
This version has // comments removed for Sun cc | |||||
This implements Ueli M Maurer's "Universal Statistical Test for Random | |||||
Bit Generators" using L=8 | |||||
Accepts a filename on the command line; writes its results, with other | |||||
info, to stdout. | |||||
Handles input file exhaustion gracefully. | |||||
Ref: J. Cryptology v 5 no 2, 1992 pp 89-105 | |||||
also on the web somewhere, which is where I found it. | |||||
-David Honig | |||||
honig@sprynet.com | |||||
Usage: | |||||
ULISCAN filename | |||||
outputs to stdout | |||||
*/ | |||||
#define L 8 | |||||
#define V (1<<L) | |||||
#define Q (10*V) | |||||
#define K (100 *Q) | |||||
#define MAXSAMP (Q + K) | |||||
#include <stdio.h> | |||||
#include <math.h> | |||||
int main(argc, argv) | |||||
int argc; | |||||
char **argv; | |||||
{ | |||||
FILE *fptr; | |||||
int i,j; | |||||
int b, c; | |||||
int table[V]; | |||||
double sum = 0.0; | |||||
int iproduct = 1; | |||||
int run; | |||||
extern double log(/* double x */); | |||||
printf("Uliscan 21 Dec 98 \nL=%d %d %d \n", L, V, MAXSAMP); | |||||
if (argc < 2) { | |||||
printf("Usage: Uliscan filename\n"); | |||||
exit(-1); | |||||
} else { | |||||
printf("Measuring file %s\n", argv[1]); | |||||
} | |||||
fptr = fopen(argv[1],"rb"); | |||||
if (fptr == NULL) { | |||||
printf("Can't find %s\n", argv[1]); | |||||
exit(-1); | |||||
} | |||||
for (i = 0; i < V; i++) { | |||||
table[i] = 0; | |||||
} | |||||
for (i = 0; i < Q; i++) { | |||||
b = fgetc(fptr); | |||||
table[b] = i; | |||||
} | |||||
printf("Init done\n"); | |||||
printf("Expected value for L=8 is 7.1836656\n"); | |||||
run = 1; | |||||
while (run) { | |||||
sum = 0.0; | |||||
iproduct = 1; | |||||
if (run) | |||||
for (i = Q; run && i < Q + K; i++) { | |||||
j = i; | |||||
b = fgetc(fptr); | |||||
if (b < 0) | |||||
run = 0; | |||||
if (run) { | |||||
if (table[b] > j) | |||||
j += K; | |||||
sum += log((double)(j-table[b])); | |||||
table[b] = i; | |||||
} | |||||
} | |||||
if (!run) | |||||
printf("Premature end of file; read %d blocks.\n", i - Q); | |||||
sum = (sum/((double)(i - Q))) / log(2.0); | |||||
printf("%4.4f ", sum); | |||||
for (i = 0; i < (int)(sum*8.0 + 0.50); i++) | |||||
printf("-"); | |||||
printf("\n"); | |||||
/* refill initial table */ | |||||
if (0) { | |||||
for (i = 0; i < Q; i++) { | |||||
b = fgetc(fptr); | |||||
if (b < 0) { | |||||
run = 0; | |||||
} else { | |||||
table[b] = i; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}</programlisting> | |||||
</sect1> | |||||
</article> |