Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Рисунок 1. Драйвер не загружен

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

Рисунок 2. Драйвер загружен. Ключевая информация не введена

Только после того, как МКД осуществит запись ключевой информации в БКИ, входные данные, передаваемые драйверу, поступают на вход БКП. Ключевая информация предварительно формируется модулем генерации ключевых данных (рис. 3).

Рисунок 3. Драйвер загружен. Ключевая информация введена

Сразу отметим, что операции загрузки драйвера и записи в него ключевых данных являются привилегированными. Выполнить их может только администратор системы, имеющий права root. Таким образом выполняется требование по ограничению доступа персонала к ключевой информации.

Реализация СКЗИ

Системный вызов sys_gost

Как было сказано выше, в состав ядра ОС Linux дополнительно вводится новый системный вызов sys_gost. Механизм системных вызовов был рассмотрен в статье «Перехват системных вызовов в ОС Linux» [1].

Добавим запись о системном вызове sys_gost() в таблицу системных вызовов sys_call_table (файл /usr/src/linux/arch/i386/kernel/entry.S):

ENTRY(sys_call_table)

           .

           .

           .

    .long SYMBOL_NAME(sys_gost)

    /* 226. Новый системный вызов! */

Наш системный вызов имеет порядковый номер 226. Добавим его в заголовочный файл /usr/src/linux/include/asm-i386/unistd.h, в котором содержится перечень всех системных вызовов ядра и макросы для работы с ними:

    #define __NR_gost   226    /* Новый системный вызов! */

В файл /usr/include/bits/syscall.h добавим запись:

    #define SYS_gost __NR_gost

Теперь осталось написать код, реализующий системный вызов sys_gost(). Вот как он выглядит:

asmlinkage int sys_gost(char * block, size_t count, int flag)

{

    return 0;

}

Этот код мы добавим в файл /usr/src/linux/fs/open.c.

Как мы видим, системный вызов sys_gost принимает три параметра: указатель на буфер с данными char *buf, размер буфера off_t count и флаг int flag. Третий параметр flag служит для информирования о начале/завершении выполнения операции криптопреобразования.

Для того чтобы процесс (модуль МВ) мог обратиться к данному системному вызову, в каталоге /usr/include/ создадим заголовочный файл gost.h следующего содержания:

#include <sys/types.h>

#include <linux/unistd.h>

 

#define E_START  1

#define E_STOP   0

 

static inline _syscall3(int,gost,char *,buf,off_t,count,int,flag)

Здесь E_START и E_STOP – флаги, информирующие о начале/завершении операции криптографического преобразования. Макрос _syscall3 сообщает компилятору, что он должен сделать, встретив в исходном тексте программы обращение к системному вызову sys_gost. Этот макрос определен в файле /usr/src/linux/include/asm-i386/unistd.h:


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100