Теоретическое руководство




Пользователи систем, основанных на открытом ключе, должны быть уверены, что когда они используют открытый ключ, субъект, с которым они связываются, является собственником соответствующего закрытого ключа. Эта уверенность достигается благодаря использованию PKCs, которые являются структурами данных, связывающих значения открытого ключа с субъектами. Связывание обеспечивается при наличии доверенного СА, который проверяет идентификацию субъекта и подписывает каждый PKC.

Но возможно, что данные были подписаны кем-то еще, если, например, закрытый ключ подписывающей стороны скомпрометирован. Безопасность зависит от всех частей системы, использующей сертификаты; она включает: физическую безопасность размещения компьютеров; безопасность персонала (например, возможность доверять людям, которые реально разрабатывают, инсталлируют, выполняют и сопровождают систему); безопасность, обеспечиваемую СА. Нарушение в любой из этих областей может послужить причиной нарушения безопасности всей системы. PKIX ограничена в предметной области и адресована только результатам, относящимся к функционированию подсистемы PKI.

PKI определяется как:

Множество аппаратуры, ПО, людей, политик и процедур, необходимых для создания, управления, хранения, распределения и отмены PKCs, основываясь на криптографии с открытым ключом.

PKI состоит из следующих типов компонентов:

- САs, которые выпускают и отменяют PKCs.

- RAs, которые ручаются за связь между открытыми ключами и идентификациями держателей сертификатов, а также другими атрибутами.

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

- Клиенты, которые проверяют цифровые подписи и соответствующие верификационные пути с помощью известного открытого ключа доверенного СА и дешифруют документы, используя открытые ключи из сертификатов держателей PKCs.

- Репозитории, которые хранят и делают доступными PKCs и CRLs.

Когда сертификат выпущен, считается, что он будет использоваться в течение всего своего периода действительности. Однако могут произойти события, в результате которых сертификат станет недействительным до завершения своего периода действительности, указанного в сертификате. К таким событиям относится изменение имени, изменение связывания между субъектом и СА (например, сотрудник увольняется из организации) и компрометация или предположение компрометации соответствующего закрытого ключа. При таких обстоятельствах СА должен отменить сертификат.

Для управления списками отзыва сертификатов X.509 используется следующая команда:

$ openssl crl <параметры>

В качестве параметров используются следующие ключи (дефисы перед ключами обязательны):

- -inform <PEM|DER> — формат входного файла;

- -outform <PEM|DER> — формат выходного файла;

- -in <имя_файла> — указывает входной файл;

- -out <имя_файла> — указывает выходной файл;

- -text — вывести содержимое CRL в текстовом виде;

- -noout — не выводить содержимое CRL в кодированном виде;

- -hash — вывести хэш имени издателя;

- -issuer — вывести имя издателя;

- -lastupdate — вывести время последнего изменения списка;

- -nextupdate — вывести время следующего обновления списка;

- -CAfile <имя_файла> — указывает на файл, содержащий сертификат издателя, для проверки подписи CRL;

- -CApath <имя_каталога> — указывает на каталог, в котором находится сертификат издателя, для проверки подписи CRL.

Примеры:

- Вывести информацию

$ openssl crl -in crl.pem -noout -text

- Проверить подпись CRL:

$ openssl crl -in crl.pem -noout -CAfile cacert.pem

Практическая часть

Генерируем секретный ключ ключевой пары алгоритма RSAдля корневого сертификата локального центра:

 

 

 

Создаем корневой сертификат ЦС. Корневой сертификат будет самоподписанным, потому что он находится выше всех в создаваемой иерархии:

 

 

Создание (-new) cacert.pem сертификата (-x509) для использования в качестве сертификата сервера или сертификата CA. Сертификат создается с использованием секретного ключа –key и конфигурационного файла –config.

Создаваемый сертификат будет действителен в течение 365 дней (-days), опция –days не применима к запросам на сертификацию. В процессе создания сертификата вам будут задавать вопросы об информации, которая будет указана в созданном сертификате, обязательным является только ответ на CommonName, где имеет смысл указать название вашего ЦС.

 

Просмотр содержимого сертификата:

Создание запроса reqTolik.pem на сертификацию (-new) на основе создаваемого секретного ключа rsa (-newkey rsa:1024), который записывается в файл –keyoutIvan_pr.pem (и шифруется тройным DES). Запрос на сертификацию создается на основе конфигурационного файла — config:

 

 

