Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ShPORY.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
277.05 Кб
Скачать

48 OpenSsl. Шифрование и дешифрование ассиметричных алгоритмов.

OpenSSL - это система защиты и сертификации данных, название SSL переводится,

как система безопасных сокетов(secure socket layer). OpenSSL используется

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

Существует программное API SSL(SSLEAY), позволяющее создавать безопасные сокеты с шифрацией передаваемых данных в собственных разработках.

асимметричный алгоритм предполагает под собой наличие двух ключей — публичного и приватного. То есть сообщение шифруется публичным ключом, а расшифровывается приватным и ни как иначе. Собственно именно эту концепцию сформулировал Диффи.

В общем суть данного алгоритма заключается в том, что принимающая сторона перед приемкой сообщения генерирует пару ключей на основе алгоритма модульной арифметики (принцип такой же как и в алгоритме Диффи-Хеллмана), собственно приватный и публичный ключ. Отправитель перед отправкой получает публичный ключ и шифрует сообщение данным ключом, после чего данное сообщение можно расшифровать только приватным ключом, который хранится в секрете у принимающей стороны.

Иерархия запоминающих устройств. Кэш-память. Способы отображения основной памяти на кэш. Схемы выполнения запросов в системах с кэш-памятью.

49.Программирование драйверов в Linux. Виды драйверов. Методы включения драйвера в ядро. Отличие драйверов от обычных приложений. Файлы устройств. Функции драйвера устройства.

Лёгкость написания драйверов объясняется тем, что исходный код linux великолепно задокументирован и доступен в исходниках, в сети множество примеров и куча литературы. А для создания драйвера вам нужен только любимый дистрибутив и исходники ядра, ну и компилятор под нужную вам архитектуру. Свой первый, не учебный, драйвер я писал для процессора PowerPC 8360, он взаимодействовал с микросхемой ПЛИС и осуществлял сброс настроек по умолчанию. Как это ни странно звучит, я его сделал, немного переписав драйвер SPI для этой архитектуры. Я это говорю к тому, что единая стандартизация написания программ в ядре Linux позволяет проводить такие штуки.

Настольная книга разработчика драйверов под Linux — это “Linux Device Drivers”. Книжка является исчерпывающим руководством по разработке и если что-то не хватает в книге, то это точно можно найти самостоятельно в исходниках ядра. Разумеется, данный пост не претендует на то, чтобы заменить эту замечательную книгу. Более того, написан он по мотивам прочтения оных трудов, но всё же не является кратким пересказом данной книги. Автор этих строк ставит собой цель заинтересовать читателя простотой и изяществом ОС Linux, и понизить порог вхождения людей в разработку драйверов. Поверьте — это очень просто!

Драйверы первого типа являются частью программного кода ядра (встроены в ядро). Соответствующие устройства автоматически обнаруживаются системой и становятся доступны для приложений. Обычно таким образом обеспечивается поддержка тех устройств, которые необходимы для монтирования корневой файловой системы и запуска компьютера. Примерами таких устройств являются стандартный видеоконтроллер VGA, контроллеры IDE-дисков, материнская плата, последовательные и параллельные порты.

Драйверы второго типа представлены модулями ядра. Они оформлены в виде отдельных файлов и для их подключения (на этапе загрузки или впоследствии) необходимо выполнить отдельную команду подключения модуля, после чего будет обеспечено управление соответствующим устройством. Если необходимость в использовании устройства отпала, модуль можно выгрузить из памяти (отключить). Поэтому использование модулей обеспечивает большую гибкость, так как каждый такой драйвер может быть переконфигурирован без остановки системы. Модули часто используются для управления такими устройствами как SCSI-адаптеры, звуковые и сетевые карты.

Файлы модулей ядра располагаются в подкаталогах каталога /lib/modules. Обычно при инсталляции системы задается перечень модулей, которые будут автоматически подключаться на этапе загрузки. Список загружаемых модулей хранится в файле /etc/modules. А в файле /etc/modules.conf находится перечень опций для таких модулей. Редактировать этот файл "вручную" не рекомендуется, для этого существуют специальные скрипты (типа update-modules).

