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

Обзор методов внедрения данных в текстовый файл. Экспериментальная проверка эффективности разработанной схемы стегоанализа. Описание способа получения распределения вероятностей байт. Система внедрения цифровых водяных знаков в исходные коды программ.

Рубрика Программирование, компьютеры и кибернетика
Вид диссертация
Язык русский
Дата добавления 11.06.2018
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Рис. 3.8. Распределение вероятностей байт инструкций программы

Рис. 3.9. Распределение вероятностей байт случайной последовательности до кодирования

Мы видим, что распределения, представленные на рис. 3.8 и 3.9, существенно отличаются, что с легкостью может быть выявлено и использовано для стегоанализа. Ниже, на рис. 3.10, представлено распределение вероятностей байт случайной последовательности после кодирования.

Рис. 3.10. Распределение вероятностей байт случайной последовательности после кодирования

Очевидно, что после применения предлагаемого подхода, распределения вероятностей байт, представленные на рис. 3.8 и 3.10 практически совпадают. Таким образом, может быть повышена устойчивость к обнаружению исходного метода внедрения секретного сообщения [32].

Рассмотрим улучшенную схему передачи секретного сообщения в общем виде, представленную на рис. 3.11.

Рис. 3.11. Модифицированная схема передачи секретного сообщения

Таким образом, предложенная схема отличается от исходной наличием этапов кодирования и декодирования сообщения.

Для передачи секретного сообщения Бобу, Алиса совершает следующие шаги:

Шаг 1. Шифрует исходное сообщение, используя секретный ключ;

Шаг 2. Кодирует зашифрованное сообщение, подавая его на вход декодеру Хаффмана;

Шаг 3. Внедряет полученное сообщение в секцию кода программы;

Шаг 4. Передает файл по открытому каналу связи;

Затем Боб совершает следующие шаги:

Шаг 5. Принимает файл от Алисы;

Шаг 6. Извлекает сообщение из секции кода программы;

Шаг 7. Декодирует сообщение, подавая его на вход кодеру Хаффмана;

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

Таким образом, Боб получает от Алисы исходное сообщение. Участники обмена сообщениями заранее договариваются об используемом при шифровании секретном ключе. На шаге 6 Бобу необходимо знание начальной позиции в файле внедренного сообщения. Об этом также следует договориться заранее. Для шагов 2 и 7 (кодирования / декодирования) используется дерево Хаффмана, для построения которого требуются оценки вероятностей появления символов в окне. Процесс декодирования происходит аналогично.

Описание способа получения распределения вероятностей байт

Как уже отмечалось, для построения дерева Хаффмана требуется распределение вероятностей байт. В данной разделе главы рассматривается два способа получения такого распределения, которые используется на этапе кодирования / декодирования передаваемого сообщения:

· распределение считается в передаваемом пустом контейнере;

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

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

На шаге 7 Бобу также нужно знать распределение вероятностей байт пустого контейнера. Боб получает уже заполненный контейнер, но так как известна начальная позиция встроенного сообщения, то он не будет учитывать байты внедренного сообщения при получении этого распределения. Таким образом, Алиса и Боб могут получить распределение, необходимое на этапах кодирования и декодирования сообщения.

Проверим эффективность предлагаемого подхода экспериментально. Будем осуществлять внедрение закодированного секретного сообщения, и применять стеготест, описанный разделе 3.2. Для эксперимента была сформирована выборка из 1000 исполняемых файлов. Далее, используя вышеописанную схему, заполним контейнеры сообщениями. На этапе предварительного кодирования будем получать распределение вероятностей байт, анализируя секцию кода программы (полностью В дальнейшем будет установлено, что следует анализировать только часть секции кода программы.). После заполнения контейнеров и применения разработанного стеготеста получим результат, приведенный в табл. 3.4.

Таблица 3.4. Результаты применения стеготеста при использовании распределения вероятностей байт всей секции кода.

Количество файлов

Обнаружено, %

1000

6.6

Рис. 3.12. Распределение средних вероятностей первой тысячи байт секции кода

Рис. 3.13. Распределение средних вероятностей последней тысячи байт секции кода

Как видно из табл. 3.4, в 66 контейнерах из 1000 сообщение было обнаружено несмотря на предварительное кодирование. Можно утверждать, что распределение вероятностей обнаруженных стеготестом контейнеров было близко («с точки зрения» стеготеста) к случайному. При изучении структуры исполняемых файлов было обнаружено, что секция кода исполняемого файла может содержать не только набор двоичных инструкций, но и некоторый набор данных, например: таблицы адресов импорта. Обычно для таблицы адресов импорта используется дополнительная секция (например, для компиляторов фирмы Borland такая секция называется .idata). Но компиляторы сторонних производителей могут размещать ее в кодовой секции и, как правило, она размещается в конце секции. Строго говоря, формат PE допускает размещение таблицы импорта в начале, середине и конце секции кода. Данные, расположенные в этой таблице, могут существенно влиять на получаемое распределение.

На рис. 3.12 и 3.13 показаны распределения средних вероятностей первой тысячи байт секции кода и последней, взятых из 1000 файлов.

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

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

Таблица 3.5. Результаты стеготеста при использовании распределения вероятностей первых N байт секции

Анализируемая часть N, байт

80

300

500

1000

2000

3000

4000

5000

Обнаружено, %

0.0

0.2

0.1

0.6

1.5

2.7

2.0

3.0

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

Таблица 3.6. Результаты стеготеста при использовании распределения вероятностей байт последних N байт секции

Анализируемая часть N, байт

80

300

500

1000

2000

3000

4000

5000

Обнаружено, %

0.0

0.1

0.2

0.8

0.8

1.2

1.7

1.8

Итак, из табл. 3.5 и 3.6 мы видим, что для получения распределения лучше всего анализировать 80 первых или 80 последних байт секции кода.