На этом этапе вам снова предложат заполнить информационные поля
сертификата. В поле CommonName следует указать полное определенное доменное имя (FQDN) (что-то вроде mail.sercer.home.ru или ip) чтобы почтовый клиент не выдавал предупреждение о неверности имени.

Просмотр содержимого файла запроса на подписание сертификата пользователя:

 

Лабораторная работа 6.

Тема: Применение «сетей доверия» для распространения сертификатов

Цель работы: получить навык применения программного продукта GnuPG для управления ключами и сертификатами PGP, изучить принципы сети доверия.

 

Теоретическая часть

GNU Privacy Guard (GnuPG) — программный комплекс, реализующий криптографический стандарт OpenPGP (RFC4880) и предоставляющий инструменты для шифрования, подписывания и проверки подписи, управления ключами и т.д. Одновременно существуют две ветки GnuPG — версии 1 и 2. В данном руководстве рассмотрена утилита gpg2 из ветки GnuPG 2, собственно реализующая криптоалгоритмы.

Синтаксис gpg2 следующий:

$ gpg2 [--homedir <домашний_каталог>] [--options <имя файла>] [параметры] команда [аргументы]

Доступны следующие команды:

• Команды выбора типа операции:

--sign / -s — создать подпись. Эта команда может быть объединена с командами --encrypt (для создания зашифрованного подписанного сообщения), --symmetric (для создания зашифрованного симметричными алгоритмами сообщения) или с обеими сразу (для создания зашифрованного подписанного сообщения, которое может быть расшифровано закрытым ключом или парольной фразой). Используемый для подписи ключ выбирается опциями --local-user или --default-key.

--clearsign — создать подпись в текстовом формате. Алгоритмы PGP могут быть использованы для проверки такой подписи. Используемый для подписи ключ выбирается опциями --local-user или --default-key.

--detach-sign / -b — создать отделяемую подпись.

--encrypt / -e — зашифровать данные. Эта команда может быть объединена с командами --sign, --symmetric или обеими сразу (эффект описан в описании команды --sign).

--symmetric / -c — зашифровать данные с использованием симметричного шифра. Алгоритм может быть выбран опцией --cipher-algo (по умолчанию CAST5). Эта команда может быть объединена с командами --sign, --encrypt или обеими сразу (эффект описан в описании команды --sign).

--decrypt / -d — расшифровать указанный в командной строке файл (если файл не указан, то данные принимаются со стандартного ввода). Если зашифрованный файл был подписан, то предварительно проверяется подпись. Команда отличается от действия по умолчанию тем, что отклоняет файлы, не начинающиеся с зашифрованного сообщения.

--verify — предположить, что первый аргумент является подписанным файлом или отделѐнной подписью и выполнить проверку подписи без вывода на экран. Если команда запускается без параметров, то данные читаются со стандартного ввода. Если указан один аргумент и он является подписью, то подписанные данные берутся из файла, чьѐ имя равно переданному имени без суффикса «.sig» или «.asc». Если указано более одного аргумента, то первым должна быть отделѐнная подпись, а последующими — подписанные файлы.

--list-keys / -k / --list-public-keys — вывести перечень ключей, содержащихся в хранилище открытых ключей.

--list-secret-keys / -K — вывести перечень ключей, содержащихся в хранилище закрытых ключей. Символ «#» после sec означает, что данный секретный ключ использовать нельзя.

--list-sigs — работает как --list-keys, но выводит и подписи тоже. Между sig и идентификатором ключа располагаются следующие флаги (в порядке слева направа):

◦ числа 1-3 — уровень проверки сертификата (см. команду --ask-cert-level);

◦ L — локальная или неэкспортируемая подпись (см. команду --lsign-key);

◦ R — неотзываемая подпись (см. подкоманду nrsign команды --edit-key);

◦ P — подпись содержит URL политики (см. команду --cert-policy-url);

◦ N — подпись содержит нотацию (см. команду --cert-notation);

◦ X — подпись устарела (см. команду --ask-cert-expire);

◦ числа 1-9 или T вместо 10 и более — уровень доверия сертификату (см. подкоманду tsign команды --edit-key);

--check-sigs — то же, что и --list-sigs, но подписи верифицируются. Результат верификации выводится после sig и может быть следующим:

◦ «!» — успешная верификация;

◦ «-» — неудачная верификация;

◦ «%» — ошибка при верификации (например, вследствие неподдерживаемого алгоритма);

--fingerprints — вывести все открытые ключи с их отпечатками.

