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

Теоретическая часть криптографической защиты файлов: её задачи, работа, требования, режимы шифрования, кодирование, сцепление блоков шифротекста, загрузка и выгрузка данных, аутентификация, контроль целостности. Алгоритмы TrueCrypt, IDEA и прочих систем.

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

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

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

Block: array[1..4] of Word - входной блок данных.

DecipherBlock: Boolean - успешное или незавершенное расшифрование блока данных.

Выполняется расшифрование одного блока входных данных по алгоритму IDEA.

EncipherBlock

Block: array[1..4] of Word - входной блок данных.

EncipherBlock: Boolean - успешное или незавершенное расшифрование блока данных.

Выполняется шифрование одного блока входных данных по алгоритму IDEA.

EncryptCopy

DestStream, SourseStream: TStream - итоговый и исходный потоки для шифрования;

Count: Int64 - размер потока данных;

Key : string - ключ шифрования.

EncryptCopy: Boolean - успешное или аварийное завершение работы.

Шифрование одного потока данных в другой согласно алгоритму IDEA.

DecryptCopy

DestStream, SourseStream: TStream - итоговый и исходный потоки для расшифрования;

Count: Int64 - размер потока данных;

Key : string - ключ расшифрования.

DecryptCopy: Boolean - успешное или аварийное завершение работы.

Расшифрование одного потока данных в другой согласно алгоритму IDEA.

EncryptStreamIDEA

DataStream: TStream - поток данных для шифрования;

Count: Int64 - размер потока;

Key: string - ключ шифрования;

KCONST: Array of word - вектор инициализации.

EncryptStream: Boolean - успешное или аварийное завершение работы.

Выполняет шифрование одного потока данных согласно алгоритму IDEA.

DecryptStreamIDEA

DataStream: TStream - поток данных для расшифрования;

Count: Int64 - размер потока;

Key: string - ключ расшифрования;

KCONST: Array of word - вектор инициализации.

DecryptStream: Boolean - успешное или аварийное завершение работы.

Выполняет расшифрование одного потока данных согласно алгоритму IDEA.

Initialize

AKey: string - ключ шифрования.

KeyPtr : PChar - развернутый ключ.

Производит разворачивание ключа шифрования до 32 байт.

3.7.4 Модуль создания архива

Модуль FolderActions.pas обеспечивает упаковку папки и всех вложений в нее в единый файл - архив. Основные применяемые функции и процедуры представлены в таблице 4.

Таблица 4 - Основные функции и процедуры модуля FolderActions.pas

Функция или процедура

Входные данные

Выходные данные

Описание

DoFolderAction

FolderPath, ArchivePath:string - пути исходной папки с вложениями и итогового архива;

ActionFunction: TActionFuntion - функция копирования одного файла в другой.

DoFolderAction: Boolean - успешное или аварийное завершение работы.

Выполняет создание архива всех вложений поданной на вход папки.

De_DoFolderAction

FolderPath, ArchivePath:string - путь архива для распаковки и путь папки для итоговой распаковки;

ActionFunction: TActionFuntion - функция копирования одного файла в другой.

De_DoFolderAction: Boolean - успешное или аварийное завершение работы.

Выполняет извлечение папок и файлов из архива.

GetAllFiles

Filter, Folder: string - фильтр выбора файлов и исходная папка для обхода соотвественно.

GetAllFiles: TFilesList - итоговый список обойденных файлов.

Обход всех файлов в папке

3.7.5 Модуль создания USB-ключа

Модуль Unit3.pas обеспечивает весь процесс создания USB-ключа - введение данных, проверка их корректности и справочная информация для пользователя. Основные применяемые функции и процедуры представлены в таблице 5.

Таблица 5 - Основные функции и процедуры модуля Unit3.pas

Функция или процедура

Входные данные

Выходные данные

Описание

CRC64_sum

str: string - строка, от которой вычисляется контрольная сумма (CRC64).

CRC64_sum: int64 - контрольная сумма (CRC64), полученная от строки.

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

c_GetTempPath

-

c_GetTempPath: String - возвращает путь к системной временной папке TEMP.

Процедура не имеет входных параметров. При вызове возвращает путь к системной временной папке TEMP.

hexTOdec

str: string - строка, представляющая собой строковую запись шестнадцатиричного числа.

hexTOdec: cardinal - переведенное число в десятиричном формате.

Функция производит перевод шестнадцатиричного числа в десятиричное.

new_yserkey

-

Создание USB-ключа

Основная процедура модуля. Создает USB-ключ на основе введенных пользователем личных данных, пары логин-пароль и указанного USB.

3.8 Выводы по главе

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

4. Контрольный пример

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

4.1 Запуск программы

При запуске программы выводится окно авторизации (рисунок 12), куда можно ввести логин, пароль и выбрать USB-ключ, для входа в программу, либо произвести создание нового USB-ключа. Окно аутентификации имеет множество подсказок для пользователя: таймер оставшегося времени на авторизацию, верность повторенного пароля, верность выбранного USB-ключа, а также справочная информация. Если выбрать команду «Создать USB-ключ», то появится окно создания нового USB-ключа (рисунок 13).

