Рефераты

Защита информации: цифровая подпись

Защита информации: цифровая подпись

САНКТ – ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет технической кибернетики

Кафедра информационных и управляющих систем

Реферат

«Цифровая подпись»

Студент Барташевич Е.Е.

Преподаватель Чистяков И.В.

Санкт-Петербург

2001

Содержание

1. Ассиметричные алгоритмы шифрования 3

1.1. Стандарт ассимметричного шифрования RSA 4

1.1.1. Генерация ключей 4

1.1.2. Шифрование/расшифрование 5

1.2. Алгоритм ЭльГамаля 6

1.2.1. Общие сведения 6

1.2.2. Шифрование сообщений 6

1.2.3. Подтверждение подлинности отправителя 6

1.3. Алгоритм Шамира 7

1.3.1. Общее описание 7

1.3.2. Передача сообщений 7

1.3.3. Пример использования 8

1.4. Кpиптосистемы на основе эллиптических уpавнений 8

2. Электронно-цифровая подпись 9

2.1. Общие положения 9

3. Алгоритм DSA 10

3.1. Генерация ЭЦП 11

3.2. Проверка ЭЦП 12

4. Стандарт на процедуры ЭЦП ГОСТ Р 34.10-94 12

4.1. Генерация ЭЦП 13

4.2. Проверка ЭЦП 13

5. Цифровые подписи, основанные на симметричных криптосистемах 13

6. Атаки на ЭЦП 22

7. Некоторые средства работы с ЭЦП 23

7.1. PGP 23

7.2. GNU Privacy Guard (GnuPG) 24

7.3. Криптон 24

7.4. ВербаО 24

8. Литература и ссылки 26

Ассиметричные алгоритмы шифрования

Развитие основных типов криптографических протоколов (ключевой обмен,

электронно-цифровая подпись (ЭЦП), аутентификация и др) было бы

невозможно без создания открытых ключей и построенных на их основе

ассиметричных протоколов шифрования.

Основная идея асимметричных криптоалгоритмов состоит в том, что для

шифрования сообщения используется один ключ, а при дешифровании – другой.

Кроме того, процедура шифрования выбрана так, что она необратима даже по

известному ключу шифрования – это второе необходимое условие

асимметричной криптографии. То есть, зная ключ шифрования и зашифрованный

текст, невозможно восстановить исходное сообщение – прочесть его можно

только с помощью второго ключа – ключа дешифрования. А раз так, то ключ

шифрования для отправки писем какому-либо лицу можно вообще не скрывать –

зная его все равно невозможно прочесть зашифрованное сообщение. Поэтому,

ключ шифрования называют в асимметричных системах "открытым ключом", а

вот ключ дешифрования получателю сообщений необходимо держать в секрете –

он называется "закрытым ключом".

Таким образом, мы избавляемся от необходимости решать сложную задачу

обмена секретными ключами.

Напрашивается вопрос : "Почему, зная открытый ключ, нельзя вычислить

закрытый ключ ?" – это третье необходимое условие асимметричной

криптографии – алгоритмы шифрования и дешифрования создаются так, чтобы

зная открытый ключ, невозможно вычислить закрытый ключ.

В целом система переписки при использовании асимметричного шифрования

выглядит следующим образом. Для каждого из N абонентов, ведущих

переписку, выбрана своя пара ключей : "открытый" Ej и "закрытый" Dj, где

j – номер абонента. Все открытые ключи известны всем пользователям сети,

каждый закрытый ключ, наоборот, хранится только у того абонента, которому

он принадлежит. Если абонент, скажем под номером 7, собирается передать

информацию абоненту под номером 9, он шифрует данные ключом шифрования E9

и отправляет ее абоненту 9. Несмотря на то, что все пользователи сети

знают ключ E9 и, возможно, имеют доступ к каналу, по которому идет

зашифрованное послание, они не могут прочесть исходный текст, так как

процедура шифрования необратима по открытому ключу. И только абонент №9,

получив послание, производит над ним преобразование с помощью известного

только ему ключа D9 и восстанавливает текст послания. Заметьте, что если

сообщение нужно отправить в противоположном направлении (от абонента 9 к

абоненту 7), то нужно будет использовать уже другую пару ключей (для

шифрования ключ E7, а для дешифрования – ключ D7).