--delete-key <имя_ключа> — удалить ключ из хранилища открытых ключей.

--delete-secret-key <имя_ключа> — удалить ключ из хранилища закрытых ключей.

--delete-secret-and-public-key <имя_ключа> — удалить ключ из хранилища открытых ключей, если существует соответствующий закрытый ключ, то удалить и его.

--export — экспортировать все открытые ключи из хранилища. Новое хранилище выводится на экран или в файл, указанный в опции -- output.

--export-secret-keys — экспортировать все закрытые ключи из хранилища.

--import — импортировать ключ в хранилище.

--update-trustdb — выполнить обновления базы доверия. Происходит перестроение сети доверия.

• Команды управления ключами

 

--gen-key — создать новую пару ключей.

--gen-revoke <имя> — создать сертификат отзыва ключа.

--edit-key <имя> — запустить терминал редактирования указанного ключа. В этом терминале могут применяться следующие команды:

uid <номер> — переключить отметку выбора для пользователя с указанным номером (* — выбрать всех, 0 — снять выбор со всех);

key <номер> — переключить отметку выбора для ключа с указанным номером (* — выбрать всех, 0 — снять выбор со всех);

sign — подписать ключ выбранных пользователей;

lsign — подписать ключ неэкспортируемой подписью (например, для использования в локальной среде);

nrsign — подписать ключ неотзываемой подписью;

tsign — подписать ключ доверенной подписью (совмещает сертификацию и доверие к ключу, полезно в тесных сообществах);

delsig — удалить подпись (если подписанный ключ был записан на сервер ключей, то удаление не даст эффекта, используйте revsig);

revsig — отозвать подпись;

check — проверить подписи для всех выбранных пользователей;

adduid — создать дополнительный идентификатор пользователя;

deluid — удалить идентификатор пользователя (если идентификатор пользователя был записан на сервер ключей, то удаление не даст эффекта, используйте revuid);

primary — выбрать указанный идентификатор пользователя как основной (удаляет флаг «основной» со всех остальных идентификаторов, всем подписям устанавливается отпечаток времени, равный времени через секунду после момента изменения флага);

subkey — добавить подключ к выбранному ключу;

delkey — удалить подключ (если подключ был записан на сервер ключей, то удаление не даст эффекта, используйте revkey);

revkey — отозвать подключ;

expire — изменить время устаревания ключа или подключа (если ни один ключ не выбран, то изменяется время устаревания основного ключа);

trust — изменяет значение доверия к владельцу ключа (автоматически обновляется база доверия);

disable / enable — приостановить или возобновить работу ключа (приостановленный ключ нельзя использовать для шифрования);

passwd — изменить парольную фразу ключа;

toggle — переключиться между списком открытых и закрытых ключей;

save — сохранить все изменения в хранилище ключей и завершить работу;

quit — завершить работу без обновления хранилища ключей.

• Параметры ввода-вывода

--output / -o <имя_файла> — выводить в указанный файл

• Прочие параметры

--keyring <имя_файла> — указывает используемое хранилище ключей.

-versobe / -v — увеличить степень подробности вывода.

Указать идентификатор пользователя можно следующим образом:

• по идентификатору ключа — например, 0xAB123456;

• по адресу e-mail — например, <heinrichh@uni-duesseldorf.de> (треугольные скобки обязательны);

• по совпадению с подстрокой — например, Heine (режим по умолчанию; перед искомой подстрокой можно указать * для явного указания режима поиска по подстроке).

 

Примеры (полужирным выделены вводимые вручную значения):

• Сгенерировать новую пару ключей RSA только для подписи (не для шифрования!):

Практическая часть

$ gpg2 --gen-key

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Выберите требуемый тип ключа:

(1) RSA and RSA (default) (2) DSA and Elgamal

(3) DSA (только для подписи)

(4) RSA (только для подписи)

Ваш выбор (?-подробнее)? 4

ключи RSA могут иметь длину от 1024 до 4096 бит.

Какой размер ключа необходим? (2048)

Запрашиваемый размер ключа 2048 бит

Выберите срок действия ключа.

0 = без ограничения срока действительности

<n> = срок действительности n дней

<n>w = срок действительности n недель

<n>m = срок действительности n месяцев

<n>y = срок действительности n лет

Ключ действителен до? (0)

Ключ не имеет ограничения срока действительности

Все верно? (y/N) y

GnuPG необходимо составить UserID в качестве идентификатора ключа.

Ваше настоящее имя: Test User