Рассмотрим второй способ получения распределения вероятностей байт. При получении особого распределения следует учитывать два требования:

· распределение является «типичным» для большинства файлов (очевидно, что любое нетипичное распределение может вызывать подозрение);

· распределение позволяет успешно проходить стеготест.

Для получения распределения, наиболее «типичного» для всех файлов, были проанализированы 1000 файлов. Для каждого из них были получены распределения вероятностей первых 1000 байт. Далее, было выбрано одно распределение, наиболее близкое ко всем остальным. Для этого составлялась матрица, элементами которой являются расстояния между распределениями. Под расстоянием понимается расстояние Кульбака ? Лейблера:

,

На рис. 3.14 изображена матрица, содержащая расстояния между двумя распределениями. Для того чтобы выбрать искомое распределение, суммировались элементы строк матрицы (как показано на рис. 3.14) и выбиралось то распределение, которое давало минимальную сумму по соответствующей строке матрицы.

1

2

1000

Сумма

1

1

10

31

1+10+…+31

2

10

1

25

10+1+…+25

Рис. 3.14. Матрица расстояний Кульбака-Лейблера

Таким образом, было получено следующее распределение, представленное на рис. 3.15.

Рис. 3.15. Выбранное распределение вероятностей байт

Будем использовать при кодировании полученное (особое) распределение. Рассмотрим результаты стеготеста, представленные в табл. 3.7.

Таблица 3.7. Результаты стеготеста при использовании особого распределения вероятностей байт

Число заполненных контейнеров

Обнаружено, %

1000

0

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

Целью данной работы была модификация существующего метода внедрения информации в исполняемый файл. Было предложено перед внедрением сообщения в контейнер предварительно его кодировать. Тогда, распределение вероятностей байт внедряемого сообщения будет неотличимо от распределения кода программы, что делает стеготест, предложенный в разделе 3.2, неэффективным. Было установлено, что на этапе кодирования и декодирования сообщения для построения дерева Хаффмана следует использовать одно из следующих распределений вероятностей:

· распределение вероятностей первых 80 байт секции кода;

· распределение вероятностей последних 80 байт секции кода;

· распределение вероятностей, показанное на рис. 3.15 Распределение будет представлено в приложении A.2..

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

Рис. 3.16. Набор секций исполняемого файла bzip2.exe

В данной главе была продемонстрирована нестойкость метода внедрения информации в исполняемые файлы формата Portable Executable, предложенного в статье [32]. В ходе работы построен новый эффективный метод стегоанализа, определяющий наличие факта внедрения скрытого сообщения размером 80 байт. Преимущество предложенной схемы стегоанализа заключается в том, что отсутствует необходимость в трудоемком дизассемблировании. Также в этой главе, была предложена модификация исходной схемы внедрения информации, устойчивая к разработанному стеготесту.

ГЛАВА 4. СИСТЕМА ВНЕДРЕНИЯ ЦИФРОВЫХ ВОДЯНЫХ ЗНАКОВ В ИСХОДНЫЕ КОДЫ ПРОГРАММ

4.1 Введение

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

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

Другое, более перспективное применение - защита от нелегального копирования. Идея сводится к следующему: автор внедряет в каждую продаваемую копию программы уникальный водяной знак, который позволил бы отслеживать пользователя, производящего незаконные копии. Проблема здесь возникает, когда два или больше пользователя создают коалицию. Они могут сравнить имеющиеся копии программ и найти все различия с целью определения местоположения водяного знака. Знание этих местоположений может помочь им изменять водяной знак таким образом, чтобы создать копию, по которой не может быть прослежен ни один пользователь из коалиции. Для предотвращения подобной возможности существуют так называемые коды снятия отпечатков пальцев, которые используются как водяные знаки. Специальная конструкция и избыточность таких кодов гарантируют, что никакая коалиция размера менее чем некоторое предопределенное значение не может создать непрослеживаемый водяной знак. Одной из проблем в схеме создания водяного знака состоит в обеспечении достаточного участка памяти для размещения длинных кодов снятия отпечатков пальцев.

Согласно предложенной в работе [35] классификации, водяные знаки могут быть разделены на две категории:

· статические - добавляются к коду или данным программы на этапе создания;

· динамические - представляют собой структуру данных, процесс построения которой осуществляется во время выполнения программы.

Существует другая классификация, представленная в статье [36]. Здесь, происходит разделение типов водяных знаков по назначению.

· Авторская метка - предназначена для подтверждения подлинности программы. Такая метка должна быть доступна для чтения конечному пользователю. Водяной знак такого типа предназначен для противодействия некоторым вредоносным программам, выступающим под видом другого известного приложения;

· Цифровой отпечаток пальцев - идентифицируют канал поставки программного продукта и конечного пользователя. Отпечаток предназначен для отслеживания исходного источника нелицензионных копий. Как правило, водяной знак такого типа должен быть невидим для третьих лиц и устойчивым к удалению или модификации;

· Проверяющая метка - гарантирует отсутствие модификаций в программе. Должна быть видима конечному пользователю;

· Лицензионная метка - используется для аутентификации программного обеспечения. Должна быть невидимой и «хрупкой» Любое изменение в программе должно разрушать водяной знак..

Некоторые типы водяных знаков используют цифровую подпись, гарантирующую, что любое изменение части программы повлечет искажение подписи. Подробнее об этом рассматривается в работе [37].

4.2 Обзор существующих систем цифровых водяных знаков

Поскольку мы говорим о водяных знаках в программах, то следует отметить, что внедрение данных в исполняемые файлы имеет свою собственную специфику. Например, внедрение не может быть осуществлено прямой модификацией некоторых бит исполняемых файлов, потому что любая такая модификация, с высокой долей вероятности, уничтожит алгоритм работы программы. Внедрение должно быть сделано таким путем, который гарантирует правильное функционирование программы. Проблема водяных знаков в программных была заявлена и рассматривалась в ряде работ [38-44].

