aboutsummaryrefslogtreecommitdiff
path: root/da_DK.ISO8859-1/articles/ipsec-must/article.sgml
blob: b6432bb753203051b4db907c24e4c0906ac50e4d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
<?xml version="1.0" encoding="ISO8859-1" standalone="no"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
	"../../../share/sgml/freebsd42.dtd" [
<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//DA" "../../share/sgml/entities.ent">
%entities;
]>

<!--
    The FreeBSD Documentation Project
    The FreeBSD Danish Documentation Project

    $FreeBSD$
    Original revision: 1.13
-->

<article lang="da">
  <articleinfo>
    <title>Uafhæ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>

    <releaseinfo>$FreeBSD$</releaseinfo>

    <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ølgelig virker din forbindelse ikke hvis den er
      miskonfigureret, og den vil virke når du endelig laver det
      rigtigt.  &man.netstat.1; lister den.  Men kan du verificere det
      uafhængigt?</para>
  </sect1>

  <sect1 id="solution">
    <title>Løsningen</title>

    <para>Fø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å, ukomprimerede data er typisk redundant,
	  f.eks., har sub-maksimal entropi.</para>
      </listitem>
    </orderedlist>

    <para>Hvis du kunne måle entropien af dataene til og fra dit
      netværks interface.  Så kunne du se forskellen
      mellem ukrypterede og krypterede data.  Det ville være
      tilfældet selvom nogle af dataene i <quote>krypteret
      mode</quote> ikke var krypterede, som f.eks. den yderste IP
      header skal væ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åler hurtigt entropien
	af en stikprøve.  Den bruger en kompressionsagtig
	algoritme.  <link linkend="code">Forneden angives
	kildekoden</link> til en variant der måler successive
	(~kvart megabyte) store bidder af en fil.</para>
    </sect2>

    <sect2 id="tcpdump">
      <title>Tcpdump</title>

      <para>Vi har også brug for en måde at opsamle de
	rå netværksdata.  Et program kaldet
	&man.tcpdump.1; lader dig gøre dette, hvis du har slå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>Åbn et vindue til en IPsec vært og et andet
	  vindue til en usikker væ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ø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ør nu <link linkend="code">MUST</link> på de
	  opfangede pakker.  Du skulle se noget lignende det
	  følgende.  Det vigtige at notere sig er, at den sikre
	  forbindelse har 93% (6,7) af den ventede værdi (7.18),
	  og den <quote>normale</quote> forbindelse har 29% (2.1) af den
	  ventede væ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årlig nøgle
      generering eller udveksling, data eller nøgler der kan
      ses af andre, brug af svage algoritmer, kernel undergravning,
      osv.  Studér kildekoden; kend kildekoden.</para>
  </sect1>

  <sect1 id="IPsec">
    <title>IPsec---Definition</title>

    <para>Internet Protokol sikkerheds udvidelser til IPv4;
      krævet for IPv6.  En protokol til at forhandle kryptering
      og autentifikation på IP (vært-til-væ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æ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å du er sikkert
      nødt til at inkludere <option>IPSEC</option> optionen i
      din kernel konfig og, efter genbygning og reinstallation af
      kernel, konfigurere IPsec forbindelser ved hjælp af
      &man.setkey.8; kommandoen.</para>

    <para>En udførlig guide om at køre IPsec på
      &os; er tilrådighed i <ulink
      url="../../books/handbook/ipsec.html">FreeBSD
      Håndbogen</ulink>.</para>
  </sect1>

  <sect1 id="kernel">
    <title>src/sys/i386/conf/KERNELNAME</title>

    <para>Dette skal være til stede i kernel konfig filen for at
      være i stand til at opfange netværksdata med
      &man.tcpdump.1;.  Vær sikker på at køre
      &man.config.8; efter at tilføje dette, og genbygge og
      reinstallere.</para>

    <programlisting>device	bpf</programlisting>
  </sect1>

  <sect1 id="code">
    <title>Maurers universelle statistiske test (for blok
      størrelse=8 bits)</title>

    <para>Du kan finde samme kode på <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 &amp;&amp; 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>