Email-адрес: test@example.com

Комментарий: Это тестовый ключ

Используемая таблица символов: `utf-8'.

Вы выбрали следующий User ID:

"Test User (Это тестовый ключ) <test@example.com>"

Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? O

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

gpg: removing stale lockfile (created by 11231)

Необходимо сгенерировать много случайных чисел. Желательно, что бы Вы

выполняли некоторые другие активные действия (печать на клавиатуре, движения мышью,

обращения к дискам) в процессе генерации; это даст генератору

случайных чисел возможность получить лучшую энтропию.

gpg: ключ 7A58EC8C помечен как абсолютно доверяемый.

открытый и закрытый ключи созданы и подписаны.

gpg: проверка таблицы доверий

gpg: 3 ограниченных необходимо, 1 выполненных необходимо, PGP модель доверия

gpg: глубина: 0 корректных: 1 подписанных: 0 доверия: 0-, 0q, 0n, 0m, 0f, 1u

pub 2048R/7A58EC8C 2012-01-31

Отпечаток ключа = 59DD C055 7F2F 231E 9A35 0495 F59D BF24 7A58 EC8C

uid Test User (Это тестовый ключ) <test@example.com>

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

воспользоваться командой "--edit-key" и создать подключ

для этих целей.

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

$ gpg2 --edit-key Some

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Секретный ключ доступен.

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: абсолютно достоверность: абсолютно

[абсолютн] (1). Some User (Это другой ключ) <some@example.com>

gpg> sign

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: абсолютно достоверность: абсолютно

Отпечаток главного ключа: 562B 4F11 9C2D 84D9 49CB 8BE6 A90A 79ED 45BD 0D4F

Some User (Это другой ключ) <some@example.com>

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

своим ключом: "Test User (Это тестовый ключ) <test@example.com>" (7A58EC8C)

Действительно подписать? (y/N)y

Необходима фраза-пароль для доступа к секретному ключу пользователя: "Test User (Это тестовый ключ) <test@example.com>"

2048-бит RSA ключ, ID 7A58EC8C, создан 2012-01-31

• Изменить степень доверия ключу:

$ gpg2 --edit-key Some

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Секретный ключ доступен.

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: абсолютно достоверность: абсолютно

[абсолютн] (1). Some User (Это другой ключ) <some@example.com>

gpg> trust

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: абсолютно достоверность:

абсолютно

[абсолютн] (1). Some User (Это другой ключ) <some@example.com>

Укажите насколько Вы доверяете данному пользователю в

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

Проверяет паспорт, сверяет отпечатки ключей и т.п.?

1 = Не знаю или не буду отвечать

2 = Не доверяю

3 = Доверяю ограниченно

4 = Полностью доверяю

5 = Абсолютно доверяю

m = вернуться в главное меню

Ваше решение (?-подробнее)? 4

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: полное достоверность: абсолютно

[абсолютн] (1). Some User (Это другой ключ) <some@example.com>

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

пока программа не будет перезапущена.

• Экспортировать все открытые ключи из хранилища, очистить хранилище и загрузить в него открытые ключи:

$ gpg2 --export --output newkeyring.gpg

$ gpg2 --delete-secret-and-public-key Some

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

sec 2048R/45BD0D4F 2012-01-31 Some User (Это другой ключ) <some@example.com>

Удалить данный ключ из таблицы ключей? (y/N)y

Это секретный ключ! - действительно удалить? (y/N)y

pub 2048R/45BD0D4F 2012-01-31 Some User (Это другой ключ) <some@example.com>

Удалить данный ключ из таблицы ключей? (y/N)y

$ gpg2 --delete-secret-and-public-key Test

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

sec 2048R/7A58EC8C 2012-01-31 Test User (Это тестовый ключ)

<test@example.com>

Удалить данный ключ из таблицы ключей? (y/N)y

Это секретный ключ! - действительно удалить? (y/N)y

pub 2048R/7A58EC8C 2012-01-31 Test User (Это тестовый ключ) <test@example.com>

Удалить данный ключ из таблицы ключей? (y/N)y

$ gpg2 --list-keys

gpg: проверка таблицы доверий

gpg: не найдено абсолютно доверяемых ключей

$ gpg2 --list-sigs

$ gpg2 --import newkeyring.gpg

gpg: ключ 7A58EC8C: открытый ключ "Test User (Это тестовый ключ) <test@example.com>" импортирован

gpg: ключ 45BD0D4F: открытый ключ "Some User (Это другой ключ) <some@example.com>" импортирован

gpg: Всего обработано: 2

gpg: импортировано: 2 (RSA: 2)

gpg: не найдено абсолютно доверяемых ключей

$ gpg2 --list-sigs

/root/.gnupg/pubring.gpg

---------------------------

pub 2048R/7A58EC8C 2012-01-31

uid Test User (Это тестовый ключ) <test@example.com>

sig 3 7A58EC8C 2012-01-31 Test User (Это тестовый ключ) <test@example.com>

pub 2048R/45BD0D4F 2012-01-31

uid Some User (Это другой ключ) <some@example.com>

sig 3 45BD0D4F 2012-01-31 Some User (Это другой ключ) <some@example.com>

sig 7A58EC8C 2012-01-31 Test User (Это тестовый ключ) <test@example.com>

• Изменить уровень доверия ключу и определить, как изменится уровень доверия к подписанным им ключам:

$ gpg2 --list-sigs

/root/.gnupg/pubring.gpg

---------------------------

pub 2048R/7A58EC8C 2012-01-31

uid Test User (Это тестовый ключ) <test@example.com>

sig 3 7A58EC8C 2012-01-31 Test User (Это тестовый ключ) <test@example.com>

pub 2048R/45BD0D4F 2012-01-31

uid Some User (Это другой ключ) <some@example.com>

sig 3 45BD0D4F 2012-01-31 Some User (Это другой ключ) <some@example.com>

sig 7A58EC8C 2012-01-31 Test User (Это тестовый ключ) <test@example.com>

pub 2048R/6116649D 2012-01-31

uid New Key (Новый ключ) <new@example.com>

sig 3 6116649D 2012-01-31 New Key (Новый ключ) <new@example.com>

$ gpg2 --edit-key Some

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: неопределено достоверность: неизвестно

[неизвстн] (1). Some User (Это другой ключ) <some@example.com>

gpg> quit

$ gpg2 --edit-key Test

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

pub 2048R/7A58EC8C создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: ограниченно достоверность: неизвестно

[неизвстн] (1). Test User (Это тестовый ключ) <test@example.com>

gpg> tsign

pub 2048R/7A58EC8C создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: ограниченно достоверность: неизвестно

Отпечаток главного ключа: 59DD C055 7F2F 231E 9A35 0495 F59D BF24 7A58 EC8C

Test User (Это тестовый ключ) <test@example.com>

Укажите насколько Вы доверяете данному пользователю в

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

Проверяет паспорт, сверяет отпечатки ключей и т.п.?

1 = Доверяю ограниченно

2 = Полностью доверяю

Ваш выбор (?-подробнее)? 2

Введите глубину доверий для данной подписи.

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

доверенные подписи от Вашего лица.

Ваш выбор (?-подробнее)? 1

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

Ваш выбор (?-подробнее)?

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

своим ключом: "New Key (Новый ключ) <new@example.com>" (6116649D)

Действительно подписать? (y/N)y

Необходима фраза-пароль для доступа к секретному ключу пользователя: "New Key (Новый ключ) <new@example.com>"

2048-бит RSA ключ, ID 6116649D, создан 2012-01-31

gpg> save

$ gpg2 --edit-key Test

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

gpg: проверка таблицы доверий

gpg: 3 ограниченных необходимо, 1 выполненных необходимо, PGP модель доверия

gpg: глубина: 0 корректных: 1 подписанных: 2 доверия: 0-, 0q, 0n, 0m, 0f, 1u

gpg: глубина: 1 корректных: 2 подписанных: 1 доверия: 0-, 0q, 0n, 1m, 1f, 0u

gpg: глубина: 2 корректных: 1 подписанных: 0 доверия: 0-, 1q, 0n, 0m, 0f, 0u

pub 2048R/7A58EC8C создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: полное достоверность: полное

[ полное ] (1). Test User (Это тестовый ключ) <test@example.com>

gpg> quit

$ gpg2 --edit-key Some

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

pub 2048R/45BD0D4F создан: 2012-01-31 годен до: никогда применяемость: SC

доверие: неопределено достоверность: полное

[ полное ] (1). Some User (Это другой ключ) <some@example.com>

gpg> quit

gpg2 --gen-key

 

Лабораторная работа 7.

Тема: Применение электронной цифровой подписи для проверки авторства и неизменности файла

Цель работы: получить навык применения программного продукта OpenSSL для электронного подписывания документов и проверки подписи, изучить принципы ЭЦП.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: