РЕФЕРАТ Отчет содержит 126 страниц, 44 рисунка, 9 таблиц, 10 приложений. АЛГОРИТМ ШИФРОВАНИЯ, КРИПТОГРАФИЯ, ШИФРОВАНИЕ, АУТЕНТИФИКАЦИЯ, ХЭШ-ФУНКЦИЯ, USB-КЛЮЧ, КОНТРОЛЬ ЦЕЛОСТНОСТИ. В данной работе представлен обзор методов зашифрования и расшифрования файлов, методов аутентификации и противодействие атакам на зашифрованные рассматриваемого данные. алгоритма Приводится шифрования, структура и построенного тестирование на основе современных тенденций построения блочных алгоритмов шифрования. В результате было разработано ПС применяющее криптографические методы – зашифрование/расшифрование – защиты файлов с использованием USB-ключа, двухуровневой аутентификации и контроля целостности. 4 СОДЕРЖАНИЕ ВВЕДЕНИЕ .................................................................................................................. 8 1 АНАЛИТИЧЕСКИЙ ОБЗОР КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ .................................................................................................................... 11 1.1 Задачи криптографии ...................................................................................... 11 1.2 Работа криптографии ...................................................................................... 13 1.3 Тpебования к кpиптосистемам ....................................................................... 14 1.4 Режимы шифрования ...................................................................................... 15 1.4.1 Электронная кодовая книга .................................................................... 16 1.4.2 Сцепление блоков по шифротексту ....................................................... 17 1.4.3 Обратная загрузка шифротекста ............................................................ 18 1.4.4 Обратная загрузка выходных данных .................................................... 19 1.5 Аутентификация. Контроль целостности ..................................................... 20 1.5.1 Задача имитозащиты данных .................................................................. 20 1.5.2 Подходы к контролю неизменности данных ........................................ 21 1.6 Обзор существующих программных криптографических средств защиты данных .......................................................................................................... 22 1.6.1 Линейка eToken ........................................................................................ 22 1.6.2 Программа шифрования и аутентификации данных PGP ................... 23 1.6.3 Программа шифрования данных TrueCrypt .......................................... 25 1.7 Выводы по главе .............................................................................................. 26 1.8 Постановка задачи........................................................................................... 27 2 АЛГОРИТМИЧЕСКОЕ КОНСТРУИРОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ .................................................. 28 2.1 Алгоритм хэш-функции SHA-512 ................................................................. 28 2.2 Алгоритм контрольной суммы CRC ............................................................. 29 2.3 Алгоритм шифрования RC6 ........................................................................... 31 2.4 Алгоритм шифрования IDEA......................................................................... 33 2.5 Выводы по главе .............................................................................................. 35 5 3 ТЕСТИРОВАНИЕ И ИССЛЕДОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ ................................................................................................. 36 3.1 «Составляющие» структуры блочного алгоритма ...................................... 36 3.1.1 Таблицы подстановок .............................................................................. 36 3.1.2 Битовые циклические сдвиги .................................................................. 38 3.1.3 Отбеливание данных................................................................................ 39 3.1.4 Вложенные Сети Фейстеля ..................................................................... 40 3.2 Построение алгоритма .................................................................................... 41 3.2.1 Общая схема алгоритма........................................................................... 41 3.2.2 Тестирование выходной последовательности алгоритма .................... 44 3.3 Выводы по главе .............................................................................................. 48 4 ПРОГРАММНОЕ КОНСТРУИРОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ ................................................................................................. 49 4.1 Выбор обоснования языка программирования ............................................ 49 4.2 Структура данных описания файла USB-ключа .......................................... 49 4.3 Общая схема программного средства ........................................................... 50 4.4 Взаимодействие модулей ............................................................................... 51 4.5 Создание USB-ключа и нового пользователя .............................................. 53 4.6 Вход в систему ................................................................................................ 55 4.7 Основные модули программы ....................................................................... 55 4.7.1 Модуль вычисления контрольной суммы ............................................. 56 4.7.2 Модуль алгоритма шифрования RC6..................................................... 56 4.7.3 Модуль алгоритма шифрования IDEA .................................................. 57 4.7.4 Модуль создания архива ......................................................................... 57 4.7.5 Модуль создания USB-ключа ................................................................. 58 4.7.6 Модуль исследуемого алгоритма шифрования .................................... 58 4.8 Выводы по главе .............................................................................................. 58 5 КОНТРОЛЬНЫЙ ПРИМЕР .................................................................................. 60 5.1 Запуск программы ........................................................................................... 60 5.2 Сообщения оператору ..................................................................................... 62 6 5.3 Пример зашифрования и расшифрования файлов....................................... 64 5.4 Выводы по главе .............................................................................................. 67 ЗАКЛЮЧЕНИЕ ......................................................................................................... 68 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ............................................... 69 ПРИЛОЖЕНИЕ А. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО ................................................................................................................ 71 ПРИЛОЖЕНИЕ Б. ИСХОДНЫЙ КОД МОДУЛЯ UNIT3.PAS ........................... 77 ПРИЛОЖЕНИЕ В. ОСНОВНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ МОДУЛЕЙ .... 91 ПРИЛОЖЕНИЕ Г. РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА..... 100 ПРИЛОЖЕНИЕ Д. РУКОВОДСТВО ПРОГРАММИСТА .................................. 103 ПРИЛОЖЕНИЕ Е. РУКОВОДСТВО ОПЕРАТОРА ............................................. 107 ПРИЛОЖЕНИЕ Ж. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРОВЕДЕНИЮ ЛАБОРАТОРНЫХ РАБОТ ПО КУРСУ «ПРОГРАММНО-АППАРАТНЫЕ СРЕДСТВА ОБЕСПЕЧЕНИЯ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ» ... 114 7 ВВЕДЕНИЕ Компьютеризация современного общества дошла до той черты, когда буквально вся информация – книги, рабочие документы, фото- и видеофайлы, а также личная информация хранится на жестких дисках компьютеров. В связи с этим остро ставится вопрос о сохранении этих данных от доступа посторонних лиц. Одним из выходов является шифрование данных [1]. Среди криптографических программных средств с платной лицензией здесь можно выделить продукты eToken и ruToken [2], среди свободно распространяемых программ – PGP, TrueCrypt. Однако данные программы обладают рядом недостатков – они либо платные, либо являются продуктами иностранного производства, где не гарантировано отсутствие закладок. Также порой бесплатные программы не имеют документированного сопровождения на русском языке. Еще одной проблемой бесплатных программ является использование морально устаревших алгоритмов шифрования, в то время, как реализация принципиально новых алгоритмов шифрования дает хорошие результаты [3]. В криптографических программных средствах практически не используемым остается многоэтапная аутентификация посредством USBключа, что также является большим недостатком таких систем. А ведь использование парольной (однофакторной) аутентификации в информационной системе предприятий и организаций себя изживает. Продолжая применять эту традиционную методику доступа в отношении собственных информационных ресурсов, компании фактически ставят под угрозу рентабельность и, тем самым, вероятно, само существование предприятия. Такие выводы можно сделать, если вспомнить, что парольная аутентификация является одним из первых барьеров, появившихся в ИТсистемах одновременно с операционными системами, реализующими множественный доступ к информационным ресурсам. Без малого 20 лет 8 именно она стоит на первом рубеже контроля. Очевидно, что, среди основных достоинств этой методики защиты, – её привычность и простота. Более половины инцидентов в сфере информационной безопасности происходят вследствие использования слабых паролей. Главное заключение, сделанное в итоге: слабые пароли - наиболее уязвимое место, активно используемое злоумышленниками. Это касается как крупных, так и небольших компаний [2]. Слабый пароль - это плохо с точки зрения норм информационной безопасности, но обратная сторона применения сложных паролей – трудность их удержания в памяти человека. Как следствие – небрежность их хранения в виде рабочих записей, а в этом случае уже не имеет значения, будет ли пара логин/пароль записана в личном блокноте сотрудника или закреплена на мониторе липким листком. Многофакторная аутентификация уже сегодня применяется рядом российских компаний в сфере финансов при создании сервисов интернетбанкинга, мобильного банкинга, файлообмена и т.п. решений для конечных пользователей. Её использование значительно повышает безопасность использования информации, по меньшей мере, со стороны пользователей, подключающихся к информационным системам по защищенным и незащищенным каналам коммуникаций или непосредственно работающих с автономными рабочими станциями. В первой главе будут рассмотрены вопросы применения криптографии, подходы к применению криптографических алгоритмов, способы и методы аутентификации. Во второй главе будут рассмотрены алгоритмы, требуемые для реализации работы. Приведены алгоритмы хэш-суммы, контрольной суммы, алгоритмы криптографической защиты данных. В третьей главе будут рассмотрены основные элементы и структуры, слагающие современные блочные алгоритмы шифрования, их достоинства и недостатки. 9 В четвертой главе будут описаны модули, реализующие алгоритмы CRC64, RC6, IDEA, а так же другие вспомогательные модули и структуры данных, примененные в работе. 10 1 АНАЛИТИЧЕСКИЙ ОБЗОР КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ В данной главе рассматриваются вопросы применения криптографии, подходы к применению криптографических алгоритмов, способы и методы аутентификации. 1.1 Задачи криптографии Проблема защиты информации путем ее пpеобpазования, исключающего ее прочтение посторонним лицом волновала человеческий ум с давних времен. История кpиптогpафии – ровесница истории человеческого языка. Более того, первоначально письменность сама по себе была кpиптогpафической системой, так как в дpевних обществах ею владели только избранные. Священные книги Древнего Египта, Древней Индии тому пpимеpы. С шиpоким pаспpостpанением письменности кpиптогpафия стала фоpмиpоваться как самостоятельная наука. Пеpвые кpиптосистемы встpечаются уже в начале нашей эpы. Так, наиболее известным фактом применения шифров является широко используемый Цезарем одноименный шифр. Буpное pазвитие кpиптогpафические системы получили в годы пеpвой и втоpой миpовых войн. Начиная с послевоенного вpемени и по нынешний день появление вычислительных сpедств ускоpило pазpаботку и методов в совеpшенствование кpиптогpафических методов [4]. Пpоблема использования кpиптогpафических инфоpмационных системах (ИС) стала в настоящий момент особо актуальна. С одной стоpоны, pасшиpилось использование компьютерных сетей, в частности глобальной сети Интеpнет, по котоpым пеpедаются большие объемы инфоpмации госудаpственного, военного, коммеpческого и частного хаpактеpа, не допускающего возможность доступа к ней постоpонних лиц. 11 С дpугой стоpоны, появление новых мощных компьютеpов, технологий сетевых и нейpонных вычислений сделало возможным дискpедитацию кpиптогpафических систем еще недавно считавшихся пpактически не pаскpываемыми. Пpоблемой защиты инфоpмации путем ее пpеобpазования занимается кpиптология (kryptos – тайный, logos – наука). Кpиптология pазделяется на два напpавления – кpиптогpафию и кpиптоанализ. Цели этих напpавлений пpямо пpотивоположны. Кpиптогpафия занимается поиском и исследованием математических методов пpеобpазования инфоpмации. Сфера интеpесов кpиптоанализа – исследование возможности pасшифpовывания инфоpмации без знания ключей. Совpеменная кpиптогpафия включает в себя четыpе кpупных pаздела: симметpичные кpиптосистемы; кpиптосистемы с откpытым ключом; системы электpонной подписи; упpавление ключами. Основные напpавления использования кpиптогpафических методов пеpедача конфиденциальной инфоpмации по каналам связи (напpимеp, электpонная почта), установление подлинности пеpедаваемых сообщений, хpанение инфоpмации (документов, баз данных) на носителях в зашифpованном виде [4]. Кpиптогpафия дает возможность пpеобpазовать инфоpмацию таким обpазом, что ее пpочтение (восстановление) возможно только пpи знании ключа. В качестве инфоpмации, подлежащей шифpованию и дешифpованию, будут pассматpиваться тексты, постpоенные на некотоpом алфавите [4]. Под этими теpминами понимается следующее. 12 1.2 Работа криптографии Алфавит – конечное множество используемых для кодиpования инфоpмации знаков. Текст – упоpядоченный набоp из элементов алфавита. Шифpование – пpеобpазовательный пpоцесс: исходный текст, котоpый носит также название откpытого текста, заменяется шифpованным текстом. Общая структура данной системы представлена на рисунке 1. Рисунок 1 – Схема шифрования Расшифрование – обpатный шифpованию пpоцесс. На основе ключа шифpованный текст пpеобpазуется в исходный (рис. 2). Рисунок 2 – Схема расшифровывания Ключ – инфоpмация, необходимая для беспpепятственного шифpования и дешифpования текстов. Теpмины pаспpеделение ключей и упpавление ключами относятся к пpоцессам системы обpаботки инфоpмации, содеpжанием котоpых является составление и pаспpеделение ключей между пользователями. Кpиптостойкостью называется хаpактеpистика шифpа, опpеделяющая его стойкость к расшифрованию без знания ключа (т.е. кpиптоанализу). 13 Криптографическое пpеобpазование опpеделяется соответствующим алгоpитмом и значением ключевого паpаметpа. Эффективность шифpования с целью защиты инфоpмации зависит от сохpанения тайны ключа и кpиптостойкости шифpа [4]. 1.3 Тpебования к кpиптосистемам Пpоцесс кpиптогpафического закpытия данных может осуществляться как пpогpаммно, так и аппаpатно. Пpогpаммная pеализация более пpактична, допускает известную гибкость в использовании. Для совpеменных кpиптогpафических систем защиты инфоpмации сфоpмулиpованы следующие общепpинятые тpебования [1]: зашифpованное сообщение должно поддаваться чтению только пpи наличии ключа; ключа число опеpаций, необходимых для опpеделения использованного шифpования по фpагменту шифpованного сообщения и соответствующего ему откpытого текста, должно быть не меньше общего числа возможных ключей; число операций, необходимых для pасшифpовывания информации путем пеpебоpа всевозможных ключей должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных компьютеpов (с учетом возможности использования сетевых вычислений); знание алгоритма шифрования не должно влиять на надежность защиты; незначительное изменение ключа должно приводить к существенному изменению вида зашифрованного сообщения даже пpи использовании одного и того же ключа; стpуктуpные элементы алгоритма шифрования должны быть неизменными; 14 дополнительные биты, вводимые в сообщение в процессе шифрования, должны быть полностью и надежно скрыты в шифрованном тексте; длина шифpованного текста должна быть pавной длине исходного текста; не должно быть простых и легко устанавливаемых зависимостей между ключами, последовательно используемыми в процессе шифрования; любой ключ из множества возможных должен обеспечивать надежную защиту информации; алгоритм должен допускать как пpогpаммную, так и аппаратную реализацию, при этом изменение длины ключа не должно вести к качественному ухудшению алгоритма шифрования. 1.4 Режимы шифрования Далее будут рассмотрены пять режимов шифрования так, как они представлены в документе [5], изданном НИСТ США и озаглавленном «Рекомендации для режимов шифрования с блочным шифром». Вот эти режимы: ECB (Electronic Code Book) – электронная кодовая книга; CBC (Cipher Block Chaining) – сцепление блоков по шифротексту; CFB (Cipher Feed Back) – обратная загрузка шифротекста; OFB (Output Feed Back) – обратная загрузка выходных данных; CTR (Counter) – шифрование со счетчиком. При этом основными являются первые четыре режима шифрования. Последний режим (CTR) появился позже – спустя три года после принятия первого стандарта шифрования [1]. Стоит отметить, что в ГОСТ 28147-89 отсутствует режим OFB, а соотнести названия режимов с классификацией НИСТ можно следующим образом [1]: ECB (Electronic Code Book) – режим простой замены; 15 CBC (Cipher Block Chaining) – режим выработка имитовставки; CFB (Cipher Feed Back) – режим гаммирования с обратной связью; CTR (Counter) – режим гаммирования. 1.4.1 Электронная кодовая книга Данный режим является электронным аналогом режима, использовавшегося агентами для отправки зашифрованного сообщения еще в начале XX века. Агент получал блокнот, каждая страница которого содержала уникальную последовательность – код, с помощью которого и зашифровывалось сообщение. После использования такая страница вырывалась из блокнота и уничтожалась. При необходимости сообщение дополнялось так, чтоб на вырываемых страничках не оставалось не использованного кода. Принимающая сторона имела копию блокнота, поэтому, при условии синхронного использования страниц такой режим шифрования обеспечивал как зашифрование так и расшифрование сообщений. В ECB использованию одной страницы кодовой книги при зашифровании соответствует применение к входным данным преобразования функцией CIPHK, а при расшифровании – CIPH-1K. Обоим сторонам для того, чтобы синхронизироваться достаточно договориться о значении секретного ключа K [5]. Вообще этот режим является самым простым и первым приходящим на ум способом использования блочного шифра для шифрования сообщений. Он проиллюстрирован на рисунке 3. Рисунок 3 – Режим шифрования электронная кодовая книга Как видно из рисунка 3 весь алгоритм ECB состоит в применении напрямую функций CIPHK и CIPH-1K к сообщению и шифротексту для 16 зашифрования и расшифрования соответственно. Зашифрование может быть выражено в виде: Cj = CIPHK(Pj), где: j=1…n; Pj – очередной, j-ый блок открытого текста; Cj – очередной, j-ый блок зашифрованного текста. Таким образом, шифрование происходит блоками, соответствующими размеру входных/выходных данных для функций CIPHK и = CIPH-1K. Блоки шифруются отдельно и независимо друг от друга, что позволяет делать это параллельно. Это достоинство режима ECB и его простота скрадываются двумя значительными недостатками. Первый – то, что длина сообщения должна быть кратна длине блока входных данных блочного шифра, то есть все сообщение либо можно разбить на целое число таких блоков, либо необходимо каким-то образом дополнять последний блок не несущими информацию данными. Второй недостаток еще более существенный – если на вход подается одинаковая последовательность, то после шифрования выход также будет одинаковым. А это может дать ключ к анализу содержания сообщения. 1.4.2 Сцепление блоков по шифротексту В режиме шифрования CBC происходит «сцепливание» всех блоков сообщения по шифротексту. Как это достигается – видно из рисунка 4, иллюстрирующего этот режим шифрования. Рисунок 4 – Режим шифрования сцепление блоков по шифротексту 17 Как видно из рисунка 4 в алгоритме шифрования на вход функции CIPHK каждый раз подается результат суммирования по модулю 2 открытых данных очередного блока сообщения и выходных данных функции CIPHK для предыдущего блока. Поскольку выходные данные функции CIPHK для очередного блока идут прямо на выход алгоритма CBC, то есть являются шифротекстом этого блока и одновременно поступают на вход этой же функции для зашифрования последующего блока, то говорят, что происходит сцепление блоков по шифротексту. Первый блок открытых данных суммируется с вектором инициализации, речь о котором пойдет ниже. Пока же достаточно понимать, что этот вектор инициализации становится известен как отправителю, так и получателю в самом начале сеанса связи (поэтому зачастую его называют просто вектором инициализации, синхропосылкой). Расшифрование происходит, соответственно, в обратном порядке – сначала к шифротексту применяют функцию CIPH-1K, а затем суммируют с предыдущим блоком шифротекста для получения на выходе алгоритма очередного блока открытого текста. Первый блок открытого текста, опять же, восстанавливается с помощью вектора инициализации. Таким образом, весь алгоритм может быть выражен в виде уравнений следующим образом: C1 = CIPHK(P1 xor IV); Cj = CIPHK(Pj xor Cj-1), где: j = 1…n; IV – вектор инициализации; Pj – очередной, j-ый блок открытого текста; Cj – очередной, j-ый блок шифротекста. 1.4.3 Обратная загрузка шифротекста В алгоритме режима обратной загрузки шифротектса очередной блок открытого текста суммируется по модулю с блоком предыдущего шифротекста, но только после того, как этот шифротекст подвергнется дополнительной обработке функцией CIPHK. Так происходит зашифрование 18 сообщения в этом режиме. Для расшифрования нужно просто суммировать (по модулю 2) очередной блок шифротекста с предыдущим, пропущенным опять-таки через функцию CIPHK. Схематичная работа шифра проиллюстрирована на рисунке 5. Рисунок 5 – Режим шифрования обратная загрузка шифротекста В режиме CFB при зашифровании входные данные для функции CIPHK формируются на основании шифротекста с предыдущей итерации алгоритма, поэтому параллельное выполнение итераций алгоритма невозможно. Однако, в режиме расшифрования CFB при условии наличия полного шифротекста все порции открытого текста можно получить одновременно. 1.4.4 Обратная загрузка выходных данных Режим OFB, как и CFB является поточным, то есть функция CIPHK вызывается в алгоритме до суммирования с порцией открытого текста. Но на этот раз на вход CIPHK подается не шифротекст с предыдущей итерации, а просто ее же выходные данные. Иллюстрация приведена на рисунке 6. Рисунок 6 – Режим шифрования OFB – обратная загрузка выходных данных 19 Ниже приведены уравнения для за- и расшифрования в режиме OFB: OFB зашифрование: I1 = IV, Ij = Oj-1, где: j = 2…n. Oj = CIPHK(Ij), где: j = 1,2…n. Cj = Pj xor Oj, где: j = 1,2..n-1. Cj = Pj xor MSBr(Oj), где: IV – вектор инициализации; Pj – очередной, j-ый блок открытого текста; Cj – очередной, j-ый блок шифротекста; MSBr (X) – r старших бит (most significant bits) двоичного числа X. Для последнего, возможно неполного, блока сообщения используется ровно столько бит выходных данных функции CIPHK, сколько бит в этом блоке. В этом режиме, в отличие от предыдущих, длина сообщения остается неизменной в процессе шифрования и, главное, при передаче. 1.5 Аутентификация. Контроль целостности В данном разделе рассматриваются два основных подхода к контролю целостности передаваемых данных. 1.5.1 Задача имитозащиты данных Под имитозащитой данных в системах их обработки понимают защиту от навязывания ложных данных. Практически всегда на некоторых этапах своего жизненного цикла информация оказывается вне зоны непосредственного контроля за ней. Это случается, например, при передаче данных по каналам связи или при их хранении на магнитных носителях 20 ЭВМ, физический доступ к которым посторонних лиц исключить почти никогда не представляется возможным. Физически предотвратить внесение несанкционированных изменений в данные в подавляющем большинстве реальных систем их обработки, передачи и хранения не представляется возможным. Поэтому крайне важно своевременно обнаружить сам факт таких изменений. Целью злоумышленника, навязывающего системе ложную информацию, является выдача ее за подлинную, а это возможно только в том случае, если сам факт такого навязывания не будет вовремя обнаружен. Подведем итог – под защитой данных от несанкционированных изменений в криптографии понимают не исключение самой возможности таких изменений, а набор методов, позволяющих надежно зафиксировать их факты, если они имели место. 1.5.2 Подходы к контролю неизменности данных В настоящее время известны два подхода к решению задачи защиты данных от несанкционированного изменения, базирующихся на двух изложенных выше подходах к выработке контрольной комбинации [7]: выработка MAC – Message Authentification Code – кода аутентификации сообщений. Этот подход заключается в том, что контрольная комбинация вычисляется с использованием секретного ключа с помощью некоторого блочного шифра. Важно, что на основе любого такого шифра можно создать алгоритм вычисления MAC для массивов данных произвольного общепризнан размера. и Данный закреплен подход практически к во аутентификации всех данных криптографических стандартах – имитовставка, формируемая согласно ГОСТ 28147-89 является типичным образцом MAC; выработка MDC – Маnipulation Detection Code – кода обнаружения манипуляций (с данными). Для вычисления MDC для блока данных используется так называемая 21 необратимая функция сжатия информации, в литературе также называемая односторонней функцией, функцией одностороннего сжатия (преобразования) информации, криптографической хэш–функцией, или просто хэш–функцией. Оба способа вычисления контрольной комбинации – MDC и MAC принимают в качестве аргумента блок данных произвольного размера и выдают в качестве результата блок данных фиксированного размера. Отличия: подход на основе MAC требует для вычисления контрольной комбинации секретного ключа, для второго это не нужно. Потенциальный злоумышленник не сможет вычислить MAC для произвольного сфабрикованного им сообщения, но сможет вычислить MDC, так как для этого не требуется никаких секретных данных, поэтому MAC может передаваться от источника к приемнику по открытому каналу, тогда как для передачи MDC требуется защищенный канал. Оба подхода допускают возможность реализации на основе любого классического блочного шифра. При этом надежность полученной системы имитозащиты, конечно при условии ее корректной реализации, будет определяться стойкостью использованного блочного шифра – это утверждение исключительно легко доказывается [7]. 1.6 Обзор существующих программных криптографических средств защиты данных В данном разделе рассматриваются наиболее известные программные реализации криптографической защиты данных. Проводится краткий обзор их функций, достоинств и недостатков. 1.6.1 Линейка eToken eToken - персональное средство строгой аутентификации и хранения данных, аппаратно поддерживающее работу с цифровыми сертификатами и ЭЦП [2]. Данное устройство является разработкой компании Aladdin и выпускается в двух форм-факторах: USB-токен и смарт-карта. В обоих 22 случаях взаимодействие носителей с различными программными приложениями безопасности имеет единую структуру, которая представлена. Компания Aladdin представляет ряд продуктов, имеющих свои преимущества и назначения: eToken PRO; eToken PRO (Java); eToken ГОСТ; eToken NG-FLASH; eToken NG-OTP; КриптоПро eToken CSP. eToken может выступать в качестве единой корпоративной карты, служащей для визуальной идентификации сотрудника, для доступа в помещения, для входа в компьютер, в сеть, для доступа к защищенным данным, для защиты электронных документов (ЭЦП, шифрование), для установления защищенных соединений (VPN, SSL), для проведения финансовых транзакций [2]. 1.6.2 Программа шифрования и аутентификации данных PGP PGP (англ. Pretty Good Privacy) — компьютерная программа, так же библиотека функций, позволяющая выполнять операции шифрования (кодирования) информации, и цифровой представленной подписи в сообщений, электронном файлов виде. и другой Первоначально разработана Филиппом Циммерманном в 1991 году [15]. PGP имеет множество реализаций, совместимых между собой и рядом других программ (GnuPG, FileCrypt и др.) благодаря стандарту OpenPGP (RFC 4880), но имеющих разный набор функциональных возможностей. Шифрование PGP осуществляется последовательно хешированием, сжатием данных, шифрованием с симметричным ключом, и, наконец, шифрованием с открытым ключом, 23 причем каждый этап может осуществляться одним из нескольких поддерживаемых алгоритмов. Симметричное шифрование производится с использованием одного из пяти симметричных алгоритмов (AES, CAST5, TripleDES, IDEA, Twofish) на сеансовом ключе. Сеансовый ключ генерируется с использованием криптографически стойкого генератора псевдослучайных чисел. Сеансовый ключ зашифровывается открытым ключом получателя с использованием алгоритмов RSA или Elgamal (в зависимости от типа ключа получателя). Каждый открытый ключ соответствует имени пользователя или адресу электронной почты. Пользователь PGP создает ключевую пару: открытый и закрытый ключ. При генерации ключей задаются их владелец (имя и адрес электронной почты), тип ключа, длина ключа и срок его действия. PGP поддерживает аутентификацию и проверку целостности посредством цифровой подписи. По умолчанию она используется совместно с шифрованием, но также может быть применена и к открытому тексту. Отправитель использует PGP для создания подписи алгоритмом RSA или DSA. При этом сначала создается хэш открытого текста (также известный как дайджест), затем — цифровая подпись хэша при помощи закрытого ключа отправителя. Для формирования хэша могут использоваться алгоритмы MD5, SHA-1, RIPEMD-160, SHA-256, SHA-384, SHA-512. В новых версиях PGP поддержка MD5 осуществляется для сохранения совместимости с ранними версиями. Для подписи используются алгоритмы RSA или DSA (в зависимости от типа ключа). В целях уменьшения объема сообщений и файлов и, возможно, для затруднения криптоанализа PGP производит сжатие данных перед шифрованием. Сжатие производится по одному из алгоритмов ZIP, ZLIB, BZIP2. Для сжатых, коротких и слабосжимаемых файлов сжатие не выполняется. На данный момент не известно ни одного способа взломать шифрование PGP при помощи полного 24 перебора или уязвимости криптоалгоритма. В 1996 году криптограф Брюс Шнайер охарактеризовал раннюю версию PGP как «ближайшую к криптосистемам военного уровня». Ранние версии PGP обладали теоретическими уязвимостями, поэтому рекомендуется пользоваться современными. Кроме защиты данных, передаваемых по сети, PGP позволяет шифровать запоминающие устройства, например, жесткие диски. Криптографическая стойкость PGP основана на предположении, что используемые алгоритмы устойчивы к криптоанализу на современном оборудовании [15]. 1.6.3 Программа шифрования данных TrueCrypt TrueCrypt — компьютерная программа для шифрования «на лету» (Onthe-fly encryption) для 32- и 64-разрядных операционных систем семейств Microsoft Windows NT 5 и новее (GUI-интерфейс), Linux и Mac OS X [16]. Она позволяет создавать виртуальный зашифрованный логический диск, хранящийся в виде файла. С помощью TrueCrypt также можно полностью шифровать раздел жесткого диска или иного носителя информации, такой как флоппи-диск или USB флеш-память. Все сохраненные данные в томе TrueCrypt полностью шифруются, включая имена файлов и каталогов. Смонтированный том TrueCrypt подобен обычному логическому диску, поэтому с ним можно работать с помощью обычных утилит проверки и дефрагментации файловой системы [16]. TrueCrypt умеет создавать зашифрованный виртуальный диск: в файловом контейнере, что позволяет легко работать с ним — переносить, копировать (в том числе на внешние устройства в виде файла), переименовывать или удалять; в виде зашифрованного раздела диска, что делает работу более производительной и удобной, в версии 5.0 добавилась возможность шифровать системный раздел; 25 путем полного шифрования содержимого устройства, такого как USB флеш-память (устройства типа флоппи-диск не поддерживаются с версии 7.0). В список поддерживаемых TrueCrypt 6.2 алгоритмов шифрования входят AES, Serpent и Twofish. Предыдущие версии программы также поддерживали алгоритмы с размером блока 64 бита (Тройной DES, Blowfish, CAST5). Кроме того, возможно использование каскадного шифрования различными шифрами, к примеру: AES+Twofish+Serpent [16]. Программа позволяет выбрать одну из трех хеш-функций: HMACRIPEMD-160, HMAC-Whirlpool, HMAC-SHA-512 для генерации ключей шифрования, соли и ключа заголовка. Для доступа к зашифрованным данным можно применять пароль (ключевую фразу), ключевые файлы (один или несколько) или их комбинации. 1.7 Выводы по главе С развитием компьютерных технологий все больше документооборота предс тавляется в электронном виде – на цифровых носителях информации. Наиболее подходящим решением для небольших предприятий, где происходит большой оборот небольших по размеру файлов, будет программа быстрого шифрования файлов с достаточной надежностью и не требующей высокой квалификации пользователей для обеспечения криптографической защиты файлов. Для обеспечения высокой надежности целесообразно применять двухэтапную аутентификацию пользователя с использованием USB-ключа, обеспечивая при этом безопасностью самого ключа от подмены. Для выполнения этих задач необходимо применять самые последние достижения в области криптографии. Необходимо отказаться от применения алгоритмов шифрования, хэш-функций и алгоритмов контрольных сумм, имеющих уязвимости или имеющие более современные аналоги. 26 При реализации криптографического программного средства следует помнить о простоте и прозрачности структуры ПС. 1.8 Постановка задачи Целью данной работы является разработка программного средства обеспечивающего программное аутентификацию. криптографическую средство Для должно этого защиту файлов. использовать необходимо При этом двухуровневую провести исследование современных методов построения блочных алгоритмов шифрования и на его основе создать и протестировать алгоритм шифрования для ПС. Данная работа «Программное средство криптографической защиты файлов» позволит защитить цифровые данные. Обеспечивая криптографическую защиту данных, ПС ограничивает доступ третьих лиц к этим данным, благодаря использованию современных алгоритмов и двухэтапной аутентификации. Для обеспечения криптографической защиты файлов необходимо использовать криптостойкие алгоритмы шифрования IDEA и RC6. Также для возможного применения предлагается исследуемый алгоритм шифрования, построенный на основе современных тенденций построения блочных алгоритмов шифрования. Каждый алгоритм имеет свой уникальный ключ шифрования и вектор инициализации для обработки последнего блока данных. Для реализации внутренних вычислений и генерации случайных последовательностей использована стойкая хэш-функция SHA-512. Для обеспечения контроля целостности реализован алгоритм CRC-64. На основе проведенного анализа разработано техническое задание Приложении А. 27 2 АЛГОРИТМИЧЕСКОЕ КОНСТРУИРОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ В данной главе будут рассмотрены алгоритмы, требуемые для реализации работы. Приведены алгоритмы хэш-суммы, контрольной суммы, алгоритмы криптографической защиты данных. 2.1 Алгоритм хэш-функции SHA-512 Хэш-функции семейства SHA-512 относится к семейству хэш-функций SHA-2. SHA-512 построена на основе структуры Меркла-Дамгарда [10]. Непосредственно перед обработкой входного блока данных, исходное сообщение дополняется до полного блока и разбивается на блоки. Каждый блок в свою очередь на 16 слов. Алгоритм пропускает каждый блок сообщения через цикл с 80-ю раундами. На каждой итерации 2 слова преобразуются. Результаты обработки каждого блока складываются. Итоговая сумма является значением хэш-функции. Алгоритм использует следующие битовые операции: ǁ - конкатенация; + - сложение; and - побитовое «И»; or - побитовое «ИЛИ»; xor - исключающее «ИЛИ»; shr (Shift Right) - логический сдвиг вправо; rotr (Rotate Right) - циклический сдвиг вправо. Общая схема одной итерации SHA-512 представлена на рисунке 7. Стоит заметить, что на данный момент хэш-функции SHA-2 и SHA-512 в частности изучены не достаточно хорошо. Однако, проведенные исследования по криптостойкости данных хэш-функций каких-либо критических уязвимостей не обнаружили, что позволяет рекомендовать широкое применение SHA-512 [10]. Вместе с тем, на данный момент ведутся 28 работы по созданию и внедрению нового поколения хэш-функций, призванных заменить SHA-2. Рисунок 7 – Одна итерация алгоритма SHA-512 2.2 Алгоритм контрольной суммы CRC Циклический избыточный код (англ. Cyclic redundancy code, CRC) — алгоритм вычисления контрольной суммы, предназначенный для проверки целостности передаваемых данных. Алгоритм CRC обнаруживает все одиночные ошибки, двойные ошибки и ошибки в нечетном числе битов. Понятие циклических кодов достаточно широкое, тем не менее на практике его обычно разновидности, используют использующей для обозначения циклический только контроль одной (проверку) избыточности. Алгоритм CRC базируется на свойствах операции деления с остатком двоичных многочленов, то есть многочленов над конечным полем GF(2). Значение CRC является по сути остатком от деления многочлена, соответствующего входным данным, на некий фиксированный порождающий многочлен. Каждой сопоставляется конечной двоичный последовательности многочлен битов , взаимооднозначно последовательность коэффициентов которого представляет собой исходную последовательность. 29 Например, последовательность битов 1011010 соответствует многочлену: Количество различных многочленов степени меньшей N равно 2 N, что совпадает с числом всех двоичных последовательностей длины N. Значение CRC с порождающим многочленом G(x) степени N определяется как битовая последовательность длины N, представляющая многочлен R(x), получившийся в остатке при делении многочлена P(x), представляющего входной поток бит, на многочлен G(x): , где: R(x) - многочлен, представляющий значение CRC; P(x) - многочлен, коэффициенты которого представляют входные данные; G(x) - порождающий многочлен; N - степень порождающего многочлена. Умножение осуществляется приписыванием нулевых битов к входной последовательности, что улучшает качество хэширования для коротких входных последовательностей. При делении с остатком степень многочлена-остатка строго меньше степени многочлена-делителя, то есть при делении на многочлен G(x) степени N можно получить 2N различных остатков от деления [10]. При «правильном» выборе порождающего многочлена G(x), остатки от деления на него будут обладать нужными свойствами хеширования — хорошей перемешиваемостью и быстрым алгоритмом вычисления. Высокая скорость вычисления обеспечивается тем фактом, что степень порождающего многочлена обычно пропорциональна длине байта или машинного слова (например 8, 16, 32 или 64). Операция деления на примитивный полином эквивалентна следующей схеме: пусть выбран примитивный полином, задающий цикл де Брейна 0010111001011100… и блок данных 0111110, построена таблица, верхняя 30 строка заполнена блоком данных, а нижние строки — смещением на 0,1,2 бит цикла де Брейна: . Тогда контрольная сумма будет равна операции XOR тех столбцов, над которыми в верхней строке расположена 1. В этом случае, 010 xor 101 xor 011 xor 111 xor 110 = 101 (CRC). В то время, как циклические избыточные коды являются частью стандартов, сами они не стандартизированы в плане адаптации одного алгоритма для конкретной степени полинома. Например, существуют три описания полинома для CRC-12, десять противоречивых определений CRC16 и четыре — CRC-32 [10]. Существует много полиномов, которые используются в различных протоколах, причём в конкретных реализациях вычисление CRC может включать пре- и пост-инверсию, а также обратный порядок обработки битов. В реализациях CRC для усложнения анализа кода иногда применяется запутанное вычисление начальных значений, однако криптостойкости алгоритму это не добавляет. В предлагаемой ниже реализации используется полином CRC-64-ECMA-182 (0xC96C5795D7870F42). 2.3 Алгоритм шифрования RC6 RC6 — симметричный блочный криптографический алгоритм, производный от алгоритма RC5. Был создан Роном Ривестом, Мэттом Робшау и Рэем Сиднеем для удовлетворения требований конкурса Advanced Encryption Standard (AES). Алгоритм был одним из пяти финалистов конкурса, был также представлен NESSIE и CRYPTREC [9]. 31 Точнее, RC6 — полностью параметризированное семейство алгоритмов шифрования. Для спецификации алгоритма с конкретными параметрами, принято обозначение: RC6-w/r/b, где: w — длина машинного слова в битах; r — число раундов; b — длина ключа в байтах. Возможные значения 0..255 байт. Общая схема реализации алгоритма RC6 представлена на рисунке 8. Рисунок 8 – Общая схема RC6 Вариант алгоритма RC6, который был заявлен на конкурс, как уже было сказано, поддерживает блоки длиной 128 бит и ключи длиной 128, 192 и 256 бит, а также содержит 20 раундов. То есть RC6-128/20/b, где b=128,192 или 256 бит. В отношении такого алгоритма никаких атак не было обнаружено. Были обнаружены атаки только против упрощенных версий алгоритма, то есть алгоритма с уменьшенным количеством раундов. Полагается, что лучшим вариантом нападения на RС6, доступным для криптоаналитика, является полный перебор b-байтового ключа шифрования 32 (или расширенный ключевой массив S [0,…,43], когда предоставленный пользователем ключ шифрования особенно длинный) [9]. Таким образом, можно заключить, что RC6 можно считать полностью безопасным алгоритмом. 2.4 Алгоритм шифрования IDEA IDEA — симметричный блочный алгоритм шифрования данных, запатентованный швейцарской фирмой Ascom. Известен тем, что применялся в пакете программ шифрования PGP. В ноябре 2000 года IDEA был представлен в качестве кандидата в проекте NESSIE в рамках программы Европейской комиссии IST [9]. Общая структура алгоритма приведена на рисунке 9. Рисунок 9 – Общая схема IDEA 33 Первую версию алгоритма разработали в 1990 году Лай и Джеймс Мэсси из Швейцарского института ETH Zürich в качестве замены DES. Алгоритм использует 128 бит ключевой информации и оперирует блоками данных длиной 64 бита. Каждый исходный 64-битный блок делится на четыре подблока по 16 бит каждый, так как все алгебраические операции, использующиеся в процессе шифрования, совершаются над 16-битными числами. Для шифрования и расшифрования IDEA использует один и тот же алгоритм. Принципиальным нововведением в IDEA является использование операций из разных алгебраических групп, а именно: сложение по модулю; умножение по модулю; побитовое исключающее ИЛИ (XOR). Эти три операции несовместимы в том смысле, что: никакие две из них не удовлетворяют дистрибутивному закону, то есть: a*(b+c) <> (a*b)+(a*c); никакие две из них не удовлетворяют ассоциативному закону, то есть: a+(b XOR c) <> (a+b) XOR c. Применение этих трех операций затрудняет криптоанализ IDEA по сравнению с DES, который основан исключительно на операции исключающее ИЛИ, а также позволяет отказаться от использования S-блоков и таблиц замены [9]. Сам процесс шифрования состоит из восьми одинаковых раундов шифрования и одного выходного преобразования. Исходный незашифрованный текст делится на блоки по 64 бита. Каждый такой блок делится на четыре подблока по 16 бит каждый. В каждом раунде используются свои подключи согласно таблице подключей. В конце каждого раунда шифрования имеется четыре 16-битных подблока, которые затем используются как входные подблоки для следующего раунда 34 шифрования. Над 16-битными подключами и подблоками незашифрованного текста производятся следующие операции: умножение по модулю 216 + 1 = 65537, причем вместо нуля используется 216; сложение по модулю 216; побитовое исключающее ИЛИ. Выходное преобразование представляет собой укороченный раунд, а именно, четыре 16-битных подблока на выходе восьмого раунда и четыре соответствующих подключа подвергаются операциям: умножение по модулю 216 +1; сложение по модулю 216. После выполнения выходного преобразования конкатенация всех четырех подблоков, что в итоге представляет собой 64 бита зашифрованной информации. Затем берется следующий 64-битный блок незашифрованного текста и алгоритм шифрования повторяется. Так продолжается до тех пор, пока не зашифруются все 64-битные блоки исходного текста. К неоспоримым достоинствам IDEA стоит отнести практическую устойчивость ко всем атакам и хорошую скорость шифрования. К недостаткам алгоритма принято относить медленную скорость шифрования по сравнению с новейшими алгоритмами [9]. 2.5 Выводы по главе В данной главе были рассмотрены алгоритмы: хэширования данных, шифрования данных и создания контрольных сумм. Также были рассмотрены достоинства и недостатки этих алгоритмов. Для реализации криптографической защиты файлов были выбраны криптографически стойкие алгоритмы шифрования. 35 3 ТЕСТИРОВАНИЕ И ИССЛЕДОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ В данной главе рассмотрены основные элементы и структуры, слагающие современные блочные алгоритмы шифрования, их достоинства и недостатки. 3.1 «Составляющие» структуры блочного алгоритма Рассматривая структуру блочного алгоритма шифрования, можно выделить наиболее часто «составляющие части». применяемые Данные части в современных применяются в алгоритмах современных алгоритмах вне зависимости от самой структуры алгоритма – будь то Сеть Фейстеля или SP-структура. Каждая «составляющая» позволяет добиться определенного результата при применении в алгоритме. Её применение в совокупности с другими «составляющими» и позиция в алгоритме, позволяет добиться четких целей, поставленных при проектировании алгоритма. Что является неоспоримым преимуществом данного подхода. Изучая блочные алгоритмы шифрования на возможность противодействия атакам, стало возможным делать выводы о достоинствах и недостатках тех или иных «составляющих». Такой подход позволяет построить алгоритм, удовлетворяющий выдвигаемым требованиям. 3.1.1 Таблицы подстановок Современные блочные алгоритмы шифрования строятся в основном на основе SP- или Сетей Фейстеля. По своей сути сеть Фейстеля является альтернативой SP-сетям и используется намного шире. Однако, с теоретической точки зрения раундовая функция шифрования может быть сведена в конечном счете к SP-сети. Но практическое применение в алгоритмах шифрования показало, что сеть Фейстеля является более 36 практичной, так как шифрование и дешифрование может вестись одним и тем же устройством, но с обратным порядком используемых ключей [9]. Вместе с тем, таблицы подстановок (одна из частей SP-сетей) применяются как одна из важных частей Сетей Фестеля во многих алгоритмах. Даже можно сказать, что таблицы замен были обязательной частью алгоритмов на основе Сетей Фейстеля до появления алгоритма RC5, в котором таблицы замен были вытеснены битовыми циклическими сдвигами. Табличные замены имеют как ряд неоспоримых преимуществ, так и ряд недостатков. Чтобы дать объективную оценку применению таблиц подстановок, следует рассмотреть историю развития применения этой технологии при проектировании шифров. Впервые таблицы подстановки были применены в алгоритме Lucifer (вариант №4) в 1970 году [9]. Исследования алгоритма выявили весьма серьезные недостатки в его безопасности. Примечательно, что его наследник – алгоритм DES, лишен этих недостатков. В 1973 году был разработан алгоритм DES. Новый алгоритм был разработан на основе алгоритма Lucifer. Как позже было подтверждено, новый алгоритм был устойчив к линейному и дифференциальному анализу[9]. Разработкой таблиц замен для DES (и проверкой всего алгоритма вообще) занималось АНБ США. Примечательно, что сразу АНБ не раскрыло принцип, по которому были подобраны таблицы замен. Секрет создания таблиц замен был обнародован лишь в 1994 году и включал в себя три свойства, которыми должны обладать таблицы замен: строгий лавинный эффект; независимость битов выхода; существование обратного преобразования [1]. Таким образом, при небольшом отличии структуры от Lucifer, DES оказался криптостойким алгоритмом. Главным «козырем» DES, позволившем алгоритму сопротивляться атакам, стали именно таблицы 37 замен. Многочисленные исследования вариантов алгоритма DES подтверждают эту идею: оригинальный DES имеет наиболее стойкие таблицы замен, в то время как огромное количество вариантов алгоритма менее криптостойки. Ярким примером экспериментов над таблицами замен DES является семейство sxDES [9]. Таким образом, можно сказать, что таблицы замен хорошо справляются с главной целью – отлично «перемешивают» данные, однако, при этом сложность таблиц замен порой не позволяет найти уязвимости и «лисьи норы». Принимая во внимание, что «S-блоки выступают как одна из главных составляющих дифференциального обеспечения и линейного стойкости к криптоанализа» атакам против [17], можно предположить, что стоит отказаться от использования таблиц подстановок в пользу более прозрачных структур. 3.1.2 Битовые циклические сдвиги Альтернативой таблиц замен с более прозрачной структурой являются битовые сдвиги обрабатываемого слова. Впервые идея применения в блочных алгоритмах циклических сдвигов была широко применена Роном Ривестом в 1994 году в алгоритме RC5 [9]. В дальнейшем идея распространена в алгоритме RC6. Данный алгоритм участвовал во всех крупных конкурсах на право быть стандартом шифрования. Неоднократный анализ данного алгоритма не выявил каких-либо уязвимостей, а высокую криптостойкость объясняли в первую очередь наличием циклических сдвигов. Дальнейшим развитием идеи стал вариант алгоритма RC5-RA, где число бит сдвига определяется не просто битами от входных данных, а некой функцией зависимой от входных данных. Проведенные исследования показали предположительно еще большую защищенность алгоритма чем у «родителя» [9]. 38 Конечно, у битовых сдвигов также имеется ряд недостатков, среди которых можно выделить: высокую ресурсоемкость (на некоторых платформах); возможность атаки «по времени выполнения» на крипто-схему. Однако эти недостатки легко устранимы. Ресурсоемкость при программной реализации минимизируется оптимизацией программного кода для определенной конфигурации системы. А решение вопроса атаки на аппаратную реализацию было предложено самими основателями атаки: следует программно предусмотреть прохождение всего счетчика сдвига (дабы лишить шпионский модуль возможности замерить число тактов выполнения) [9]. Как видно, недостатки легко устранимы. Поэтому неоспоримые достоинства битовых сдвигов перед таблицами замен – прозрачность структуры и высокая криптостойкость, позволяют считать битовые сдвиги альтернативой S-box. 3.1.3 Отбеливание данных Отбеливанием (забеливанием, whitening) данных называют наложение ключевой информации на входной/выходной блок данных посредством операции сложения по модулю два. Данная операция требует на выполнения минимальных затрат, однако благодаря ей приптоанализ пар входнойвыходной текст существенно затрудняется. Отбеливание применяется во многих алгоритмах шифрования. Внимание к данной технологии было привлечено после появления алгоритмов DESX (1984-1996) и XTEA-3, в которых добавление операции забеливания к основной структуре показало существенное усиление алгоритма [9]. Позже отбеливание распространилось на такие алгоритмы как Twofish, MARS и другие. Поэтому использование отбеливания в алгоритмах 39 шифрования можно считать малозатратным, но эффективным средством усиления криптостойкости алгоритма. 3.1.4 Вложенные Сети Фейстеля Широкое использование Сетей Фейстеля при проектировании алгоритмов шифрования было вызвано неоспоримыми достоинствами данного вида построения алгоритмов. Простота конструкции, низкая стоимость аппаратной реализации, возможность распараллеливания вычислений, хорошая изученность – все это достоинства, которых лишены иные подходы к построению. Однако, Сетям Фейстеля как структуре присущ один большой недостаток – необходимость большого числа повторов вычисления (раундов) для хорошего «перемешивания» данных. Для решения этого недостатка была реализована иная структура, которая получила название «Вложенные Сети Фейстеля». Принцип данной структуры заключается в том, что раундовая операция Сети Фейстеля состоит из другой Сети Фейстеля. Построенная таким образом структура позволяет достичь значительно большего «лавинного эффекта» и диффузии входных данных при минимальном усложнении структуры алгоритма. При этом все достоинства родительской структуры: прозрачность, простота, возможность распараллеливания вычислений – остаются. Структура вложенных сетей Фейстеля нашла практическое применение в таких современных алгоритмах шифрования как Camellia (алгоритм шифрования промышленного и государственного использования Японии), MISTY1, Kasumi [9]. Криптоанализ данных алгоритмов позволяет заключить, что именно применение вложенных сетей Фейстеля, существенно затрудняет работу криптоаналитика и существенно повышает уровень криптостойкости алгоритма. Еще одной особенностью вложенных сетей является возможность построения неоднородных по своей структуре алгоритмов. Т.е. такого 40 алгоритма, структуру которого тяжело описать алгебраически. Как писали создатели алгоритма Twofish (Брюс Шнайер, Нилс Фергюсон и др) о AES – «он слишком аккуратный и структурированный» [10]. Таким образом, если внутрь Вложенной Сети Фейстеля ввести некое линейное преобразование, то структура алгоритма становится гетерогенной. Изучение гетерогенных блочных алгоритмов шифрования позволяет сделать вывод о том, что «скорее всего, алгоритм с гетерогенной структурой будет лучше противостоять криптоаналитическим методам будущего, чем алгоритм, все раунды которого идентичны» [9]. На основе вышесказанного, можно заключить, что на основе Вложенных Сетей Фейстеля возможно построение прозрачных и одновременно гетерогенных алгоритмов по структуре. 3.2 Построение алгоритма Принимая во внимание опыт построения блочных алгоритмов шифрования, их криптоанализ и тенденции развития, становится возможным построение прозрачного по структуре и обладающего достаточной криптостойкостью блочного алгоритма. 3.2.1 Общая схема алгоритма Общую схему алгоритма можно назвать синтезом алгоритмов RC6, Twofish и Camellia. Тем самым алгоритм должен быть простым и надежным (как RC6), не иметь «линейности» (как Twofish) и строится на основе Вложенных Сетей Фейстеля (как Camellia). Алгоритм оперирует блоками длиной 128 бит. Для гибкости использования в структуру алгоритма – расписание подключей и основной функции – предусматривается использование ключей различной длины: 128, 256 и 512 бит (с 5/7/9 раундами соответственно). При этом с уменьшением длины ключа увеличивается скорость работы алгоритма и несколько снижается криптостойкость. 41 До и после обработки входных данных происходит отбеливание от ключевой информации. Для достижения гетерогенности (неоднородности) структуры алгоритма, применяют обработку параллельных данных (двух частей одного блока) разными функциями (FL- и FR-сети) с последующим перемешиванием (линейное преобразование). Общая структура алгоритма представлена на рисунке 10. Рисунок 10 – Главная схема алгоритма Каждый раунд шифрования выполняет разбиение входных 128 бит данных на две части по 64 бита и независимо друг от друга обрабатывает их различными сетями Фейстеля типа FL и типа FR. После чего происходит линейное преобразование, целью которого является максимальная диффузия обработанных на предыдущем этапе данных. При этом каждая сеть Фейстеля (FL и FR) применяется по четыре раза (рисунки 11, 12). Рисунок 11 – Сеть Фейстеля FL 42 Рисунок 12 – Сеть Фейстеля FR Функция ff() представляется как ff():= (temp2 xor Ti) + Ki . Под функцией f() здесь понимается представление поступающего на вход 32-битного числа по модулю 31 плюс 1 (f():= temp2 <<< ((temp1 mod 31)+1)). Схема линейного преобразования представлена на рисунке 13. Рисунок 13 – Линейное преобразование Для реализации циклических сдвигов в линейном преобразовании, в качестве аргумента функции выступают раундовые ключи шифрования. Параллельно с вычислением подключей осуществляется расчет раундовых констант (Т). Вместе с тем, раундовые константы могут храниться в памяти уже рассчитанные, поскольку никак не зависят от ключа шифрования. 43 3.2.2 Тестирование выходной последовательности алгоритма Если рассматривать секретную систему как совокупность отображений шифруемых элементов из одного множества в другое, то основной задачей алгоритма шифрования является «перемешивание» шифруемых данных. Быстрое и многократное существенно затруднит смешение бит криптоанализ шифруемой шифруемых информации данных. Такая особенность алгоритма шифрования называется «диффузией» шифруемых данных [18]. Равномерное изменение половины битовой информации выходных данных при изменении одного бита исходных данных, лишает криптоаналитика возможности отследить закономерности изменения выходной информации при манипулировании входными данными. Изменение одного младшего бита данных в алгоритме ГОСТ 28147-89 распространяется на весь блок данных через четыре раунда, а в алгоритме AES – через 2. В совокупности после всех циклов шифрования данные в алгоритме ГОСТ 28147-89 перемешиваются 6 раз, а в AES – 7 раз (при использовании «усиленной» версии алгоритма). Результаты тестирования «диффузии» алгоритма в первом раунде со структурой использования Вложенных Сетей Фейстеля отображены на рисунке 14 и таблице 1. Стоит отметить, что в тестировании принимал участие алгоритм с ключом в 512 бит (9 раундов). Ключ шифрования – «нулевой». При этом сравнивались результаты шифрования двух наборов входных данных: все битовые нули и все битовые нули за исключением младшего бита. Рисунок 14 – Диффузия изменения исходных данных при прохождении через FR-сеть 44 Таблица 1 – Результаты тестирования алгоритма способность диффузии шифруемых данных FL-сеть FR-сеть Биты Биты Биты Биты Биты Биты Биты Биты 1..16 17-32 33-48 48-64 1..16 17-32 33-48 49-64 - - 9/16 10/16 0/16 1/16 Раунд 1 - Раунд 2 - - - - 10/16 13/16 9/16 8/16 Раунд 3 - - - - 4/16 7/16 5/16 8/16 Раунд 4 - - - - 9/16 3/16 10/16 10/16 - Суммарное изменение Линейное преобразование Суммарное изменение 12/32 - 10/16 6/16 20/32 32/64 8/16 9/16 11/16 33/64 6/16 7/16 6/16 30/64 Суммарное 63/128 изменение Из результатов тестирования видно, что уже после первого раунда преобразований FR-сети, первое слово входных данных (старшие 32 бита) претерпели существенное изменение. После четырех раундов FR-сети выходная последовательность отличалась ровно на половину бит. Линейное преобразование – смешение выходных данных сетей FL и FR – равномерно перемешало биты, о чем говорит равное количество битовых нулей и единиц на каждом из участков. Можно сделать выводы, что обрабатываемые данные успевают полностью перемешаться всего за один раунд. Таким образом, после проведения всех девяти раундов шифрования, данные перемешаются девять раз. Данный показатель лучше, нежели у алгоритмов ГОСТ 28147-89 и AES [18]. Результаты проведенных статистических тестов алгоритма данной структуры приведены в таблице 2. Тестирование проводилось согласно 45 условиям предлагаемых NIST [4], за исключением количества повторений: 100000 против предлагаемых 10000, что давало 12800000 бит данных для каждого теста. В таблице 2 в скобках указаны значения тестов для алгоритма, использующего фиксированный циклический сдвиг на один бит влево. При сходных показателях четырех тестов, один тест «Последовательность одинаковых бит» показал заведомо худшие результаты. Показатели данного теста говорят о наличии структурированности выходных данных. Характеристики версии тестируемого алгоритма: 9 раундов шифрования, 512 бит ключевой информации, 128 бит данных. Таблица 2 – Статистические тесты исследуемого алгоритма Режим Максимальное отклонение от теоретического распределения при (входные прохождении тестов (%) данные) Битовый Частотный Последовательн Кумуля- Произволь- блочный ость одинаковых тивные ное бит суммы отклонение 0,2 (0,21) 0,2 (0,2) 0,4 (0,2) 0,19 (0,3) 0,2 (0,2) 0,19 (0,2) Случай- 0,006 0,02 7,4 / 3,7 / 1,8 ные (0,003) (0,019) (7,7 / 3,8 / 1,8) Битовые 0,04 0,06 (0,05) 7,4 / 3,7 / 1,8 единицы (0,04) Битовые 0,03 нули (0,03) Поиск (7,7 / 3,8 / 1,9) 0,08 (0,07) битовых 7,4 / 3,7 / 1,8 (7,7 / 3,8 / 1,9) последовательностей большей размерности в оригинальной версии алгоритма показал результаты, сравнимые с поиском в случайно последовательности бит: 0,2% для десяти и более битовых единиц подряд. 46 В таблице 3 представлены соотношения бит нулей и единиц в выходной последовательности после шифрования (применено: 9 раундов, 512 бит ключевой информации, 128 бит данных). Примечание: во второй и третьей колонке указаны битовые данные для 32-битных слов, т.е. запись «1сл-сл-сл» говорит о том, что первое 32-битное слово состоит полностью из битовых единиц, а остальные три слова – случайны. Таблица 3 – Соотношение бит нулей и единиц в выходной последовательности № Ключ Входные п/п шифрования Нулей (%) Единиц (%) данные Отклонение от 50% 1 случайный 1-сл-сл-сл 50,0069% 49,9930% 0,0069 2 случайный сл-1-сл-сл 50,0002% 49,9998% 0,0002 3 случайный сл-сл-1-сл 49,9949% 50,0050% 0,005 4 случайный сл-сл-сл-1 49,9977% 50,0022% 0,0022 5 случайный 1-1-1-1 49,9899% 50,0100% 0,01 Показатели битового теста из таблицы 3 не превышают допустимые отклонения от вероятностных 50%, что позволяет говорить о выходной последовательности как о случайной. Согласно выводам Шеннона [19] алгоритм шифрования должен выдавать абсолютно случайную битовую последовательность вне зависимости от входных данных и ключевой информации. Проведенные тесты показывают, что выходные данные тестируемого алгоритма по своим вероятностным характеристикам неотличимы от случайной последовательности. Шифрование данных увеличивает энтропию выходных данных с тем, чтобы криптоаналитик не имел возможности использовать статистические зависимости шифротекста для проведения успешного криптоанализа [1]. Поэтому в качестве еще одного теста алгоритма с предлагаемой структурой 47 был выбран тест выходных данных на возможность компрессии. Для тестирования был выбран литературный текст (544 КБ, файл формата *.txt) и после шифрования «сжат» компрессором WinRAR v.3.50 с параметром «максимальное сжатие». Итог теста: зашифрованный текстовый файл не был сжат ни на один бит. Из проведенных тестов предложенного алгоритма можно сделать выводы, что благодаря применению структуры вложенных сетей Фейстеля удалось добиться лавинного эффекта диффузии бит входных данных. При этом важную роль играет линейное преобразование, применение которого вне структуры вложенных сетей невозможно. Использование циклических сдвигов зависимых от функции входных данных также способствует равномерной диффузии бит, что делает невозможным предсказывать выходную последовательность алгоритма при манипулировании входными данными. После проведения тестов, можно сделать вывод, что при прозрачной структуре алгоритма удалось добиться выходной последовательности данных, которая соответствует случайной последовательности бит и не зависит от входных данных и ключевой информации. 3.3 Выводы по главе После рассмотрения современных подходов к построению блочных алгоритмов шифрования, анализа их достоинств и недостатков, была спроектирована схема возможного алгоритма шифрования, удовлетворяющая всем предъявленным требованиям. После анализа полученной структуры, проведения тестов на соответствие алгоритма криптографическим требованиям, можно заключить, что применение сформулированных подходов к построению блочных алгоритмов шифрования – Вложенные Сети Фейстеля и битовые сдвиги зависимые от функции – целесообразно. 48 4 ПРОГРАММНОЕ КОНСТРУИРОВАНИЕ ПС КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ФАЙЛОВ В данной главе описаны модули, реализующие алгоритмы CRC64, RC6, IDEA, а так же другие вспомогательные модули и структуры данных, примененные в работе. 4.1 Выбор обоснования языка программирования Для реализации поставленных задач, был выбран язык программирования Object Pascal и среда разработки Borland Delphi 7. Object Pascal — язык программирования применяемый для разработки приложений под ОС Windows любой сложности. Язык получил популярность среди разработчиков самых разных программных продуктов благодаря простоте предоставляемой среды разработки, скорости и эффективности построения программных продуктов и отдельных модулей. Являясь одним из самых популярных языков программирования, Object Pascal широко используется для разработки программного обеспечения. На языке Object Pascal написаны такие известные программы, как: Total Commander, Light Alloy, The KMPlayer, AIMP, QIP, R&Q, The Bat!, ALZip, PowerArchiver, PeaZip, Dev-C++, Skype (графический интерфейс). Область применения языка широка и включает в себя написание как прикладных программ и драйверов устройств, так и развлекательных приложений (например, видеоигр). Написанные программы имеют прозрачную структуру, что позволяет создавать прозрачные исходные коды практически любого объема. 4.2 Структура данных описания файла USB-ключа Ниже описаны поля применяемой в ПС файловой структуры USBключа. Данный ключевой файл находится на USB-ключе по файловому адресу: <USB-ключ>\ qwallke.qwkey. 49 Поля структуры: USB_key = record Key_O: Array [1..16] of cardinal ; 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 бита контрольная сумма. 4.3 Общая схема программного средства При запуске программы происходит поиск устройств, которые являются USB-ключами и открывается форма входа в программу. Если пара логин-пароль введена верно и выбранный USB-ключ корректен, происходит вход в систему. Пользователю предоставляется три попытки входа в систему, по исчерпанию которых происходит принудительное завершение работы программы. На каждую попытку входа отводится определенный лимит времени, по исчерпании лимита происходит принудительное завершение работы. Далее система ожидает получение очередной команды от пользователя и обрабатывает ее в зависимости от ее назначения. Пользователь может выбрать опцию шифрования/расшифрования файла или папки файлов. В последнем случае будет создан файловый контейнер. В случае создания контейнера пользователю предоставляется возможность предварительной архивации контейнера (перед шифрованием). 50 Общая схема программного средства представлена на рисунке 15. Запуск ПС Создание USB-ключа Выбор действия Вход в систему Выбор USB и ввод парольных данных Выбор USB и ввод парольных данных Проверка целостности USB-Ключа и лимита попыток входа Проверка подлинности ввода данных Нет Нет Все верно Все верно Да Да Перезапись информации USBключа Создание USB-ключа Начало сеанса работы Ожидание входных данных Выход Рисунок 15 – Общая схема программного средства 4.4 Взаимодействие модулей Применяемые в ПС модули тесно связаны между собой структурными связями. 51 Общая схема взаимодействия представлена на рисунке 16. Проверка ключа CRC64, CryptoAPI Создание USB-ключа Unit2 Unit3 CRC64, CryptoAPI О программе Шифрование Unit1 Unit5 Unit4 FolderActions Рисунок 16 – Взаимодействие модулей При запуске программы пользователь видит форму аутентификации (модуль Unit2), где ему предлагается ввести пару логин-пароль и выбрать USB-ключ, или же пользователь может создать новый USB-ключ (Unit3). При создании нового USB-ключа и аутентификации используются вычисления, реализуемые при помощи модулей CRC64 и CryptoAPI. Если аутентификация прошла успешно, происходит загрузка основной формы (модуль Unit1). Из главной формы можно получить информацию о 52 программе (модуль Unit5). После чего при помощи функций модуля FilderAction происходит создание контейнера. Реализация начального этапа основного функционала программы – криптографической защиты файлов, предполагает выбор пользователем режима шифрования и задания начальных условий. При выборе режима шифрования «Контейнер», происходит выбор папки шифрования. Выбор папки обеспечивается модулем Unit4. Затем, в зависимости от выбранного алгоритма шифрования – RC6 или IDEA – происходит криптографическая обработка контейнера при помощи функций соответствующего модуля. При выборе пользователем режима шифрования отдельных файлов, после выбора файла для обработки, происходит непосредственное обращение к модулям RC6 или IDEA – в зависимости от выбранного алгоритма шифрования. После окончания криптографической обработки объекта, происходит возвращение управления в главное окно программы (Unit1). По окончании выполнения операций, пользователь может выйти из программы, нажав на красный крестик в правом верхнем углу и подтвердив выход из программы. 4.5 Создание USB-ключа и нового пользователя Если программа запущена в первый раз или пользователь выбрал команду «Создать USB-ключ», запускается процедура создания USB-ключа. Общая схема USB-ключа представлена на рисунке 17. На первом шаге от пользователя требуется ввести свои личные данные (Фамилию и Имя), логин и пароль для входа в систему, а также указать USB. Затем происходит проверка верности введенных данных. Требования следующие: длина фамилии от 1 до 50 символов; длина имени от 1 до 30 символов; длина логина от 5 до 50 символов; 53 длина пароля от 8 до 30 символов. Рисунок 17 – Схема USB-ключа При этом в режиме реального времени (во время ввода данных в информационные поля) происходит оценка надежности пароля, или соответствия при повторе пароля. Если все данные введены верно, генерируется S-key: вычисляется хэшфункция в 512 бит от <сеансовый счетчик> + <соль> + <логин> + <соль> + <пароль> + <соль> + < id USB-ключа>. Далее, случайным образом генерируются ключи шифрования и константа шифрования: 512-битный ключ для исследуемого алгоритма, 256битный ключ для алгоритма RC6, 128-битный для алгоритма IDEA и 128-бит вектора инициализации. Вычисляется контрольная сумма от этих данных (CRC64_2). После чего ключи шифрования и вектор инициализации шифруется S-key путем наложения гаммы. Затем, берется временная метка – дата создания USB-ключа. Производится вычисление хэша доступа (LiteKey) – SHA-512 от следующих данных: логин входа в систему + пароль входа в систему + соль + id USBключа. При помощи хэша доступа (LiteKey) шифруются поля данных: контрольная сумма (CRC64_2), сеансовый счетчик, временная метка. Затем от зашифрованных полей вычисляется контрольная сумма (CRC64_1). 54 Вычисляется контрольный хэш (ControlHash) – SHA-512 от следующих данных: соль + пароль входа в систему + логин входа в систему + соль + id USB-ключа. На этом процедура создания USB-ключа завершена. 4.6 Вход в систему При входе в программу выполняется двухэтапная аутентификация пользователя. Пользователю дается три попытки по 50 секунд на вход в систему. По истечении лимита попыток или времени, происходит вывод информационного окна с сообщением об окончании времени, после чего следует принудительный выход из программы. Первым шагом проверяется лимит попыток входа: если более трех попыток – происходит завершение программы. Выбранный пользователем USB проверяется – является ли он уже USB-ключом. Если все вышеперечисленные этапы успешно пройдены, происходит подсчет целостности зашифрованных полей USB-ключа (CRC64_1). При совпадении происходит проверка введенных пользователем логина-пароля – для этого рассчитывается контрольный хэш (ControlHash) и сверяется со значением на USB-ключе. Затем происходит генерация хэша доступа (LiteKey) и S-key, которыми расшифровываются зашифрованные поля USB-ключа. Происходит генерация нового значения сеансового счетчика. После чего генерируется новый S-key, которым перезашифровывается поле ключей шифрования и вектора инициализации. Также старым хэшем доступа (LiteKey) зашифровывается сеансовый счетчик. Вычисляется новая контрольная сумма (CRC64_2). В основной модуль программы загружаются расшифрованные ключи шифрования и вектор инициализации. 4.7 Основные модули программы 55 Для более удобной структуры и гибкости оперативного изменения частей исходного кода программы без необходимости изменения всего кода, применены следующие модули: CryptoAPI – данный модуль используется для вычисления хэш-суммы SHA-512 (FIPS PUB 180-2). Модуль взят из библиотеки HashLib! 1.03 ((C) Alex Demchenko, 2002, Moldova, Chishinev) и видоизменен в целях удобства интеграции в программу; CRC64 – данный модуль используется для вычисления контрольной суммы CRC64; RC6 – данный модуль используется для шифрования/расшифрования файлов по алгоритму RC6; IDEA – данный модуль используется для шифрования/расшифрования файлов по алгоритму IDEA; Ocelot – данный модуль используется для шифрования/расшифрования файлов по исследуемому алгоритму; FolderActions – модуль обеспечивает создание архива; Unit3 – модуль позволяет создать новый USB-ключ. 4.7.1 Модуль вычисления контрольной суммы Модуль CRC64.pas позволяет вычислить контрольную сумму CRC64 входного файла. В предлагаемой реализации используется полином CRC-64-ECMA-182 (0xC96C5795D7870F42). В Приложении В таблица П.В.1 указаны основные применяемые функции и процедуры. 4.7.2 Модуль алгоритма шифрования RC6 Модуль RC6.pas позволяет производить шифрование, расшифрование файлов по алгоритму RC6. 56 Входными данными модуля являются ключ шифрования и вектор инициализации, хранящиеся в зашифрованом виде на USB-ключе. В модуле предоставлены функции по расширению основного ключа на подключи, работе с потоками, особое внимание уделено обработке последнего неполного блока входных данных – для его шифрования/расшифрования используется секретный вектор инициализации хранящийся в зашифрованном виде в USB-ключе. В Приложении В таблица П.В.2 указаны основные применяемые функции и процедуры. 4.7.3 Модуль алгоритма шифрования IDEA Модуль IDEA.pas позволяет производить шифрование, расшифрование файлов по алгоритму IDEA. Входными данными модуля являются ключ шифрования и вектор инициализации, хранящиеся в зашифрованом виде на USB-ключе. В модуле предоставлены функции по расширению основного ключа на подключи, работе с потоками, особое внимание уделено обработке последнего неполного блока входных данных – для его шифрования/расшифрования используется секретный вектор инициализации хранящийся в зашифрованном виде в USB-ключе. В Приложении В таблица П.В.3 указаны основные применяемые функции и процедуры. 4.7.4 Модуль создания архива Модуль FolderActions.pas обеспечивает упаковку папки и всех вложений в нее в единый файл – архив. Входными данными модуля являются полные пути обрабатываемых объектов – папки с файлами или упакованного архива. В Приложении В таблица П.В.4 указаны основные применяемые функции и процедуры. 57 4.7.5 Модуль создания USB-ключа Модуль Unit3.pas обеспечивает весь процесс создания USB-ключа – введение данных, проверка их корректности и справочная информация для пользователя. При создании ключевой информации – как конечной (USBключа) так и промежуточной – используются криптографически стойкие алгоритмы подсчета хэш-сумм и создания входных данных для вычисления хэш-сумм. В Приложении В таблица П.В.5 указаны основные применяемые функции и процедуры. 4.7.6 Модуль исследуемого алгоритма шифрования Модуль Ocelot.pas позволяет производить зашифрование, расшифрование файлов по исследуемому алгоритму. Входными данными модуля являются ключ шифрования и вектор инициализации, хранящиеся в зашифрованом виде на USB-ключе. В модуле предоставлены функции по расширению основного ключа на подключи, работе с потоками, особое внимание уделено обработке последнего неполного блока входных данных – для его шифрования/расшифрования используется секретный вектор инициализации хранящийся в зашифрованном виде в USB-ключе. В Приложении В таблица П.В.6 указаны основные применяемые функции и процедуры. 4.8 Выводы по главе В данной главе дано обоснование выбора языка программирования для реализации программного средства. Были созданы модули, реализующие алгоритмы шифрования, вычисления контрольной суммы, создания USB-ключа и авторизации. В главе даны описания основных процедур и функций всех описанных 58 модулей, а так же описания реализованных структур данных. Кроме того в главе представлена общая схема взаимодействия всех модулей программы. В главе 5 приведен контрольный пример работы программного средства «криптографическая защита файлов». Приложение Б содержит исходный код модуля Unit3, реализующего работу с USB-ключом. Руководства оператора, программиста и системного администратора представлены в приложениях Г, Д и Е. 59 5 КОНТРОЛЬНЫЙ ПРИМЕР В данной главе рассматривается работа с разработанным программным средством «Криптографическая защита файлов». 5.1 Запуск программы При запуске программы выводится окно авторизации (рис. 18). Окно аутентификации предоставляет возможность ввода логина, пароля и выбора USB-ключа – все это необходимо для входа в программу. Так же существует возможность создать новый USB-ключ. Окно аутентификации имеет множество подсказок для пользователя: таймер оставшегося времени на авторизацию, верность повторенного пароля, верность выбранного USB-ключа, а также справочная информация. Если выбрать команду «Создать USB-ключ», то появится окно создания нового USB-ключа (рис. 19). Рисунок 18 – Окно входа в программу 60 Рисунок 19 – Окно создания нового USB-ключа Здесь пользователю предлагается ввести информацию о себе, а также задать логин и пароль (последний необходимо повторить дважды). При создании пароля происходит автоматический подсчет стойкости пароля и если стойкость не отвечает минимальным требованиям безопасности, происходит блокирование создания нового ключа. Если все данные введены верно, пользователю предоставляется возможность выбрать чистый USB для создания USB-ключа. После чего происходит создание ключа и пользователь может начать работу. Основное окно программы представлено на рисунке 20. Основное окно программы несет в себе отдельное окно пошаговых подсказок пользователю, путем отслеживания его манипуляций в реальном времени. Также представлена служебная информация о состоянии и владельце используемого USB-ключа. Меню основного окна, помимо выбора операций по работе с файлами, предоставляет возможность создать новый 61 ключ прямо из главного окна программы (рис. 20), получить информацию по программе и связаться с разработчиком программы. Рисунок 20 – Главное окно программы Для непосредственной работы с программой пользователю на выбор предлагается выбрать один из режимов работы – работать с одиночными файлами, либо с папками, содержащими файлы и вложенные папки с файлами. В последнем случае подразумевается создание файлового контейнера. При этом предоставляется возможность его для уменьшения общих размеров. 5.2 Сообщения оператору В зависимости от действий пользователя, могут возникнуть ошибки или системные сообщения, о которых будет выведено информационное сообщение. В некоторых случаях состояние программы изменяется постоянно, о чем мгновенно оповещается пользователь. 62 Так, например, таймер авторизации оповещает пользователя об окончании времени обратным отсчетом. За семь секунд до истечения времени, информационное поле приобретает «сигнальный» красный цвет, чтобы обратить внимание пользователя (рис. 21). Рисунок 21 – Истечение времени попытки входа Помимо таймера оставшегося времени происходит отслеживание выбора USB на причастность к USB-ключу – если USB является ключом, то он становится доступным для выбора пользователем. Так же обращается внимание пользователя верность выбора раскладки клавиатуры предпочтение отдается английской раскладке (рис. 22). Рисунок 22 – Все входные данные введены корректно 63 – При возникновении ошибок при работе с программой, выводятся соответствующие сообщения с информацией об ошибке. На рисунке 23 приведен пример сообщения при неверном вводе пары логин-пароль. Рисунок 23 – Неверный ввод пары логин-пароль На рисунке 24 приведен пример сообщения при исчерпании лимита попыток входа в программу. Рисунок 24 – Превышение лимита попыток входа 5.3 Пример зашифрования и расшифрования файлов После запуска программы и авторизации пользователю предоставляется возможность начать работу с программой. Для шифрования файлов необходимо выбрать режим работы: работать с отдельными файлами или с папками – объединять файлы в контейнеры. Оба режима со всеми настройками представлены пользователю в главном окне (рис. 25). Для примера выберем второй режим – работа с контейнерами. Мышью отмечаем пункт «Шифровать» и выбираем алгоритма шифрования в выпадающем списке. После чего нам становится доступным опция архивации контейнера. Выбор этой опции замедлит работу программы, однако размер контейнера сократится. 64 Теперь становится доступной кнопка выбора папки для совершения операции шифрования. Выбрав в окне папку (рис. 26), пользователь может выбрать имя создаваемого зашифрованного контейнера. Рисунок 25 – Главное окно программы По умолчанию программа создаст файл в корневой папке выбранной исходной аудитории и назовет контейнер contei.cry – если опция архивации не активирована. После выбора папки для шифрования, становится доступной кнопка «Выполнить», нажав которую, запускается выполнение программы в соответствии с выбранными параметрами (рис. 27). Рисунок 26 – Окно выбора папки для шифрования 65 По завершении шифрования, пользователю будет выведено сообщение об успешном завершении работы (рис. 28). Рисунок 27 – Выбор режима и настроек шифрования Стоит обратить внимание, что программа автоматически изменяет подписи и подсказки для элементов в зависимости от выбранных параметров окружения. Рисунок 28 – Сообщение об успешном завершении шифрования 66 5.4 Выводы по главе В данной главе рассмотрена работа программного средства «криптографическая защита файлов». В рассмотренных примерах показано, что программа имеет информативные пользовательские окна авторизации, создания USB-ключа и основного окна и выполняет функции зашифрования/расшифрования файлов или файловых контейнеров, обеспечивая двухэтапную аутентификацию. Система подсказок пользователю отслеживает действия пользователя и на основе анализа активности пользователя выдаются подсказки, облегчающие навигацию и принятие решений в программе. Программа работает стабильно в операционной системе Windows XP и Windows 7. 67 ЗАКЛЮЧЕНИЕ В данной работе проведен обзор и анализ методов и средств криптографической программное защиты файлов; конструирование проведены алгоритмическое демонстрирующие и непосредственные алгоритмы и схемы работы с файлами и их программная реализация на ЭВМ. Задачей данной работы является разработка программного средства криптографической защиты файлов и исследования современных подходов к построению блочных алгоритмов шифрования, реализация и тестирование исследуемого алгоритма. В данной работе выполнено: разработана двухуровневая система аутентификации пользователя; интегрированы проверенные временем научные разработки алгоритмов аутентификации и контроля целостности [9]; применены криптографически стойкие алгоритмы шифрования; представлен и протестирован исследуемый алгоритм шифрования. Данная программа может быть использована как домашними пользователями ПК, так и на рабочих станциях предприятии. Создана программа, удовлетворяющая заданию Приложение А П.А.4. Итоговая программа проверена и функционирует под операционными системами Windows XP и Windows 7 32bit. Программа отслеживает корректность USB-ключа: в случае подмены, взлома или устаревания, штатная работа по зашифрованию/расшифрованию файлов становится невозможной. Благодаря использованию стойкой пары логин-пароль, обеспечивается дополнительная защита, в случае, если злоумышленник завладеет USB-ключом. Все внутренние вычисления и проверки целостности и аутентификации выполняются по криптостойким алгоритмам – SHA-512 и CRC64. 68 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 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. 69 Специальный 10. Фергюсон Н., Шнайер Б. Практическая криптография - М.: Вильямс, 2005. – 424. 11. Сеть Фейстеля. [Электронный ресурс] - URL: http://www.ru.wikipedia.org/wiki/Сеть_Фейстеля (дата обращения: 1.07.2012). 12. Чиликов А., Алексеев Е. Поиск криптографических ключей в [Электронный RAM ресурс] http://www.ruscrypto.ru/conference/program/reversing/ - URL: (дата обращения: 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. Амербаев В.М., Зверев Е. М., Шарамок А. В. О методе построения программно-физического датчика случайных чисел - М., г.Зеленоград: Спурт, 2002. – 11. 15. [Электронный PGP ресурс] - URL: http://ru.wikipedia.org/wiki/PGP (дата обращения: 1.07.2012). 16. TrueCrypt [Электронный ресурс] - URL: http://ru.wikipedia.org/wiki/TrueCrypt (дата обращения: 1.07.2012). 17. Лисицкая И.В. О новой методике оценки стойкости блочных симметричных шифров криптоанализа. – к Харьков, атакам дифференциального Харьковский национальный и линейного университет радиоэлектроники. 2011. – 9. 18. Винокуров А., Применко Э. Сравнение российского стандарта шифрования, алгоритма ГОСТ 28147-89, и алгоритма Rijndael, выбранного в качестве нового стандарта шифрования США. – Системы безопасности, М., Гротэк, 2001, №№1,2. – С. 2-14. 19. Шеннон К. Работы по теории информации и кибернетике, М., ИЛ, 1963. – С. 1-8. 70 ПРИЛОЖЕНИЕ А. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО СОГЛАСОВАНО УТВЕРЖДЕНО Доцент каф. «ПОВТ и АС» Зав. каф. «ПОВТ и АС» _______________ С.П. Новиков _____________ Р.А. Нейдорф «____»___________2012 г. «____»___________2012 г. П.А.1 Введение П.A 1.1 Наименование программы Наименование программы - «Программное средство криптографической защиты файлов». Областью применения данного программного средства является сфера информационной безопасности. П.A 1.2 Объект внедрения Объект внедрения: конечный программный продукт предназначен для внедрения на кафедре «Программного обеспечения вычислительной техники и автоматизированных систем» («ПОВТ и АС») Донского Государственного Технического Университета (ДГТУ). П.А.2 Основание для разработки Разработка проводится на основании задания на дипломную практику, для студентов факультета «Информатики и Вычислительной Техники» (ИиВТ) Донского Государственного Технического Университета (ДГТУ) по направлению «Программное обеспечение вычислительной техники и 71 автоматизированных систем (ПОВТ и АС)», обучающихся по специальности 090102 «Компьютерная безопасность». Наименование темы разработки: «Программное средство криптографической защиты файлов». П.А.3 Назначение разработки Функциональное назначение ПС состоит в криптографической защите файлов с организацией двухэтапной аутентификации пользователя. Эксплуатационное назначение: программное средство может применяться в качестве специального программного обеспечения на компьютерах конечных пользователей. П.А.4 Требование к программе П.А.4.1 Требования к функциональным характеристикам ПС должно выполнять шифрование данных, аутентификацию пользователя по паре логин-пароль и USB-ключу, целостность ключа и шифруемых данных. Выполняемая функциональность разработанным программным средством: зашифрование/расшифрование данных; двухэтапная аутентификация пользователя; создание USB-ключа для шифрования/расшифровки данных; контроль целостности USB-ключа и шифруемых данных; фиксирование времени, потраченного на ввод ключевой информации при аутентификации пользователя и блокировка доступа по истечении времени; возможности выбора уровня защиты шифруемых данных; контроль временной ценности USB-ключа; 72 справочная информация, поступающая пользователю путем отслеживания активности оператора. П.А.4.2 Требования к надежности Требования к обеспечению надежного функционирования программы: Надежное функционирование выполнением Заказчиком программы совокупности должно быть обеспечено организационно-технических мероприятий, перечень которых приведен ниже: организацией бесперебойного питания технических средств; организацией правильного использования сетевых модулей; организацией правильного ввода параметров инициализирующих структур; регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов. Отказы из-за некорректных действий пользователей системы. Отказы программы вследствие некорректных действий программиста при взаимодействии с программным пакетом сопровождаются отрицательными возвращаемыми значениями всех функций модуля. П.4.2.1 Входные данные Входные данные ПС «криптографическая защита файлов»: пара логин-пароль в текстовом виде и USB-ключ; файл/папка с файлами для шифрования; файл/контейнер для расшифровки; вектор инициализации-сравнения алгоритма шифрования; временная метка USB-ключа; данные о владельце USB-ключа. 73 П.4.2.2 Выходные данные Выходные данные ПС «криптографическая защита файлов»: файл/папка с файлами для шифрования; файл/контейнер для расшифровки; вектор инициализации-сравнения алгоритма шифрования; сеансовый счетчик на USB-ключе; файл ключа на USB-носителе. П.А.4.3 Условия эксплуатации Для функционирования программного продукта необходимо соблюдение всех требований и правил эксплуатации компьютерной техники. Дополнительных требований и ограничений не вводится. Требования к персоналу, работающему с данным программным продуктом: общие знания вычислительной техники, умения работы с сетью и знание предметной области и стандартного пользовательского интерфейса операционной системы. П.А.4.4 Требования к составу и параметрам технических средств В состав технических средств должен входить IВМ-совместимый персональный компьютер (ПЭВМ), включающий в себя: процессор Pentium-2.0GHz, не менее или AMD (не ниже 2.0GHz); оперативную память объемом не менее 1024 Мбайт; операционную систему семейства Windows (не ниже Windows XP); USB-порт; VGA-совместимый видеоадаптер и дисплей. Для функционирования программного продукта необходимо соблюдение всех требований и правил эксплуатации компьютерной техники. Дополнительных требований и ограничений не вводится. 74 П.А.4.5 Требования к исходным кодам и языкам программирования. Язык программирования Object Pascal и среда разработки Borland Delphi 7. П.A. 4.6 Требование к упаковке и маркировке Программное средство должно сопровождаться руководством пользователя. Требования к маркировке не предъявляются, но упаковывать желательно в «контейнеры», создающие защиту носителей, на которых хранится и переносится программное средство. П.А.4.7 Требования к транспортировке и хранению Условия транспортирования, места хранения, условия складирования и сроки хранения в различных условиях должны соответствовать требованиям, предъявляемым к носителям информации на которых будет содержаться данное программное изделие. Программа может храниться на жестком диске, на Flash-носителе, на компакт-дисках. П.A.5 Стадии и этапы разработки сформулирована постановка задачи (с 1.09.2012 по 3.09.2012); изучение предметной области (с 4.04.2012 по 9.09.2012); изучение предметной области (с 10.09.2012 по 01.10.2012); создание функциональной модели (с 15.09.2012 по 31.10.2012); разработка программных модулей (с 17.09.2012 по 16.11.2012); разработка интерфейса программы (с 10.11.2012 по 20.11.2012); испытания программы (с 20.11.2012 по 30.11.2012); разработка пояснительной записки к данному программному средству (с 01.10.2012 по 30.11.2012). 75 П.А.6 Порядок контроля и приемки Порядок и контроль приемки определяются заведующим кафедрой «ПОВТ и АС» и основаны на демонстрации знаний технологии и умении создавать программные средства для различных предметных областей. Главным требованием к приемке является наличие правильно работающего программного средства, иллюстрируемого тестовым примером и отчетом, представленным в печатном виде. Разработчик технического задания: Матющенко Александр Евгеньевич _________________ (подпись) “___” ____________ 2012г. 76 ПРИЛОЖЕНИЕ Б. ИСХОДНЫЙ КОД МОДУЛЯ UNIT3.PAS unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, FileCtrl, CryptoAPI, CRC64, ExtCtrls; type USB_key = record Key_O: Array [1..16] of cardinal; //512bit ключ шифрования О 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; 77 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]]; 78 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); //одноразовый счетчик 79 //размножаем и загоняем в буфер: пароль_соль_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); // Randomize(); U_key.Key_O[1]:= Random(max-3)+1; U_key.Key_O[2]:= Random(max-3)+1; U_key.Key_O[3]:= Random(max-3)+1; U_key.Key_O[4]:= Random(max-3)+1; U_key.Key_O[5]:= Random(max-3)+1; U_key.Key_O[6]:= Random(max-3)+1; U_key.Key_O[7]:= Random(max-3)+1; U_key.Key_O[8]:= Random(max-3)+1; U_key.Key_O[9]:= Random(max-3)+1; U_key.Key_O[10]:= Random(max-3)+1; U_key.Key_O[11]:= Random(max-3)+1; U_key.Key_O[12]:= Random(max-3)+1; U_key.Key_O[13]:= Random(max-3)+1; U_key.Key_O[14]:= Random(max-3)+1; U_key.Key_O[15]:= Random(max-3)+1; U_key.Key_O[16]:= Random(max-3)+1; 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); 80 + + 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 16 do buffer:= buffer + inttostr(U_key.Key_O[i]); 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]) + ' ' + 81 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 203 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_O[1]:=U_key.Key_O[1] xor pl; buffer:=copy(S_key, 8,8); pl:= StrToInt('$'+buffer); U_key.Key_O[2]:=U_key.Key_O[2] xor pl; buffer:=copy(S_key, 16,8); pl:= StrToInt('$'+buffer); U_key.Key_O[3]:=U_key.Key_O[3] xor pl; buffer:=copy(S_key, 24,8); pl:= StrToInt('$'+buffer); U_key.Key_O[4]:=U_key.Key_O[4] xor pl; buffer:=copy(S_key, 32,8); pl:= StrToInt('$'+buffer); U_key.Key_O[5]:=U_key.Key_O[5] xor pl; buffer:=copy(S_key, 40,8); pl:= StrToInt('$'+buffer); U_key.Key_O[6]:=U_key.Key_O[6] xor pl; 82 buffer:=copy(S_key, 48,8); pl:= StrToInt('$'+buffer); U_key.Key_O[7]:=U_key.Key_O[7] xor pl; buffer:=copy(S_key, 56,8); pl:= StrToInt('$'+buffer); U_key.Key_O[8]:=U_key.Key_O[8] xor pl; buffer:=copy(S_key, 64,8); pl:= StrToInt('$'+buffer); U_key.Key_O[9]:=U_key.Key_O[9] xor pl; buffer:=copy(S_key, 72,8); pl:= StrToInt('$'+buffer); U_key.Key_O[10]:=U_key.Key_O[10] xor pl; buffer:=copy(S_key, 80,8); pl:= StrToInt('$'+buffer); U_key.Key_O[11]:=U_key.Key_O[11] xor pl; buffer:=copy(S_key, 88,8); pl:= StrToInt('$'+buffer); U_key.Key_O[12]:=U_key.Key_O[12] xor pl; buffer:=copy(S_key, 96,8); pl:= StrToInt('$'+buffer); U_key.Key_O[13]:=U_key.Key_O[13] xor pl; buffer:=copy(S_key, 104,8); pl:= StrToInt('$'+buffer); U_key.Key_O[14]:=U_key.Key_O[14] xor pl; buffer:=copy(S_key, 112,8); pl:= StrToInt('$'+buffer); U_key.Key_O[15]:=U_key.Key_O[15] xor pl; buffer:=copy(S_key, 120,8); pl:= StrToInt('$'+buffer); U_key.Key_O[16]:=U_key.Key_O[16] xor pl; /////////// d:=''; buffer:=''; 83 d:= inttostr(U_key.Key_counter) + '564hg85^7g73643276' + Form3.edit3.text + '44322salt_43277777d3946f' + Form3.edit4.text + 'Af732joiewpsalt_04o2hudbuk_salt4222222' + inttostr(G_numdisk); for i:=1 to 199 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]) + ' ' + 84 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); 85 if day<10 then str:= str + '0' + inttostr(day) else str:= str + inttostr(day); if m<10 then str:= str + '0' + inttostr(m) else str:= str + 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 16 do buffer:= buffer + inttostr(U_key.Key_O[i]); 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]) + ' ' + 86 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); Form3.Edit1.Text:=''; Form3.Edit2.Text:=''; Form3.Edit3.Text:=''; Form3.Edit4.Text:=''; Form3.Edit5.Text:=''; Form3.ProgressBar1.Position:=0; Form3.Button1.Enabled:=false; Form2.Timer1.Enabled:=true; Form2.Show; Form3.Hide; end; {===============} procedure TForm3.Button1Click(Sender: TObject); var j: byte; begin 87 j:=0; if (Length(Edit1.Text)<1) then MessageDlg('Поле ввода "Фамилия" не может быть пустым!', mtWarning, [mbOK],0) else if (Length(Edit2.Text)<1) then MessageDlg('Поле ввода "Имя" не может быть пустым!', 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 88 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); 89 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. 90 ПРИЛОЖЕНИЕ В. ОСНОВНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ МОДУЛЕЙ Таблица П.В.1 – Основные функции и процедуры модуля CRC64.pas Функция или Входные данные Выходные процедура Описание данные CRC64Stream TStream – имя CRC64Stre Основная const Source: файла от которого берется am: Int64 – функция сумма; итоговая модуля Count: Integer – размер этого контрольн файла; CRC64Next ая – выполняет сумма подсчет const BufSize: Cardinal = 1024 – файла контрольной размер выделенного буфера суммы файла const Data – входные данные CRC64: Вычисление для расчета промежуточного Int64 значения контрольной суммы; const Count: значение Cardinal итог. – промежуточн ых данных – промежуточного счетчика. Таблица П.В.2 – Основные функции и процедуры модуля RC6.pas Функция или Входные данные Выходные данные Описание процедура CalculateSubKeys KeyPtr: PChar исходный шифрования. – S: Разворачивание ключ array[0..KeyLength- основного 1] of LongWord – ключа развернутый шифрования на подключ раундовые шифрования; подключи. 91 Таблица П.В.2 – Продолжение DecipherBlock Block: array[1..4] of DecipherBlock: LongWord – входной Boolean блок данных. успешное Выполняется – расшифрование или одного незавершенное блока входных расшифрование данных блока данных. EncipherBlock Block: array[1..4] of EncipherBlock: LongWord – входной Boolean блок данных. успешное по алгоритму RC6. Выполняется – шифрование или одного незавершенное блока входных расшифрование данных EncryptCopy DestStream, блока данных. алгоритму RC6. EncryptCopy: Шифрование – одного потока или данных в SourseStream: TStream Boolean – итоговый по и успешное исходный потоки для аварийное другой согласно шифрования; алгоритму RC6. завершение Count: Int64 – размер работы. потока данных; Key : string – ключ. DecryptCopy DestStream, DecryptCopy: SourseStream: TStream Boolean – итоговый и успешное Расшифрование – одного потока или данных в исходный потоки для аварийное другой согласно расшифрования; алгоритму RC6. завершение Count: Int64 – размер работы. потока данных; Key : string – ключ. 92 Таблица П.В.2 – Продолжение EncryptStream DataStream: EncryptStream: TStream, Instream – Boolean потоки данных для успешное шифрования; Count: Int64 аварийное – завершение размер потока; Выполняет – шифрование или одного потока данных согласно работы. алгоритму RC6. DecryptStream: Выполняет Key: string – ключ шифрования; KCONST: Array of cardinal – вектор инициализации. DecryptStream DataStream: TStream, Instream – Boolean потоки данных для успешное расшифрования; Count: Int64 аварийное – завершение размер потока; работы. – расшифрование или одного потока данных согласно алгоритму RC6. Key: string – ключ расшифрования; KCONST: Array of cardinal – вектор инициализации. Initialize AKey: string – ключ KeyPtr : PChar – Производит шифрования. Count: размер Int64 развернутый ключ. разворачивание – ключа потока шифрования до данных; 64 байт. Key : string – ключ. 93 Таблица П.В.3 – Основные функции и процедуры модуля IDEA.pas Функция или Входные данные Выходные процедура данные CalculateSub FKeyPtr: PChar Keys исходный – pz: PWord;– Процедура ключ развернутый шифрования; FKeySize: Описание выполняет подключ Integer разворачивание – шифрования; основного размер ключа. ключа шифрования на раундовые подключи. DecipherBloc Block: k array[1..4] of DecipherBlock: Word – входной блок Boolean данных. успешное Выполняется – расшифрование или одного незавершенное блока входных данных по расшифрование алгоритму IDEA. блока данных. EncipherBloc Block: k array[1..4] Выполняется of EncipherBlock: Word – входной блок Boolean данных. успешное – шифрование одного или блока незавершенное входных данных по расшифрование алгоритму IDEA. блока данных. EncryptCopy DestStream,SourseStrea EncryptCopy: m: TStream – итоговый Boolean исх потоки успешное Шифрование – одного или данных потока в другой шифрования;Count:Int аварийное согласно алгоритму 64–размер завершение IDEA. потока;Key:strng–ключ работы. 94 Таблица П.В.3 – Продолжение DecryptCopy DestStream, DecryptCopy: SourseStream: Boolean Расшифрова – ние одного TStream – итоговый успешное или потока и исходный потоки аварийное данных для расшифрования; другой завершение Count: Int64 – размер работы. согласно потока данных; алгоритму Key : string – ключ. IDEA. Выполняет EncryptStreamIDEA DataStream, Instream: EncryptStream: – TStream потоки Boolean данных – шифрование для успешное или одного аварийное потока шифрования; Count: Int64 – размер завершение данных потока; согласно работы. Key: string – ключ алгоритму шифрования; IDEA. KCONST: Array word – в of вектор инициализации. DecryptStreamIDEA DataStream, Instream: DecryptStream: TStream – потоки Boolean данных для успешное расшифрования; аварийное Выполняет – расшифрова или ние одного потока Count: Int64 – размер завершение данных потока; согласно работы. Key: string – ключ алгоритму расшифрования; IDEA. KCONST: Array of 95 – word вектор инициализации. Таблица П.В.3 – Продолжение AKey: string – ключ KeyPtr : PChar – Производит Initialize шифрования. развернутый разворачива ключ. ние ключа Таблица П.В.4 – Основные функции и процедуры модуля FolderActions.pas Функция или Входные данные Выходные данные Описание DoFolderAction: Выполняет процедура DoFolderAction FolderPath, ArchivePath:string – Boolean – успешное создание пути исходной папки с или вложениями аварийное архива всех и завершение работы. вложений итогового архива; поданной ActionFunction: на TActionFuntion – вход папки. функция. De_DoFolderAc FolderPath, tion De_DoFolderAction: ArchivePath:string путь архива – Boolean – успешное извлечение для или распаковки и папки итоговой для Выполняет аварийное папок путь завершение работы. файлов и из архива. распаковки; ActionFunction: TActionFuntion – функция. GetAllFiles Filter, Folder: string – GetAllFiles: 96 Обход всех фильтр выбора файлов TFilesList и исходная папка для итоговый обхода соотвественно. – файлов в список папке обойденных файлов. Таблица П.В.5 – Основные функции и процедуры модуля Unit3.pas Функция или Входные данные процедура CRC64_sum Выходные Описание данные str: string – строка, CRC64_sum: int64 Производится от которой - контрольная вычисление вычисляется сумма контрольная полученная сумма (CRC64). строки. строки (буфера). c_GetTempPath: Процедура c_GetTempPath - (CRC64), контрольной String от суммы (CRC64) от – имеет входных возвращает путь к параметров. системной не При вызове возвращает временной папке путь к системной TEMP. временной папке TEMP. hexTOdec str: string строковая – hexTOdec: запись cardinal – выход производит шестнадцатирично в го числа. Функция десятиричном перевод формате. 16- ричного числа в 10-ричное. new_yserkey - Создание ключа USB- Основная процедура модуля. Создает USB-ключ на введенных 97 основе пользователем личных данных, пары логин-пароль и указанного USB. Таблица П.В.6 – Основные функции и процедуры модуля Ocelot.pas Функция или Входные данные Выходные процедура данные DecipherBloc Block: k cardinal array[1..4] – Описание of DecipherBlock: входной Boolean блок данных. успешное Выполняется – расшифрование или одного незавершенное блока входных данных по расшифрование исследуемому блока данных. EncipherBloc Block: k cardinal array[1..4] – алгоритму. Выполняется of EncipherBlock: входной Boolean блок данных. успешное – шифрование одного или блока незавершенное входных данных по расшифрование исследуемому блока данных. EncryptStrea DataStream, mO TStream алгоритму. Instream: EncryptStreamO Выполняет – данных потоки : Boolean для успешное шифрования; аварийное – шифрование одного или потока данных согласно Count: Int64 – размер завершение исследуемому потока; алгоритму. K1:mas работы. – ключ шифрования; I:byte – флаг версии 98 алгоритма; KCONST: Array of cardinal – вектор инициализации. Таблица П.В.6 – Продолжение DecryptStreamO DataStream, TStream Instream: DecryptStreamO: – потоки Boolean данных для успешное шифрования; аварийное Выполняет – расшифрова или ние одного потока Count: Int64 – размер завершение данных потока; согласно работы. ключ исследуемом шифрования; I:byte – у алгоритму. K1:mas – флаг версии алгоритма; KCONST: Array cardinal – of вектор инициализации. Initialize K0 :mas – ключ K : TOcelotKey – Производит шифрования; x: byte – раундовый ключ разворачива флаг режима работы шифрования алгоритма 99 ние ключа ПРИЛОЖЕНИЕ Г РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА П.Г.1 Общие сведения о программе Областью применения данного программного средства является криптографическая защита данных. Программное средство предназначено для использования в качестве компонента специального программного обеспечения на машинах конечных пользователей. Разработанный программный компонент выполняет следующие функции: зашифрование/расшифрование данных; двухэтапная аутентификация пользователя; создание USB-ключа для шифрования/расшифровки данных; контроль целостности USB-ключа и шифруемых данных; противодействие попытке взлома USB-ключа; фиксирование времени, потраченного на ввод ключевой информации при аутентификации пользователя; возможности выбора уровня защиты шифруемых данных. П.Г.2 Структура программы Программный комплекс состоит из следующих файлов: Project.exe – исполняемый файл; qwallke.qwkey – файл электронного ключа. П.Г.3 Настройка программы Для настройки программного продукта необходимо провести следующие операции: вставить в USB-порт ПК USB-память являющуюся ключом 100 запустить программу. В том случае, если производится первый запуск программы, необходимо создать USB-ключ, нажав для этого на кнопку «Создать USB-ключ» (рис. П.Г.1); в поля «Логин-Пароль» ввести соответствующие данные и выбрать нужный USB-ключ из представленного списка (рис.П.Г.1); нажать на кнопку «Войти» (рис. П.Г.1). Рисунок П.Г.1 – Окно входа в программу П.Г.4 Проверка программы Проверка программного разработки при помощи тестов. средства осуществлялась Тестирование в процессе программного средства прошло успешно. Результаты тестирования и экспериментов позволяют утверждать, что программный компонент работает корректно. П.В.5 Дополнительные возможности Программное средство кроме основной функции содержит следующие средства для удобства использования: 101 контроль временной ценности USB-ключа; справочная информация, поступающая пользователю путем отслеживания активности оператора; визуальное отображение процесса зашифрования/расшифрования данных. 102 ПРИЛОЖЕНИЕ Д РУКОВОДСТВО ПРОГРАММИСТА П.Д.1 Общие сведения о программе Областью применения данного программного средства является криптографическая защита данных. Программное средство предназначено для использования в качестве компонента специального программного обеспечения на машинах конечных пользователей. Разработанный программный компонент выполняет следующие функции: зашифрование/расшифрование данных; двухэтапная аутентификация пользователя; создание USB-ключа для шифрования/расшифровки данных; контроль целостности USB-ключа и шифруемых данных; фиксирование времени, потраченного на ввод ключевой информации при аутентификации пользователя; возможности выбора уровня защиты шифруемых данных; контроль временной ценности USB-ключа; справочная информация, поступающая пользователю путем отслеживания активности оператора; Для корректного функционирования программного продукта в состав технических средств должен входить IВМ-совместимый персональный компьютер (ПЭВМ), включающий в себя: процессор Pentium-2.0GHz, не менее или процессор Intel или AMD с тактовой частотой не ниже 2.0GHz; оперативную память объемом не менее 1024 Мбайт; операционную систему семейства Windows (не ниже версии Windows XP); USB-порт; 103 VGA-совместимый видеоадаптер и дисплей; клавиатура и мышь. П.Д.2 Характеристика программы Временные характеристики зависят от частоты процессора, скорости обращения к жесткому диску и USB-устройству, размера обрабатываемых данных. Программное средство реализовано на языке программирования Object Pascal в среде разработки Borland Delphi 7 и состоит из набора файлов, скомпилированных в один программный комплекс. В программе реализован контроль вводимых данных всех возможных полей, проверка осуществляется в момент закрытия окна или нажатия кнопки для выполнения дальнейших действий. В случае некорректности введенных данных выводится сообщение об ошибке. П.Г.3 Обращение к программе Обращение производится пользователем интерактивно, посредством операционной системы. Программа не поддерживает какие-либо аргументы командной строки. П.Д.4 Входные и выходные данные Входные данные: пара логин-пароль текстовом виде и USB-ключ; файл/папка с файлами для шифрования; файл/контейнер для расшифровки. Выходные данные: файл/папка с файлами для шифрования; файл/контейнер для расшифровки. 104 П.Д.5 Сообщения программисту В зависимости от режима работы программы, могут возникнуть ошибки или системные сообщения, о которых будет выведено информационное сообщение. В некоторых случаях состояние программы изменяется постоянно, о чем мгновенно оповещается пользователь. Так, например, таймер авторизации оповещает пользователя об окончании времени обратным отсчетом. За семь секунд до истечения времени, информационное поле приобретает «сигнальный» красный цвет, чтобы обратить внимание пользователя (рис. П.Д.1). Рисунок П.Д.1 – Истечение времени попытки входа Помимо таймера оставшегося времени происходит отслеживание выбора USB на причастность к USB-ключу – если USB является ключом, то он становится доступным для выбора пользователем. Так же обращается внимание пользователя верность выбора раскладки предпочтение отдается английской раскладке (рис. П.Д.2). 105 клавиатуры – Рисунок П.Д.2 – Все входные данные введены корректно При возникновении ошибок при работе с программой, выводятся соответствующие сообщения с информацией об ошибке. На рисунке П.Д.3 приведен пример сообщения при неверном вводе пары логин-пароль. Рисунок П.Д.3 – Неверный ввод пары логин-пароль На рисунке П.Д.4 приведен пример сообщения при исчерпании лимита попыток входа в программу. Рисунок П.Д.4 – Превышение лимита попыток входа 106 ПРИЛОЖЕНИЕ Е РУКОВОДСТВО ОПЕРАТОРА П.Е.1 Общие сведения о программе Областью применения данного программного средства является криптографическая защита данных. Программное средство предназначено для использования в качестве компонента специального программного обеспечения на машинах конечных пользователей. Разработанный программный компонент выполняет следующие функции: зашифрование/расшифрование данных; двухэтапная аутентификация пользователя; создание USB-ключа для шифрования/расшифровки данных; контроль целостности USB-ключа и шифруемых данных; противодействие попытке взлома USB-ключа; фиксирование времени, потраченного на ввод ключевой информации при аутентификации пользователя; возможности выбора уровня защиты шифруемых данных; контроль временной ценности USB-ключа; справочная информация, поступающая пользователю путем отслеживания активности оператора; визуальное отображение процесса зашифрования/расшифрования данных. П.Е.2 Условия выполнения программы Для корректного функционирования программного продукта в состав технических средств должен входить IВМ-совместимый персональный компьютер (ПЭВМ), включающий в себя: 107 процессор Pentium-2.0GHz, не менее или процессор Intel или AMD с тактовой частотой не ниже 2.0GHz; оперативную память объемом не менее 1024 Мбайт; операционную систему семейства Windows; USB-порт; VGA-совместимый видеоадаптер и дисплей; клавиатура и мышь. П.Е.3 Выполнение программы При запуске программы выводится окно авторизации (рис. П.Е.1). Окно аутентификации предоставляет возможность ввода логина, пароля и выбора USB-ключа – все это необходимо для входа в программу. Так же существует возможность создать новый USB-ключ. Окно аутентификации имеет множество подсказок для пользователя: таймер оставшегося времени на авторизацию, верность повторенного пароля, верность выбранного USB-ключа, а также справочная информация. Если выбрать команду «Создать USB-ключ», то появится окно создания нового USB-ключа (рис. П.Е.2). Рисунок П.Е.1 – Окно входа в программу 108 Рисунок П.Е.2 – Окно создания нового USB-ключа Здесь пользователю предлагается ввести информацию о себе, а также задать логин и пароль (последний необходимо повторить дважды). При создании пароля происходит автоматический подсчет стойкости пароля и если стойкость не отвечает минимальным требованиям безопасности, происходит блокирование создания нового ключа. Если все данные введены верно, пользователю предоставляется возможность выбрать чистый USB для создания USB-ключа. После чего происходит создание ключа и пользователь может начать работу. Основное окно программы (рис. П.Е.3) несет в себе отдельное окно пошаговых подсказок пользователю, путем отслеживания его манипуляций в реальном времени. Также представлена служебная информация о состоянии и владельце используемого USB-ключа. Меню основного окна, помимо выбора операций по работе с файлами, предоставляет возможность создать новый ключ прямо из главного окна программы, получить информацию по программе и связаться с разработчиком программы. 109 Рисунок П.Е.3 – Главное окно программы Для непосредственной работы с программой пользователю на выбор предлагается выбрать один из режимов работы – работать с одиночными файлами, либо с папками, содержащими файлы и вложенные папки с файлами. В последнем случае подразумевается создание файлового контейнера. После запуска программы и авторизации пользователю предоставляется возможность начать работу с программой. Для шифрования файлов необходимо выбрать режим работы: работать с отдельными файлами или с папками – объединять файлы в контейнеры. Оба режима со всеми настройками представлены пользователю в главном окне (рис. П.Е.3). Для примера выберем второй режим – работа с контейнерами. Мышью отмечаем пункт «Шифровать» и выбираем алгоритма шифрования в выпадающем списке. Теперь становится доступной кнопка выбора папки для совершения операции шифрования. Выбрав в окне папку (рис. П.Е.4), пользователь может выбрать имя создаваемого зашифрованного контейнера. 110 По умолчанию программа создаст файл в корневой папке выбранной исходной аудитории и назовет контейнер contei.cry. После выбора папки для шифрования, становится доступной кнопка «Выполнить», нажав которую, запускается выполнение программы в соответствии с выбранными параметрами (рис. П.Е.5). Рисунок П.Е.4 – Окно выбора папки для шифрования По завершении шифрования, пользователю будет выведено сообщение об успешном завершении работы (рис. П.Е.6). Рисунок П.Е.5 – Выбор режима и настроек шифрования. 111 Стоит обратить внимание, что программа автоматически изменяет подписи и подсказки для элементов в зависимости от выбранных параметров окружения. Рисунок П.Е.6 – Сообщение об успешном завершении шифрования П.Е.4 Сообщения оператору В зависимости от режима работы программы, могут возникнуть ошибки или системные сообщения, о которых будет выведено информационное сообщение. В некоторых случаях состояние программы изменяется постоянно, о чем мгновенно оповещается пользователь. Так, например, таймер авторизации оповещает пользователя об окончании времени обратным отсчетом. За семь секунд до истечения времени, информационное поле приобретает «сигнальный» красный цвет, чтобы обратить внимание пользователя (рис. П.Е.7). 112 Рисунок П.Е.7 – Истечение времени попытки входа Помимо таймера оставшегося времени происходит отслеживание выбора USB на причастность к USB-ключу – если USB является ключом, то он становится доступным для выбора пользователем. Так же обращается внимание пользователя верность выбора раскладки клавиатуры предпочтение отдается английской раскладке (рис. П.Е.8). Рисунок П.Е.8 – Все входные данные введены корректно 113 – При возникновении ошибок при работе с программой, выводятся соответствующие сообщения с информацией об ошибке. На рисунке П.Е.9 приведен пример сообщения при неверном вводе пары логин-пароль. Рисунок П.Е.9 – Неверный ввод пары логин-пароль На рисунке П.Е.10 приведен пример сообщения при исчерпании лимита попыток входа в программу. Рисунок П.Е.10 – Превышение лимита попыток входа ПРИЛОЖЕНИЕ Ж 114 МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРОВЕДЕНИЮ ЛАБОРАТОРНЫХ РАБОТ ПО КУРСУ «ПРОГРАММНО-АППАРАТНЫЕ СРЕДСТВА ОБЕСПЕЧЕНИЯ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» (ДГТУ) Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем» Методическое указание к лабораторной работе по теме: «Программно-аппаратные средства обеспечения информационной безопасности» Ростов-на-Дону 2012 г Описание ПС «Криптографическая защита файлов» При запуске программы выводится окно авторизации (рис. П.Ж.1). 115 Окно аутентификации предоставляет возможность ввода логина, пароля и выбора USB-ключа – все это необходимо для входа в программу. Так же существует возможность создать новый USB-ключ. Окно аутентификации имеет множество подсказок для пользователя: таймер оставшегося времени на авторизацию, верность повторенного пароля, верность выбранного USB-ключа, а также справочная информация. Если выбрать команду «Создать USB-ключ», то появится окно создания нового USB-ключа (рис. П.Ж.2). Рисунок П.Ж.1 – Окно входа в программу Здесь пользователю предлагается ввести информацию о себе, а также задать логин и пароль (последний необходимо повторить дважды). При создании пароля происходит автоматический подсчет стойкости пароля и если стойкость не отвечает минимальным требованиям безопасности, происходит блокирование создания нового ключа. 116 Рисунок П.Ж.2 – Окно создания нового USB-ключа Если все данные введены верно, пользователю предоставляется возможность выбрать чистый USB для создания USB-ключа. После чего происходит создание ключа и пользователь может начать работу. Основное окно программы (рис. П.Ж.3) несет в себе отдельное окно пошаговых подсказок пользователю, путем отслеживания его манипуляций в реальном времени. Также представлена служебная информация о состоянии и владельце используемого USB-ключа. Меню основного окна, помимо выбора операций по работе с файлами, предоставляет возможность создать новый ключ прямо из главного окна программы, получить информацию по программе и связаться с разработчиком программы. Рисунок П.Ж.3 – Главное окно программы 117 Для непосредственной работы с программой пользователю на выбор предлагается выбрать один из режимов работы – работать с одиночными файлами, либо с папками, содержащими файлы и вложенные папки с файлами. В последнем случае подразумевается создание файлового контейнера. После запуска программы и авторизации пользователю предоставляется возможность начать работу с программой. Для шифрования файлов необходимо выбрать режим работы: работать с отдельными файлами или с папками – объединять файлы в контейнеры. Оба режима со всеми настройками представлены пользователю в главном окне (рис. П.Ж.3). Для примера выберем второй режим – работа с контейнерами. Мышью отмечаем пункт «Шифровать» и выбираем алгоритма шифрования в выпадающем списке. Теперь становится доступной кнопка выбора папки для совершения операции шифрования. Выбрав в окне папку (рис. П.Ж.4), пользователь может выбрать имя создаваемого зашифрованного контейнера. По умолчанию программа создаст файл в корневой папке выбранной исходной аудитории и назовет контейнер contei.cry. После выбора папки для шифрования, становится доступной кнопка «Выполнить», нажав которую, запускается выполнение программы в соответствии с выбранными параметрами (рис. П.Ж.5). Рисунок П.Ж.4 – Окно выбора папки для шифрования 118 По завершении шифрования, пользователю будет выведено сообщение об успешном завершении работы (рис. П.Ж.6). Рисунок П.Ж.5 – Выбор режима и настроек шифрования. Стоит обратить внимание, что программа автоматически изменяет подписи и подсказки для элементов в зависимости от выбранных параметров окружения. Рисунок П.Ж.6 – Сообщение об успешном завершении шифрования 119 Задания к практической работе. 1) Выберите файл для шифрования. Зашифруйте каждую его копию разным алгоритмом шифрования. Засеките время выполнения зашифрования. Сравните скорость работы алгоритма. Объясните, почему самым быстрым является алгоритм RC6. Как это связано с размером оперируемого блока и размером ключа. 2) Выберите текстовый файл и зашифруйте его. Откройте файл программой «Блокнот» и удалите часть зашифрованной информации в середине файла. Расшифруйте файл. Почему начальная часть файла расшифровалась верно, а оставшаяся – нет? 3) Повторите действия из предыдущего задания, только удалите часть информации в самом начале файла. Объясните результаты работы программного средства. 4) Зашифруйте файл любым алгоритмом шифрования. Используя компрессор ужмите зашифрованный файл в максимальном режиме сжатия. Сравните размеры сжатого файла и несжатого. Как изменился размер? Чем можно объяснить результаты наблюдения? 5) Дайте определения понятиям «вектор инициализации», «ключ шифрования» и «блок шифрования». Какого размера ключи шифрования и блоки шифрования используют алгоритмы в программном средстве? 6) Создайте текстовый файл. Внесите в него данные: 20 одинаковых символов. Зашифруйте файл. Откройте зашифрованный файл программой «Блокнот». Первые 16 символов пропустите. Сравните следующие 20. Если принять во внимание, что размер шифруемого блока равен 16 символам, объясните, почему оставшиеся 20 символов в зашифрованном виде выглядят по-разному, ведь одинаковые входные блоки должны после зашифровывания выглядеть одинаково. (Для ответа на данное упражнение используйте понятия из предыдущего.) 7) В алгоритмах симметричного шифрования для зашифрования и расшифрования применяется один и тот же ключ. Каким образом достигается 120 гибкость использования одного ключа, если процедуры зашифрования и расшифрования не полностью идентичны? 8) Проведите зашифруйте файл практический любым опыт: алгоритмом и последовательно дважды последовательно дважды расшифруйте. Объясните полученный результат, используя теоретический материал при ответе на предыдущий вопрос. 9) Объясните целесообразность применения алгоритмов шифрования с более коротким ключом (ведь они имеют меньшую степень защиты) по сравнению с версиями алгоритма шифрования с более длинным ключом. 10) Установите используется в опытным «Программном путем средстве какой режим шифрования криптографической файлов»? Какие преимущества и недостатки имеет данный режим? 121 защиты ПРИЛОЖЕНИЕ З. АКТ ВНЕДРЕНИЯ 122 ПРИЛОЖЕНИЕ И. АКТ сдачи / приемки программного обеспечения к дипломной работе кафедра «ПО ВТ и АС» Утверждаю Зав. каф. «ПО ВТ и АС» д.т.н., проф. Р. А. Нейдорф « Студент » 2012 г. Матющенко Александр Евгеньевич (Фамилия, Имя, Отчество) Руководитель Новиков Сергей Петрович (ФИО) Наименование темы Программное средство криптографической защиты файлов (Полное наименование дипломной работы) Перечень подлежащих проверке функций программного обеспечения Основные функции, выполняемые программным Выполнение продуктом 1 Реализация зашифрования/расшифровки данных 2 Реализация двухэтапной аутентификации пользователя Реализация создания USB-ключа для 3 зашифрования/расшифровки данных 4 Реализация контроля целостности USB-ключа 5 Реализация контроля временной ценности USB-ключа Фиксирование времени, потраченного на ввод 6 ключевой информации при аутентификации пользователя Реализация возможности выбора уровня защиты 7 шифруемых данных Реализация справочной информации путем 8 отслеживания активности пользователя 123 ПРИЛОЖЕНИЕ К. ПРОТОКОЛ ПРЕДЗАЩИТЫ 124