Рисунок 12 - Окно входа в программу.

Рисунок 13 - Окно создания нового USB-ключа.

Здесь пользователю предлагается ввести информацию о себе, а также задать логин и пароль (последний необходимо повторить дважды). При создании пароля происходит автоматический подсчет стойкости пароля и если стойкость не отвечает минимальным требованиям безопасности, происходит блокирование создания нового ключа. Если все данные введены верно, пользователю предоставляется возможность выбрать чистый USB для создания USB-ключа. После чего происходит создание ключа и пользователь может начать работу. Основное окно программы представлено на рисунке 14.

Рисунок 14 - Главное окно программы.

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

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

4.2 Сообщения оператору

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

Рисунок 15 - Истечение времени попытки входа.

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

Рисунок 16 - Все входные данные введены корректно.

При попытке завершить сеанс работы с программной, выводится сообщение - уточнение выхода (рисунок 17).

Рисунок 17 - Завершение сеанса работы.

При возникновении ошибок при работе с программой, выводятся соответствующие сообщения с информацией об ошибке. На рисунке 18 приведен пример сообщения при неверном вводе пары логин-пароль.

Рисунок 18 - Неверный ввод пары логин-пароль.

На рисунке 19 приведен пример сообщения при исчерпании лимита попыток входа в программу.

Рисунок 19 - Превышение лимита попыток входа.

4.3 Пример шифрования и расшифрования файлов

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

Рисунок 20 - Главное окно программы.

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

Теперь нам становится доступной кнопка выбора папки для совершения операции шифрования. Выбрав в окне папку (рисунок 21), пользователь может выбрать имя создаваемого зашифрованного контейнера. По умолчанию программа создаст файл в корневой папке выбранной исходной аудитории и назовет контейнер contei.zcry если выбрана опция архивации и contei.cry - если опция архивации не активирована.

После выбора папки для шифрования, становится доступной кнопка «Выполнить», нажав которую, мы запустим выполнение программы в соответствии с выбранными параметрами (рисунок 22).

Рисунок 21 - Окно выбора папки для шифрования.

По завершении шифрования, пользователю будет выведено сообщение об успешном завершении работы (рисунок 23).

Рисунок 22 - Выбор режима и настроек шифрования.

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

Рисунок 23 - Сообщение об успешном завершении шифрования.

4.4 Выводы по главе

В приведенных примерах показано, что программа имеет информативные пользовательские окна авторизации, создания USB-ключа и основного окна и выполняет функции шифрования-расшифрования файлов или файловых контейнеров, обеспечивая двухэтапную аутентификацию. Программа имеет интуитивно-понятный интерфейс, систему подсказок пользователю в реальном времени. Программа работает стабильно в операционной системе Windows XP и Windows Seven.

Заключение

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

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

В данной работе было выполнено:

- разработана двухуровневая система аутентификации пользователя;

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

- применены криптографически стойкие алгоритмы шифрования;

- создан дружественный и интуитивно понятный пользователю интерфейс.

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

В данной практике создана программа, удовлетворяющая заданию. Итоговая программа проверена и функционирует под операционными системами Windows XP и Windows seven 32bit. Программа отслеживает корректность USB-ключа: в случае подмены, взлома или устаревания, штатная работа по шифрованию-расшифрованию файлов становится невозможной. А благодаря использованию стойкой пары логин-пароль, обеспечивается дополнительная защита, в случае, если злоумышленник завладеет USB-ключом. Все внутренние вычисления и проверки целостности и аутентификации выполняются по криптостойким алгоритмам - SHA-512 и CRC64.

Одним из преимуществ данной программы является легкость ее использования благодаря интуитивно понятному интерфейсу и системе подсказок пользователю в реальном времени.

Список источников

1. А.В. Аграновский, Р.А. Хади, «Практическая криптография: алгоритмы и их программирование». - М.: СОЛОН-Пресс, 2009, 256 с.

2. Тычинин Евгений Викторович «Сравнительный анализ защищенных ключевых носителей» - Журнал «Директор по безопасности», Август 2010, [Электронный ресурс] - URL: http://secandsafe.ru/stati/zaschita_informacii/sravnitelnyy_analiz_zaschischennyh_klyuchevyh_nositeley (дата обращения: 1.07.2012).

3. ФБР не смогли расшифровать файлы Даниеля Дантеса. Truecrypt. [Электронный ресурс] - URL: http://www.linuxspace.org/archives/2805 (дата обращения: 1.07.2012).

4. С. Баричев, «Криптография без секретов» [Электронный ресурс] - URL: http://www.itbookz.ru/nodata/nodatasecurity/5081-.html (дата обращения: 1.07.2012).

5. Recommendation for Block Cipher Modes of Operation. NIST Special Publication 800-38A. Technology Administration U.S.Department of Commerce. 2001 Edition

