doc/da_DK.ISO8859-1/articles/ipsec-must/article.sgml
Simon L. B. Nielsen 9f45dc35b0 MFen 1.13
Reviewed by:	Laust S. Jespersen <Laust@doc.freebsd.dk>
2004-07-13 11:18:04 +00:00

356 lines
10 KiB
Text
Raw Blame History

<!--
The FreeBSD Documentation Project
The FreeBSD Danish Documentation Project
$FreeBSD$
Original revision: 1.13
-->
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % misc PUBLIC "-//FreeBSD//ENTITIES DocBook Miscellaneous FreeBSD Entities//EN"> %misc;
<!ENTITY % trademarks PUBLIC "-//FreeBSD//ENTITIES DocBook Trademark Entities//EN"> %trademarks;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//DK"> %translators;
]>
<article lang="da">
<articleinfo>
<title>Uafh&aelig;ngig Verifikation af IPsec Funktionalitet i
&os;</title>
<author>
<firstname>David</firstname>
<surname>Honig</surname>
<affiliation>
<address><email>honig@sprynet.com</email></address>
</affiliation>
</author>
<pubdate>3 Maj 1999</pubdate>
<legalnotice id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.opengroup;
&tm-attrib.general;
</legalnotice>
<abstract>
&trans.da.jespersen;
<para>Du installerede IPsec og det ser ud til at virke. Men
hvordan ved du det? Jeg beskriver en metode til
eksperimentalt at verificere at IPsec virker.</para>
</abstract>
</articleinfo>
<sect1 id="problem">
<title>Problemet</title>
<para>Lad os antage, at du har <link linkend="ipsec-install">
installeret <emphasis>IPsec</emphasis></link>. Hvordan ved du
at det <link linkend="caveat">virker</link>?
Selvf&oslash;lgelig virker din forbindelse ikke hvis den er
miskonfigureret, og den vil virke n&aring;r du endelig laver det
rigtigt. &man.netstat.1; lister den. Men kan du verificere det
uafh&aelig;ngigt?</para>
</sect1>
<sect1 id="solution">
<title>L&oslash;sningen</title>
<para>F&oslash;rst, noget krypto-relevant teoretisk
information:</para>
<orderedlist>
<listitem>
<para>krypterede data er uniformt distribueret, som f.eks. har
maksimal entropi pr. symbol;</para>
</listitem>
<listitem>
<para>r&aring;, ukomprimerede data er typisk redundant,
f.eks., har sub-maksimal entropi.</para>
</listitem>
</orderedlist>
<para>Hvis du kunne m&aring;le entropien af dataene til og fra dit
netv&aelig;rks interface. S&aring; kunne du se forskellen
mellem ukrypterede og krypterede data. Det ville v&aelig;re
tilf&aelig;ldet selvom nogle af dataene i <quote>krypteret
mode</quote> ikke var krypterede, som f.eks. den yderste IP
header skal v&aelig;re, hvis pakken skal kunne routes.</para>
<sect2 id="MUST">
<title>MUST</title>
<para>Ueli Maurers <quote>Universal Statistical Test for Random
Bit Generators</quote> (<ulink
url="http://www.geocities.com/SiliconValley/Code/4704/universal.pdf">
<acronym>MUST</acronym></ulink>) m&aring;ler hurtigt entropien
af en stikpr&oslash;ve. Den bruger en kompressionsagtig
algoritme. <link linkend="code">Forneden angives
kildekoden</link> til en variant der m&aring;ler successive
(~kvart megabyte) store bidder af en fil.</para>
</sect2>
<sect2 id="tcpdump">
<title>Tcpdump</title>
<para>Vi har ogs&aring; brug for en m&aring;de at opsamle de
r&aring; netv&aelig;rksdata. Et program kaldet
&man.tcpdump.1; lader dig g<>re dette, hvis du har sl&aring;et
<emphasis>Berkeley Packet Filter</emphasis> interfacet til i
din <link linkend="kernel">kerne konfig fil</link>.</para>
<para>Kommandoen</para>
<screen><userinput><command>tcpdump</command> -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput></screen>
<para>vil opfange 4000 r<> pakker til
<replaceable>dumpfile.bin</replaceable>. Op til 10.000 bytes
per pakke bliver opfanget i dette eksempel.</para>
</sect2>
</sect1>
<sect1 id="experiment">
<title>Eksperimentet</title>
<para>Her er eksperimentet:</para>
<procedure>
<step>
<para>&Aring;bn et vindue til en IPsec v&aelig;rt og et andet
vindue til en usikker v&aelig;rt.</para>
</step>
<step>
<para>Start nu med at <link linkend="tcpdump">opfange
pakker</link>.</para>
</step>
<step>
<para>I det <quote>sikre</quote> vindue, k&oslash;res &unix;
kommandoen &man.yes.1;, hvilket vil streame
<literal>y</literal> karakteren. Stop dette efter et stykke
tid. Skift til det usikre vindue, og gentag. Stop igen efter
et stykke tid.</para>
</step>
<step>
<para>K&oslash;r nu <link linkend="code">MUST</link> p<> de
opfangede pakker. Du skulle se noget lignende det
f&oslash;lgende. Det vigtige at notere sig er, at den sikre
forbindelse har 93% (6,7) af den ventede v&aelig;rdi (7.18),
og den <quote>normale</quote> forbindelse har 29% (2.1) af den
ventede v&aelig;rdi.</para>
<screen>&prompt.user; <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput>
&prompt.user; <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 id="caveat">
<title>Undtagelse</title>
<para>Dette eksperiment viser at, IPsec <emphasis>kan</emphasis>
se ud til at distribuere payload data
<emphasis>uniformt</emphasis>, som kryptering skal. Men det
eksperiment der er beskrevet her <emphasis>kan ikke</emphasis>
detektere mange mulige fejl i et system (ingen af hvilke jeg har
nogle beviser for). Disse inkluderer d&aring;rlig n&oslash;gle
generering eller udveksling, data eller n&oslash;gler der kan
ses af andre, brug af svage algoritmer, kernel undergravning,
osv. Stud<75>r kildekoden; kend kildekoden.</para>
</sect1>
<sect1 id="IPsec">
<title>IPsec---Definition</title>
<para>Internet Protokol sikkerheds udvidelser til IPv4;
kr&aelig;vet for IPv6. En protokol til at forhandle kryptering
og autentifikation p&aring; IP (v&aelig;rt-til-v&aelig;rt)
niveau. SSL sikrer kun en applikationssocket;
<application>SSH</application> sikrer kun et login;
<application>PGP</application> sikrer kun en specifik fil eller
besked. IPsec krypterer alting mellem to v&aelig;rter.</para>
</sect1>
<sect1 id="ipsec-install">
<title>Installering af IPsec</title>
<para>De fleste af de moderne versioner af &os; har IPsec
support i deres base kildekode. S&aring; du er sikkert
n&oslash;dt til at inkludere <option>IPSEC</option> optionen i
din kernel konfig og, efter genbygning og reinstallation af
kernel, konfigurere IPsec forbindelser ved hj&aelig;lp af
&man.setkey.8; kommandoen.</para>
<para>En udf&oslash;rlig guide om at k&oslash;re IPsec p&aring;
&os; er tilr&aring;dighed i <ulink
url="../../books/handbook/ipsec.html">FreeBSD
H&aring;ndbogen</ulink>.</para>
</sect1>
<sect1 id="kernel">
<title>src/sys/i386/conf/KERNELNAME</title>
<para>Dette skal v&aelig;re til stede i kernel konfig filen for at
v&aelig;re i stand til at opfange netv&aelig;rksdata med
&man.tcpdump.1;. V&aelig;r sikker p&aring; at k&oslash;re
&man.config.8; efter at tilf&oslash;je dette, og genbygge og
reinstallere.</para>
<programlisting>device bpf</programlisting>
</sect1>
<sect1 id="code">
<title>Maurers universelle statistiske test (for blok
st&oslash;rrelse=8 bits)</title>
<para>Du kan finde samme kode p&aring; <ulink
url="http://www.geocities.com/SiliconValley/Code/4704/uliscanc.txt">
dette link</ulink>.</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&lt;&lt;L)
#define Q (10*V)
#define K (100 *Q)
#define MAXSAMP (Q + K)
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
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 &lt; 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 &lt; V; i++) {
table[i] = 0;
}
for (i = 0; i &lt; 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 &lt; Q + K; i++) {
j = i;
b = fgetc(fptr);
if (b &lt; 0)
run = 0;
if (run) {
if (table[b] &gt; 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 &lt; (int)(sum*8.0 + 0.50); i++)
printf("-");
printf("\n");
/* refill initial table */
if (0) {
for (i = 0; i &lt; Q; i++) {
b = fgetc(fptr);
if (b &lt; 0) {
run = 0;
} else {
table[b] = i;
}
}
}
}
}</programlisting>
</sect1>
</article>