Для подключения или отключения модулей в работающей системе имеются специальные утилиты.

· lsmod — выдает список загруженных в данный момент модулей.

· insmod — служит для загрузки или "установки" модуля из командной строки.

Пример:

insmod joystick

· rmmod — служит для выгрузки или "удаления" модуля .

Пример:

rmmod joystick

· modprobe — автоматически загружает модули. Для того, чтобы отобразить текущую конфигурацию всех модулей можно воспользоваться командой: modprobe –c.

Примечание

Хотя файлы модулей имеют суффикс .o, при использовании этих команд ссылки на модули указываются без упоминания этого суффикса. Например: при упоминании модуля, файл которого называется "joystick.o", вы должны использовать в командной строке просто "joystick".

И, наконец, для третьего типа драйверов устройств программный код драйвера поделен между ядром и специальной утилитой, предназначенной для управления данным устройством. Например, для драйвера принтера ядро отвечает за взаимодействие с параллельным портом, а формирование управляющих сигналов для принтера осуществляет демон печати lpd

Методы включения драйвера в ядро

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

Добавьте отладчик в само ядро, доступное через обычную консоль. Например, в случае kdb, который не был официальным отладчиком до ядра 2.6.35, нужно было с этого адреса FTP загрузить исходный код (два набора патчей: один — зависящий от архитектуры и один — не зависящий от архитектуры), а затем пропатчить ими исходный код ядра. Но, начиная с ядра 2.6.35, большая часть возможностей отладчика уже есть в официально выпущенном исходном коде ядра. В любом случае необходимо, чтобы поддержка kdb была добавлена в исходный код ядра при его компиляции, установке и загрузке. Отладочный интерфейс kdb будет предоставлен в загрузочном экране.

Установите в ядре минимальный отладочный сервер; клиент через определенный интерфейс (например, последовательный или Ethernet) будет подключаться к нему с удаленного хоста или из локального пользовательского пространства. Это kgdb, сервер gdb ядра, должен использоваться с gdb в качестве его клиента. Начиная с ядра 2.6.26, последовательный интерфейс этого сервера является частью официального релиза ядра. Но, если вам интересен сетевой интерфейс, вам все равно придется пропатчить ядро с использованием одного из релизов, взятых на странице проекта kgdb. В любом случае, вам потребуется включить в ядре поддержку kgdb, перекомпиировать, установить и загрузить новое ядро.

Пожалуйста, обратите внимание, что в обоих указанных выше случаях для того, чтобы в ядре выполнять отладку, необходим полный исходный код ядра, в отличие от случая сборки модулей, когда достаточно просто заголовочных файлов. Ниже рассказывается, как пользоваться отладчиком kgdb через последовательный интерфейс.

Файлы символьных устройств

Имеются два главных пути для общения модуля разговаривать с процессами. Первый идет через файлы устройства (подобно файлам в каталоге /dev), другой должен использовать файловую систему proc. Поскольку одной из главных причин написания модуля ядра, является поддержка некоего аппаратного устройства, мы начнем с файлов устройства.

Первоначальная цель файлов устройства состоит в том, чтобы позволить процессам связываться с драйверами устройства в ядре, и через них с физическими устройствами (модемы, терминалы, и т.д.).

Каждый драйвер устройства, который является ответственным за некоторый тип аппаратных средств, имеет собственный главный номер. Список драйверов и их главных номеров доступен в /proc/devices. Каждое физическое устройство, управляемое драйвером устройства имеет малый номер. Каталог /dev включает специальный файл, названный файлом устройства, для каждого из тех устройств, которые реально установлены в системе.

У драйверов устройств есть множество функций:

1. Обработка запросов записи-чтения от программного обеспечения управления устройствами. Постановка запросов в очередь.

2. Проверка входных параметров запросов и обработка ошибок.

3. Инициализация устройства и проверка статуса устройства.

4. Управление энергопотреблением устройства.

5. Регистрация событий в устройстве.

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

7. Проверка правильности завершения операции.

8. Передача запрошенных данных и статуса завершенной операции.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]