diff options
Diffstat (limited to 'documentation/content/ru/articles/ipsec-must')
-rw-r--r-- | documentation/content/ru/articles/ipsec-must/_index.adoc | 33 | ||||
-rw-r--r-- | documentation/content/ru/articles/ipsec-must/_index.po | 757 |
2 files changed, 776 insertions, 14 deletions
diff --git a/documentation/content/ru/articles/ipsec-must/_index.adoc b/documentation/content/ru/articles/ipsec-must/_index.adoc index 8ef1f8d028..0ed3a91901 100644 --- a/documentation/content/ru/articles/ipsec-must/_index.adoc +++ b/documentation/content/ru/articles/ipsec-must/_index.adoc @@ -1,8 +1,11 @@ --- -title: Независимое исследование работы IPsec во FreeBSD authors: - - author: David Honig + - + author: 'David Honig' email: honig@sprynet.com +description: 'Независимое исследование работы IPsec во FreeBSD' +tags: ["IPsec", "verification", "FreeBSD"] +title: 'Независимое исследование работы IPsec во FreeBSD' trademarks: ["freebsd", "opengroup", "general"] --- @@ -49,7 +52,7 @@ toc::[] [[problem]] == Постановка задачи -Для начала предположим, что Вы <<ipsec-install>>. Как Вы узнаете, что IPsec <<caveat>>? Несомненно, соединения не будет, если Вы неверно его сконфигурировали. И оно, конечно, появится в выводе команды man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить сам факт функционирования IPsec? +Для начала предположим, что Вы crossref::ipsec-must[ipsec-install, установили IPsec]. Как Вы узнаете, что IPsec crossref::ipsec-must[caveat, надо учитывать предостережение]? Несомненно, соединения не будет, если Вы неверно его сконфигурировали. И оно, конечно, появится в выводе команды man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить сам факт функционирования IPsec? [[solution]] == Решение @@ -64,16 +67,16 @@ toc::[] [[MUST]] === MUST -"Универсальный Статистический Тест для Генераторов Случайных Чисел" Уэли Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators), сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST] позволяет быстро измерить энтропию последовательного набора данных. Используемый алгоритм похож на алгоритм сжатия. <<code>> приведён исходный код, позволяющий измерять энтропию последовательных кусков данных размером около четверти мегабайта. +"Универсальный Статистический Тест для Генераторов Случайных Чисел" Уэли Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators), сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST], позволяет быстро измерить энтропию последовательного набора данных. Используемый алгоритм похож на алгоритм сжатия. В разделе crossref::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - 8 бит))] приведён исходный код, позволяющий измерять энтропию последовательных кусков данных размером около четверти мегабайта. [[tcpdump]] === Tcpdump -Ещё нам нужен способ сохранения информации, проходящей через интерфейс. Программа man:tcpdump[1] позволяет сделать это в случае, если Вы <<kernel>> с поддержкой __Пакетного Фильтра Беркли (Berkeley Packet Filter)__. +Ещё нам нужен способ сохранения информации, проходящей через интерфейс. Программа man:tcpdump[1] позволяет сделать это в случае, если у Вас ядро crossref::ipsec-must[kernel,src/sys/i386/conf/KERNELNAME] с поддержкой __Пакетного Фильтра Беркли (Berkeley Packet Filter)__. -Команда +Команда: -[source,shell] +[source, shell] .... tcpdump -c 4000 -s 10000 -w dumpfile.bin .... @@ -86,12 +89,13 @@ toc::[] Повторите следующие шаги эксперимента: [.procedure] +==== . Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь компьютером через канал IPsec, а в другом - с обычным, "незащищённым" компьютером. -. Теперь начните <<tcpdump>>. +. Теперь запустите crossref::ipsec-must[tcpdump, Tcpdump]. . В "шифрованном" окне запустите команду UNIX(R) man:yes[1], которая будет выдавать бесконечный поток символов `y`. Немножко подождите и завершите её. Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте то же самое. -. Заключительный этап: запустите <<code>>, передав ему для обработки только что сохранённые пакеты через командную строку. Вы должны увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное соединение - всего лишь 29% (2,1). +. Заключительный этап: запустите crossref::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - 8 бит)], передав ему для обработки только что сохранённые пакеты через командную строку. Вы должны увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное соединение - всего лишь 29% (2,1). + -[source,shell] +[source, shell] .... % tcpdump -c 4000 -s 10000 -w ipsecdemo.bin % uliscan ipsecdemo.bin @@ -107,14 +111,15 @@ Expected value for L=8 is 7.1836656 2.0838 ----------------- 2.0983 ----------------- .... +==== [[caveat]] -== Замечание +== Предостережение Этот эксперимент показывает, что IPsec _действительно_ распределяет передаваемые байты по области определения __равномерно__, как и любое другое шифрование. Однако этот метод _не может_ обнаружить множество других изъянов в системе (хотя я таковых не знаю). Для примера можно привести плохие алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных или ключей, использование слабых в криптографическом смысле алгоритмов, взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит. [[IPsec]] -== Определение IPsec +== IPsec — определение IPsec представляет собой протокол безопасного обмена информацией по Internet. Существует в виде расширения к IPv4; является неотъемлемой частью IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP (межмашинное "host-to-host" взаимодействие). SSL защищает только лишь конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает определённый файл или письмо. IPsec шифрует всю информацию, передаваемую между двумя машинами. @@ -123,7 +128,7 @@ IPsec представляет собой протокол безопасног Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, Вы должны будете лишь добавить опцию `IPSEC` в конфигурационный файл ядра, и после сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с помощью команды man:setkey[8]. -Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в extref:{handbook}security[Руководстве пользователя, ipsec]. +Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в extref:{handbook}[Руководстве пользователя, ipsec]. [[kernel]] == src/sys/i386/conf/KERNELNAME @@ -138,7 +143,7 @@ device bpf [[code]] == Универсальный Статистический Тест Маурера (размер блока - 8 бит) -Оригинал нижеприведённого кода находится по http://www.geocities.com/SiliconValley/Code/4704/uliscanc.txt[ этому адресу]. +Оригинал нижеприведённого кода находится по https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[ этому адресу]. [.programlisting] .... diff --git a/documentation/content/ru/articles/ipsec-must/_index.po b/documentation/content/ru/articles/ipsec-must/_index.po new file mode 100644 index 0000000000..762f8315b1 --- /dev/null +++ b/documentation/content/ru/articles/ipsec-must/_index.po @@ -0,0 +1,757 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2024-12-29 08:30-0500\n" +"PO-Revision-Date: 2025-08-21 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/articlesipsec-must_index/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: Title = +#: documentation/content/en/articles/ipsec-must/_index.adoc:1 +#: documentation/content/en/articles/ipsec-must/_index.adoc:11 +#, no-wrap +msgid "Independent Verification of IPsec Functionality in FreeBSD" +msgstr "Независимое исследование работы IPsec во FreeBSD" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:44 +msgid "Abstract" +msgstr "Аннотация" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:47 +msgid "" +"You installed IPsec and it seems to be working. How do you know? I describe " +"a method for experimentally verifying that IPsec is working." +msgstr "" +"Вы только что установили и настроили IPsec, и оно, кажется, заработало. Как " +"это можно проверить? Я опишу метод экспериментальной проверки правильного " +"функционирования IPsec." + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:49 +msgid "'''" +msgstr "'''" + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:53 +#, no-wrap +msgid "The Problem" +msgstr "Постановка задачи" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:58 +msgid "" +"First, lets assume you have crossref::ipsec-must[ipsec-install, Installing " +"IPsec]. How do you know it is crossref::ipsec-must[caveat, Caveat]? Sure, " +"your connection will not work if it is misconfigured, and it will work when " +"you finally get it right. man:netstat[1] will list it. But can you " +"independently confirm it?" +msgstr "" +"Для начала предположим, что Вы crossref::ipsec-must[ipsec-install, " +"установили IPsec]. Как Вы узнаете, что IPsec crossref::ipsec-must[caveat, " +"надо учитывать предостережение]? Несомненно, соединения не будет, если Вы " +"неверно его сконфигурировали. И оно, конечно, появится в выводе команды " +"man:netstat[1], когда Вы всё сделаете верно. Но можно ли как-то подтвердить " +"сам факт функционирования IPsec?" + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:60 +#, no-wrap +msgid "The Solution" +msgstr "Решение" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:63 +msgid "First, some crypto-relevant info theory:" +msgstr "Для начала немножко криптографической теории:" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:65 +msgid "" +"Encrypted data is uniformly distributed, i.e., has maximal entropy per " +"symbol;" +msgstr "" +"Шифрованные данные равномерно распределены по области определения, то есть " +"каждый символ имеет максимальную энтропию;" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:66 +msgid "" +"Raw, uncompressed data is typically redundant, i.e., has sub-maximal entropy." +msgstr "" +"\"Сырые\" и несжатые данные как правило избыточны, то есть их энтропия " +"меньше максимально возможной." + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:70 +msgid "" +"Suppose you could measure the entropy of the data to- and from- your network " +"interface. Then you could see the difference between unencrypted data and " +"encrypted data. This would be true even if some of the data in \"encrypted " +"mode\" was not encrypted---as the outermost IP header must be if the packet " +"is to be routable." +msgstr "" +"Предположим, что у Вас имеется возможность измерить энтропию входящего и " +"исходящего трафика на сетевом интерфейсе. В этом случае Вы сможете легко " +"отличить зашифрованные данные от открытых, причём даже в том случае, когда " +"часть данных в \"режиме шифрования\" передаётся в открытом виде, к примеру " +"внешние заголовки IP, которые используются для маршрутизации." + +#. type: Title === +#: documentation/content/en/articles/ipsec-must/_index.adoc:72 +#, no-wrap +msgid "MUST" +msgstr "MUST" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:77 +msgid "" +"Ueli Maurer's \"Universal Statistical Test for Random Bit " +"Generators\"(https://web.archive.org/web/20011115002319/http://www.geocities." +"com/SiliconValley/Code/4704/universal.pdf[MUST]) quickly measures the " +"entropy of a sample. It uses a compression-like algorithm. crossref::ipsec-" +"must[code, Maurer's Universal Statistical Test (for block size8 bits)] for a " +"variant which measures successive (~quarter megabyte) chunks of a file." +msgstr "" +"\"Универсальный Статистический Тест для Генераторов Случайных Чисел\" Уэли " +"Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators)" +", сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal." +"pdf[MUST], позволяет быстро измерить энтропию последовательного набора " +"данных. Используемый алгоритм похож на алгоритм сжатия. В разделе crossref" +"::ipsec-must[code, Универсальный Статистический Тест Маурера (размер блока - " +"8 бит))] приведён исходный код, позволяющий измерять энтропию " +"последовательных кусков данных размером около четверти мегабайта." + +#. type: Title === +#: documentation/content/en/articles/ipsec-must/_index.adoc:79 +#, no-wrap +msgid "Tcpdump" +msgstr "Tcpdump" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:84 +msgid "" +"We also need a way to capture the raw network data. A program called man:" +"tcpdump[1] lets you do this, if you have enabled the _Berkeley Packet " +"Filter_ interface in your crossref::ipsec-must[kernel,src/sys/i386/conf/" +"KERNELNAME]." +msgstr "" +"Ещё нам нужен способ сохранения информации, проходящей через интерфейс. " +"Программа man:tcpdump[1] позволяет сделать это в случае, если у Вас ядро " +"crossref::ipsec-must[kernel,src/sys/i386/conf/KERNELNAME] с поддержкой " +"__Пакетного Фильтра Беркли (Berkeley Packet Filter)__." + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:86 +msgid "The command:" +msgstr "Команда:" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:90 +#, no-wrap +msgid " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n" +msgstr " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:94 +msgid "" +"will capture 4000 raw packets to _dumpfile.bin_. Up to 10,000 bytes per " +"packet will be captured in this example." +msgstr "" +"сохранит 4000 пакетов в файл _dumpfile.bin_. В данном примере объём " +"записываемой информации в каждом пакете не может превышать 10,000 байтов." + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:96 +#, no-wrap +msgid "The Experiment" +msgstr "Эксперимент" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:99 +msgid "Here is the experiment:" +msgstr "Повторите следующие шаги эксперимента:" + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:103 +msgid "Open a window to an IPsec host and another window to an insecure host." +msgstr "" +"Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь " +"компьютером через канал IPsec, а в другом - с обычным, \"незащищённым\" " +"компьютером." + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:104 +msgid "Now start crossref::ipsec-must[tcpdump, Tcpdump]." +msgstr "Теперь запустите crossref::ipsec-must[tcpdump, Tcpdump]." + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:105 +msgid "" +"In the \"secure\" window, run the UNIX(R) command man:yes[1], which will " +"stream the `y` character. After a while, stop this. Switch to the insecure " +"window, and repeat. After a while, stop." +msgstr "" +"В \"шифрованном\" окне запустите команду UNIX(R) man:yes[1], которая будет " +"выдавать бесконечный поток символов `y`. Немножко подождите и завершите её. " +"Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте " +"то же самое." + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:106 +msgid "" +"Now run crossref::ipsec-must[code, Maurer's Universal Statistical Test (for " +"block size8 bits)] on the captured packets. You should see something like " +"the following. The important thing to note is that the secure connection has " +"93% (6.7) of the expected value (7.18), and the \"normal\" connection has " +"29% (2.1) of the expected value." +msgstr "" +"Заключительный этап: запустите crossref::ipsec-must[code, Универсальный " +"Статистический Тест Маурера (размер блока - 8 бит)], передав ему для " +"обработки только что сохранённые пакеты через командную строку. Вы должны " +"увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное " +"соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное " +"соединение - всего лишь 29% (2,1)." + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:122 +#, no-wrap +msgid "" +"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n" +"% uliscan ipsecdemo.bin\n" +"Uliscan 21 Dec 98\n" +"L=8 256 258560\n" +"Measuring file ipsecdemo.bin\n" +"Init done\n" +"Expected value for L=8 is 7.1836656\n" +"6.9396 --------------------------------------------------------\n" +"6.6177 -----------------------------------------------------\n" +"6.4100 ---------------------------------------------------\n" +"2.1101 -----------------\n" +"2.0838 -----------------\n" +"2.0983 -----------------\n" +msgstr "" +"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n" +"% uliscan ipsecdemo.bin\n" +"Uliscan 21 Dec 98\n" +"L=8 256 258560\n" +"Measuring file ipsecdemo.bin\n" +"Init done\n" +"Expected value for L=8 is 7.1836656\n" +"6.9396 --------------------------------------------------------\n" +"6.6177 -----------------------------------------------------\n" +"6.4100 ---------------------------------------------------\n" +"2.1101 -----------------\n" +"2.0838 -----------------\n" +"2.0983 -----------------\n" + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:126 +#, no-wrap +msgid "Caveat" +msgstr "Предостережение" + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:132 +msgid "" +"This experiment shows that IPsec _does_ seem to be distributing the payload " +"data __uniformly__, as encryption should. However, the experiment described " +"here _cannot_ detect many possible flaws in a system (none of which do I " +"have any evidence for). These include poor key generation or exchange, data " +"or keys being visible to others, use of weak algorithms, kernel subversion, " +"etc. Study the source; know the code." +msgstr "" +"Этот эксперимент показывает, что IPsec _действительно_ распределяет " +"передаваемые байты по области определения __равномерно__, как и любое другое " +"шифрование. Однако этот метод _не может_ обнаружить множество других изъянов " +"в системе (хотя я таковых не знаю). Для примера можно привести плохие " +"алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных " +"или ключей, использование слабых в криптографическом смысле алгоритмов, " +"взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит." + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:134 +#, no-wrap +msgid "IPsec---Definition" +msgstr "IPsec — определение" + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:140 +msgid "" +"Internet Protocol security extensions to IPv4; required for IPv6. A " +"protocol for negotiating encryption and authentication at the IP (host-to-" +"host) level. SSL secures only one application socket; SSH secures only a " +"login; PGP secures only a specified file or message. IPsec encrypts " +"everything between two hosts." +msgstr "" +"IPsec представляет собой протокол безопасного обмена информацией по " +"Internet. Существует в виде расширения к IPv4; является неотъемлемой частью " +"IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP (" +"межмашинное \"host-to-host\" взаимодействие). SSL защищает только лишь " +"конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает " +"определённый файл или письмо. IPsec шифрует всю информацию, передаваемую " +"между двумя машинами." + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:142 +#, no-wrap +msgid "Installing IPsec" +msgstr "Установка IPsec" + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:146 +msgid "" +"Most of the modern versions of FreeBSD have IPsec support in their base " +"source. So you will need to include the `IPSEC` option in your kernel " +"config and, after kernel rebuild and reinstall, configure IPsec connections " +"using man:setkey[8] command." +msgstr "" +"Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, " +"Вы должны будете лишь добавить опцию `IPSEC` в конфигурационный файл ядра, и " +"после сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с " +"помощью команды man:setkey[8]." + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:148 +msgid "" +"A comprehensive guide on running IPsec on FreeBSD is provided in extref:" +"{handbook}[FreeBSD Handbook, ipsec]." +msgstr "" +"Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в " +"extref:{handbook}[Руководстве пользователя, ipsec]." + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:150 +#, no-wrap +msgid "src/sys/i386/conf/KERNELNAME" +msgstr "src/sys/i386/conf/KERNELNAME" + +#. type: delimited block = 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:154 +msgid "" +"This needs to be present in the kernel config file to capture network data " +"with man:tcpdump[1]. Be sure to run man:config[8] after adding this, and " +"rebuild and reinstall." +msgstr "" +"Для того, чтобы захватывать сетевой трафик при помощи man:tcpdump[1], " +"следующие строки должны присутствовать в конфигурационном файле ядра. Не " +"забудьте после модификации запустить man:config[8], и, как обычно, " +"пересобрать и установить новое ядро." + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:158 +#, no-wrap +msgid "device\tbpf\n" +msgstr "device\tbpf\n" + +#. type: Title == +#: documentation/content/en/articles/ipsec-must/_index.adoc:161 +#, no-wrap +msgid "Maurer's Universal Statistical Test (for block size=8 bits)" +msgstr "Универсальный Статистический Тест Маурера (размер блока - 8 бит)" + +#. type: Plain text +#: documentation/content/en/articles/ipsec-must/_index.adoc:164 +msgid "" +"You can find the same code at https://web.archive.org/web/20031204230654/" +"http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[this link]." +msgstr "" +"Оригинал нижеприведённого кода находится по https://web.archive.org/web/" +"20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc." +"txt[ этому адресу]." + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:169 +#, no-wrap +msgid "" +"/*\n" +" ULISCAN.c ---blocksize of 8\n" +msgstr "" +"/*\n" +" ULISCAN.c ---blocksize of 8\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:173 +#, no-wrap +msgid "" +" 1 Oct 98\n" +" 1 Dec 98\n" +" 21 Dec 98 uliscan.c derived from ueli8.c\n" +msgstr "" +" 1 Oct 98\n" +" 1 Dec 98\n" +" 21 Dec 98 uliscan.c derived from ueli8.c\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:175 +#, no-wrap +msgid " This version has // comments removed for Sun cc\n" +msgstr " This version has // comments removed for Sun cc\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:178 +#, no-wrap +msgid "" +" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n" +" Bit Generators\" using L=8\n" +msgstr "" +" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n" +" Bit Generators\" using L=8\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:181 +#, no-wrap +msgid "" +" Accepts a filename on the command line; writes its results, with other\n" +" info, to stdout.\n" +msgstr "" +" Accepts a filename on the command line; writes its results, with other\n" +" info, to stdout.\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:183 +#, no-wrap +msgid " Handles input file exhaustion gracefully.\n" +msgstr " Handles input file exhaustion gracefully.\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:186 +#, no-wrap +msgid "" +" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n" +" also on the web somewhere, which is where I found it.\n" +msgstr "" +" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n" +" also on the web somewhere, which is where I found it.\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:189 +#, no-wrap +msgid "" +" -David Honig\n" +" honig@sprynet.com\n" +msgstr "" +" -David Honig\n" +" honig@sprynet.com\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:194 +#, no-wrap +msgid "" +" Usage:\n" +" ULISCAN filename\n" +" outputs to stdout\n" +"*/\n" +msgstr "" +" Usage:\n" +" ULISCAN filename\n" +" outputs to stdout\n" +"*/\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:200 +#, no-wrap +msgid "" +"#define L 8\n" +"#define V (1<<L)\n" +"#define Q (10*V)\n" +"#define K (100 *Q)\n" +"#define MAXSAMP (Q + K)\n" +msgstr "" +"#define L 8\n" +"#define V (1<<L)\n" +"#define Q (10*V)\n" +"#define K (100 *Q)\n" +"#define MAXSAMP (Q + K)\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:203 +#, no-wrap +msgid "" +"#include <stdio.h>\n" +"#include <math.h>\n" +msgstr "" +"#include <stdio.h>\n" +"#include <math.h>\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:215 +#, no-wrap +msgid "" +"int main(argc, argv)\n" +"int argc;\n" +"char **argv;\n" +"{\n" +" FILE *fptr;\n" +" int i,j;\n" +" int b, c;\n" +" int table[V];\n" +" double sum = 0.0;\n" +" int iproduct = 1;\n" +" int run;\n" +msgstr "" +"int main(argc, argv)\n" +"int argc;\n" +"char **argv;\n" +"{\n" +" FILE *fptr;\n" +" int i,j;\n" +" int b, c;\n" +" int table[V];\n" +" double sum = 0.0;\n" +" int iproduct = 1;\n" +" int run;\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:217 +#, no-wrap +msgid " extern double log(/* double x */);\n" +msgstr " extern double log(/* double x */);\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:219 +#, no-wrap +msgid " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n" +msgstr "" +" printf(\"Uliscan 21 Dec 98 \\n" +"L=%d %d %d \\n" +"\", L, V, MAXSAMP);\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:226 +#, no-wrap +msgid "" +" if (argc < 2) {\n" +" printf(\"Usage: Uliscan filename\\n\");\n" +" exit(-1);\n" +" } else {\n" +" printf(\"Measuring file %s\\n\", argv[1]);\n" +" }\n" +msgstr "" +" if (argc < 2) {\n" +" printf(\"Usage: Uliscan filename\\n" +"\");\n" +" exit(-1);\n" +" } else {\n" +" printf(\"Measuring file %s\\n" +"\", argv[1]);\n" +" }\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:228 +#, no-wrap +msgid " fptr = fopen(argv[1],\"rb\");\n" +msgstr " fptr = fopen(argv[1],\"rb\");\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:233 +#, no-wrap +msgid "" +" if (fptr == NULL) {\n" +" printf(\"Can't find %s\\n\", argv[1]);\n" +" exit(-1);\n" +" }\n" +msgstr "" +" if (fptr == NULL) {\n" +" printf(\"Can't find %s\\n" +"\", argv[1]);\n" +" exit(-1);\n" +" }\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:237 +#, no-wrap +msgid "" +" for (i = 0; i < V; i++) {\n" +" table[i] = 0;\n" +" }\n" +msgstr "" +" for (i = 0; i < V; i++) {\n" +" table[i] = 0;\n" +" }\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:242 +#, no-wrap +msgid "" +" for (i = 0; i < Q; i++) {\n" +" b = fgetc(fptr);\n" +" table[b] = i;\n" +" }\n" +msgstr "" +" for (i = 0; i < Q; i++) {\n" +" b = fgetc(fptr);\n" +" table[b] = i;\n" +" }\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:244 +#, no-wrap +msgid " printf(\"Init done\\n\");\n" +msgstr "" +" printf(\"Init done\\n" +"\");\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:246 +#, no-wrap +msgid " printf(\"Expected value for L=8 is 7.1836656\\n\");\n" +msgstr "" +" printf(\"Expected value for L=8 is 7.1836656\\n" +"\");\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:248 +#, no-wrap +msgid " run = 1;\n" +msgstr " run = 1;\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:252 +#, no-wrap +msgid "" +" while (run) {\n" +" sum = 0.0;\n" +" iproduct = 1;\n" +msgstr "" +" while (run) {\n" +" sum = 0.0;\n" +" iproduct = 1;\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:257 +#, no-wrap +msgid "" +" if (run)\n" +" for (i = Q; run && i < Q + K; i++) {\n" +" j = i;\n" +" b = fgetc(fptr);\n" +msgstr "" +" if (run)\n" +" for (i = Q; run && i < Q + K; i++) {\n" +" j = i;\n" +" b = fgetc(fptr);\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:260 +#, no-wrap +msgid "" +" if (b < 0)\n" +" run = 0;\n" +msgstr "" +" if (b < 0)\n" +" run = 0;\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:264 +#, no-wrap +msgid "" +" if (run) {\n" +" if (table[b] > j)\n" +" j += K;\n" +msgstr "" +" if (run) {\n" +" if (table[b] > j)\n" +" j += K;\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:266 +#, no-wrap +msgid " sum += log((double)(j-table[b]));\n" +msgstr " sum += log((double)(j-table[b]));\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:270 +#, no-wrap +msgid "" +" table[b] = i;\n" +" }\n" +" }\n" +msgstr "" +" table[b] = i;\n" +" }\n" +" }\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:273 +#, no-wrap +msgid "" +" if (!run)\n" +" printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n" +msgstr "" +" if (!run)\n" +" printf(\"Premature end of file; read %d blocks.\\n" +"\", i - Q);\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:276 +#, no-wrap +msgid "" +" sum = (sum/((double)(i - Q))) / log(2.0);\n" +" printf(\"%4.4f \", sum);\n" +msgstr "" +" sum = (sum/((double)(i - Q))) / log(2.0);\n" +" printf(\"%4.4f \", sum);\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:279 +#, no-wrap +msgid "" +" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n" +" printf(\"-\");\n" +msgstr "" +" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n" +" printf(\"-\");\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:281 +#, no-wrap +msgid " printf(\"\\n\");\n" +msgstr "" +" printf(\"\\n" +"\");\n" + +#. type: delimited block . 4 +#: documentation/content/en/articles/ipsec-must/_index.adoc:295 +#, no-wrap +msgid "" +" /* refill initial table */\n" +" if (0) {\n" +" for (i = 0; i < Q; i++) {\n" +" b = fgetc(fptr);\n" +" if (b < 0) {\n" +" run = 0;\n" +" } else {\n" +" table[b] = i;\n" +" }\n" +" }\n" +" }\n" +" }\n" +"}\n" +msgstr "" +" /* refill initial table */\n" +" if (0) {\n" +" for (i = 0; i < Q; i++) {\n" +" b = fgetc(fptr);\n" +" if (b < 0) {\n" +" run = 0;\n" +" } else {\n" +" table[b] = i;\n" +" }\n" +" }\n" +" }\n" +" }\n" +"}\n" |