Учебная работа. Дипломная работа: Криптографическая защита информации 2
Калужский филиал
Факультет «Базовых Наук»
Кафедра «Программного Обеспечения ЭВМ , Информационных Технологий и Прикладной Арифметики»
РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К ВЫПУСКНОЙ РАБОТЕ БАКАЛАВРА
Тема:
“________________________________________________
________________________________________________
________________________________________________
________________________________________________”
Студент (___________)
Группа
Управляющий работы (___________)
Калуга, 2007 г.
Содержание
1. Техническое задание
1.1. Общие сведения
1.2. Предназначение и цели сотворения системы
1.3. Требования к программке либо программному изделию
1.4. Требования к надежности
1.5. Условия эксплуатации
1.6. Требования к составу и характеристикам технических средств
1.7. Требования к информационной и программной сопоставимости
1.8. Требования к программной документации
2. Экспериментальная часть
2.1. Постановка задачки
2.2. Обоснование выбора темы
2.3. Обоснование выбора языка программирования
2.4. Обоснование выбора среды разработки
2.5. Обоснование выбора платформы
2.6. Базы криптографии
2.7. Предпосылки выбора метода
2.8. метод Rijndael
3. Конструкторская часть
3.1. Функциональное предназначение
3.2. Управление программера
4. Технологическая часть
4.1. Предназначение программного продукта
4.2. Предназначение и условия внедрения программного продукта
4.3. Тестирование программного продукта
4.4. Воззвание к программке
4.5. Управление юзера
4.6. Сообщения оператору
5. Заключение
6. Перечень использованных источников
1. Техническое задание
1.1. Общие сведения
Результатом данной выпускной работы является программный продукт, предоставляющий криптографическую защиту для секретной инфы, лежащей на разных носителях инфы, от несанкционированного доступа сторонних лиц. Принцип защиты заключается в двунаправленном шифровании всех защищаемых данных. Доступ к данным предоставляется средством виртуальных дисков, создаваемых программным продуктом, содержимое которых полностью и стопроцентно зависит от юзера и никак не ограничивается ни по типу, ни по содержанию. содержимое всякого такового диска хранится в виде единственного файла-образа, который быть может размещен на всех пригодных носителях инфы: носитель должен позволять производить как чтение, так и запись. Программный продукт реализует виртуальный диск на уровне физического форматирования и не накладывает ограничений на внедрение создаваемых им виртуальных логических дисков, как-то: формирование хоть какой файловой системы и случайный посекторный доступ к диску.
1.2. Предназначение и цели сотворения системы
Нужно создать и воплотить программный продукт, который бы предоставлял удачный интерфейс для надежного хранения секретной инфы на виртуальных дисках и не накладывал ограничений на работу с данными дисками сверх тех, что введены операционной системой.
1.3. Требования к программке либо программному изделию
Данный программный продукт разрабатывается для использования в операционных системах MS Windows начиная с Windows2000 и в наиболее поздних. Программный продукт, вследствие собственной специфичности, должен обеспечивать очень надежную и размеренную работу для обеспечения надежного хранения секретной инфы, также не должен обеспечивать защиту инфы вследствие каких-то аппаратных сбоев, повреждения носителя или умышленной атаки на программку во время конкретной работы (чтения/записи данных на носитель).
1.4. Требования к надежности
Программный продукт должен размеренно работать на всех окончательных версиях (free build) предъявленных операционных систем, не снижая надежность хранения зависимо от каких-то опций системы, установленных приложений либо действий юзера во время работы приложения (не считая случаев предумышленного взаимодействия с приложением: отладка, некие виды нарушающее его гомеостаз«>стресс реакция организма на воздействие , нарушающее его гомеостаз)-тестов, модификация файлов программного продукта).
1.5. Условия эксплуатации
Программный продукт ориентирован на общее внедрение и не просит каких-то специфичных познаний в области криптографии и может употребляться хоть каким человеком, имеющим базисные способности работы с компом в операционной системе MS Windows.
1.6. Требования к составу и характеристикам технических средств
Для работы приложения нужно:
1. операционная система семейства Microsoft Windows не ниже Windows 2000;
2. 50 Кб вольного места на твердом диске + файлы образов дисков;
3. Требования к ресурсам оперативки: для загрузчика порядка 4Мб, для драйвера в районе 100Кб.
1.7. Требования к информационной и программной сопоставимости
Для проектирования программки нужно применять такие среды проектирования как Microsoft Visio и Microsoft Word. Для реализации данного программного продукта употребляется среда разработки RadAsm с MASM32, также последующие вспомогательные программки: OllyDbg, DebugView, VMware Workstation и Restorator.
1.8. Требования к программной документации
Представленная выпускная работа обязана содержать внутри себя последующие материалы:
1. Титульный лист с подписями.
2. Утвержденное задание на дипломный проект (работу).
3. Техническое задание на разработку.
4. Содержание (с постраничной разметкой).
5. Основная часть текста, разбитая на разделы:
Экспериментальная часть.
Конструкторская часть.
Технологическая часть.
6. Заключение (главные результаты и способности внедрения).
7. Перечень использованных источников.
8. Приложения.
Графическая часть может содержать последующие части:
1. схема структурная АСОИ,
2. схема многофункциональной структуры,
3. схема организационной структуры,
4. схема структурная КТС,
5. схема метода,
6. схема программки (подпрограммы, программного модуля, пакета прикладных программ),
7. схема информационной (математической и т.д.) модели,
8. схема прохождения и обработки инфы,
9. формы входных и выходных документов,
10. теоретический чертеж,
11. экспериментальные данные.
2. Экспериментальная часть
2.1. Постановка задачки
Данный программный продукт должен предоставлять обычной и надежный метод криптографической защиты секретной инфы с предоставлением доступа к данной инфы средством виртуальных логических дисков. Главные функции, которые должен делать продукт: создание образов файлов, их монтирование как логических дисков, воплощение взаимодействия меж операционной системой и данными в виде, выгрузка вида с удалением виртуального диска из системы, надежное удаление файла вида полным затиранием содержимого. программка обязана монтировать образ на диск, который задается юзером. Для авторизации требуется воплотить задание пароля для формирования ключа шифрования/дешифрования через диалог с юзером при монтировании диска.
метод, избранный для использования в шифровании, должен быть очень надежен и устойчив к взлому. Не считая того, он должен быть довольно быстродейственен и применять минимум ресурсов.
2.2. Обоснование выбора темы
Эта тема была выбрана из-за того, что довольно не достаточно программ схожего деяния, ну и то они имеют один либо несколько из последующих недочетов:
· Внедрение устаревших алгоритмов шифрование (к примеру 1DES);
· Стоимость программ может достигать сотен баксов, что неприемлемо для массового распространения;
· Шифрование реализовано через свой графический интерфейс юзера, а не через интеграцию с системой, что резко сузивает область внедрения данного программного продукта;
· Разноплановый, часто непонятный интерфейс, или очень огромное нагромождение разных функций;
· Неоправданно большенный размер программного продукта вследствие прибавления функций, не имеющих дела к главный функции — шифрованию.
Исходя из этого, я решил взять конкретно данную тему и воплотить надежный, бесплатный, интегрирующийся в систему и интуитивно понятный в использовании продукт.
2.3. Обоснование выбора языка программирования
В качестве языка программирования был избран язык ассемблер. Главной предпосылкой к этому послужило то, что разработка драйверов – это сфера, в какой конкретно ассемблер имеет доминирующее положение и фактически не имеет соперников. Итог компиляции драйвера, написанного на ассемблере, работает резвее и просит меньше ресурсов, чем итог компиляции драйвера, написанного на любом языке наиболее высочайшего уровня. Не считая того, благодаря способностям MASM в плане написания кода реализация драйвера ассемблере не сложней, а тотчас даже легче, чем на языках наиболее высочайшего уровня.
2.4. Обоснование выбора среды разработки
Средой программирования был избран RadAsm, как среда, написанная программером на ассемблере для программистов на ассемблере, вследствие что она весьма комфортна и функциональна и, по публичному воззрению, не имеет соперников посреди бесплатных и дешевых решений.
2.5. Обоснование выбора платформы
Платформой для разработки программного продукта была выбрана линейка операционных систем Microsoft Windows, начиная с версии Windows2000. Эта операционная система предоставляет свои широкие многофункциональные способности через довольно стандартизованный и логичный интерфейс API. Не считая того, данная операционная система и ее программные интерфейсы довольно отлично исследованы и понятны.
2.6. Базы криптографии
Тайнопись дает возможность конвертировать информацию таковым образом, что ее чтение (восстановление) может быть лишь при знании ключа.
Все обилие имеющихся криптографических способов можно свести к последующим классам преобразований:
Моно- и многоалфавитные подстановки
Более обычной вид преобразований, заключающийся в подмене знаков начального текста на остальные (такого же алфавита) по наиболее либо наименее сложному правилу. Для обеспечения высочайшей криптостойкости требуется внедрение огромных ключей.
Перестановки
Также легкий способ криптографического преобразования. Употребляется обычно в сочетании с иными способами.
Гаммирование
Этот способ заключается в наложении на начальный текст некой псевдослучайной последовательности, генерируемой на базе ключа.
Блочные шифры
Представляют собой последовательность (с вероятным повторением и чередованием) главных способов преобразования, используемую к блоку (части) шифруемого текста. Блочные шифры на практике встречаются почаще, чем незапятнанные преобразования того либо другого класса в силу их наиболее высочайшей криптостойкости.
Т.к. блочные шифры числятся более стойкими к взлому, также поэтому, что разрабатываемый драйвер будет драйвером блочного устройства, принято решение было избрать в качестве метода шифрования конкретно блочный шифр. Остальные типы шрифтов в рассмотрение больше браться не будут.
Требования к отличному блочному шифру формулируются последующим образом. Нужны:
-достаточно большая разрядность блока (N, 64 либо наиболее бит) для того, чтоб затруднить составление и поддержание каталога;
-достаточно огромное место ключей (K) для того, чтоб исключить возможность подбора ключа;
-сложные соотношения меж начальным и шифрованным текстами с тем, чтоб аналитические и (либо) статистические способы определения начального текста и (либо) ключа на базе соответствия начального и шифрованного текстов могли быть по способности нереализуемы.
Блочный шифр, использующий один и этот же ключ, при шифровании постоянно превращает один и этот же блок открытого текста в один и этот же блок шифротекста. Для того чтоб этого избежать, следует применять особый режим шифрования.
Криптографический режим обычно соединяет воединыжды базисный шифр, какую-то оборотную связь и ряд обычных операций. Операции ординарны, поэтому что сохранность является функцией применяемого шифра, а не режима. Наиболее того, режим шифра не должен компрометировать сохранность применяемого метода.
Есть много вариантов оборотной связи, но был избран вариант более пригодный для внедрения в драйвере блочного устройства – сцепление. Сцепление добавляет к блочному шифру механизм оборотной связи: результаты шифрования прошлых блоков влияют на шифрование текущего блока. Иными словами, любой блок употребляется для конфигурации шифрования последующего блока. Любой блок шифротекста зависит не только лишь от шифруемого блока открытого текста, да и от всех прошлых блоков открытого текста.
В режиме сцепления блоков шифра (cipher block chaining, CBC) перед шифрованием над открытым текстом и предшествующим блоком шифротекста производится операция XOR.
Когда блок открытого текста зашифрован, приобретенный шифротекст сохраняется в регистре оборотной связи. До этого чем будет зашифрован последующий блок открытого текста, он подвергается операции XOR совместно с содержимым регистра оборотной связи. Таковым образом, создаются входные данные для последующего шага процедуры шифрования. Приобретенный шифротекст опять сохраняется в регистре оборотной связи, чтоб подвергнуться операции XOR совместно со последующим блоком открытого текста, и так до конца сообщения. Шифрование всякого блока зависит от всех прошлых блоков.
Дешифрирование является оборотной операцией. Блок шифротекста дешифруется как обычно, но сохраняется в регистре оборотной связи. Потом последующий блок дешифрируется и подвергается операции XOR совместно с содержимым регистра оборотной связи. сейчас последующий блок шифротекста сохраняется в регистре оборотной связи, и так дальше, до конца сообщения.
В режиме СВС схожие блоки открытого текста при шифровании перебегают в разные блоки шифротекcта лишь, если отличались какие-то из предыдущих блоков открытого текста. Два схожих сообщения, но, будут шифроваться как один и этот же шифротекст. Что еще ужаснее, два идиентично начинающихся сообщения будут шифроваться идиентично, пока не покажется 1-ое различие.
У ряда сообщений быть может однообразный заголовок — тема письма, строчка «From» либо еще чего-нибудть. Хотя повтор блока будет неосуществим, такое однообразное начало может предоставить криптоаналитику какую-нибудь полезную информацию. (В этом случае понятно, что в виде сформирована файловая система, т.е. известен формат неких секторов).
Избежать этого можно, шифруя в качестве первого блока какие-то случайные данные. Этот блок случайных данных именуется вектором инициализации (initialization Vector, IV), инициализирующей переменной либо исходным значением сцепления. IV не имеет никакого смыслового значения, он употребляется лишь денька того, чтоб создать каждое сообщение неповторимым. Когда получатель дешифрирует этот блок, он употребляет его лишь для наполнения регистра оборотной связи. Неплохим IV служит метка времени. Либо внедрение каких-нибудь случайных бит. (В данной реализации вектор инициализации основан на позиции блока, что только некординально увеличивает защиту. К огорчению, в этом случае нет способности применять наиболее сложные векторы инициализации).
С внедрением IV сообщения с схожим открытым текстом при шифровании перебегают в сообщения с разным шифротекстом. Как следует, злодей не сумеет сделать повтор блока, и затруднится создание шифровальной книжки. Хотя рекомендуется денька всякого сообщения, шифруемого одним и этим же ключом, выбирать неповторимый IV, это требование не является неотклонимым.
IV не должен храниться в секрете, он может передаваться открыто совместно с шифротекстом.
2.7. Предпосылки выбора метода
Для выбора определенного метода шифрования я обратился к результатам конкурса на создание новейшего общенационального эталона шифрования, который должен придти на подмену DES, проведенным в конце 1996г. государственным институтом эталонов США
Также исходя из документа «Performance Analysis of AES candidates on the 6805 CPU core»
, в каком приводятся результаты сопоставления кандидатов по затратам ресурсов и времени работы, я сделал вывод, что Rijndael лучше всех других подступает к моему заданию, т.к. является самым резвым и просит меньший размер ресурсов во время работы.
Также важным было при выбирании то, чтоб размер сектора диска (512 б) был кратен размеру блока метода. Из-за этого условия сходу отсеиваются методы MARS и RC6. Из оставшихся Serpent оказался очень неспешным (приблизительно на порядок медлительнее средней скорости Rijndael). Crypton оказался медлительнее приблизительно в 3 раза из-за неспешного вычисления преобразования числа p, применяемого в нем, также труднее в реализации.
Исходя из этого, было принято решение о использовании криптографического метода Rijndael.
2.8. метод Rijndael
Самостоятельная и уникальная разработка юных, но довольно обширно узнаваемых в криптографическом обществе ученых из Бельгии. метод показывает потрясающую производительность на всех рассматриваемых в состязании платформах. Для шифра свойственны резвое разворачивание ключа и низкие требования к памяти, так что он также отлично работает и в аппаратной реализации, и в ограниченных по памяти критериях. Обычная система схемы и ограниченный выбор операций должны облегчить предстоящий криптоанализ шифра. Не считая того, спецами раздельно отмечается, что избранные конструкторами операции относительно просто защитить от узнаваемых небезопасных атак на физическую реализацию криптоалгоритма. Еще одна принципиальная положительная черта (хотя и не рассматривавшаяся при выбирании финалистов) — в шифре Rijndael имеется значимый потенциал к распараллеливанию, другими словами к получению выгод в производительности благодаря применению компьютерных микропроцессоров, позволяющих сразу делать огромное количество инструкций.
Метод быть может сформулирован в определениях всего только 2-ух операций — побитового суммирования по модулю 2 и индексированного извлечения из памяти, выполняемых над б — он быть может отлично реализован на всех компьютерных платформах от младших микроконтроллеров до суперпроцессоров. Прямое и оборотное преобразования в шифре имеют схожую алгоритмическую структуру и различаются константами сдвига, главными элементами, узлами замен и константами умножения. При аппаратной реализации они могут быть совмещены на 60%, а при программной наилучшее быстродействие быть может достигнуто только при стопроцентно раздельных реализациях обеих функций.
В качестве эталона принят вариант шифра лишь с размером блока 128 бит (16 б). Число раундов шифрования определяется зависимо от размера блока и ключа по последующей таблице:
размер ключа
128
192
256
размер блока
128
10
12
14
192
12
12
14
256
14
14
14
Другими словами, из 2-ух размеров выбирается наибольший, и если он равен 128 бит, то употребляется 10 раундов, если 192 бита, то 12, и если 256 — то 14 раундов шифрования.
В данном продукте принято решение применять обычный размер блока в 128 бит и размер ключа в 256 бит, как более стойкий вариант. Как следует, будет 14 раундов шифрования.
Шифр Rijndael выполнен в архитектуре «Квадрат» (Square), получившей свое заглавие от первого, построенного в согласовании с ее принципами, криптоалгоритма. В Rijndael блоки открытых и шифрованных данных, соответственно T и T’, представляются в виде массивов из 16, 24 либо 32 байтов:
T = (t1
, t2
,…,tN
)
T’ = (t’1
, t’2
,…,t’N
)
| t | = | t’ | = 8, N{16, 24, 32}.
В согласовании с использованными строительными принципами в процессе криптографических преобразований начальный и зашифрованный блоки данных, также все промежные результаты процесса шифрования интерпретируются как матрицы байтов размером 4´n, откуда получаем n = N/4, nÎ{4, 6, 8}. Матрицы заполняются б входного блока (открытых данных при шифровании и шифрованных данных при дешифрации соответственно) по столбцам сверху вниз и слева вправо, и в буквально таком же порядке извлекаются байты из матрицы-результата:
Схема преобразования данных при шифровании:
Схема метода шифрования:
На рисунках применены последующие обозначения:
T, T’ — открытый и зашифрованный блоки данных соответственно;
ki
— i-тый главный элемент;
F, F’ — постоянное нелинейное преобразование и преобразование крайнего раунда соответственно;
Xi
— промежуточное состояние шифруемого блока опосля добавления i-того главного элемента.
Как видно из рисунков, процесс шифрования состоит из чередующихся прибавлений главных частей к блоку данных и нелинейного преобразования этого блока:
T’ = EK
(T) = kR
+1
F'(kR
F(kR
-1
… F(k2
F(k1
T))…)).
Число R раундов шифрования переменное и зависит от размера блока данных и ключа. Прибавление главных частей, которым начинается и завершается процесс шифрования, также некие остальные операции раундового преобразования производится побайтно в конечном поле Галуа GF(28
), полевой операцией сложения в нем является побитовое суммирование по модулю 2. Соответственно, любой главный элемент является байтовой матрицей такого же самого размера, что и блок данных. За один раунд шифрования преобразуется полный блок данных, а не его часть, как в сетях Файстеля. На крайнем раунде функция нелинейного преобразования различается от аналогичной функции, применяемой в других раундах — это изготовлено для обеспечения алгоритмической эквивалентности прямого и оборотного преобразований шифрования.
процесс дешифрации блока данных алгоритмически схож процессу его шифрования и, как следует, картинки 1 и 2 также справедливы и для него, если через T обозначить блок зашифрованных данных, а через T’ — открытых. Но различия меж этими 2-мя процедурами в архитектуре «Квадрат» несколько наиболее существенны, чем в сетях Файстеля — они различаются не только лишь порядком использования главных частей в раундах шифрования, да и самими этими элементами, и некими иными константами, применяемыми в методе.
Нелинейное преобразование F матрицы данных состоит из 3-х шагов: подмены байтов матрицы на новейшие значения (S[]), повторяющегося сдвига строк матрицы на лево (R¬
), умножения матрицы данных слева на постоянную матрицу-циркулянт M:
X’ = F(X) = M´ R¬
(S(X)).
Схема преобразования блока данных при нелинейном преобразовании:
Схема метода нелинейного преобразования:
Все входные (X), выходные (X’) и промежные (Y, Z) значения преобразования являются матрицами байтов схожего размера 4´n. Функция преобразования крайнего раунда F’ различается от постоянной функции преобразования F отсутствием шага умножения матрицы данных слева на постоянную матрицу.
Вся нелинейность преобразования сосредоточена в его первом шаге — подмене, 2-ой и 3-ий шаги являются линейными. 1-ый шаг служит для перемешивания инфы снутри байтов, 2-ой обеспечивает «экспорт» конфигураций в остальные столбцы, 3-ий производит диффузию конфигураций в одном элементе матрицы на весь соответственный столбец. Таковым образом, за два раунда достигается диффузия конфигураций в одном единственном бите на весь блок данных. Ниже любой из обозначенных шагов рассмотрен тщательно, при всем этом некие преобразования байтов определены в определениях операций в конечном поле GF(28
), порожденном неприводимым полиномом m(x) над полем GF(2): m(x) = x8
+x4
+x3
+x+1. Операция сложения в этом поле является ни чем другим, как побитовым суммированием по модулю 2, умножение в соответствие с определением поля производится как обыденное умножение полиномов над GF(2) по модулю полинома m(x). При манипулировании с б данных как с элементами поля GF(28
) любой бит соответствует слагаемому вида xi
в согласовании со старшинством бита в б. Можно сказать, что если б с целочисленным значением b представлен в виде полинома B(x), то справедливо b = B(2).
Побайтовая подмена
В процессе побайтовой подмены любой б матрицы данных заменяется на новое бит:
yij
= S[xij
], 1£i£4, 1£j£n,
где n — число столбцов матрицы данных — 4,6 либо 8. Единственный узел замен в шифре Rijndael конструируется при помощи последующего алгебраического соотношения:
S[y] = (x4
+x3
+x2
+x+1) + y-1
(x7
+x6
+x5
+x4
+1) mod (x8
+1).
При всем этом воззвание ненулевых байтов осуществляется в описанной чуть повыше конечном поле GF(28
), для нулевого б считают 0-1
= 0. Таковым образом, байтовая подмена определяется как воззвание элемента-байта в конечном поле GF(28
), доопределенное для нулевого элемента поля, с следующим аффинным преобразованием результата. Коэффициенты этого преобразования выбраны таковым образом, чтобы у приобретенного узла замен отсутствовали точки неподвижности (S[y] = y), и «антинеподвижности» (S[y] = ~y). Тильдой (знаком «~») обозначена операция побитового дополнения собственного аргумента.
естественно, обозначенная выше формула для построения узла замен не создана для использования конкретно во время шифрования — еще эффективнее применять уже готовый узел замен:
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
xA
xB
xC
xD
xE
xF
0x
63
7c
77
7b
f2
6b
6f
c5
30
01
67
2b
fe
d7
ab
76
1x
ca
82
c9
7d
fa
59
47
f0
ad
d4
a2
af
9c
a4
72
c0
2x
b7
fd
93
26
36
3f
f7
cc
34
a5
e5
f1
71
d8
31
15
3x
04
c7
23
c3
18
96
05
9a
07
12
80
e2
eb
27
b2
75
4x
09
83
2c
1a
1b
6e
5a
a0
52
3b
d6
b3
29
e3
2f
84
5x
53
d1
00
ed
20
fc
b1
5b
6a
cb
be
39
4a
4c
58
cf
6x
d0
ef
aa
fb
43
4d
33
85
45
f9
02
7f
50
3c
9f
a8
7x
51
a3
40
8f
92
9d
38
f5
bc
b6
da
21
10
ff
f3
d2
8x
cd
0c
13
ec
5f
97
44
17
c4
a7
7e
3d
64
5d
19
73
9x
60
81
4f
dc
22
2a
90
88
46
ee
b8
14
de
5e
0b
db
Ax
e0
32
3a
0a
49
06
24
5c
c2
d3
ac
62
91
95
e4
79
Bx
e7
c8
37
6d
8d
d5
4e
a9
6c
56
f4
ea
65
7a
ae
08
Cx
ba
78
25
2e
1c
a6
b4
c6
e8
dd
74
1f
4b
bd
8b
8a
Dx
70
3e
b5
66
48
03
f6
0e
61
35
57
b9
86
c1
1d
9e
Ex
e1
f8
98
11
69
d9
8e
94
9b
1e
87
e9
ce
55
28
df
Fx
8c
a1
89
0d
bf
e6
42
68
41
99
2d
0f
b0
54
bb
16
Заменяющее значения, и столбца, определяемого его младшей цифрой.
Построчное вращение матрицы
В процессе данной операции любая строчка матрицы данных, не считая первой, вращается (циклически двигается) на лево на определенное число позиций, зависящее от номера строчки и от размера блока данных:
, 1£i£4, 1£j£n.
1-ая строчка постоянно остается на месте: С1
= 0, для нее приведенная выше формула значительно упрощается: z1j
= y1j
. Ниже в таблице приведены величины сдвига для строк матрицы со 2-ой по четвертую зависимо от числа столбцов n в матрице:
n
4
6
8
C2
1
1
1
C3
2
2
3
C4
3
3
4
Умножение на постоянную матрицу
На этом шаге матрица данных слева множится на постоянную матрицу-циркулянт M:
X = M´X,
При выполнении матричного умножения операции сложения и умножения частей обеих матриц производятся в конечном поле GF(28
). Матрица M является циркулянтом: любая ее строчка выходит повторяющимся сдвигом предшествующей строчки на Право на один элемент. Элементы матрицы выбраны таковым образом, чтоб свести к минимуму трудозатратность операции умножения: в ней находятся только маленькие по значению числа 01, 02 и 03, половина частей — единичные, т.е. настоящего умножения делать для их не требуется. Сиим самым обеспечивается высочайшая эффективность вероятных реализаций данной операции.
Следует добавить, что операция умножения в конечном поле GF(28
) является довольно трудозатратной в программной реализации и никаким образом не сводится к обыкновенному арифметическому умножению. Если умножение двоичных чисел реализуется сдвигами и обыденным арифметическим суммированием, то умножение полиномов над полем GF(2) — теми же сдвигами и побитовым суммированием по модулю 2. Но в шифре Rijndael одним из множителей постоянно является константа и размер операндов невелик — один б. Это дозволяет воплотить умножение на константу в поле GF(28
) как подмену, что значительно увеличивает эффективность программной реализации. Для всякого множителя-константы при всем этом требуется собственный отдельный узел замен. Напротив, более действенной аппаратной реализацией данной операции является реализация в виде серии сдвигов и побитовых сложений по модулю два в соответствие с ее конкретным определением.
Дешифрация
Дешифрация в Rijndael алгоритмически эквивалентна шифрованию, но меж этими 2-мя процедурами имеются определенные различия, еще наиболее значительные, чем в сетях Файстеля, где все сводится к порядку использования главных частей. Дешифрование различается от шифрования по последующим четырем пт:
1. Главные элементы употребляются в порядке, оборотном тому, в каком они употребляются при шифровании. Не считая того, все главные элементы, не считая первого и крайнего, должны быть умножены слева на матрицу, оборотную матрице M. Таковым образом, если при шифровании употребляется последующая последовательность главных частей
k1
, k2
, k3
, … , kR
, kR
+1
,
то при дешифрации обязана быть применена последующая последовательность частей:
kR
+1
, M -1
kR
, … , M -1
k3
, M -1
k2
, k1
.
2. На шаге побайтовой подмены употребляется узел замен S-1
оборотный тому, что применяется в процедуре шифрования S. Это значит, что каково бы ни было байтовое
S -1
[S[b]] = b.
Обозначенный узел замен S-1
представлен в последующей таблице:
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
xA
xB
xC
xD
xE
xF
0x
52
09
6a
d5
30
36
a5
38
bf
40
a3
9e
81
f3
d7
fb
1x
7c
e3
39
82
9b
2f
ff
87
34
8e
43
44
c4
de
e9
cb
2x
54
7b
94
32
a6
c2
23
3d
ee
4c
95
0b
42
fa
c3
4e
3x
08
2e
a1
66
28
d9
24
b2
76
5b
a2
49
6d
8b
d1
25
4x
72
f8
f6
64
86
68
98
16
d4
a4
5c
cc
5d
65
b6
92
5x
6c
70
48
50
fd
ed
b9
da
5e
15
46
57
a7
8d
9d
84
6x
90
d8
ab
00
8c
bc
d3
0a
f7
e4
58
05
b8
b3
45
06
7x
d0
2c
1e
8f
ca
3f
0f
02
c1
af
bd
03
01
13
8a
6b
8x
3a
91
11
41
4f
67
dc
ea
97
f2
cf
ce
f0
b4
e6
73
9x
96
ac
74
22
e7
ad
35
85
e2
f9
37
e8
1c
75
df
6e
Ax
47
f1
1a
71
1d
29
c5
89
6f
b7
62
0e
aa
18
be
1b
Bx
fc
56
3e
4b
c6
d2
79
20
9a
db
c0
fe
78
cd
5a
f4
Cx
1f
dd
a8
33
88
07
c7
31
b1
12
10
59
27
80
ec
5f
Dx
60
51
7f
a9
19
b5
4a
0d
2d
e5
7a
9f
93
c9
9c
ef
Ex
a0
e0
3b
4d
ae
2a
f5
b0
c8
eb
bb
3c
83
53
99
61
Fx
17
2b
04
7e
ba
77
d6
26
e1
69
14
63
55
21
0c
7d
3. На шаге построчного вращения матрицы данных осуществляется повторяющийся сдвиг строк на то же самое количество частей, что и при шифровании, но в оборотную сторону — на право. Или, в силу параметров операции повторяющегося сдвига, можно выполнить вращение строк матрицы в ту же сторону, что и при шифровании, т.е. на лево, но на другое количество частей, вычисляемое по последующей формуле:
Сi’ = n — Ci, 2£i£4.
Константы повторяющегося сдвига на лево строк матрицы в процедуре дешифрования зависимо от числа столбцов матрицы данных приведены в последующей ниже таблице:
n
4
6
8
C2
’
3
5
7
C3
’
2
4
5
C4
’
1
3
4
На шаге умножения слева на постоянную матрицу употребляется матрица M-1
, оборотная применяемой при шифровании матрице M:
Необходимо подчеркнуть, что умножение в конечном поле GF(28
) на элементы матрицы M-1
исходя из убеждений вычислительных издержек является наиболее трудозатратной операцией, чем умножение на элементы матрицы M. Не считая того, в оборотной матрице находятся четыре разных элемента, тогда как в начальной — лишь три, что дозволяло «сберечь» одно умножение из 4. Все произнесенное приводит к тому, что при конкретной реализации умножения в поле GF(28
) модули дешифрования получаются приметно наименее быстродействующими, чем модули шифрования. Но, эта изюминка не является так значимой, как может показаться на 1-ый взор. Во-1-х, в большинстве практических режимов использования шифра применяется лишь прямое преобразование (шифрование) — схожая ситуация имеет пространство при шифровании с внедрением потоковых режимов (в том числе и при дешифрации), при выработке имитовставки (кода аутентификации), при выработке хэш-функции и при выработке массивов псевдослучайных данных. Во вторых, если умножение на константу в поле GF(28
) воплотить как подмену, различия в трудозатратности нивелируются.
3. Конструкторская часть
3.1. Функциональное предназначение
Данный программный продукт представляет собой приложение, написанное на языке программирования Assembler в среде программирования RadAsm, также применением последующих вспомогательных программ: OllyDbg, DebugView, VMware Workstation и Restorator.
3.2.
Управление программера
3.2.1. структура программки
Программный продукт состоит из последующих частей:
— Driver*.* – файлы начальных кодов драйвера;
— DriverACVHDD.asm – основной модуль драйвера;
— Driverdispatch.asm – модуль обработки IRP-запросов к драйверу;
— Driverconsts.inc – объявление типов и констант;
— Driverproto.inc – макеты реализованных функций;
— Driverseh0.inc – макросы для SEH (модуль написан Four-F);
— DriverACVHDD.rap – файл проекта RadASM;
— Driveracvhdd.sys – сам драйвер;
— DriverAES – файлы части драйвера, реализующие шифрование;
— DriverAESAESCrypt.inc – функции шифрования верхнего уровня (инициализация, шифрование и дешифрация целого буфера);
— DriverAESboxes-fst.inc – таблицы перестановок;
— DriverAESconsts.inc – объявление констант и структур;
— DriverAESEncodeDecode.inc – функции шифрования и дешифрации блоков по 16 б, также вспомогательные по отношению к ним функции;
— DriverAESusefull_functions.inc – вспомогательные функции и макросы;
— Loader*.* – файлы начальных кодов загрузчика и оболочки;
— LoaderLoader.asm – главный модуль загрузчика;
— LoaderDelImageDlg.inc – диалог удаления файла вида;
— LoaderDriverService.inc – функции взаимодействия с драйвером;
— LoaderMainWndProc.inc – основная оконная функция;
— LoaderNewImageDlg.inc – диалог сотворения новейшего вида диска;
— LoaderPasswordDlg.inc – диалоговое окно ввода пароля при монтировании файла вида новеньким виртуальным логическим диском в систему;
— LoaderTrayIcon.inc – модуль реализации иконки в трее;
— LoaderLoader.rc – перечень подключаемых ресурсов;
— LoaderLoader.rap – файл проекта RadASM;
— LoaderLoader.exe – сам загрузчик;
— LoaderIcons*.ico – иконки, применяемые в загрузчике;
— LoaderRes*.* – файлы ресурсов применяемых в загрузчике;
— LoaderResXPMan.manifest – манифест для программки;
— LoaderResDialogForms.rc – ресурсы диалоговых окон;
— LoaderResLoaderRes.rc – иконки, добавляемые в ресурсы;
— LoaderResXPMan.rc – подключение к проекту манифеста.
3.2.2. структура данных
Для реализации программного продукта не считая обычных заголовочных файлов нужны файлы из KmdKit (Kernel Mode Driver Development Kit for MASM32 programmers) от Four-F, являющийся переработкой заголовочный файлов из DDK. Без их совсем невозможна компиляция драйвера, также компиляция нескольких модулей загрузчика.
3.2.3. средства обмена данными
Юзер конкретно работает лишь с загрузчиком, предоставляющим юзеру все поддерживаемые продуктом функции. Все взаимодействие происходит через контекстное меню иконки, добавляемой загрузчиком в трей, и через три диалоговых окна: создание новейшего файла вида, ввод пароля, удаление файла вида.
Система ведет взаимодействие с драйвером через диспетчер ввода-вывода (Input/Output Manager), а загрузчик – через функции диспетчера управления службами (Service Control Manager, SCM).
3.2.4. метод работы программки
Общий механизм работы программного приложения последующий:
Опосля пуска приложения-загрузчика Loader.exe поначалу проверяется, а не запущена ли уже эта программка на данной машине. Для этого при помощи функции CreateFileMapping в виртуальной памяти создается блок, имеющий неповторимое имя. В случае ошибки, т.е. наличия иной запущенной копии, выводится сообщение о ошибке и работа приложения заканчивается. 1-ая копия в конце собственной работы высвобождает выделенный блок памяти вызовом CloseHandle.
В ином случае создается невидимое основное окно, созданное для обработки сообщений, приходящих от иконки в трее. В оконной функции WndProc этого окна обрабатываются несколько разных сообщений от системы.
При разработке окна функцией AC_TrayIconCreate создается иконка в трее, потом при помощи функции AC_FindDriverInMem осуществляется поиск драйвера в памяти. Если драйвер загружен, то вызов AC_GetUsedDriveLetter возвращает буковку диска, с которой связан драйвер. Потом зависимо от состояния драйвера функция AC_TrayIconMenuItemsCheckState меняет иконку в трее и доступность пт контекстного меню, информируя юзера о состоянии драйвера.
При закрытии окна функцией AC_TrayIconDelete иконка в трее удаляется.
Сообщения, приходящие от иконки в трее, обрабатываются вызовами функций AC_TrayIconWndProc_WM_COMMAND и AC_TrayIconWndProc_WM_TRAY, где 1-ая обрабатывает выбор пт меню юзером, а 2-ая вызывает, по мере необходимости, контекстное меню.
При выбирании пт «Загрузить образ диска» вызывается функция AC_Cmd_LoadDriver, производящая загрузку драйвера и монтирование вида на создаваемый файл. Опосля того, как функция отработает, вызывается AC_TrayIconMenuItemsCheckState.
При выбирании пт «Выгрузить диск» поначалу вызывается AC_Cmd_UnloadDriver, выгружающая образ, драйвер и удаляющая диск, потом вызывается AC_TrayIconMenuItemsCheckState.
При выбирании пт «Сделать образ диска» вызывается единственная функция NewImageDlgShow, описанная в модуле NewImageDlg.inc и реализующая весь процесс сотворения новейшего файла вида диска.
При выбирании пт «Удалить образ диска» также вызывается единственная функция DelImageDlgShow, снутри которой происходит весь процесс удаления имеющегося файла вида диска.
метод загрузки вида реализован снутри функции AC_Cmd_LoadDriver, и состоит из последующего: сначало при помощи функции AC_FindDriverInMem осуществляется поиск драйвера в памяти и, если он работает, выводится сообщение о невозможности загрузки новейшего вида без подготовительной выгрузки старенького, опосля что происходит прерывание функции загрузки вида. По другому вызов AC_RegisterService загружает драйвер в память, а функция AC_StartService монтирует диск из файла, путь к которому передан ей в качестве параметра.
Выгрузка вида реализована в функции AC_Cmd_UnloadDriver последующим образом: поначалу драйвер ищется вызовом AC_FindDriverInMem. Если он не найден, то выводится соответственное сообщение и выгрузка на этом заканчивается. По другому в функции AC_StopService делается выгрузка вида и удаление диска, потом вызов AC_DeleteService удаляет из памяти сам драйвер.
Процесс сотворения новейшего файла вида происходит снутри вызова функции NewImageDlgShow. Данная функция делает модальное диалоговое окно из окна, прописанного в ресурсах исполняемого файла загрузчика. Все деяния производятся снутри диалоговой оконной функции NewImageDlgWndProc. Основное действие производится в вызове функции AC_Cmd_LoadDriver, уже описанной чуть повыше. Другие деяния заключаются в проверке правильности введенных данных, доступности файла на запись и реализации интерфейса юзера.
процесс удаления имеющегося файла вида происходит снутри вызова функции DelImageDlgShow, по собственному устройству очень похожей на NewImageDlgShow тем, что так же делает диалог из ресурсов. Само удалении происходит в обработчике нажатия клавиши «Удалить».
3.2.5. Описание главных функций программки
Описание функций дано в порядке вхождения модулей, в каких те описаны, в перечень файлов проектов.
программка загрузчик (Loader.exe):
ProcessMessages proc hWnd:DWORD
Обработка всех сообщений из очереди для данного окна;
DelImageDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
Диалоговая оконная функция диалога удаления файла;
DelImageDlgShow proc
Вызов диалогового окна удаления файла;
AC_ErrorMessage proc error:DWORD
Вывод системной инфы о произошедшей ошибке;
AC_FindDriverInMem proc
Поиск драйвера в памяти и получение его состояния;
AC_RegisterService proc
загрузка драйвера в память;
AC_StartService proc lpFileName:DWORD
загрузка вида из обозначенного файла и создание диска;
AC_StopService proc
Выгрузка вида и удаление диска;
AC_DeleteService proc
Выгрузка драйвера из памяти;
AC_CreateNewImage proc imgsize:DWORD, imgpath:DWORD
процесс сотворения новейшего файла вида диска;
AC_Cmd_LoadDriver proc lpFileName:DWORD
интерфейс загрузки имеющегося файла вида диска;
AC_Cmd_UnloadDriver proc
интерфейс выгрузки драйвера из памяти;
AC_GetUsedDriveLetter proc
Поиск логического диска, с которым связан загруженный драйвер;
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
Создание и поддержка головного окна приложения;
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
Оконная функция головного окна приложения;
_SaveFileDialog_ proc lpTitle:DWORD, lpFilter:DWORD, lpDefExt:DWORD
Вызов системного диалога выбора файла;
SwapButtonsEnabling proc hOwnerDlgWnd:DWORD
Переключение доступности клавиш диалогового окна. Вызывается на время выполнения выделения места под файл вида на винчестере, также при удалении имеющегося файла вида для того, чтоб юзер не мог ничего жать во время фоновой работы приложения;
NewImageDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
Оконная функция диалогового окна, в каком создается новейший файл вида диска;
NewImageDlgShow proc
Создание диалогового окна, в каком создается новейший файл вида диска;
FillDriveLetters proc hWndComboBox:DWORD
Наполнение всплывающего перечня выбора (ComboBox) знаками дисков, не зарегистрированных в системе;
PasswordDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
Оконная функция ввода пароля;
PasswordDlgShow proc
Создание диалогового окна ввода пароля;
AC_TrayIconCreate proc
Создание иконки в трее и контекстного меню для нее;
AC_TrayIconDelete proc
Удаление иконки приложения из трея;
AC_TrayIconChange proc hNewIcon:DWORD
Изменение изображения у иконки приложения в трее;
AC_TrayIconWndProc_WM_TRAY proc wParam:DWORD, lParam:DWORD
Функция обработки сообщений от иконки в трее, которые система отправляет главной оконной функции приложения;
AC_TrayIconWndProc_WM_COMMAND proc wParam:DWORD, lParam:DWORD
Функция обработки сообщений от пт контекстного меню;
AC_TrayIconMenuItemsCheckState proc
Функция меняет доступность пт меню и изображения иконки в трее зависимо от текущего состояния драйвера.
драйвер устройства (ACVHDD.SYS):
AC_OpenFileDrive proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Открытие файла вида, также инициализация и вычисление физических характеристик создаваемого диска (число цилиндров, число секторов на трек, число б на сектор и т.д.);
AC_CloseFileDrive proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Освобождение выделенных ресурсов, закрытие файла вида, окончание работы системы шифрования;
AC_DriverUnload proc pDriverObject : PDRIVER_OBJECT
Функция вызывается при выгрузке драйвера и высвобождает все выделенные ресурсы;
AC_DriverEntry proc pDriverObject : PDRIVER_OBJECT, pusRegistryPath : PUNICODE_STRING
Точка входа при начальной загрузке драйвера. Делает само устройство, инициализирует мютекс, также устанавливает обработчики в DRIVER_OBJECT на системные запросы IRP_MJ_ xxx;
InitAES proc passwrd:DWORD
инициализация системы шифрования по данному паролю;
DoneAES proc
Окончание работы системы шифрования;
EncodeBuffer proc src:DWORD, dst:DWORD, block_count:DWORD
Шифрование буфера src длиной block_count 16 байтных блоков с записью результатат в dst;
DecodeBuffer proc src:DWORD, dst:DWORD, block_count:DWORD
Дешифровка буфера src длиной block_count 16 байтных блоков с записью итоге в dst;
b_SetUp_Encode proc
Внутренняя функция, применяемая при шифровании;
b_SetUp_Decode proc
Внутренняя функция, применяемая при десшифрации;
rijndaelEncrypt proc a:DWORD, b:DWORD, rk:DWORD
Шифрование 16 байтного блока a с записью результата в b на базе ключей раундов rk;
rijndaelDecrypt proc a:DWORD, b:DWORD, rk:DWORD
Дешифровка 16 байтного блока a с записью результата в b на базе ключей раундов rk;
my_strncpy proc dst:DWORD, src:DWORD, maxlen:DWORD
Функция копирования нультерминальной строчки. аналог C/C++ функции strncpy;
copy_block proc dst:DWORD, src:DWORD
Функция копирования 16 байтного блока src в dst;
StrLen proc item:DWORD
Функция резвого вычисления длины строчки. аналог C/C++ функции strlen;
populateKeyMaterial proc text:DWORD, key:DWORD
расширение пароля text до наполнения длины ключа key;
InvMixColumn proc a:DWORD
Особое перемешивание б массива a;
rijndaelKeySched proc k:DWORD, W:DWORD
Формирование ключа шифрования по расширенному паролю;
rijndaelKeyEnctoDec proc keyBits:DWORD, W:DWORD
Формирования ключа дешифрации из ключа шифрования;
makeKey proc key:DWORD, direction:DWORD, keyLen:DWORD, keyMaterial:DWORD
Формирование ключа шифрования/дешифрования на базе пароля key, требуемому направлению шифрования direction, длины ключа keyLen и исходного материала для формирования ключа keyMaterial;
MmGetSystemAddressForMdlSafe proc pMdl:PMDL, Priority:DWORD
Получение указателя в системном адресном пространстве нулевого кольца для пользовательского буфера в 3-ем кольце защиты;
AC_DispatchReadWrite proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Функция – обработчик запросов системы на чтение/запись с устройства – диска; производит чтение / запись с подходящим шифрованием / дешифрованием;
AC_DispatchCreate proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Обработка инициализации драйвера в системе;
AC_DispatchClose proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Обработка выгрузки драйвера;
AC_LoadKeyAndInitAES proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Обработка сообщения от приложения загрузчика, передавшего в драйвер введенный юзером пароль. Инициализация системы шифрования на базе этого пароля;
AC_DispatchControl proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP
Функция обработки всех приходящих драйверу сообщений от системы;
4. Технологическая часть
4.1. Предназначение программного продукта
Данный программный продукт должен предоставлять надежную криптографическую защиту для секретной инфы, лежащей на носителе в виде образов виртуальных логических дисков. Программный продукт реализуется в виде 2-ух частей: драйвера и загрузчика. драйвер отвечает за функции шифрования и взаимодействия виртуального логического диска с системой. Загрузчик предоставляет юзеру интерфейс для управления драйвером, также функции по созданию образов, монтированию образов на виртуальные логические диски, надежному удалению файлов образов дисков с затиранием содержимого. Работа драйвера опосля монтирования диска никак не обязана зависеть от работы загрузчика.
4.2. Предназначение и условия внедрения программного продукта
Данный программный продукт предназначен для криптографической защиты секретной инфы средством сотворения виртуальных логических дисков.
Для работы приложения нужно:
4. операционная система семейства Microsoft Windows не ниже Windows 2000;
5. 50 Кб вольного места на твердом диске + файлы образов дисков;
6. Требования к ресурсам оперативки: для загрузчика порядка 4Мб, для драйвера в районе 100Кб.
4.3. Тестирование программного продукта
Для тестирования программного продукта нужно выполнить последующие деяния (если что-либо будет различаться от предъявленного, то программка работает неправильно):
1. Запустите загрузчик (Loader.exe). В трее обязана показаться иконка приложения . Вызовите контекстное меню:
2. Изберите пункт меню «Сделать образ диска». В показавшемся диалоговом окне введите размер диска 200 (Мб), и изберите имя создаваемого файла вида. Имя можно ввести вручную в соответственное поле, или избрать через обычный системный диалог сотворения файла, открываемый при нажатии клавиши . Вид окна опосля выбора файла и ввода размера:
3. Опосля нажатия клавиши «Сделать» загрузчик начнет выделение места под требуемый файл вида. Зависимо от требуемого размера, размера вольного места на избранном носителе и фрагментации файлов данный процесс может занять до минутки и даже наиболее. процесс отображается понизу диалогового окна в полосе прогресса. На время сотворения файла все клавиши диалога блокируются. Также диалог недозволено закрыть обычными системными методами: через клавишу закрытия окна, комбинацию Alt+F4, соответственный пункт меню окна. Окно в процессе выделения места:
4. В случае удачного окончания выделения места выдается сообщение с предложением сходу подключить диск и произвести его форматирование. Соглашаемся.
5. Сейчас перед конкретным созданием виртуального диска, загрузкой драйвера и его инициализацией на данный файл вида нужно указать характеристики выполняемых действий: пароль, который будет применяться при шифровании, и буковку создаваемого диска, которую можно избрать из не занятых в данный момент в системе:
6. Опосля ввода пароля (требования к нему приведены в диалоге) и выбора диска из перечня доступных происходит монтирование вида на сделанный диск. Диск сходу же становится виден для всех программ, к примеру для 3-х последующих:
Total Commander:
Проводник:
WinHex:
7. В принципе с ним уже можно работать, но для этого необходимы спец программки. А для того, чтоб с диском можно было работать из всех программ как с обыденным логическим диском, его необходимо отформатировать. Программка сама вызывает диалог форматирования. необходимо лишь избрать характеристики форматирования:
8. Опосля окончания форматирования диском можно воспользоваться как обыденным логическим диском. к примеру, поменять метку диска и скопировать на него какие-нибудь файлы:
9. Не считая того, сейчас иконка в трее поменялась на , демонстрируя, что драйвер загружен и работает (сотворен виртуальный логический диск).
10. Сейчас можно окончить работу загрузчика, выбрав пункт «Выход» его контекстного меню. Работа драйвера никак не зависит от того, запущен ли загрузчик. Опосля окончания работы загрузчика диск как и раньше стопроцентно функционален. Если опять запустить загрузчик, то иконка сходу же воспримет вид , т.к. загрузчик обусловит, что в системе есть виртуальный диск, работа которого осуществляется через драйвер из данного программного продукта. Работа посторониих программ виртуальных дисков (HDD и CD-ROM) ни как не влияет на работу данного программного продукта.
11. Для выгрузки драйвера и удаления виртуального диска из системы изберите пункт «Выгрузить диск» контекстного меню. В случае, если диск на этот момент употребляется (к нему происходят воззвания), будет выведено соответственное сообщение:
В данном случае работа с виртуальным диском подобна работе с Flashдисками, так же требующих отсутствия запросов к ним для их корректного извлечения.
12. Если надобность в виде диска отпала, и он больше не нужен, но данные на нем имеют некую Ценность, то программка дозволяет удалить файл вида диска с подготовительным затиранием содержимого нулями. Для этот служит пункт контекстного меню «Удалить образ диска».
Если файл недоступен для операции монопольной записи, то будет выдано соответственное сообщение. Это защищает систему от удаления файла вида в то время, когда с ним работает драйвер.
4.4. Воззвание к программке
Для вызова программки нужно запустить Loader.exe. В системной папке System32 или в папке, из которой запускается загрузчик, должен находится файл драйвера acvhdd.sys. Если в системной папке файла драйвера нет, загрузчик сам его туда скопирует.
4.5. Управление юзера
приложение-загрузчик не имеет головного окна, т.к. все деяния производятся через контекстное меню:
Пункт «Загрузить образ диска» предназначен для пуска драйвера и монтирования виртуального логического диска в системе. При выбирании данного пт вызывается обычный диалог выбора файла:
Если есть уже сделанный ранее диск, то опосля его выбора будет отображено диалоговое окно «Ввода пароля и выбора диска»:
В данном диалоговом окне необходимо ввести пароль, который был задан при первом подключении данного вида (при разработке).
При нажатии клавиши «Принять» и правильности пароля загрузчик делает новейший логический диск, который будет «отображением» вида диска из файла. Отображение осуществляется драйвером вне зависимости от того, корректно ли введен пароль либо нет. Если был введен неправильный пароль, то просто любые запросы к диску будут приводить к получению неправильных данных. к примеру, попытка получения содержимого диска (его открытия) приведет к возникновению системного сообщения о том, что диск не отформатирован и недоступен. Лишь в случае ввода корректного пароля все будет работать корректно.
Пункт «Выгрузить диск» предназначен для выгрузки вида диска и удаления виртуального логического диска с следующей выгрузкой драйвера из памяти.
Пункт «Сделать образ диска» предназначен для сотворения новейшего файла вида диска:
Поле «размер диска» задает размер диска в мб (Мб) в границах от 1Мб, до 4096Мб (4Гб). Ограничение на 4Гб поставлено из-за ограничений файловой системы FAT32. В предстоящем данное ограничение будет снято.
Клавиша создана для выбора файла через обычный системный диалог открытия файла. имя избранного фала заносится в поле «путь к виду».
Пункт «Выход» предназначен для окончания работы загрузчика без действия на драйвер (выгрузки, остановки и т.д.). Опосля закрытия программы-загрузчика драйвер не выгружается из памяти (если естественно он был загружен).
4.6. Сообщения оператору
В процессе работы загрузчика юзер может получить последующие сообщения:
— «Недопустимая версия Windows» — попытка пуска приложения в старенькой версии операционной системы (до Win2k);
— «Программка уже запущена» выдается при попытке пуск 2-ой копии загрузчика;
— «Ошибка монопольного открытия файла» выдается при попытке удалить файл вида, применяемый на этот момент;
— «Файл вида был удален» выдается при успешном удалении файла вида;
— «Сбой в системе» выдается при неправильной работе системы. При получении такового сообщения для продолжения работы с приложением требуется перезапуск системы;
— «Неправильный размер вида диска» выдается при разработке новейшего файла вида диска в том случае, когда введенное значение равно нулю либо больше 4096Мб (4Гб);
— «Ошибка в записи имени файла» выдается при разработке новейшего файла вида диска в том случае, когда приложение не может сделать файл с именованием, введенным в соответственное поле диалогового окна;
— «Образ диска был сотворен. Желаете подключить и отформатировать?» — данный вопросец задается юзеру опосля окончания выделения места на носителе;
— «В данный момент загружен иной образ. Выгрузить?» — данный вопросец задается юзеру в случае, когда он пробует загрузить новейший образ не выгрузив старенькый (при монтировании лишь что сделанного диска);
— «Перед началом использования диска для вас нужно его отформатировать» выдается при разработке новейшего файла вида диска в том случае, когда юзер отказался от форматирования лишь что сделанного диска;
— «Ошибка при разработке файла вида» выдается при разработке новейшего файла вида диска в том случае, когда в процессе сотворения файла произошел какой-нибудь сбой;
— «Пароль должен содержать не наименее 6 знаков» выдается в диалоге ввода пароля, когда юзер вводит неправильный пароль.
5. Заключение
Результатом выполненной выпускной работы является программный продукт, реализующий все запланированные многофункциональные способности, сформированные на шаге исследования практической криптографии и написания драйверов устройств в семействе операционных систем Microsoft Windows. Итоговое программное обеспечение предоставляет обычной в использовании и в то же время удачный метод надежного скрытия секретной инфы от сторонних лиц. Благодаря реализованной драйвером интеграции в систему средством сотворения виртуальных логических дисков совсем прозрачно для юзера, удачная и понятная работа с программкой вероятна даже для юзера, имеющего только базисные способности работы с компом. Не считая того, реализованный в данной работе криптографический метод Rijndael (AES), владеет высочайшей криптостойкостью и весьма высочайшей скоростью работы.
Некие достоинства данного продукта по сопоставлению с подобными и схожими программными продуктами:
— Реализован шифр, не имеющий на данный момент слабеньких мест;
— Высочайшая скорость работы при шифровании «на лету»;
— Благодаря интеграции в систему, работа с зашифрованными данными прозрачна для юзера;
— Весьма обычной и понятный интерфейс приложения;
— Малый размер программного продукта и отсутствие необходимости установки продукта перед внедрением. Это дозволяет хранить приложение совместно с шифрованным образом диска на одном носителе и получать доступ к данным с хоть какого компа;
— Программный продукт свободно распространяется и доступен любому, кто заинтересован в средстве защиты собственной секретной инфы.
К огорчению, данный продукт имеет и ряд недочетов, которые будут исправлены в наиблежайшее время:
— Вероятна одновременная работа лишь с одним образом диска;
— Внутренняя реализация неких алгоритмов недостаточно оптимизирована, что не дозволяет шифру работать на полную мощность;
— Приложение-загрузчик реализует лишь минимум функций, хотя и полностью достаточный для настоящей работы.
Предстоящее развитие продукта дозволит ему стать надежным, многофункциональным и легкодоступным для массового использования продуктом, дающим высочайший уровень защищенности секретных данных юзера.
6. Перечень использованных источников
1. С. Бернет, С.Пейн, «Тайнопись. Официальное управление RSA Security», — М.: Двучлен-Пресс, 2002 г. – 384 с.: ил.
2. Джеффри Рихтер, «Windows для экспертов: создание действенных Win32-приложений с учетом специфичности 64-разрядной версии Windows», изд. «Российская редакция», 2000
3. Брюс Шнайер, «Прикладная тайнопись 2-е издание» (электрическая версия)
4. MSDN Library
5. Веб-ресурсы:
http://www.microsoft.com/ddk/
HTTP://www.wasm.ru
www.enlight.ru
http://csrc.nist.gov/
www.pgpru.com
HTTP://www.sysinternals.com/
http://kiwibyrd.chat.ru/
]]>