Changeset View
Changeset View
Standalone View
Standalone View
fa_IR.UTF-8/articles/ipsec-must/article.xml
<?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: head/en_US.ISO8859-1/articles/ipsec-must/article.xml 52227 2018-09-06 01:30:47Z ebrandi $ | |||||
--> | |||||
<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="fa_IR"> | |||||
<info><title>تصدیق عملکرد IPsec به طور مستقل در FreeBSD</title> | |||||
<author><personname><firstname>دیوید</firstname><surname>هانیگ</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 یک نشان تجاری ثبت شده متعلق به FreeBSD Foundation است.</para> | |||||
<para>Motif، OSF/1 و UNIX نشانهای تجاری ثبت شده و IT DialTone و The Open Group نشانهای تجاری متعلق به کنسرسیوم The Open Group در ایالات متحده و دیگر کشورها هستند.</para> | |||||
<para>بسیاری از عناوین مورد استفاده توسط تولیدکنندگان و فروشندگان برای مشخص کردن محصولاتشان به عنوان نشانهای تجاری اظهار شدهاند. در هر جای این سند که این عناوین ذکر شده باشند، در صورتی که پروژه FreeBSD از اظهارنامه آن نشان تجاری آگاه باشد، همراه عنوان علامت <quote>™</quote> یا <quote>®</quote> آمده است.</para> | |||||
</legalnotice> | |||||
<releaseinfo>$FreeBSD: head/en_US.ISO8859-1/articles/ipsec-must/article.xml 52227 2018-09-06 01:30:47Z ebrandi $</releaseinfo> | |||||
<abstract> | |||||
<para>IPsec را نصب کردهاید و به نظر میرسد که کار هم میکند. ولی از کجا میدانید؟ من روشی را در اینجا تشریح میکنم که با آن میتوانید به طور آزمونگرانه تصدیق کنید که IPsec به درستی کار میکند.</para> | |||||
</abstract> | |||||
</info> | |||||
<sect1 xml:id="problem"> | |||||
<title>تعریف مشکل</title> | |||||
<para>ابتدا، بیایید فرض کنیم که شما <link linkend="ipsec-install"><emphasis>IPsec</emphasis> را نصب کردهاید</link>. از کجا میدانید که به درستی <link linkend="caveat">کار میکند</link>؟ بله، درست است، اگر به درستی پیکربندی نشده بود اتصال شما کار نمیکرد، فقط وقتی آن را درست پیکربندی کرده باشید کار خواهد کرد. <citerefentry><refentrytitle>netstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> آن را فهرست خواهد کرد. ولی آیا به طور مستقل هم میتوانید آن را تصدیق کنید؟</para> | |||||
</sect1> | |||||
<sect1 xml:id="solution"> | |||||
<title>راه حل</title> | |||||
<para>ابتدا، کمی اطلاعات تئوری در رابطه با رمزنگاری:</para> | |||||
<orderedlist> | |||||
<listitem> | |||||
<para>دادههای رمزنگاریشده به طور یکنواخت توزیع میشوند. به عبارت دیگر، به ازای هر نماد، آنتروپی بیشینه دارند؛</para> | |||||
</listitem> | |||||
<listitem> | |||||
<para>دادههای خام و فشرده نشده عموما افزونگی دارند. به عبارت دیگر، آنتروپی فرو-بیشینه دارند.</para> | |||||
</listitem> | |||||
</orderedlist> | |||||
<para>فرض کنید که میتوانستید آنتروپی دادههای ارسالی به کارت شبکه و دریافتی از آن را اندازهگیری کنید. آنگاه میتوانستید تفاوت بین دادههای رمزنگاریشده و رمزنگارینشده را ببینید. این گفته حتی وقتی که مقداری از دادهها در <quote>حالت رمزنگاری</quote> عملا رمزنگارینشده باشند هم درست است. مثلا اگر قرار باشد بسته قابل مسیریابی باشد، آنگاه بیرونیترین سرایند IP نباید رمزنگاریشده باشد.</para> | |||||
<sect2 xml:id="MUST"> | |||||
<title>MUST</title> | |||||
<para>ابزار <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>) یولی مائورر میتواند آنتروپی یک نمونه را به سرعت اندازهگیری کند. این ابزار از یک الگوریتم شبه-فشردهسازی استفاده میکند. کد گونهای از این ابزار که قادر است به طور پیاپی (تقریبا یک چارک مگابایت) قطعات یک پرونده را اندازهگیری کند، <link linkend="code"> در زیر آورده شده است</link>.</para> | |||||
</sect2> | |||||
<sect2 xml:id="tcpdump"> | |||||
<title>Tcpdump</title> | |||||
<para>ما همچنین به روشی نیاز داریم تا بتوانیم دادههای خام شبکه را ضبط کنیم. برنامهای به نام <citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</manvolnum></citerefentry> اجازه انجام چنین کاری را به ما میدهد. برای استفاده از آن نیاز است تا در <link linkend="kernel">پرونده پیکربندی هسته</link> <emphasis>Berkeley Packet Filter</emphasis> را فعال کرده باشید.</para> | |||||
<para>دستور:</para> | |||||
<screen><userinput>tcpdump -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput></screen> | |||||
<para>۴۰۰۰ بسته خام را ضبط کرده و در <replaceable>dumpfile.bin</replaceable> ذخیره میکند. در این مثال، تا ۱۰٬۰۰۰ بایت در هر بسته ضبط خواهد شد.</para> | |||||
</sect2> | |||||
</sect1> | |||||
<sect1 xml:id="experiment"> | |||||
<title>آزمایش</title> | |||||
<para>آزمایش از این قرار است:</para> | |||||
<procedure> | |||||
<step> | |||||
<para>یک پنجره به یک میزبانِ IPsec و پنجرهای دیگر به یک میزبان ناامن باز کنید.</para> | |||||
</step> | |||||
<step> | |||||
<para>حالا شروع به <link linkend="tcpdump">ضبط بستهها</link> نمایید.</para> | |||||
</step> | |||||
<step> | |||||
<para>حال در پنجره <quote>امن</quote>، دستور <trademark class="registered">یونیکسی</trademark> <citerefentry><refentrytitle>yes</refentrytitle><manvolnum>1</manvolnum></citerefentry> را اجرا کنید، که باعث خواهد شد کاراکتر <literal>y</literal> مثل یک جویبار روان شود. پس از مدتی، این دستور را متوقف کنید. به پنجره ناامن بروید و همین کار را تکرار کنید. پس از مدتی، آن را هم متوقف کنید.</para> | |||||
</step> | |||||
<step> | |||||
<para>حال <link linkend="code">MUST</link> را روی بستههای ضبط شده اجرا کنید. باید چیزی شبیه خروجی زیر را ببینید. نکته مهم این است که اتصال امن ۹۳٪ (۶.۷) از مقدار مورد انتظار (۷.۱۸) را دارد، و اتصال <quote>عادی</quote> تنها ۲۹٪ (۲.۱) از مقدار مورد انتظار را دارد.</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>هشدار</title> | |||||
<para>این آزمایش نشان میدهد که IPsec ظاهرا دارد دادهها را <emphasis>به طور یکنواخت</emphasis> <emphasis>توزیع میکند</emphasis>، همانطور که از یک رمزنگاری انتظار میرود. با این حال، آزمایشی که در اینجا شرح آن رفت <emphasis>نمیتواند</emphasis> هیچگونه نقص احتمالی را در سامانه تشخیص دهد (که برای هیچکدام از آنها هیچ نشانهای ندارم). این نقصها میتوانند چیزهایی مثل تولید کلید ضعیف یا تبادل نادرست کلیدها، در معرض نمایش بودن کلیدها یا دادهها برای بقیه، استفاده از الگوریتم ضعیف، تخریب هسته از درون و غیره باشند. کدمنبع را بخوانید و با آن آشنا شوید.</para> | |||||
</sect1> | |||||
<sect1 xml:id="IPsec"> | |||||
<title>IPsec---تعریف</title> | |||||
<para>افزونههای امنیتی قرارداد اینترنت برای IPv4؛ که در IPv6 الزامی است، قراردادی است برای مذاکره کردن روشهای رمزنگاری و احراز هویت در لایه IP (میزبان به میزبان). SSL تنها یک سوکت را ایمن میکند؛ <application>SSH</application> تنها یک ورود را ایمن میکند؛ <application>PGP</application> تنها یک پرونده یا پیغام را ایمن میکند. ولی IPsec همه چیز را بین دو میزبان ایمن میکند.</para> | |||||
</sect1> | |||||
<sect1 xml:id="ipsec-install"> | |||||
<title>نصب IPsec</title> | |||||
<para>بیشتر نسخههای مدرن FreeBSD از IPsec در کدمنبعشان پشتیبانی میکنند. تنها نیاز است که شما گزینه <option>IPSEC</option> را در فایل پیکربندی هسته بگنجانید و پس از آنکه هسته را کامپایل و نصب کردید، با استفاده از دستور <citerefentry><refentrytitle>setkey</refentrytitle><manvolnum>8</manvolnum></citerefentry> اتصالات IPsec را پیکربندی کنید.</para> | |||||
<para>یک راهنمای جامع درباره راهاندازی IPsec در FreeBSD در <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ipsec.html">کتاب راهنمای FreeBSD</link> آورده شده است.</para> | |||||
</sect1> | |||||
<sect1 xml:id="kernel"> | |||||
<title>src/sys/i386/conf/KERNELNAME</title> | |||||
<para>نیاز است تا آن را در فایل پیکربندی هسته گنجانده باشید تا بتوان دادههای شبکه را با <citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</manvolnum></citerefentry> ضبط کرد. مطمئن شوید که پس از اضافه کردن آن <citerefentry><refentrytitle>config</refentrytitle><manvolnum>8</manvolnum></citerefentry> را اجرا خواهید کرد، سپس هسته را مجددا کامپایل و نصب نمایید.</para> | |||||
<programlisting>device bpf</programlisting> | |||||
</sect1> | |||||
<sect1 xml:id="code"> | |||||
<title>Maurer's Universal Statistical Test (برای بلاکهایی با اندازه ۸ بیتی)</title> | |||||
<para>همین کد را میتوانید در <link xlink:href="https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt"> این نشانی</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> |