
- •Введение
- •1.Тематика курсового проектирования
- •2. Объем и оформление курсового проекта, требования к оформлению
- •2.2. Пз должна содержать:
- •3. Содержание основной части пояснительной записки
- •4. Содержание практической части
- •Содержание графической части
- •График выполнения работы
- •Перечень алгоритмов шифрования и их характеристик
4. Содержание практической части
В практической части студентам необходимо реализовать шаговую функцию хеширования в программной реализации. Так же необходимо представить её структуру. Структура программы представляет собой схему, в которой обозначены все поля и связи между ними.
При описании приложения необходимо указать цель автоматизации данной области применения и задачи, которые решаются при разработке программы, представить структурную и функциональную схему программы и их описание.
Структурная схема представляет собой совокупность элементарных звеньев объекта и связей между ними. Она предназначена для отражения общей структуры программы, то есть его основных блоков, узлов, частей и главных связей между ними. Из структурной схемы должно быть понятно, зачем нужна данная программа и что она делает в основных режимах работы, как взаимодействуют её части. Обозначение структурной схемы могут быть достаточно свободными, хотя некоторые общепринятые правил необходимо придерживаться. Элементарные звенья изображаются прямоугольниками, а связи между ними – сплошными линиями со стрелками, показывающими направление действия звена.
Функциональная схема дает возможность понять всю логику работы программы, все её отличия от других подобных программ. Что касается обозначений, используемых на функциональных схемах, то они не стандартизованы. При разработке функциональных схем пользуются теми же правилами, что и при разработке структурных.
В данном КП студентам необходимо представить в виде хешфункции какое-либо сообщение, введенное с клавиатуры в поле программы. Далее пользователь должен ввести пароль, и уже с помощью этого пароля сообщение преобразуется в хешфукцию, которая в свою очередь так же должна выводиться в отдельном поле программы.
Пароль является секретной информацией. Пароль не хранится и не передаётся в открытом виде
Хеширование (иногда хэширование, англ. hashing) — преобразование входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или дайджестом сообщения.
Хеширование применяется для сравнения данных: если у двух массивов (сообщений) хеш-коды разные, массивы гарантированно различаются; если одинаковые – массивы, скорее всего, одинаковы. В общем случае однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов входного массива; существует множество массивов, дающих одинаковые хеш-коды — так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций.
Существует множество алгоритмов хеширования с различными характеристиками (разрядность, вычислительная сложность, криптостойкость и т. п.). Выбор той или иной хеш-функции определяется спецификой решаемой задачи. Простейшими примером хеш-функции может служить контрольная сумма.
Таблица 1. Варианты шаговых функций сжатия
|
|
|
|
|
|
|
|
|
|
|
|
Для реализации в КП предлагаются хэш-функции на основе блочных симметричных алгоритмов шифрования. Перечень их шаговых функций сжатия указан в таб. 1.
В данной таблице E – обозначает криптографическое преобразование, т.е. процедуру шифрования. Алгоритмы шифрования, разрешённые для реализации в КР, приведены в прил. 3. X – блок хэш-функции. Y – инициализирующий вектор.
Хэш-функция является многоитерационным действием. Для вычисления хэш-кода, по какому либо сообщению, его разбивают на блоки равной длины (X). Затем последовательно над каждым блоком выполняются действия, описанные в шаговой функции сжатия.
Например, вычисление хэш-кода для шаговой функции сжатия, представленной в левой верхней ячейке таб. 1, происходит следующим образом. Вначале текст сообщения, по которому вычисляется хэш, разбивается на блоки одинаковой длины. Поскольку в курсовой работе представлены хэш-функции на основе блочных алгоритмов шифрования, то длина блока хэш-функции должна быть равна длине блока шифра. Как правило, длина блока равна 64 или 128 бит.
Затем блок шифруется соответствующим алгоритмом, причём в качестве ключа используется Y. Y – является инициализирующим вектором. Для первого блока это будет пароль пользователя.
Последним действием необходимо произвести побитовое сложение по модулю 2, т.е. операцию XOR, исходного блока текста X и результата шифрования. Затем перейти к обработке следующего блока. Действия над вторым и последующими блоками ничем не отличаются от действий над первым. При этом в качестве Y, т.е. в качестве инициализирующего вектора, используется результат действий над первым, т.е. предыдущим блоком.
Функции сжатия, представленные во втором столбце таб. 1, отличаются тем, что в качестве ключа шифрования используется блок хэшируемого текста (X), а шифруется всегда инициализирующий вектор (Y).
При реализации программы, хэш-функция может потребоваться в трёх случаях – при регистрации или перерегистрации пользователя, при идентификации пользователя и при выработке хэш-кода по строке журнала безопасности. Во всех случаях, при шаговой функции свёртки над первым блоком, необходимо использовать пароль пользователя. Пароль пользователя рассматривается, как истинная случайная последовательность. Причём он должен быть такой же длины, как блок хэш-функции или ключ шифрования используемого алгоритма шифрования, т.е. 64, 128, 256 и т.д. бит. Такую последовательность можно получить, введя с клавиатуры не менее 8, 16, 32 и т.д. символов. Но такие пароли труднозапоминаемы. А пароль длиной 32 символа практически запомнить нельзя. С другой стороны, пароли меньшей длины снижают стойкость пароля.
Частично эту проблему можно решить, используя технологию “подсаливания”. Данная технология используется для шифрования каких либо сообщений. Суть этой технологии сводится к следующему: пользователь вводит короткий “пароль”, используемый в качестве ключа шифрования. Недостающие символы берутся из псевдослучайной последовательности, длиною равной длине ключа. Затем последовательность пристыковывается к сообщению.
В КП требуется реализовать следующий механизм дополнения пароля.
– Во-первых, принять у пользователя пароль.
– Во-вторых, сгенерировать псевдослучайную последовательность (ПСП).
– В-третьих, дополнить пароль символами последовательности.
– В-четвёртых, выработать по полученной строке хэш-код.
Данная процедура должна удовлетворять одному очень важному условию: каждый раз при введении одного и того же пароля, генерировать одну и ту же строку. Для соблюдения данного условия необходимо разработать процедуру, которая контролировала ввод пароля с клавиатуры: убирала “лишние” пробелы, контролировать кодировку и т.п.
В качестве генератора псевдослучайной последовательности можно использовать алгоритм шифрования, а введённый пользователем пароль – в качестве ключа шифрования, шифруя одно и то же сообщение – инициализирующей вектор. Выработка ПСП будет выглядеть следующим образом (рис. 1).
П
ервым
действием пароль пользователя, введённый
с клавиатуры, дополняется нулями до
длины ключа шифрования. Далее производится
шифрование инициализирующего вектора.
В качестве вектора можно использовать
любую константу. В принципе, допускается
использовать в качестве константы
последовательность “0000000…” или
“111111…”. Но рекомендуется использовать
какие-нибудь числа. Например, первые
биты числа “π”
или “e”.
В конце концов, данную константу можно
задать самому, например последовательностью
“01010101…”. Главное требование к этому
числу, в данном случае, – оно ни когда
не должен меняться.
После шифрования образуется псевдослучайная последовательность длиной равной длине блока хэш-функции. Эту последовательность и надо применять для дополнения первоначального пароля, начиная с её первого символа.
Полученная строка (“пароль” + “символы ПСП”) является дополненным паролем пользователя. По ней вырабатывается хэш-код, и выводится в поле программы.
Выработка хэш-функции по введенному сообщению является более простой операцией. Все данные из поля необходимо конкатенировать. Если получившаяся строка не кратна длине блока хэш-функции или короче его, то данную строку дополняют “0”. Далее по полученной строке вырабатывается хэш-код, в соответствии с выбранной шаговой функцией сжатия. Пароль пользователя используется либо как ключ шифрования, либо как инициализирующий вектор. Это зависит от выбранной шаговой функции свёртки. Необходимо заметить, что в данной хэш-функции используется уже дополненный пароль пользователя. Т.е. после проведения успешной процедуры шифрования дополненный пароль необходимо сохранять на протяжении всего сеанса работы с программой.
В пояснительной записке КП, при описании программы функции хеширования необходимо: описать алгоритм шифрования, реализацию шаговой функции сжатия.
Последняя глава ПЗ должна быть посвящена методике работы с программой. Т.е. эта глава является пользовательской инструкцией.