Как мы видим, во-первых, в асимметричных системах количество существующих

ключей связано с количеством абонентов линейно (в системе из N

пользователей используются 2*N ключей), а не квадратично, как в

симметричных системах. Во-вторых, при нарушении конфиденциальности k-ой

рабочей станции злоумышленник узнает только ключ Dk : это позволяет ему

читать все сообщения, приходящие абоненту k, но не позволяет вывадавать

себя за него при отправке писем.

1 Стандарт ассимметричного шифрования RSA

Самым распространенным алгоритмом ассиметричного шифрования является

алгоритм RSA. Он был предложен тремя исседователями-математиками

Рональдом Ривестом (R.Rivest) , Ади Шамиром (A.Shamir) и Леонардом

Адльманом (L.Adleman) в 1977-78 годах. Разработчикам данного алгоритма

удалось эффективно воплотить идею односторонних функций с секретом.

Стойкость RSA базируется на сложности факторизации больших целых чисел.

В 1993 году метод RSA был обнародован и принят в качестве стандарта

(PKCS #1: RSA Encryption standart). RSA можно применять как для

шифрования/расшифрования, так и для генерации/проверки электронно-

цифровой подписи.

1 Генерация ключей

Первым этапом любого асимметричного алгоритма является создание пары

ключей : открытого и закрытого и распространение открытого ключа "по

всему миру". Для алгоритма RSA этап создания ключей состоит из следующих

операций :

Выбираются два простых (!) числа p и q

Вычисляется их произведение n(=p*q)

Выбирается произвольное число e (e1.

Парараметры p,q,g публикуются для всех участников обмена ЭД с ЭЦП.

Секретный ключ x случайно выбирается из диапазона [1,q] и держится в

секрете.

Открытый ключ вычисляется: y=g^x mod p.

Также при описании данной схемы будут использоваться следующие

обозначения и доролнительные параметры: m – входное сообщение

пользователя для схемы с ЭЦП; k - случайное число, удовлетворяющее

условию 0T', то s'1=R2nT–1–T'(k1)=RT–T'(R2nT–1–T(k1))=RT–T'(s1).

Однако для нахождения второй половины подписи (s'1 и s'0 в случаях (a) и

(b) соответственно) ему необходимо выполнить прокрутку в обратную сторону,

т.е. найти Rk(X), располагая только значением для большего k, что является

вычислительно невозможным. Таким образом, злоумышленник не может подделать

подпись под сообщением, если не располагает секретным ключом подписи.

Второе требование также выполняется: вероятность подобрать блок данных T',

отличный от блока T, но обладающий такой же цифровой подписью, чрезвычайно

мала и может не приниматься во внимание. Действительно, пусть цифровая

подпись блоков T и T' совпадает. Тогда подписи обоих блоков будут равны

соответственно:

s=SnT(T)=(s0,s1)=(RT(k0), R2nT–1–T(k1)),

s'=SnT(T')=(s'0,s'1)=(RT'(k0), R2nT–1–T'(k1)),

но s=s', следовательно:

RT(k0)=RT'(k0) и R2nT–1–T(k1)=R2nT–1–T'(k1).

Положим для определенности TЈT', тогда справедливо следующее:

RT'–T(k0*)=k0*,RT'–T(k1*)=k1*,где k0*=RT(k0), k1*=R2nT–1–T'(k1)

Последнее условие означает, что прокручивание двух различных блоков данных

одно и то же число раз оставляет их значения неизменными. Вероятность

такого события чрезвычайно мала и может не приниматься во внимание.

Таким образом рассмотренная модификация схемы Диффи–Хеллмана делает

возможным подпись не одного бита, а целой битовой группы. Это позволяет в

несколько раз уменьшить размер подписи и ключей подписи/проверки данной

схемы. Однако надо понимать, что увеличение размера подписываемых битовых

групп приводит к экспоненциальному росту объема необходимых вычислений и

начиная с некоторого значения делает работу схемы также неэффективной.

Граница «разумного размера» подписываемой группы находится где-то около

десяти бит, и блоки большего размера все равно необходимо подписывать «по

частям».

Теперь найдем размеры ключей и подписи, а также объем необходимых для

реализации схемы вычислений. Пусть размер хэш–блока и блока используемого

шифра одинаковы и равны n, а размер подписываемых битовых групп равен nT.

Предположим также, что если последняя группа содержит меньшее число битов,

обрабатывается она все равно как полная nT-битовая группа. Тогда размеры

ключей подписи/проверки и самой подписи совпадают и равны следующей

величине:

[pic] бит,

где йxщ обозначает округление числа x до ближайшего целого в сторону

возрастания. Число операций шифрования EK(X), требуемое для реализации

процедур схемы, определяются нижеследующими соотношениями:

при выработке ключевой информации оно равно:

[pic],

при выработке и проверке подписи оно вдвое меньше:

[pic].

Размер ключа подписи и проверки подписи можно дополнительно уменьшить

следующими приемами:

1. Нет необходимости хранить ключи подписи отдельных битовых групп, их

можно динамически вырабатывать в нужный момент времени с помощью

генератора криптостойкой гаммы. Ключом подписи в этом случае будет

являться обычный ключ использованного в схеме подписи блочного шифра.

Например, если схема подписи будет построена на алгоритме ГОСТ 28147-89,

то размер ключа подписи будет равен 256 битам.

1. Аналогично, нет необходимости хранить массив ключей проверки подписи

отдельных битовых групп блока, достаточно хранить его значение хэш-

функции этого массива. При этом алгоритм выработки ключа подписи и

алгоритм проверки подписи будут дополнены еще одним шагом – вычислением

хэш-функции массива проверочных комбинаций отдельных битовых групп.

Таким образом, проблема размера ключей и подписи решена, однако, второй

недостаток схемы – одноразовость ключей – не преодолен, поскольку это

невозможно в рамках подхода Диффи–Хеллмана.

Для практического использования такой схемы, рассчитанной на подпись N

сообщений, отправителю необходимо хранить N ключей подписи, а получателю –

N ключей проверки, что достаточно неудобно. Эта проблема может быть решена

в точности так же, как была решена проблема ключей для множественных

битовых групп – генерацией ключей подписи для всех N сообщений из одного

мастер-ключа и свертывание всех проверочных комбинаций в одну контрольную

комбинацию с помощью алгоритма вычисления хэш-функции.

Такой подход решил бы проблему размера хранимых ключей, но привел бы к

необходимости вместе подписью каждого сообщения высылать недостающие N–1

проверочных комбинаций, необходимых для вычисления хэш-функции массива всех

контрольных комбинаций отдельных сообщений. Ясно, что такой вариант не

обладает преимуществами по сравнению с исходным.

Упомянутыми выше авторами был предложен механизм, позволяющий значительно

снизить остроту проблемы. Его основная идея – вычислять контрольную

комбинацию (ключ проверки подписи) не как хэш-функцию от линейного массива

проверочных комбинаций всех сообщений, а попарно – с помощью бинарного

дерева. На каждом уровне проверочная комбинация вычисляется как хэш-функция

от конкатенации двух проверочных комбинаций младшего уровня. Чем выше

уровень комбинации, тем больше отдельных ключей проверки "учитывается" в

ней.

Предположим, что наша схема рассчитана на 2L сообщений. Обозначим через

[pic] i-тую комбинацию l-того уровня. Если нумерацию комбинаций и уровней

начинать с нуля, то справедливо следующее условие: 0 Ј i < 2L–l, а i-ая

проверочная комбинация l-того уровня рассчитана на 2l сообщений с номерами

от iЧ2l до (i+1)Ч2l–1 включительно. Число комбинаций нижнего, нулевого

уровня равно 2L, а самого верхнего, L-того уровня – одна, она и является

контрольной комбинацией всех 2L сообщений, на которые рассчитана схема.

На каждом уровне, начиная с первого, проверочные комбинации рассчитываются

по следующей формуле:

[pic],

где через A||B обозначен результат конкатенации двух блоков данных A и B,

а через H(X) – процедура вычисления хэш-функции блока данных X.

При использовании указанного подхода вместе с подписью сообщения необходимо

передать не N–1, как в исходном варианте, а только log2N контрольных

комбинаций. Передаваться должны комбинации, соответствующие смежным ветвям

дерева на пути от конечной вершины, соответствующей номеру использованной

подписи, к корню.

Пример организации проверочных комбинаций в виде двоичного дерева в схеме

на восемь сообщений приведена на рисунке 4.1. Так, при передаче сообщения №

5 (контрольная комбинация выделена рамкой) вместе с его подписью должны

быть переданы контрольная комбинация сообщения № 4 (C4(0)), общая для

сообщений №№ 6–7 (C3(1)) и общая для сообщений №№ 0–3 (C0(2)), все они

выделены на рисунке другим фоном.

[pic]При проверке подписи значение C5(0) будет вычислено из сообщения и его

подписи, а итоговая контрольная комбинация, подлежащая сравнению с

эталонной, по следующей формуле:

C=C0(3)=H(C0(2)||H(H(C4(0)||C5(0))||C3(1))).

Необходимость отправлять вместе с подписью сообщения дополнительную

информацию, нужную для проверки подписи, на самом деле не очень

обременительна. Действительно, в системе на 1024=210 подписей вместе с

сообщением и его подписью необходимо дополнительно передавать 10

контрольных комбинаций, а в системе на 1048576=220 подписей – всего 20

комбинаций. Однако, при большом числе подписей, на которые рассчитана

система, возникает другая проблема – хранение дополнительных комбинаций,

если они рассчитаны предварительно, или их выработка в момент формирования

подписи.

Дополнительные контрольные комбинации, которые передаются вместе с подписью

и используются при ее проверке, вырабатываются при формировании ключа

проверки по ключу подписи и могут храниться в системе и использоваться в

момент формирования подписи, либо вычисляться заново в этот момент.

Первый подход предполагает затраты дисковой памяти, так как необходимо

хранить 2L+1–2 значений хэш-функции всех уровней, а второй требует большого

объема вычислений в момент формирования подписи. Можно использовать и

компромиссный подход – хранить все хэш-комбинации начиная с некоторого

уровня l*, а комбинации меньшего уровня вычислять при формировании

подписи.

В рассмотренной выше схеме подписи на 8 сообщений можно хранить все 14

контрольных комбинаций, используемых при проверки (всего их 15, но самая

верхняя не используется), тогда при проверке подписи их не надо будет

вычислять заново. Можно хранить 6 комбинаций начиная с уровня 1 (C0(1),

C1(1), C2(1), C3(1), C0(2), C1(2)), тогда при проверке подписи сообщения №

5 необходимо будет заново вычислить комбинацию C4(0), а остальные

(C0(2),C3(1)) взять из таблицы, и т.д.. Указанный подход позволяет достичь

компромисса между быстродействием и требованиям к занимаемому количеству

дискового пространства.

Отметим, что отказ от хранения комбинаций одного уровня приводит к

экономии памяти и росту вычислительных затрат примерно вдвое, то есть

зависимость носит экспоненциальный характер.

Атаки на ЭЦП

Стойкость большинства схем ЭЦП зависит от стойкости ассиметричных

алгоритмов шифрования и хэш-функций.

Существует следующая классификация атак на схемы ЭЦП:

атака с известыи открытым ключем.

Атака и известными подписанными сообщениями – противник, кроме открытого

кюча имеет и набор подписанных сообщений.

Простая атака с выбором подписанных сообщений – противник имеет возможность

выбирать сообщения, при этом открытый ключ он получает после выбора

сообщения.

Направленная атака с выбором сообщения

Адаптивная атака с выбором сообщения.

Каждая атака преследует определенную цель, которые можно разделить на

несколько классов:

полное раскрытие. Противник находит секретный ключ пользователя

универсальная подделка. Противник находит алгоритм, функционально

аналогичный алгоритму генерации ЭЦП

селективная подделка. Подделка подписи под выбранным сообщением.

Экзистенциальная подделка. Подделка подписи хотя бы для одного случайно

выбранного сообщения.

На практике применение ЭЦП позволяет выявить или предотвратить

следующие действия нарушителя:

отказ одного из участников авторства документа.

Модификация принятого электронного документа.

Подделка документа.

Навязывание сообщений в процессе передачи – противник перехватывает обмен

сообщениями и модифицирует их.

Имитация передачи сообщения.

Так же существуют нарушения, от которых невозможно оградить систему обмена

сообщениями – это повтор передачи сообщения и фальсификация времени

отправления сообщения.Противодействие данным нарушениям может остовываться

на использовании временных вставок и строгом учете входящих сообщений.

Некоторые средства работы с ЭЦП

В настоящее время существует большое кодичество комплексов для работы с

электронной подписью, или использующие ее.

Приведем некоторые из них:

1 PGP

Наиболее известный - это пакет PGP (Pretty Good Privacy) – (www.pgpi.org ),

без сомнений являетющийся на сегодня самым распространенным программным

продуктом, позволяющим использовать современные надежные криптографические

алгоритмы для защиты информации в персональных компьютерах.

К основным преимуществам данного пакета, выделяющим его среди других

аналогичных продуктов следует отнести следующие:

1. Открытость. Исходный код всех версий программ PGP доступен в открытом

виде. Любой эксперт может убедиться в том, что в программе эффективно

реализованы криптоалгоритмы. Так как сам способ реализации известных

алгоритмов был доступен специалистам, то открытость повлекла за собой и

другое преимущество - эффективность программного кода.

2. Стойкость. Для реализации основных функций использованы лучшие (по

крайней мере на начало 90-х) из известных алгоритмов, при этом допуская

использование достаточно большой длины ключа для надежной защиты данных

2. Бесплатность. Готовые базовые продукты PGP (равно как и исходные тексты

программ) доступны в Интернете в частности на официальном сайте PGP Inc.

( www.pgpi.org ).

4. Поддержка как централизованной (через серверы ключей) так и

децентрализованной (через «сеть доверия») модели распределения открытых

ключей.

5.Удобство программного интерфейса. PGP изначально создавалась как продукт

для широкого круга пользователей, поэтому освоение основных приемов работы

отнимает всего несколько часов

Текущая версия – 7.0.3 для платформ Windows 9x/NT/2000, MacOS.

2 GNU Privacy Guard (GnuPG)

GnuPG (www.gnupg.org ) - полная и свободно распространяемая замена для

пакета PGP. Этот пакет не использует патентованый алгоритм IDEA, и поэтому

может быть использован без каких-нибудь ограничений. GnuPG соответсвует

стандарту RFC2440 (OpenPGP).

Текущая версия – 1.0.4, платформы – Unices, Windows 9x/NT

3 Криптон

Пакет программ КРИПТОН®Подпись

(http://www.ancud.ru/crypto/crpodpis.htm )предназначен для использования

электронной цифровой подписи (ЭЦП) электронных документов.

Программы пакета КРИПТОН®Подпись функционируют на компьютере,

удовлетворяющем следующим требованиям:

. наличие операционной системы Windows-95/98 или Windows NT 4.0;

. наличие УКЗД серии КРИПТОН с соответствующим драйвером для Windows-

95/98/NT или его программного драйвера-эмулятора для Windows - Crypton

Emulator версии 1.3 или выше.

. наличие Crypton API для Windows версии 2.2 или выше (входит в поставку

УКЗД серии КРИПТОН и содержит также драйвер поставляемого УКЗД);

. наличие манипулятора "мышь".

В стандартной поставке для хранения файлов открытых ключей используются

дискеты. Помимо дискет, пакет КРИПТОН®Подпись дает возможность

использования всех типов ключевых носителей (смарт-карт, электронных

таблеток Touch Memory и др.), поддерживаемых текущей версией интерфейса

SCApi, входящего в поставку Crypton API v2.2 и выше.

4 ВербаО

( http://www.ntc.spb.ru/def/verbao.htm )

| | |

| |Система криптографической защиты информации "Верба - О" |

| |Система криптографической защиты информации (СКЗИ) "Верба - О" |

| |разработана Московским отделением Пензенского научно - |

| |исследовательского электротехнического института (МО ПНИЭИ), |

| |полномочным представителем которого в регионе является наш |

| |филиал. |

| |СКЗИ "Верба-О" представляет собой программный комплекс, |

| |предназначенный для защиты информации при ее хранении на дисках и|

| |(или) передаче по каналам связи. СКЗИ "Верба - О" решает |

| |следующие задачи: |

| |шифрование/расшифрование информации на уровне файлов; |

| |генерацию электронной цифровой подписи (ЭЦП); |

| |проверку ЭЦП; |

| |обнаружение искажений, вносимых злоумышленниками или вирусами в |

| |защищаемую информацию. |

| |СКЗИ "Верба - О" может поставляться в следующих вариантах: |

| |в виде автономного рабочего места; |

| |в виде модулей, встраиваемых в ПО заказчика. |

| |СКЗИ "Верба - О" в различных модификациях функционирует под |

| |управлением операционных систем MS DOS v5.0 и выше, Windows95, |

| |Windows NT, UNIX (HP UX) на персональных ЭВМ, совместимых с IBM |

| |PC/ AT. Требуемый объем оперативной памяти не более 155 Кбайт. |

| |Кроме того, необходим накопитель на гибком магнитном диске |

| |(НГМД). |

| |Алгоритм шифрования выполнен в соответствии с требованиями ГОСТ |

| |28147-89 "СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ. ЗАЩИТА |

| |КРИПТОГРАФИЧЕСКАЯ". Цифровая подпись выполнена в соответствии с |

| |требованиями ГОСТ Р34.10-94 "ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. |

| |КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. ПРОЦЕДУРЫ ВЫРАБОТКИ И |

| |ПРОВЕРКИ ЭЛЕКТРОННОЙ ЦИФРОВОЙ ПОДПИСИ НА БАЗЕ АССИМЕТРИЧНОГО |

| |КРИПТОГРАФИЧЕСКОГО АЛГОРИТМА." Функция хэширования выполнена в |

| |соответствии с требованиями ГОСТ Р 34.11-94 "ИНФОРМАЦИОННАЯ |

| |ТЕХНОЛОГИЯ. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. ФУНКЦИЯ |

| |ХЭШИРОВАНИЯ". |

| |Ключи шифрования симметричные. Ключи для подписи асимметричные. |

| |При обработке информации на ПЭВМ СКЗИ "Верба - О" обеспечивает |

| |следующие показатели: |

| |Операции |

| |PC/AT 486/33, ISA |

| |PC/AT 486/100 VESA |

| | |

| |Шифрование |

| |200 Кб/с |

| |520 Кб/с |

| | |

| |Вычисление хэш-функции |

| |120 Кб/с |

| |330 Кб/с |

| | |

| |Формирование ЭЦП |

| |0.3с |

| |0.04 с |

| | |

| |Проверка ЭЦП |

| |0.7 с |

| |0.2 с |

| | |

| |СКЗИ "Верба - О" имеет сертификат ФАПСИ № 124-0264 от 10.04.99г. |

Литература и ссылки

1. Петров А.А

Компьютерная безопасность. Криптографические методы защиты. ДМК

Москва, 2000 г.

2. "Методы и средства защиты информации" (курс лекций)

Авторские права: Беляев А.В.

(http://www.citforum.ru/internet/infsecure/index.shtml)

3. Криптография

(http://www.citforum.ru/internet/securities/crypto.shtml)

4. http://www.e-sign.ru

5. Александр Володин «Кто заверит ЭЦП»

- журнал «Банковские системы» - ноябрь 2000

(http://www.bizcom.ru/system/2000-11/04.html)

6. Теоретические основы - Безопасность информационных систем –

Криптографические системы

( http://argosoft.webservis.ru/Base/Crypt.html#Механизмы шифрования )

7. Криптографические алгоритмы с открытым ключом

(http://argosoft.webservis.ru/Base/RSAintro.html#Криптографические

алгоритмы с открытым ключом)

8. Совpеменные кpиптогpафические методы защиты инфоpмации –

Системы с откpытым ключом

( http://ppt.newmail.ru/crypto04.htm#Heading20 )

9. Криптография с открытым ключом: от теории к стандарту

А.Н.Терехов, А.В.Тискин

"Программирование РАН", N 5 (сентябрь-октябрь), 1994, стр. 17--22

(http://www1.tepkom.ru/users/ant/Articles/Pkcstand.html)

10. Баричев С.Г., Гончаров В.В., Серов Р.Е.

Основы современной криптографии – Москва, Горячая линия – Телеком,

2001


© 2010 БИБЛИОТЕКА РЕФЕРАТЫ