На сегодняшний день разработано достаточно много стойких блочных шифров. Практически все алгоритмы используют для преобразований определенный набор биективных (обратимых) математических преобразований Характерной особенностью блочных криптоалгоритмов является тот факт, что в ходе своей работы они производят преобразование блока входной информации фиксированной длины и получают результирующий блок того же объема, но недоступный для прочтения сторонним лицам, не владеющим ключом. Таким образом, схему работы блочного шифра можно описать функциями Z=EnCrypt(X,Key) и X=DeCrypt(Z,Key) Ключ Key является параметром блочного криптоалгоритма и представляет собой некоторый блок двоичной информации фиксированного размера. Исходный (X) и зашифрованный (Z) блоки данных также имеют фиксированную разрядность, равную между собой, но необязательно равную длине ключа. Блочные шифры являются основой, на которой реализованы практически все криптосистемы. Методика создания цепочек байт, зашифрованных блочными алгоритмами, позволяет шифровать пакеты информации неограниченной длины. Криптоалгоритм разрабатываемой программы является блочным шифром.
В качестве основного средства для разработки программного обеспечения была выбрана среда визуального программирования C++ BUILDER 6.
C++ BUILDER 6 – это комбинация нескольких важнейших технологий:
– Высокопроизводительный компилятор в машинный код;
– Объектно-ориентированная модель компонент;
– Визуальное (а, следовательно, и скоростное) построение приложений.
Компилятор, встроенный в C++ BUILDER 6, обеспечивает высокую производительность, необходимую для построения приложений. Этот компилятор в настоящее время является самым быстрым в мире. Он предлагает легкость разработки и быстрое время проверки готового программного блока, и в то же время обеспечивает качество кода. Кроме того, C++ BUILDER 6 обеспечивает быструю разработку без необходимости писать вставки на Си или ручного написания кода (хотя это возможно). В процессе построения приложения разработчик выбирает из палитры компонент готовые компоненты как художник, делающий крупные мазки кистью. Еще до компиляции он видит результаты своей работы - после подключения к источнику данных их можно видеть отображенными на форме, можно перемещаться по данным, представлять их в том или ином виде. В этом смысле проектирование в C++ BUILDER 6 мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции мы получаем код, который исполняется в 10 - 20 раз быстрее, чем то же самое, сделанное при помощи интерпретатора. Кроме того, компилятор компилятору рознь. В C++ BUILDER 6 компиляция производится непосредственно в родной машинный код. В то время как существуют компиляторы, превращающие программу в так называемый p-код, который затем интерпретируется виртуальной p-машиной. Это не может не сказаться на фактическом быстродействии готового приложения. Объектно-ориентированная модель программных компонент заключается в максимальном реиспользовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды C++ BUILDER 6. Никаких ограничений по типам объектов, которые могут создавать разработчики, не существует. Действительно, все в C++ BUILDER 6 написано на нем же, поэтому разработчики имеют доступ к тем же объектам и инструментам, которые использовались для создания среды разработки. В результате нет никакой разницы между объектами, поставляемыми BORLAND или третьими фирмами, и объектами, которые вы можете создать. В стандартную поставку C++ BUILDER 6 входят основные объекты, которые образуют удачно подобранную иерархию.
Требования к разрабатываемой программе:
1. Удобный графический пользовательский интерфейс (GUI)
2. Простота в обращении
3. Обеспечение шифрования всех типов файлов
4. Надежность функционирования
5. Невысокая стоимость
6. Способность к изменению и дополнению
7. Наличие справочной системы
2.4 Описание программы RCRYPTO
R CRYPTO – это криптографическая программа, предназначенная для шифрования файлов всех типов. «Сердцем» криптографической программы является криптоалгоритм. Разработанная криптографическая программа является завершенной комплексной моделью, способной производить двусторонние криптопреобразования над данными произвольного объема.
Программа R CRYPTO выполняет следующие функции:
– Шифрование файлов,
– Сжатие файлов,
– Добавление электронной цифровой подписи,
– Расшифровка зашифрованных файлов,
– Усиление защищенности данных,
– Облегчение работы с криптоалгоритмом со стороны человека,
– Обеспечение совместимости потока данных с другим программным обеспечением.
Программа R CRYPTO имеет два вида интерфейса: Классический вид и Интерфейс R CRYPTO. При первом запуске программы появляется окно с предложением выбора вида интерфейса. При первом использовании программы рекомендуется выбирать Классический вид, так как он наиболее приближен к стандартному интерфейсу программ под WINDOWS. В процессе работы программы вид интерфейса можно сменить в любой момент. Шифрование файлов осуществляется по оригинальному алгоритму с использованием симметричного ключа, который формируется на основании пароля, введенного пользователем. Минимальная длина пароля – 10 символов. В результате хеширования пароля ключ достигает необходимой длины. Алгоритм шифрования является блочным шифром, то есть информация шифруется блоками определенной длины (255 байт). Шифрование каждого последующего блока данных зависит от всех предыдущих. В процессе шифрования происходит также сжатие данных, что обеспечивает еще большую надежность шифрования, так как между зашифрованными блоками данных отсутствует корреляционная зависимость. Временная задержка в проверке пароля не позволяет злоумышленникам узнавать пароль методом полного перебора. Кроме того, к зашифрованному файлу добавляется электронная цифровая подпись, которая позволяет проверять целостность информации. Размер исходного файла дожжен быть не меньше 100 байт. Зашифрованный файл имеет расширение r_cr. Расшифровка зашифрованного файла возможна только при правильно введенном пароле, который использовался при шифровании этого файла. Экранные формы программы RCRYPTO представлены в приложении Г, фрагмент листинга программы представлен в приложении Д.
На первом этапе создания программы программист должен определить последовательность действий, которые необходимо выполнить, чтобы решить поставленную задачу, то есть разработать алгоритм. Алгоритм – это точное предписание, определяющее процесс перехода от исходных данных к результату.
Нужно понимать, что предписание считается алгоритмом, если оно обладает тремя следующими свойствами:
– Однозначностью,
– Массовостью,
– Результативностью.
Под однозначностью алгоритма понимается единственность толкования правил и порядка выполнения действий. Таким образом, алгоритм не должен оставлять место произволу при его выполнении. Массовость алгоритма означает возможность применения алгоритма для решения класса задач, предполагает его правильную работу при меняющихся в заданных пределах значениях исходных данных. Результативность алгоритма предполагает, что выполнение алгоритма должно приводить к получению определенного результата.
Алгоритм программы RCRYPTO состоит из следующих основных процедур: шифрование, расшифровка, проверка электронной цифровой подписи.
Алгоритм решения задачи может быть представлен в виде словесного описания или графически – в виде блок-схемы. Для разработки структуры программы удобно пользоваться записью алгоритма в виде блок-схемы (в англоязычной литературе используется термин flowchart). Для изображения основных алгоритмических структур и блоков на блок-схемах используют специальные графические символы. Они приведены на рисунке 2.2.
Рисунок 2.2 Обозначения, используемые в блок-схемах алгоритмов
Представление алгоритма в виде блок-схемы позволяет программисту уяснить последовательность действий, которые должны быть выполнены для решения задачи, убедиться в правильности понимания поставленной задачи. При программировании в среде C++ BUILDER 6 алгоритм решения задачи представляет собой совокупность алгоритмов процедур обработки событий. Блок-схема алгоритма программы приведена в приложении В.
Математическая модель программы RCRYPTO представляет собой набор математических и алгоритмических преобразований, производимых над данными, для достижения поставленной цели. Основной функцией является функция шифрования. Схему работы алгоритма шифрования можно описать функциями Z = EnCrypt (X, Key) и X = DeCrypt (Z, Key). Для преобразований алгоритм шифрования использует определенный набор биективных (обратимых) математических функций. В качестве биективной функции используется функция сложения. Ключ Key является параметром блочного криптоалгоритма и представляет собой некоторый блок двоичной информации фиксированного размера. Key получается на основе пароля, введенного пользователем. Криптоалгоритм является идеально стойким, если прочесть зашифрованный блок данных можно только перебрав все возможные ключи, до тех пор, пока сообщение не окажется осмысленным. Так как по теории вероятности искомый ключ будет найден с вероятностью 1 / 2 после перебора половины всех ключей, то на взлом идеально стойкого криптоалгоритма с ключом длины N потребуется в среднем 2N-1 проверок. Таким образом, в общем случае стойкость блочного шифра зависит только от длины ключа и возрастает экспоненциально с ее ростом. Кроме этого условия к идеально стойким криптоалгоритмам применяется еще одно очень важное требование, которому они должны обязательно соответствовать. При известных исходном и зашифрованном значениях блока ключ, которым произведено это преобразование, можно узнать также только полным перебором. Ситуации, в которых постороннему наблюдателю известна часть исходного текста, встречаются повсеместно. Это могут быть стандартные надписи в электронных бланках, фиксированные заголовки форматов файлов, довольно часто встречающиеся в тексте длинные слова или последовательности байт. В свете этой проблемы описанное выше требование не является ничем чрезмерным и также строго выполняется стойкими криптоалгоритмами, как и первое.