6. Олег Зензин, «Режимы шифрования» [Электронный ресурс] - URL: http://www.citforum.ru/security/cryptography/rejim_shifrov (дата обращения: 1.07.2012).

7. Андрей Винокуров «Проблема аутентификации данных и блочные шифры» [Электронный ресурс] - URL: http://www.ssl.stu.neva.ru/psw/crypto.html (дата обращения: 1.07.2012).

8. М.И. Анохин, Н.П. Варновский, В.М. Сидельников, В.В. Ященко, «Криптография в банковском деле» [Электронный ресурс] - URL: http://geo.web.ru/db/msg.html?mid=1161287&uri=node189.html (дата обращения: 1.07.2012).

9. Панасенко С.П. «Алгоритмы шифрования. Специальный справочник» - Спб.: БХВ-Петербург, 2009. - 576.

10. Фергюсон Н., Шнайер Б. «Практическая криптография» - М.: Издательский дом «Вильямс», 2005. - 424.

11. «Сеть Фейстеля». [Электронный ресурс] - URL: http://www.ru.wikipedia.org/wiki/Сеть_Фейстеля (дата обращения: 1.07.2012).

12. Чиликов А., Алексеев Е. «Поиск криптографических ключей в RAM» [Электронный ресурс] - URL: http://www.ruscrypto.ru/conference/program/reversing/ (дата обращения: 1.07.2012).

13. Schneier B., Kelsey J., Whiting D., Wagner D., Hall C., Ferguson N. Twofish: A 128-bit Block Cipher. // http://www.schneier.com/ -- 15 June 1998.

14. Амербаев В.М., Зверев Е.М., Шарамок А.В. «О методе построения программно-физического датчика случайных чисел» - ГУП НПЦ «Спурт», г. Москва, г. Зеленоград.

15. «PGP» [Электронный ресурс] - URL: http://ru.wikipedia.org/wiki/PGP (дата обращения: 1.07.2012).

16. «TrueCrypt» [Электронный ресурс] - URL: http://ru.wikipedia.org/wiki/TrueCrypt (дата обращения: 1.07.2012).

Приложение А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО

СОГЛАСОВАНО УТВЕРЖДЕНО

Ст. преподаватель каф. «ПОВТ и АС» Зав. каф. «ПОВТ и АС»__ С.П. Новиков __Р.А. Нейдорф

«____»_____2012 г. «____»____2012 г.

П.А.1 Введение

П.A 1.1 Наименование программы

Наименование программы - «Yoda».

Областью применения данного продукта может быть сфера защиты информации.

Конечный программный продукт предназначен для внедрения на кафедру «Программного обеспечения вычислительной техники и автоматизированных систем» («ПОВТиАС») Донского Государственного Технического Университета (ДГТУ).

П.А.2 Основание для разработки

Разработка ведется на основании документа «Учебный план для студентов ВУЗа», факультета «Информатика и вычислительная техника», обучающихся по специальности 090102 «Компьютерная безопасность», в соответствии с которым студенты, заканчивающие ВУЗ, должны предоставить к защите работу, выполненную в ходе разработки дипломной работы. Предметным основанием является задание на дипломную работу.

П.А.3 Назначение разработки

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

Эксплуатационное назначение - использование в качестве спец ПО на компьютерах конечных пользователей.

П.А.4 Требование к программе

П.А.4.1 Требования к функциональным характеристикам

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

Выполняемая функциональность разработанным программным средством:

- шифрование/расшифровка данных;

- двухэтапная аутентификация пользователя;

- создание USB-ключа для шифрования/расшифровки данных;

- контроль целостности USB-ключа и шифруемых данных;

- защита USB-ключа от подмены;

- контроль временной ценности USB-ключа;

- противодействие попытке взлома USB-ключа.

П.А.4.2 Требования к надежности

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

- организацией бесперебойного питания технических средств;

- организацией правильного использования сетевых модулей;

- организацией правильного ввода параметров инициализирующих структур;

- регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов.

Отказы из-за некорректных действий пользователей системы.

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

П. 4.2.1. Организация входных и выходных данных

П.4.2.1.1 Входные данные

- пара логин-пароль текстовом виде и USB-ключ (для получения доступа к программе);

- файл/папка с файлами для шифрования;

- файл/контейнер для расшифровки.

П.4.2.1.2 Выходные данные

- файл/папка с файлами для шифрования;

- файл/контейнер для расшифровки.

П.А.4.3 Условия эксплуатации

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

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

П.А.4.4 Требования к составу и параметрам технических средств

В состав технических средств должен входить IВМ-совместимый персональный компьютер (ПЭВМ), включающий в себя:

- процессор Pentium-2.0GHz, не менее или процессор Intel или AMD с тактовой частотой не ниже 2.0GHz;

- оперативную память объемом не менее 1024 Мбайт;

- операционную систему семейства Windows;

- VGA-совместимый видеоадаптер и дисплей;

- клавиатура и мышь.

