Таким образом, на функцию стойкого блочного шифра Z = EnCrypt (X, Key) накладываются следующие условия:
1. Функция EnCrypt должна быть обратимой.
2. Не должно существовать иных методов прочтения сообщения X по известному блоку Z, кроме как полным перебором ключей Key.
3. Не должно существовать иных методов определения, каким ключом Key было произведено преобразование известного сообщения X в сообщение Z, кроме как полным перебором ключей.
Выполнение всех этих условий осуществляется следующим образом:
1. Во-первых, осуществляется хеширование пароля. Хеширование выполняет несколько функций. Для того чтобы не заставлять пользователя запоминать ключ – длинную последовательность цифр, был разработан метод преобразования строки символов любой длины (так называемого пароля) в блок байт заранее заданного размера (ключ). Для этой операции используется так называемая хеш-функция. Хеш-функцией называется такое математическое или алгоритмическое преобразование заданного блока данных, которое обладает следующими свойствами:
– Хеш-функция имеет бесконечную область определения,
– Хеш-функция имеет конечную область значений,
– Она необратима,
– Изменение входного потока информации на один бит меняет около половины всех бит выходного потока, то есть результата хеш-функции.
Эти свойства позволяют подавать на вход хеш-функции пароли, то есть текстовые строки произвольной длины на любом национальном языке.
В программе RCRYPTO хеширование пароля осуществляется следующим образом:
Сначала пароль, введенный пользователем, преобразуется в массив байт P [1 .. X].
Где P [1 .. X] – коды символов введенного пользователем пароля (кодировка ANSI – Windows-1251). Фрагмент таблицы символов ANSI представлен в таблице 2.1.
X – длина пароля (в символах).
Таблица 2.1 Фрагмент таблицы символов ANSI (Windows-1251)
Код символа | Символ | Код символа | Символ | Код символа | Символ |
32 | 58 | : | 123 | [ | |
33 | ! | 59 | ; | 124 | | |
34 | " | 60 | < | 125 | ] |
35 | # | 61 | = | 126 | ~ |
36 | $ | 62 | > | 127 | |
37 | % | 63 | ? | 192 | А |
38 | & | 64 | @ | … | … |
39 | ‘ | 65 | A | 223 | Я |
40 | ( | … | … | 224 | а |
41 | ) | 90 | Z | … | … |
42 | * | 91 | [ | 255 | я |
43 | + | 92 | \ | ||
44 | , | 93 | ] | ||
45 | - | 94 | ^ | ||
46 | . | 95 | _ | ||
47 | / | 96 | ‘ | ||
48 | 0 | 97 | a | ||
… | … | … | … | ||
57 | 9 | 122 | z |
Затем на основании пароля получается ключ:
K [1 .. 255] – ключ.
K [i] = (P [1] + P [2] + … + P [n]) + P [i], где i = 1 .. X (2.1)
Если X < 255, тогда производятся следующие преобразования:
K [X + 1 .. 255] = 114 (2.2)
114 – код символа «r»
Z = K [1] (2.3)
Если K [i] = Z,
то K [i] = K [i – 1] + Z, (2.4)
иначе Z = K [i], где i = 2 .. 255 (2.5)
2. Во-вторых, осуществляется архивация (сжатие данных). Архивация – это процесс представления информации в ином виде (перекодирования) с потенциальным уменьшением объема, требуемого для ее хранения. Подавляющее большинство современных форматов записи данных содержат их в виде, удобном для быстрого манипулирования, для удобного прочтения пользователями. При этом данные занимают объем больший, чем это действительно требуется для их хранения. Алгоритмы, которые устраняют избыточность записи данных, называются алгоритмами сжатия данных, или алгоритмами архивации. Вероятность взлома криптосистемы при наличии корреляции между блоками входной информации значительно выше, чем при отсутствии таковой. А алгоритмы сжатия данных по определению и имеют своей основной задачей устранение избыточности, то есть корреляции между данными во входном тексте.
Все алгоритмы сжатия данных качественно делятся на:
– Алгоритмы сжатия без потерь, при использовании которых данные на приемной восстанавливаются без малейших изменений,
– Алгоритмы сжатия с потерями, которые удаляют из потока данных информацию, незначительно влияющую на суть данных, либо вообще не воспринимаемую человеком (такие алгоритмы сейчас разработаны только для аудио- и видео-изображений).
В криптосистемах, естественно, используется только первая группа алгоритмов. В разрабатываемой криптографической программе используется оригинальный алгоритм сжатия, сущность которого заключается в следующем:
Из исходного файла считывается блок информации объемом 255 байт. Этот блок информации представляется в матрицы (таблица 2.2).
Таблица 2.2 Матрица блока исходной информации
Байт №1 | Байт №2 | … | Байт №255 |
M1,1 | M2,1 | … | M255,1 |
M1,2 | M2,2 | … | M255,2 |
M1,3 | M2,3 | … | M255,3 |
M1,4 | M2,4 | … | M255,4 |
M1,5 | M2,5 | … | M255,5 |
M1,6 | M2,6 | … | M255,6 |
M1,7 | M2,7 | … | M255,7 |
M1,8 | M2,8 | … | M255,8 |
Где Mi,j – бит информации.
Затем осуществляется попытка сжатия строк M1,j … M255,j.
Эти строки представляется в виде количества подряд идущих нулей (0) или единиц (1). Если полученная таким образом информация занимает объем больше 32 байт, тогда эта строка представляется в исходном виде. Если общий объем блока перекодированной информации превышает 255 байт, тогда весь исходный блок представляется в исходном виде без изменений. После осуществления всех этих преобразований происходит непосредственно шифрование информации.
3. Для преобразования информации алгоритм шифрования использует определенный набор биективных (обратимых) математических функций. В качестве биективной функции в разрабатываемой программе используется функция сложения.
Функция EnCrypt выглядит следующим образом:
Z [i] = S [i] + K [j] + Z [i – 1], (2.6)
Где Z – зашифрованный байт,
S – исходный байт,
K – ключ (j = 1 .. 255).
Целостность информации – это гарантия того, что информация сейчас существует в ее исходном виде, то есть при ее хранении или передаче не было произведено несанкционированных изменений. Нарушение этой категории называется фальсификацией сообщения. Для решения этой проблемы в программе RCRYPTO используется электронная цифровая подпись. На основе исходного файла вычисляется хеш-функция – это число, которое более или менее уникально характеризует исходный файл. В принципе, можно найти другой текст, который дает то же самое значение хеш-функции, но изменить в исходном файле десять-двадцать байт так, чтобы текст остался полностью осмысленным, да еще и изменился в выгодную нам сторону (например, уменьшил сумму к оплате в два раза) – чрезвычайно сложно. Электронная подпись состоит из 10 байт. Структура используемой электронной цифровой подписи представлена в таблице 2.3.
Таблица 2.3 Структура электронной цифровой подписи
S12 | S22 | ||||||
S13 | S23 | S33 | |||||
S15 | S25 | S35 | S45 | S55 |
S12 – сумма первой половины всех байт исходного файла (1-ый байт электронной цифровой подписи),
S22 – сумма второй половины всех байт исходного файла (2-ой байт электронной цифровой подписи),
S13 – сумма первой 1 / 3 всех байт исходного файла (3-ий байт электронной цифровой подписи),
S23 – сумма второй 1 / 3 всех байт исходного файла (4-ый байт электронной цифровой подписи),
S33 – сумма третьей 1 / 3 всех байт исходного файла (5-ый байт электронной цифровой подписи),
S15 – сумма первой 1 / 5 всех байт исходного файла (6-ой байт электронной цифровой подписи),
S25 – сумма второй 1 / 5 всех байт исходного файла (7-ой байт электронной цифровой подписи),
S35 – сумма третьей 1 / 5 всех байт исходного файла (8-ой байт электронной цифровой подписи),
S45 – сумма четвертой 1 / 5 всех байт исходного файла (9-ый байт электронной цифровой подписи),
S55 – сумма пятой 1 / 5 всех байт исходного файла (10-ый байт электронной цифровой подписи).
S12 + S22 = S13 + S23 + S33 = S15 + S25 + S35 + S45 + S55
При расчете хеш-суммы учитывается также имя исходного файла. После окончания шифрования электронная цифровая подпись добавляется в начало зашифрованного файла.
3. Расчет экономической эффективности проекта
Исходные данные для расчета получены на кафедре АСУ. Для расчета экономической эффективности использованы данные из прайс-листа от «Ферроком». Исходные данные для расчета затрат на разработку и обслуживание программного обеспечения приведены в таблице 3.1. Исходные данные для расчета затрат времени на разработку программного обеспечения приведены в таблице 3.2.