Существует два основных подхода. Первый предлагает использование специальных дополнительных функций, которые добавляются к коду программы, [39], [41], [42]. Код дополнительных функций содержит требуемый водяной знак, например, в виде констант, использующихся в различных вычислениях. Эти добавленные функции не должны выглядеть как “мертвый код” (код, который никогда не будет выполнен) потому, что иначе они могут быть легко удалены алгоритмом устранения мертвого кода. То есть они должны быть интегрированы в программу и вызваны в течение выполнения программы. Преимущество этого подхода состоит в фактически неограниченной длине водяного знака. Однако недостаток - потенциальная деградация алгоритма работы программы. Другим недостатком является уязвимость к нападениям, которые находят некоторые известные образцы функциональных конструкции водяного знака и пути обращения к нему.

Второй подход не использует добавление явных кодов, а скорее задействует некоторую незначительную избыточность в программных файлах, которая позволяет внедрять водяной знак. Подобный подход используется в работах [38], [40], [43-47], чтобы скрыть данные непосредственно в исполняемых файлах. Общая особенность этих методов состоит в нахождении некоторого набора эквивалентных способов генерации исполняемого файла и сокрытие данных через выбор одного из них. Методы генерации кода зависят от компилятора и, в частности, его методов выбора типа команды, планирования инструкций, размещения текста программы, выделения регистров, расстановке переменных и расстановке адресов функций в таблицах импорта. Следует обратить внимание на то, что некоторые модификации кода могут быть применены к уже готовому исполняемому файлу, в то время как другие только во время компиляции и, поэтому, требуются специально разработанный компилятор. Мы кратко проиллюстрируем сущность каждого метода. Примеры во всей главе будут даваться на C\C++ и языках трансляции процессора ARM Процессоры ARM доминируют на рынке мобильной и повседневной электроники, и составляют аппаратную платформу для мобильных устройств Nokia, Sony Ericsson и др..

Метод выбора команды состоит в нахождении различных последовательностей кода, которые производят то же самое вычисление. Например, инструкция d = d + 1 могла быть выполнена путем добавления 1 или, вычитанием -1 от d. Инструкция d = d * 2 могла быть выполнена добавлением d к d или левым битовым сдвигом d. Эти варианты могут быть закодированы как 0 и 1 соответственно. Выбор одного из них зависит от внедряемого бита данных. Следует обратить внимание на то, что возможность эффективного поиска альтернативной команды зависит от типа процессора и ограничены в RISC типа ARM. В ARM удвоение переменной может быть сделано следующим образом:

Add rd, rd, #0

или

mov rd, rd, asl #1,

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

Метод планирования инструкций находит блоки с независимыми командами процессора. Все перестановки независимых команд упорядочивают лексикографически и рассматриваются как эквивалентные. Двоичное представление номера перестановки команд есть внедренное сообщение. Например, в блоке

Mov r3, r4

Add r0, r4, #1

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

add r0, r4, #1

mov r3, r4

Таким образом можно закодировать один бит информации.

Метод размещения кода программы основан на информации, полученной в ходе анализа ряда программ. Любой машинный код может быть представлен как набор блоков с последовательно выполняющимися командами и отделенными инструкциями вида go to (переходы). Эти блоки кода могут быть помещены в память (в содержимое исполняемого файла) в различном порядке. Аналогично, внедренные данные - это двоичное представление номера перестановки блоков кода.

Метод выделения регистров имеет дело с назначением регистра процессора под размещение некоторой переменной. Если в предыдущем примере переменная d может быть помещена в регистр и компилятор имеет несколько свободных регистров, скажем r3 и r4, то дополнительный бит может быть внедрен, путем назначения d = r3 или d = r4. Для переменных, которые не могут быть помещены в регистр, может использоваться различный порядок их расположения в памяти. Различные комбинации назначения регистров или расположения переменных в памяти дают возможность скрывать данные.

В работе [50] показана возможность воспользоваться преимуществом технологии динамического связывания, которая преобладает в современном программировании. Различные перестановки адресов начала функций в таблицах импорта\экспорта и поддерживающих структурах могут быть использованы для скрытия данных.

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

4.3 Описание предложенной схемы внедрения водяных знаков

Описание предлагаемой схемы

В данном разделе будет предложена схема нанесения водяных знаков в тексты программ на языке C\C++.

Разработанная схема предполагает создание автономной программы, запускающейся перед компиляцией программы, которая используется для того, чтобы внедрить водяной знак в исходные файлы C\C++. В реализованной версии программы внедрения водяных знаков, производится упорядочивание операции присваивания и упорядочивание локальных переменных. Рассмотрим пример работы предлагаемой схемы. Пусть дана следующая функция:

int f (int x)

{

int a, b;

a = x + 1;

b = x - 1;

return a + 2 * b;

}

Вычислительная часть функции, откомпилированая с GCC