П.А.4.4.1. Условия эксплуатации технических средств

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

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

Для корректного функционирования программного продукта необходима операционная система платформы Microsoft Windows XP, Microsoft Windows Vista или Windows 7, а также наличие программного пакета Microsoft Office 2003/2007 или OpenOffice.

П.А.4.5 Требования к исходным кодам и языкам программирования.

Среда разработки Borland Delphi 7 или выше.

П.A. 4.6 Требование к упаковке и маркировке

Программное средство должно сопровождаться руководством пользователя. Требования к маркировке не предъявляются, но упаковывать желательно в «контейнеры», создающие максимальную защиту носителей, на которых хранится и переносится программное средство.

П.А.4.7 Требования к транспортировке и хранению

Условия транспортирования, места хранения, условия складирования и сроки хранения в различных условиях должны соответствовать требованиям, предъявляемым к носителям информации на которых будет содержаться данное программное изделие. Программа может храниться на жестком диске, на Flash-носителе, на компакт-дисках.

П.A.5 Требование к программной документации

Предварительный состав необходимой программной документации, выполненной на русском языке в соответствии с требованиями ЕСПД согласно ГОСТ 19.201-78, 19.503-79, 19.504-79, 19.505-79:

Техническое задание по ГОСТ 19.201-78 ЕСПД. «Техническое задание. Требования к содержанию и оформлению».

П.A.6 Стадии и этапы разработки

Системный анализ (с 15.03.2012 по 20.05.2012):

- изучение предметной области (дистанционное обучение, язык программирования Object Pascal);

- определение области применения и целей использования разрабатываемого программного средства;

- поиск вариантов решения поставленных задач;

- определение ограничений и диапазонов функционирования разрабатываемого программного средства;

- подготовка технического задания.

Этап 1. Общесистемное проектирование (с 21.05.2012 по 10.06.2012):

- определение структуры программного комплекса;

- определение структуры алгоритмов и модулей.

Этап 2. Подготовка технологических средств (11.06.2012-20.06.2012):

- выбор языка программирования;

- выбор и подготовка инструментальных средств, (средств трансляции) и средств отладки;

- разработка инструкций к применению методов.

Этап 3. Программная реализация, рабочий проект (с 20.06.2011 по 15.09.2011):

- разработка алгоритмической части;

- разработка текстов программных модулей;

- разработка документации;

- проектирование пользовательского интерфейса.

Этап 4. Отладка программного средства в статике (c 16.09.2012 по 13.10.2012):

- тестирование программных модулей;

- комплексирование модулей, поэтапное сведение в единый комплекс;

- локализация ошибок, корректировка исходных текстов, информационных потоков, перекомпиляция.

Этап 5. Разработка технической документации и выпуск машинных носителей (с .14.10.2012 по 10.11.2012):

- изготовление исследовательской документации (отчетов);

- изготовление эксплуатационной документации (инструкции, руководства, методические указания).

Этап 6. Тестовые испытания программного комплекса (с 11.11.2012 по 9.12.2012):

- испытание на информационную полноту;

- испытание на полноту функционирования;

- протоколы и акты испытаний.

П.А.7 Порядок контроля и приемки

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

Разработчик технического задания:

Матющенко Александр Евгеньевич

(подпись)

“___” ____________ 2012г.

Приложение Б

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, FileCtrl, CryptoAPI, CRC64, ExtCtrls;

type

USB_key = record

Key_RC: Array [1..8] of cardinal; //256bit ключ шифрования RC6

Key_IDEA: Array [1..4] of cardinal;//128bit ключ шифрования IDEA

Key_CONST: Array [1..4] of cardinal;//128bit вектор инициализации

CRC64_2: int64; //64bit конт сумма ОТКРЫТЫХ полей выше

Key_counter: cardinal; //32bit счетчик - меняется каждый сеанс работы с ключом

data_key: cardinal;//32bit дата создания ключа ДДММГГ

Control_hash: string[128]; //512bit

Familiy: string[60];

Name: string[30];

CRC64_1: int64;//64

end;

TForm3 = class(TForm)

Label1: TLabel;

GroupBox1: TGroupBox;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Label4: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit3: TEdit;

Label6: TLabel;

Edit4: TEdit;

Label7: TLabel;

Edit5: TEdit;

ProgressBar1: TProgressBar;

Button1: TButton;

GroupBox3: TGroupBox;

Label10: TLabel;

DriveComboBox1: TDriveComboBox;

Label11: TLabel;

Image1: TImage;

Procedure WMGetSysCommand(var Message : TMessage); message WM_SYSCOMMAND;

procedure Button1Click(Sender: TObject);

procedure Edit4Change(Sender: TObject);

procedure DriveComboBox1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Image1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

G_numdisk: cardinal;

function CRC64_sum(str: string): int64;

procedure new_yserkey;

function hexTOdec(str: string):cardinal;

implementation

uses Unit1, Unit2;

{$R *.dfm}

{======================================}

function hexTOdec(str: string):cardinal;