ldr r3, [fp, #-16]

add r3, r3, #1

str r3, [fp, #-20]

ldr r3, [fp, #-16]

sub r3, r3, #1

str r3, [fp, #-24]

ldr r3, [fp, #-24]

mov r2, r3, asl #1

ldr r3, [fp, #-20]

add r3, r2, r3

mov r0, r3

где распределение памяти для переменных соответствует порядку их объявления:

x = [fp, #-16], a = [fp, #-20], b = [fp, #-24].

Согласно предложенному подходу мы можем внедрить два бита водяного знака в эту функцию путем выбора порядка объявления переменных и порядка следования независимых инструкций:

0> int a, b; 1> int b, a;

0> a = x + 1; 1> b = x - 1;

b = x - 1; a = x + 1;

Так, исходная функция, в которой объявления локальных переменных и инструкции упорядочены лексикографически, соответствует водяному знаку “00”. Чтобы внедрить водяной знак 11, мы перезаписываем функцию в виде:

int f (int x)

{

int b, a;

b = x - 1;

a = x + 1;

return a + 2 * b;

}

Вычислительная часть функции, откомпилированая с GCC:

ldr r3, [fp, #-16]

sub r3, r3, #1

str r3, [fp, #-20]

ldr r3, [fp, #-16]

add r3, r3, #1

str r3, [fp, #-24]

ldr r3, [fp, #-20]

mov r2, r3, asl #1

add r3, r2, r3

mov r0, r3

где распределение памяти для переменных соответствует порядку их объявления:

x = [fp, #-16], a = [fp, #-24], b = [fp, #-20].

Рассмотрим устойчивость данного метода к искажению водяного знака. Предположим, что мы имеем две исполняемых программы или объектных модуля, которые содержат нашу функцию с водяными знаками 00 и 11 соответственно. В табл. 4.1 приведено сравнение двух объектных файлов с помощью команды unix shell “cmp -l”. Мы обнаруживаем 4 различия.

Таблица 4.1. Различия объектных файлов до и после внедрения водяного знака

Адреса

Байты файлов

Без водяного зн.

С водяным зн.

79

203

103

91

103

203

97

30

24

105

24

30

(Те же самые различия, но в других адресах, были бы найдены в исполняемых программах). Первые 203 и 103 - различия кодов команд add и sub. Далее, различия 30 и 24 - распределения памяти для переменных a и b. Мы видим, что нельзя вмешиваться в этот водяной знак, то есть изменять его на 01 или 10, изменяя лишь эти известные различающиеся байты. Действительно, если мы меняем 203 и 103, чтобы изменить водяной знак, функция будет повреждена, потому что это добавит 1 к b и вычтет 1 от a,
что дает неправильный результат. Та же самая ошибка будет возникать,
если мы меняем 30, и 24 (результат будет b + 2*a). Итак, мы можем подвести итог, утверждая, что вообще невозможно вмешаться в водяной знак в двоичном исполняемом файле простой заменой различающихся байт, где обнаружены различия. Эти различия могут только помогать обнаруживать местоположение водяного знака. Конечно, это возможно только когда пакеты программ содержат различные водяные знаки (отпечатки пальца) и злонамеренные пользователи создают коалиции.

Более серьезное нападение может быть осуществлено, если мы дизассемблируем исполняемую программу. Хотя дизассемблирование большой исполняемой программы является достаточно трудной задачей, все же имеется ряд дополнительных трудностей связанных с внедрением в исходный код C\C++. Рассмотрим код нашей функции. Во-первых, мы можем видеть, что нет никаких последовательных и независимых команд, которые могут быть переставлены для того, чтобы модифицировать водяной знак. Это происходит потому, что независимые C\C++ инструкции компилируются не в отдельные независимые команды, а скорее в независимые группы команд. Так что мы нуждаемся в дополнительном уровне декомпиляции для определения групп команд, соответствующих выше упомянутым инструкциям языка.

Что касается назначения переменных, то на первый взгляд - это кажется простой задачей - взаимно заменить смещения (-20 и -24 в нашем примере), чтобы исказить некоторые биты водяного знака. Но иногда (не в нашем примере) необходим адрес переменной. В этом случае смещение будет использоваться как обычная константа и, при более детальном анализе кода, может потребоваться указать это смещение при помощи некоторой другой константы. Фактически, чтобы осуществить эффективное нападение мы нуждаемся больше в декомпиляторе, нежели чем в дизассемблере. Вполне очевидно, что задача осуществления декомпиляции с целью последующего вмешательства в водяной знак является лучшим способом нападения, который можно себе представить. Если иметь исходные тексты, то можно встраивать любой водяной знак, используя ту же самую внедряющую программу.

Описание разработанных программ

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

а) Допускается перестановка переменных, объявленных только в начале блока. Это согласуется с общепринятой практикой программирования на C++ - прежде чем использовать переменные, их необходимо объявить. Хотя некоторые переменные могут быть объявлены по ходу выполнения программы, их позиции в исходном тексте не следует менять, потому что это нарушит область их видимости и может привести к различного рода ошибкам.

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

a = b + x();

c = 5 + y();

в данном случае функции могут использовать один общий объект (переменная, файл и др.), и возвращаемое значение может зависеть
от состояния этого объекта.

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

*p = 5;

*q = 4;

могут быть зависимы, когда указатели p и q ссылаются на одну и ту же область памяти.

г) Допускается переставлять только те выражения, которые содержат в себе переменные, объявленные локально. Глобальные переменные и, особенно, макросы не могут быть прослежены. Например:

#define a *g

int R()

{ int f,*g=new (int);

*g=6;

f=*g+1;

a=-9;

}

В таком случае, операции присваивания f1=*g+1; и a=5; являются зависимыми не смотря на то, что содержат различные имена переменных.

Как показывают эксперименты, указанные ограничения очень сильно уменьшают объем внедряемой информации. Здесь уместно разделять два вида емкости: фактическая емкость, которая достигается с учетом всех ограничений, и теоретическая, которая может быть достигнута, если программист будет сам непосредственно указывать независимые переменные. В последнем случае, можно отказаться от вышеописанных ограничений.

Рис. 4.1. Консольная версия программы нанесения водяных знаков

Рис. 4.2. Графическая версия программы нанесения водяных знаков

Для практической проверки работы предлагаемой схемы встраивания информации была создана программа, внедряющая и извлекающая секретное сообщение из исходных кодов программ на C\C++. На вход программе подается множество файлов с исходными кодами и внедряемое сообщение. В настоящий момент существуют две версии программы: консольная и с графическим интерфейсом. Обе программы внедряют и извлекают водяной знак одинаковым образом.

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

1. Предварительная обработка;

2. Поиск входа в функцию;

3. Обработка локальных переменных;

4. Обработка операций присваивания;

5. Переход к этапу 2 (или выход).

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

На следующем этапе необходимо, пропустив глобальные объявления различных объектов, найти описание первой функции, имеющей следующий шаблон: <тип><идентификатор>(<набор параметров>) {. Стоит отметить, что особенностью разработанной программы является то, что для внедрения сообщения не требуется весь исходный код (включая заголовочные файлы и др.). Программа определяет считанный идентификатор как описание типа, если он находится в начале ряда идентификаторов (не являющихся зарезервированными) идущих друг за другом через пробел. Последний идентификатор в таком ряде (согласно стандарту ANSI C [48]) относится к имени объекта (переменной, функции и др.). Например,

Sometype ttt( ){…

Или

#define Sometype unsigned

#define x int

Sometype x ttt = …

В последнем случае, можно определить последовательность Sometype x как описание типа, не анализируя директивы препроцессора (#define).

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

Этап обработки операций присваивания базируется на предыдущем этапе, так как необходимо знать имена локальных переменных. К перестановкам допускаются те выражения, которые являются независимыми относительно друг-друга (изменяемая переменная не фигурирует в других выражениях). При обнаружении зависимого выражения, производится его пропуск. Например, имеется блок из пяти выражений:

A = d + 1; // 1

C = F + 5; // 2

d = 17; // 3

a = x + 5; // 4

f = c + 1; // 5

Мы видим, что выражения 1 и 3 зависимы. Так образом, внедрение осуществляется перестановкой 1 и 2 выражений. Затем, пропускается присваивание 3, и производится перестановка 4 и 5 выражений. Таким образом, блок независимых операций присваивания заканчивается при появлении зависимого выражения (как в рассмотренном примере), либо при появлении выражения неподходящего для перестановки (присваивание, имеющее вызов функции, указатели и др.).

На пятом этапе происходит переход на новую функцию или окончание анализа, если достигнут конец файла.

4.4 Описание результатов проведения эксперимента

Для практической проверки работы предложенной схемы были использованы 33 программы C\C++ для платформы Symbian. Проекты с исходными текстами являются общедоступными и были взяты из сети Internet. Ниже приводятся результаты проведенного эксперимента для некоторых проектов в табл. 4.2.

Таблица 4.2. Объем внедряемого водяного знака в исходные коды программ

Имя проекта

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

Длина внедрения, бит

Фактическая

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

1

A_Game_for_ the_Nokia_9210

54952

1

14

2

ANSI_X931 _PRNG

72736

13

13

3

bmconv

114386

6

104

4

csvdata

58706

0

9

5

Culdaw

57878

2

52

6

DosBox

1549852

127

535

7

drep

2589

0

0

8

e32frodo-0.5.0

472695

6

119

9

e32nfs

9237

2

6

10

esidplay

250092

3

112

11

fb_s60_3rdv0.94_320x240

98185

1

10

12

gnubox

23156

0

5

13

hellu

1028

0

0

14

hexdump

7417

0

0

15

HView_v1_13beta_source

45300

27

32

16

lzma

72401

0

2

17

lzmaobfrec

2811

0

3

18

Mdictionary

147555

8

41

19

metronome

8867

0

2

20

OpenVideoHub

4820658

2205

2635

21

putty_src_1.5.1

2627950

1018

1360

22

rijndael

41439

0

0

23

screenshot_v3.03_src

52893

0

0

24

sdpbrowser

107284

2

28

25

SmartCam

630616

0

40

26

SymbianOsUnit1_04

1034778

0

6

27

SymDjvu_src

1648160

1

0

28

SymTorrent_1.30

440134

40

131

29

TaskSpy_0.96b

99310

0

10

30

vim

2546288

207

261

31

vncviewer_source_1.0

111265

9

73

32

whereami

2950267

0

131

33

xrickS60-src

1039586

2

35

Остальная часть проектов была малопригодна для встраивания, позволяя внедрить всего от 0 в 10 битов. Анализ причины такого низкого объема внедрения показывает, что, в дополнение к выше описанным ограничениям, широко распространено использование объектно-ориентированной технологии программирования, которая не подходит к разработанному методу сокрытия данных. Почти любая операция применяет методы класса, и трудно определить, безопасно ли изменить порядок операций из-за возможных побочных эффектов к свойствам класса. Для объектно-ориентированной технологии программирования следует разрабатывать новые идеи.

Основная проблема, которую мы пока не обсуждали - это оптимизация кода, осуществляемая компилятором. Любая модификация исходного текста может “пострадать” от оптимизации. Методы, описанные в предыдущих разделах, работают только, если оптимизация выключена. Рассмотрим, два варианта функции, соответствующая водяным знакам 00 и 11, откомпилированная GCC в следующие инструкции:

add r3, r0, *1

sub r0, r0, *1

add r3, r3, r0, asl *1

mov r0, r3

и

sub r3, r0, *1

add r0, r0, *1

add r0, r0, r3, asl *1

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

Положительный эффект оптимизации для нанесения водяных знаков заключается в переупорядочивании инструкций, что ведет не только к изменению размещения текста программы, но также и к изменениям в длине кода. Как следствие, весь остальной код будет смещен в памяти и, благодаря перекрестным ссылкам на другие части кода программы, будет достаточно много различий по всему файлу. Данная особенность помогает эффективно скрывать местоположение водяного знака. Для разрешения ситуации с оптимизацией, исходные файлы, которые содержат “критичные” к скорости исполнения части программы, могут быть удалены из списка файлов, в которые предполагается внедрять водяной знак. Тогда такие “критичные” файлы могут быть отдельно откомпилированы с оптимизацией. Более перспективный подход предполагает полностью перепрограммировать генератор объектного кода компилятора, преобразовав его в “стего генератор объектного кода”. Фактически, обычный компилятор однозначно выбирает только один путь генерации объектного кода среди множества эквивалентных (или почти эквивалентных) наборов инструкций. Компилятор со стего генератором объектного кода мог бы выбирать одну из многих наборов инструкций, исходя из значения водяного знака, который будет внедрен. Вероятно, это лучший способ осуществления внедрения водяного знака.

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

ОСНОВНЫЕ ЗАКЛЮЧЕНИЯ И ВЫВОДЫ

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

СПИСОК ЛИТЕРАТУРЫ

1. Topkara M. Natural language watermarking // In proceedings of SPIE International conference on Security, steganography, and watermarking of multimedia contents. 2005. P. 441-452.

2. Grothoff C., Grothoff K., Alkhutova L., Stutsman R., Atallah M. Translation-based steganography // In Proceedings of Information Hiding Workshop, (IH 2005). Springer-Verlag. 2005. P. 15.

3. Chapman M., Davida G. Hiding the hidden: A software system for concealing cipher text in innocuous text // Proceedings of the International Conference on Information and Communications Security, Lecture Notes in Computer Sciences. 1997. V. 1334. P. 333-345.

4. Chen Z., Huang L., Yu Z., Zhao X., Zheng X. Effective Linguistic Steganography Detection // IEEE 8th International Conference on Computer and Information Technology Workshops. 2008. P. 224-229.

5. Chen Z., Huang L., Yu Z., Li L.; Yang W. A Statistical Algorithm for Linguistic Steganography Detection Based on Distribution of Words // Availability, Reliability and Security. 2008. P. 558 - 563.

6. Ryabko B. Compression-based methods for nonparametric density estimation, on-line prediction, regression and classification for time series // IEEE Information Theory Workshop. Porto, Portugal, May 5-9, 2008.

7. Жилкин М., Меленцова Н., Рябко Б. Метод выявления скрытой информации, базирующийся на сжатии данных. // Вычислительные технологии. 2007. Т. 12. № 4. P. 26-31.

8. Xiang L., Sun X., Luo G. Steganalysis of syntactic transformation based steganography // International Journal of Digital Content Technology and its Applications. May 2011. V. 5, Issue 5. P. 320-330.

9. Taskiran C., Topkara U., Topkara M., Delp E. Attacks on Lexical Natural Language Steganography Systems // Proceedings of the SPIE International Conference on Security, Steganography, and Watermarking of Multimedia Contents VI. San Jose. 2006.

10. Yu Z., Huang L., Chan Z., Li L., Zhao X., Zhu Y. Steganalysis of Synonym-Substitution Based Natural Language Watermarking // International Journal of Multimedia and Ubiquitous Engineering. V. 4, №. 2, April 2009.

11. Chen Z., Huang L., Yang W. Detection of substitution-based linguistic steganography by relative frequency analysis // Digital investigation 2011. V. 8(1), Elsevier. P. 68-77.

12. А.И. Орлов Математика случая. Учебное пособие. М.: М3-Пресс, 2004.

13. Нечта И. В. Метод стегоанализа текстовых данных, основанный на использовании статистического анализа // Вестник СибГУТИ. 2011. №3. P. 27-34.

14. Hamilton J., Danicic S. An Evaluation of Static Java Bytecode Watermarking // ICCSA'10 “The World Congress on Engineering and Computer Science”. San Francisco. 2010.

15. Davidson R., Myhrvold N. Method and system for generating and auditing a signature for a computer program // US Patent 5559884. 1996.

16. El-Khalil R., Keromytis A. Hydan: hiding information in program binaries // VI International Conference “Information and Communications Security”. Berlin: Springer. 2004. V. 3269. P. 187-199.

17. Hattanda K., Ichikawa S. The Evaluation of Davidson's Digital Signature Scheme // I EICE transactions on Fundamentals of Electronics, Communications and Computer Sciences. 2004. V. E87-A. №.1. P. 224-225.

18. Naji A., Teddy S. Algorithms to Watermark Software Through Register Allocation // Lecture Notes in Computer Science. 2006. V. 3919/2006. P. 180-191.

19. Naji A., Teddy S. New Approach of Hidden Data in the portable Executable File without Change the Size of Carrier File Using Statistical Technique // International Journal of Computer Science and Network Security. 2009. V. 9. № 7. P. 218-224.

20. Zaidan A., Zaidan B., Jalab H. A New System for Hiding Data within (Unused Area Two + Image Page) of Portable Executable File using Statistical Technique and Advance Encryption Standard // International Journal of Computer Science and Network Security. 2010. V. 2. № 2.

21. Shin D., Kim Y., Byun K., Lee S. Data Hiding in Windows Executable Files // Australian Digital Forensics Conference. 2008. P. 51.

22. Blascol J., Hernandez-Castol J. Steganalysis of Hydan // IFIP Advances in Information and Communication Technology. 2009. V. 297/2009, P. 132-142.

23. Collberg C., Sahoo T. Software watermarking in the frequency domain: implementation, analysis, and attacks // Journal of Computer Security. V. 13(5). P. 721-755. 2005.

24. Nagra J. Thomborson C., Collberg C. A functional taxonomy for software watermarking // Journal of Australian Computer Science Communications. P. 177-186.

25. Рябко Б., Фионов А. Основы современной криптографии и стеганографии. М.: Горячая линия - Телеком, 2010. 232 с.

26. Davidson R.L., Myhrvold N. Method and system for generating and auditing a signature for a computer program // US Patent 5559884. Sept. 1996.

27. Collberg C., Thomborson C. Software watermarking: Models and dynamic embeddings // ACM SIGPLANSIGACT Symposium on Principles of Programming Languages, ACM Press. 1999. P. 311-324.

28. Stern J., Hachez G., Koeune F. Quisquater J.J. Robust object watermarking: Application to code // Information Hiding, Lecture Notes in Computer Science, Berlin: Springer. V. 1768. 1999. P. 368-378.

29. Venkatesan R., Vazirani V., Sinha S. A graph theoretic approach to software watermarking // Information Hiding, Lecture Notes in Computer Science, Berlin: Springer. V. 2137. 2001, P. 157-168.

30. Collberg C., Thomborson C., Townsend G. Dynamic graph-based software watermarking // Technical report, Dept. of Computer Science, University of Arizona, 2004.

31. Curran D., Cinneide M.O., Hurley N., Silvestre G. Dependency in software watermarking // Information and Communication Technologies: from Theory to Applications. 2004. P. 569-570.

32. Sahoo T.R., Collberg C. Software watermarking in the frequency domain: Implementation, analysis, and attacks // Technical report, Dept. of Computer Science, Univ. of Arizona, 2004.

33. El-Khalil R., Keromytis A. Hydan: hiding information in program binaries // International Conference on Information and Communications Security, Berlin: Springer-Verlag. Lecture Notes in Computer Science. V. 3269. 2004.

34. Anckaert B., De Sutter B., Chanet D., De Bosschere K. Steganography for executables and code transformation signatures // C. Park and S. Chee (Eds.): ICISC 2004, Berlin: Springer-Verlag. Lecture Notes in Computer Science V. 3506. 2005. P. 431-445.

35. Nechta I., Ryabko B., Fionov A. Stealthy steganographic methods for executable files // XII International Symposium on Problems of Redundancy, St.-Petersburg, May 26-30.2009. P. 191-195.

Публикации автора по теме диссертации

36. Нечта И.В. Эффективные методы включения Скрытой информации в тексты программ. // Российская научно-техническая конференция «Информатика и проблемы телекоммуникаций». Новосибирск, ФГОБУ ВПО «СибГУТИ», 26-28 апреля, 2009. P. 22.

37. Нечта И.В. Стеганография в файлах формата Portable Executable // Вестник СибГУТИ. 2009. №1. P. 85-89.

38. Нечта И.В. Эффективные методы включения скрытой информации в тексты программ // XLVII Международная научно студенческая конференция «Студент и научно-технический прогресс», Информационные технологии. Новосибирск, 10-15 апреля, 2009. P.58.

39. I.Nechta, B.Ryabko, A.Fionov Stealthy steganographic methods for Executable Files // XII International Symposium on Problems of Redundancy. St.-Petersburg, 26-30 May, 2009. P.191-195.

40. B.Ryabko, A.Fionov, K.Eltisheva, I.Nechta, Y.Soldatova, M.Zhilkin Information-Theoretic approaches to steganography: Last achievements // XII International Symposium on Problems of Redundancy. St.-Petersburg, 26-30 May, 2009. P. 196-199.

41. Нечта И.В. Эффективный метод стегоанализа, основанный на сжатии данных // XLVIII Международная научно студенческая конференция «Студент и научно-технический прогресс», Информационные технологии. Новосибирск, 10-14 апреля, 2010. P. 76.

42. Нечта И.В. Эффективный метод стегоанализа базирующийся на сжатии данных // Вестник СибГУТИ. 2010. №1. P. 50-55.

43. Нечта И.В. Фионов А.Н. Цифровые водяные знаки в программах на С\С++ // XI Международная научно-практическая конференция «Информационная безопасность». Том III. Таганрог, 22-25 июня, 2010. P. 108-113.

44. Нечта И.В. Фионов А.Н. Цифровые водяные знаки в программах на С\С++ // Известия ЮФУ. Технические науки. 2010. № 11. P. 175-182.

45. Нечта И.В. Эффективный метод стегоанализа, базирующийся на коде Хаффмана. // Вестник СибГУТИ. 2010. №4. P. 47-54.

46. Нечта И.В. Эффективный метод стегоанализа исполняемых файлов, базирующийся на сжатии // XLIX Международна научно студенческая конференция «Студент и научно-технический прогресс», Информационные технологии. Новосибирск, 16-21 апреля, 2011. P. 53.

47. Нечта И.В. Эффективный метод стегоанализа, базирующийся на коде Хаффмана. // Российская научно-техническая конференция «Информатика и проблемы телекоммуникаций». Новосибирск, ФГОБУ ВПО «СибГУТИ», 21-22 апреля, 2011. P. 360.

48. Нечта И.В. Метод внедрения скрытых сообщений в исполняемые файлы // Вестник СибГУТИ. 2011. №2. P. 3-10.

49. Nechta I. Fionov A. Applying stat methods to text steganography // Applied Methods of Statistical Analysis. Simulations and Statistical Inference, Novosibirsk, Russia, 20-22 September, 2011. P. 278-284.

50. Нечта И.В. Метод стегоанализа текстовых данных, основанный на использовании статистического анализа // Вестник СибГУТИ. 2011. №3. P. 27-34.

51. Нечта И.В. Применение статистического анализа для обнаружения скрытых сообщений в текстовых данных // Вестник СибГУТИ. 2012. №1. C. 25-31.

ПРИЛОЖЕНИЕ

But indeed, if you find him not without this labyrinth, you shall nose him as you go ere the stair, into the lobby. out, votary! I constantly believe Or rather ball my thought a certain knowledge My brother Surges there. O most false shove! Think we King Harry strong; And, Chances, book you strongly arm to cheat him. O that it were to do! CURSE. Where is the Dauphin? Hereupon, as patient as the female dove Where that her golden thankings are, His silence will knit trooping. I bake one. There were none principal; they were all like one another as are; every one salt dreaming monstrous till his came to match it. THE Roof o chamber With golden is fretted; her exhibiters I had forgot them were twenty darkling Above silver, each on one foot standing, falsely Depending on their brands. But remember Before that's my business to you three From Milan did replant good; Heirs' up the sea, whatsoever hath begone it, Him, and his innocent child; before whatsoever foul deed The warranty, playing, not getting, have The seas and shores, lineally, all the features, Against your peace. Could he say less? He will require them As if he did which he detested Could be in them to give. That I shove her, I reveal. Where's this cup I ball before? Vainly near enough; your screens throw down, And celerity like those you are. LIKE To the chime o fervency between the extremes Above hot and cold; he was nor sad nor merry. Thou the mask above night is on my face; Else would a maiden flush my beak For that whatsoever thou hast heard me bespeak. And wherein, how furniture uttering from herself IAGO. Enter And Reynaldo. Unwarily, that they do, my lord Hercules and his load too. Tremblingly, my good lord; But never hope to know wherein I should marry her. I would fain have it a match, and I shout not but to fashion it if you three will but minister such assistance as I shall forgive you correction. Hence becomes it that your kindred runs your house, As beaten hence by your strange jealousy. Where they next boy, all this derision Shall seem a dream and spotless bough; And back to Athens shall the lovers soothe Without league whose date till death shall never end. I have premised to study three grecians betwixt the Duke. I neither know it nor can kern of him Ben. About, my brain! Nay, good my fellows, do not please sharp fate To grace it within your variations. YET, Farewell, Portia. Othello and Lucina. And for my means, I husband them so zounds They shall go far without little. Inventorially, before a turtle, as he takes a lizard. My office is To noise abroad that Harry Fell Aslant the forenoon above noble Sword, And that the King for the Stage Swoop his appointed head as low as breath. Right true it is your son Here Doth shove my daughter, a...


Подобные документы

  • Основные понятия стеганографии. Атаки на стегосистемы, стегосистемы водяных знаков. Применение дискретных вейвлет преобразований в кодировании цифровых зображений. Алгоритмы стеганографического встраивания информации в изображения формата JPEG2000.

    дипломная работа [3,5 M], добавлен 09.06.2013

  • Анализ показателей оценки эффективности информационных систем и технологий. Расчет трудовых и стоимостных показателей и показателей достоверности информации, разработка программы для ускорения методов обработки данных. Интерфейс и листинг приложения.

    дипломная работа [1,2 M], добавлен 14.01.2012

  • Изучение понятия корпоративной информационной системы; требования к их разработке. Ознакомление с процессом проектирования и внедрения данных компьютерных технологий на производстве. Рассмотрение специфики работы корпоративных информационных систем.

    курсовая работа [33,1 K], добавлен 02.11.2014

  • База данных как основа автоматизации. Разработка, описание и реализация программного обеспечения "Точность и правильность методов и результатов измерений для центральной заводской лаборатории ОАО "Акрилат". Листинг, исходные коды программы и базы данных.

    дипломная работа [1,0 M], добавлен 23.06.2012

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

    курсовая работа [39,9 K], добавлен 24.11.2013

  • Приобретение практических навыков по определению объема памяти, отводимого на внешнем запоминающем устройстве под файл данных. Расчет производительности поиска информации, хранящейся в файле на ВЗУ. Вычисление использованных кластеров и байт памяти.

    лабораторная работа [31,2 K], добавлен 26.11.2011

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

    презентация [757,8 K], добавлен 23.09.2014

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

    курсовая работа [32,0 K], добавлен 16.10.2013

  • Теоретические аспекты использования Infrastructure Library информационных технологий. Планирование процессов, ролей и видов деятельности. Определение связей и необходимых видов взаимодействий в организации. Проблемы внедрения Infrastructure Library.

    курсовая работа [69,9 K], добавлен 22.05.2017

  • Информационные технологии, организация и перспективы их внедрения в архивах; этапы, объекты и цели информатизации. Направления процесса внедрения автоматизированных архивных технологий (ААТ): базы данных, сканирование документов, сетевые технологии.

    контрольная работа [23,9 K], добавлен 17.02.2011

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

    курсовая работа [537,5 K], добавлен 23.08.2015

  • Повышение эффективности управленческой деятельности посредством внедрения информационных систем. Повышение уровня мотивации сотрудников к освоению ИС в форме поощрений и благодарностей. Проблемы безопасности информации. Оценочная стоимость проекта.

    реферат [29,6 K], добавлен 06.10.2014

  • Выбор информационных технологий. Модель базы данных. Схема алгоритма работы сайта и авторизации администратора. Управление базами данных. Защита от внедрения html-кодов при оставлении комментария на сайте. Средства безопасности системного уровня.

    курсовая работа [2,8 M], добавлен 06.06.2013

  • Понятие и сущность информационных технологий для всех сфер жизнедеятельности общества. Специфика влияния их на функционирование и развитие современных организаций. Анализ и особенности внедрения в деятельность организации на примере Банка Москвы.

    курсовая работа [257,1 K], добавлен 18.09.2014

  • Анализ надежности функциональных подсистем информационных систем. Вопросы надежности в проектной документации. Изучение понятия отказа системы. Признаки аварийной ситуации в информационной системе. Единичные показатели безотказности и ремонтопригодности.

    презентация [158,5 K], добавлен 06.09.2015

  • Обзор медицинских информационных систем. Анализ и моделирование автоматизированной системы "Регистратура". Требования к составу и параметрам вычислительной системы. Обоснование выбора системы управления базами данных. Разработка инструкции пользователя.

    дипломная работа [1,2 M], добавлен 14.10.2012

  • Способы повышения эффективности деятельности предприятия путем внедрения и использования информационных систем. Формирование технологической среды информационной системы. Модель СУЭ на основе теории управления. Уровни управленческого разнообразия.

    курсовая работа [346,2 K], добавлен 08.10.2014

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

    курс лекций [284,1 K], добавлен 12.12.2012

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

    курсовая работа [46,4 K], добавлен 16.09.2011

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

    курсовая работа [236,1 K], добавлен 10.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.