CONST HEX : ARRAY['a'..'f'] OF INTEGER = (10,11,12,13,14,15);

VAR

Int,i : cardinal;

BEGIN

str:='ffffffff';

Int := 0;

FOR i := 1 TO Length(str) DO

IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48

ELSE Int := Int * 16 + HEX[str[i]];

HexToDec:= int;

end;

{======================================}

function c_GetTempPath: String; //путь к TEMP папке

var

Buffer: array[0..1023] of Char;

begin

SetString(Result, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));

end;

{======================================}

function CRC64_sum(str: string): int64;

var

InFile: TFileStream;

f1: textfile;

crc: int64;

TempPath: string;

begin

TempPath:=c_GetTempPath;

assign(f1, TempPath+'\'+ 'crc.qwl');

rewrite(f1);

write(f1, str);

closefile(f1);

InFile := TFileStream.Create(TempPath+'\'+ 'crc.qwl', fmShareDenyNone);

crc:=(CRC64Stream(INFILE, SIZEOF(INFILE), 1024));

DeleteFile(TempPath+'\'+ 'crc.qwl');

CRC64_sum:=crc;

end;

{================}

procedure new_yserkey;

const

max = 4294967295;

var

ret: LongWord;

buffer, d, Control_hash, Lite_key, S_key, str: String;

i: integer;

num_user, pl: cardinal; //номер юзера

U_key: USB_key;

Fkey: file of USB_key;

data_: TDateTime;

y, m, day: word; //для перевода даты в число

begin

randomize();

U_key.Key_counter:= Random(max); //одноразовый счетчик

//размножаем и загоняем в буфер: пароль_соль_id USB

d:='';

buffer:='';

d:= '76' + Form3.edit4.text + '4387swqsalt_ewui3765_saltvlkskl09' + Form3.edit3.text + '4387654salt_0745963765_saltvlkrto743' + inttostr(G_numdisk);

for i:=1 to 765 do

buffer:= buffer + d;

ret := HashStr(HASH_SHA512, buffer, Control_hash); //

d:='';

buffer:='';

d:= Form3.edit3.text + '4333salt_OUedie437_saltvlkskl09' + Form3.edit4.text + 'AQQQdkwpsalt_07CNJWEKUEk_saltvdw7DH3' + inttostr(G_numdisk);

for i:=1 to 801 do

buffer:= buffer + d;

ret := HashStr(HASH_SHA512, buffer, Lite_key); //

{MessageDlg(Control_hash, mtWarning, [mbOK],0);

MessageDlg(Lite_key, mtWarning, [mbOK],0);}

Randomize();

U_key.Key_RC[1]:= Random(max);

U_key.Key_RC[2]:= Random(max);

U_key.Key_RC[3]:= Random(max);

U_key.Key_RC[4]:= Random(max);

U_key.Key_RC[5]:= Random(max);

U_key.Key_RC[6]:= Random(max);

U_key.Key_RC[7]:= Random(max);

U_key.Key_RC[8]:= Random(max);

U_key.Key_IDEA[1]:=Random(max);

U_key.Key_IDEA[2]:=Random(max);

U_key.Key_IDEA[3]:=Random(max);

U_key.Key_IDEA[4]:=Random(max);

U_key.Key_CONST[1]:=Random(max);

U_key.Key_CONST[2]:=Random(max);

U_key.Key_CONST[3]:=Random(max);

U_key.Key_CONST[4]:=Random(max);

// MessageDlg('RC6 ' +inttostr(U_key.Key_RC[1]) + ' ' + inttostr(U_key.Key_RC[2]) + ' ' + inttostr(U_key.Key_RC[3]) + ' ' + inttostr(U_key.Key_RC[4]) + ' ' + inttostr(U_key.Key_RC[5]) + ' ' + inttostr(U_key.Key_RC[6]) + ' ' + inttostr(U_key.Key_RC[7]) + ' ' + inttostr(U_key.Key_RC[8]) , mtWarning, [mbOK],0);

// MessageDlg('IDEA ' +inttostr(U_key.Key_IDEA[1]) + ' ' + inttostr(U_key.Key_IDEA[2]) + ' ' + inttostr(U_key.Key_IDEA[3]) + ' ' + inttostr(U_key.Key_IDEA[4]), mtWarning, [mbOK],0);

// MessageDlg('CONST ' +inttostr(U_key.Key_CONST[1]) + ' ' + inttostr(U_key.Key_CONST[2]) + ' ' +inttostr(U_key.Key_CONST[3]) + ' ' +inttostr(U_key.Key_CONST[4]) , mtWarning, [mbOK],0);

//считаем CRC64 от открытых ключей и вектора инициализации:

buffer:='';

for i:=1 to 8 do

buffer:= buffer + inttostr(U_key.Key_RC[i]);

for i:=1 to 4 do

buffer:= buffer + inttostr(U_key.Key_IDEA[i]);

for i:=1 to 4 do

buffer:= buffer + inttostr(U_key.Key_CONST[i]);

U_key.CRC64_2:= CRC64_sum(buffer);

// MessageDlg(inttostr(U_key.Key_RC[1]) + ' ' + inttostr(U_key.Key_RC[2]) + ' ' + inttostr(U_key.Key_RC[3]) + ' ' + inttostr(U_key.Key_RC[4]) + ' ' + inttostr(U_key.Key_RC[5]) + ' ' + inttostr(U_key.Key_RC[6]) + ' ' + inttostr(U_key.Key_RC[7]) + ' ' + inttostr(U_key.Key_RC[8]) , mtWarning, [mbOK],0);

// MessageDlg(inttostr(U_key.Key_IDEA[1]) + ' ' + inttostr(U_key.Key_IDEA[2]) + ' ' + inttostr(U_key.Key_IDEA[3]) + ' ' + inttostr(U_key.Key_IDEA[4]), mtWarning, [mbOK],0);

// MessageDlg(inttostr(U_key.Key_CONST[1]) + ' ' + inttostr(U_key.Key_CONST[2]) + ' ' +inttostr(U_key.Key_CONST[3]) + ' ' +inttostr(U_key.Key_CONST[4]) , mtWarning, [mbOK],0);

// MessageDlg(inttostr(U_key.CRC64_2), mtWarning, [mbOK],0);

d:='';

buffer:='';

d:= inttostr(U_key.Key_counter) + '56437gc77dg73643276' + Form3.edit3.text + '44322salt_4327h4897d3946f' + Form3.edit4.text + 'Afrejoiewpsalt_04o2hudbuk_salt4222222' + inttostr(G_numdisk);

for i:=1 to 707 do

buffer:= buffer + d;

ret := HashStr(HASH_SHA512, buffer, S_key); // S_key - используется для шифрования первого блока ключа - ключей и вектора иниц

buffer:=copy(S_key, 1,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[1]:=U_key.Key_RC[1] xor pl;

buffer:=copy(S_key, 8,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[2]:=U_key.Key_RC[2] xor pl;

buffer:=copy(S_key, 16,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[3]:=U_key.Key_RC[3] xor pl;

buffer:=copy(S_key, 24,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[4]:=U_key.Key_RC[4] xor pl;

buffer:=copy(S_key, 32,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[5]:=U_key.Key_RC[5] xor pl;

buffer:=copy(S_key, 40,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[6]:=U_key.Key_RC[6] xor pl;

buffer:=copy(S_key, 48,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[7]:=U_key.Key_RC[7] xor pl;

buffer:=copy(S_key, 56,8);

pl:= StrToInt('$'+buffer);

U_key.Key_RC[8]:=U_key.Key_RC[8] xor pl;

//////////

//MessageDlg(inttostr(U_key.Key_RC[1]) + ' ' + inttostr(U_key.Key_RC[2]) + ' ' + inttostr(U_key.Key_RC[3]) + ' ' + inttostr(U_key.Key_RC[4]) + ' ' + inttostr(U_key.Key_RC[5]) + ' ' + inttostr(U_key.Key_RC[6]) + ' ' + inttostr(U_key.Key_RC[7]) + ' ' + inttostr(U_key.Key_RC[8]) , mtWarning, [mbOK],0);

/////////

buffer:=copy(S_key, 64,8);

pl:= StrToInt('$'+buffer);

U_key.Key_IDEA[1]:=U_key.Key_IDEA[1] xor pl;

buffer:=copy(S_key, 72,8);

pl:= StrToInt('$'+buffer);

U_key.Key_IDEA[2]:=U_key.Key_IDEA[2] xor pl;

buffer:=copy(S_key, 80,8);

pl:= StrToInt('$'+buffer);

U_key.Key_IDEA[3]:=U_key.Key_IDEA[3] xor pl;

buffer:=copy(S_key, 88,8);

pl:= StrToInt('$'+buffer);

U_key.Key_IDEA[4]:=U_key.Key_IDEA[4] xor pl;

////

// MessageDlg(inttostr(U_key.Key_IDEA[1]) + ' ' + inttostr(U_key.Key_IDEA[2]) + ' ' + inttostr(U_key.Key_IDEA[3]) + ' ' + inttostr(U_key.Key_IDEA[4]), mtWarning, [mbOK],0);

////

buffer:=copy(S_key, 96,8);

pl:= StrToInt('$'+buffer);

U_key.Key_CONST[1]:=U_key.Key_CONST[1] xor pl;

buffer:=copy(S_key, 104,8);

pl:= StrToInt('$'+buffer);

U_key.Key_CONST[2]:=U_key.Key_CONST[2] xor pl;

buffer:=copy(S_key, 112,8);

pl:= StrToInt('$'+buffer);

U_key.Key_CONST[3]:=U_key.Key_CONST[3] xor pl;

buffer:=copy(S_key, 120, 8);

pl:= StrToInt('$'+buffer);

U_key.Key_CONST[4]:=U_key.Key_CONST[4] xor pl;

// первый блок ключа успешно зашифрован! Мы молодцы!

////////////

//получаем дату

data_:=Date;

DecodeDate(data_, y, m, day);

if day<10 then str:= str + '0' + inttostr(day);

if m<10 then str:= str + '0' + inttostr(m);

str:= str + inttostr(y);

U_key.data_key:= strtoint(str);

// шифруем вторую часть ключа

// MessageDlg(inttostr(U_key.CRC64_2) , mtWarning, [mbOK],0);

buffer:=copy(lite_key, 1,8);

pl:= StrToInt('$'+buffer);

U_key.CRC64_2:= U_key.CRC64_2 xor pl;

buffer:=copy(lite_key, 8,8);

pl:= StrToInt('$'+buffer);

U_key.Key_counter:=U_key.Key_counter xor pl;

buffer:=copy(lite_key, 16,8);

pl:= StrToInt('$'+buffer);

U_key.data_key :=U_key.data_key xor pl;

//считаем CRC64 от 1 и 2 части ключа уже зашифрованных:

buffer:='';

for i:=1 to 8 do

buffer:= buffer + inttostr(U_key.Key_RC[i]);

for i:=1 to 4 do

buffer:= buffer + inttostr(U_key.Key_IDEA[i]);

for i:=1 to 4 do

buffer:= buffer + inttostr(U_key.Key_CONST[i]);

buffer:= buffer + inttostr(U_key.CRC64_2);

buffer:= buffer + inttostr(U_key.Key_counter);

buffer:= buffer + inttostr(U_key.data_key);

U_key.CRC64_1:= CRC64_sum(buffer);

//создаем USB-ключ

U_key.Control_hash:= Control_hash;

U_key.Familiy:= Form3.Edit1.Text;

U_key.Name:= Form3.Edit2.Text;

//проверка:

{ MessageDlg('RC6 ' +inttostr(U_key.Key_RC[1]) + ' ' + inttostr(U_key.Key_RC[2]) + ' ' + inttostr(U_key.Key_RC[3]) + ' ' + inttostr(U_key.Key_RC[4]) + ' ' + inttostr(U_key.Key_RC[5]) + ' ' + inttostr(U_key.Key_RC[6]) + ' ' + inttostr(U_key.Key_RC[7]) + ' ' + inttostr(U_key.Key_RC[8]) , mtWarning, [mbOK],0);

MessageDlg('IDEA ' +inttostr(U_key.Key_IDEA[1]) + ' ' + inttostr(U_key.Key_IDEA[2]) + ' ' + inttostr(U_key.Key_IDEA[3]) + ' ' + inttostr(U_key.Key_IDEA[4]), mtWarning, [mbOK],0);

MessageDlg('CONST ' +inttostr(U_key.Key_CONST[1]) + ' ' + inttostr(U_key.Key_CONST[2]) + ' ' +inttostr(U_key.Key_CONST[3]) + ' ' +inttostr(U_key.Key_CONST[4]) , mtWarning, [mbOK],0);

MessageDlg('CRC2 ' + inttostr(U_key.CRC64_2), mtWarning, [mbOK],0);

MessageDlg('Счетчик ' + inttostr(U_key.Key_counter) , mtInformation, [mbOK],0);

MessageDlg('Дата ' + inttostr(U_key.data_key) , mtInformation, [mbOK],0);

MessageDlg('Control_hash ' + Control_hash , mtInformation, [mbOK],0);

MessageDlg('FAM ' + U_key.Familiy , mtInformation, [mbOK],0);

MessageDlg('Name ' + U_key.Name , mtInformation, [mbOK],0);

MessageDlg('CRC1 ' + inttostr(U_key.CRC64_1) , mtInformation, [mbOK],0);

}

assign(fkey, Form3.drivecombobox1.Drive + ':\qwallke.qwkey');

rewrite(fkey);

write(fkey, U_key);

closefile(fkey);

FileSetAttr(Form3.drivecombobox1.Drive + ':\qwallke.qwkey', faHidden);

//делаем его невидимым

MessageDlg('USB-ключ успешно создан!' , mtInformation, [mbOK],0);

Form2.Timer1.Enabled:=true;

Form2.Show;

Form3.Hide;

end;

{===============}

procedure TForm3.Button1Click(Sender: TObject);

var

j: byte;

begin

j:=0;

if (Length(Edit1.Text)<7) then MessageDlg('Поле ввода "Фамилия" не может быть меньше 7 символов!', mtWarning, [mbOK],0)

else if (Length(Edit2.Text)<2) then MessageDlg('Поле ввода "Имя" не может быть меньше 2 символов!', mtWarning, [mbOK],0)

else if (Length(Edit5.Text)<8) then MessageDlg('Поле ввода "Пароль доступа" не может быть меньше 8 символов!', mtWarning, [mbOK],0)

else if (Length(Edit4.Text)<8) then MessageDlg('Поле ввода "Подтвердите пароль" не может быть меньше 8 символов!', mtWarning, [mbOK],0)

else if (Length(Edit3.Text)<5) then MessageDlg('Поле ввода "Логин" не может быть меньше 5 символов!', mtWarning, [mbOK],0)

else if (Edit5.Text <> Edit4.Text) then MessageDlg('Подтверждение пароля неверно! Повторите попытку', mtWarning, [mbOK],0)

else new_yserkey;

end;

{==================================}

//перехватываем закрытие формы и закрываем прогу

Procedure TForm3.WMGetSysCommand(var Message : TMessage) ;

var

s: integer;

Begin

if code=0 then begin

IF (Message.wParam = SC_MINIMIZE)

Then Form1.Visible:=False;

IF (Message.wParam = SC_CLOSE)

Then begin

Application.Terminate; end

Else Inherited;

End;

if (Message.wParam = SC_CLOSE) and (code=1)

Then Form3.Hide;

end;

{======================================}

procedure TForm3.Edit4Change(Sender: TObject);

var

str, h: string;

i,k: integer;

begin

str:=edit4.Text;

k:=0;

for i:=1 to length(str) do begin

if (copy(str, i,1)>'A') and (copy(str, i,1)<'Z') then inc(k);

if (copy(str, i,1)>'0') and (copy(str, i,1)<'9') then inc(k);

end;

if length(str)>7 then begin

//PostMessage(ProgressBar1.Handle, $0409, 0, clRed);

//newuser:=true;

progressbar1.Position:=length(str) + k;

//GroupBox3.Enabled:=true;

end;

end;

procedure TForm3.DriveComboBox1Change(Sender: TObject);

var

SerialNum : dword;

VolumeName, FSName : array [0..255] of char;

MaximumFNameLength,

FileSystemFlags : dword;

FileEx: boolean;

begin

GetVolumeInformation(PChar(drivecombobox1.Drive + ':\'),

VolumeName, SizeOf(VolumeName),

@SerialNum,

MaximumFNameLength,

FileSystemFlags,

FSName, SizeOf(FSName));

label11.Caption:= 'Имя диска: ' + VolumeName;

G_numdisk:=SerialNum;//узнаем id USB

FileEx:=FileExists(PChar(drivecombobox1.Drive + ':\' + 'qwallke.qwkey'));

if FileEx=true then begin

label11.Caption:='Этот USB уже является ключом!';

if edit4.text<>'' then label11.Visible:=true;

label11.Font.Color:=clRed;

Button1.Enabled:=false end

else begin

label11.Font.Color:=clBlack;

Button1.Enabled:=true;

end;

end;

{=============================}

procedure TForm3.FormCreate(Sender: TObject);

var

i: integer;

DriveType : uInt;

begin

//newuser:=false;

{оставляем только сменные носители}

i := 0;

while i <= Form3.DriveComboBox1.Items.Count - 1 do

begin

DriveType := GetDriveType (PChar(Form3.DriveComboBox1.Items[i][1] + ':\'));

if (DriveType<> Drive_Removable) then

Form3.DriveComboBox1.Items.Delete(i)

else

inc(i);

end;

Form3.button1.Enabled:=false;

end;

procedure TForm3.Image1Click(Sender: TObject);

begin

MessageDlg('В этом окне вы можете создать USB-ключ. Он понадобится Вам для шифрования и расшифрования файлов и файловых контейнеров. Заполните все поля. ВНИМАНИЕ: запомните введенные ЛОГИН и ПАРОЛЬ - они понадобятся для входа в систему. <мастер Йода>', mtInformation, [mbOK],0);

end;

end.

Размещено на Allbest.ru


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

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

    дипломная работа [802,2 K], добавлен 08.06.2013

  • Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.

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

  • Основные методы криптографической защиты информации. Система шифрования Цезаря числовым ключом. Алгоритмы двойных перестановок и магические квадраты. Схема шифрования Эль Гамаля. Метод одиночной перестановки по ключу. Криптосистема шифрования данных RSA.

    лабораторная работа [24,3 K], добавлен 20.02.2014

  • Особенности работы "поисковика" дублирующихся файлов на диске. Выбор среды программирования. Разработка программного продукта. Основные требования, предъявляемые к программе, производящей поиск дублирующихся файлов на диске. Отображение скрытых файлов.

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

  • История появления симметричных алгоритмов шифрования. Роль симметричного ключа в обеспечении степени секретности сообщения. Диффузия и конфузия как способы преобразования бит данных. Алгоритмы шифрования DES и IDEA, их основные достоинства и недостатки.

    лабораторная работа [335,9 K], добавлен 18.03.2013

  • Установка TrueCrypt и создание стандартного тома. Мастер создания томов и настройки шифрования. Безопасность пароля, подключение тома и работа с ним. Создание и использование скрытого тома. Различия между обычной и портативной версиями TrueСrypt.

    практическая работа [2,7 M], добавлен 19.11.2015

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

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

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

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

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

    презентация [241,0 K], добавлен 13.08.2013

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

    дипломная работа [968,8 K], добавлен 01.07.2011

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