Особенности генерации ключей при реализации алгоритма шифрования: программная реализации
Автор: Иванов В.В., Пятин О.А.
Журнал: Теория и практика современной науки @modern-j
Рубрика: Основной раздел
Статья в выпуске: 6 (6), 2015 года.
Бесплатный доступ
Статья посвящена разработке алгоритма, в котором для генерации ключей человеческий фактор был минимальный.
Шифрование, защита информации, криптография, генерация ключей
Короткий адрес: https://sciup.org/140267021
IDR: 140267021
Текст научной статьи Особенности генерации ключей при реализации алгоритма шифрования: программная реализации
Основой большинства механизмов защиты информации является шифрование данных. Шифрование – это преобразование данных в нечитабельную форму при помощи ключей шифрования.
В настоящее время все развитые страны имеют свои стандарты шифрования.
При потоковом (симметрическом) шифровании каждый знак шифртекста является функцией значения и положения знака открытого текста. Знаками бывают биты, байты и редко — более крупные единицы текста. Этот вид шифрования реализуется на обоих концах линии связи с помощью одинаковых или почти одинаковых шифровальных устройств (шифраторов). Симметрическое шифрование является сейчас наиболее распространенным и представляет собой шифр замены. Заметим, что 25 лет назад асимметрических систем шифрования еще не было — все системы шифрования были симметрическими.
При блочном (асимметрическом) шифровании открытого текста разбивается на равные по длине блоки бит. К блокам применяется зависящая от ключа функция шифрования для преобразования их в блоки шифртекста такой же длины. Обычно блоки шифруются взбиванием (перестановкой).
Существует еще много блочных симметричных алгоритмов, таких как IDEA, AES, RC2, RC5, RC6, SkipJack, Blowfish, MISTY1 и др., а также поточных симметричных алгоритмов, таких как SEAL, WAKE, PIKE, GOAL, ORYX, ISAAC, Chameleon и др. Кроме RSA, существуют асимметричные алгоритмы шифрования DH, DSA, а также большой класс алгоритмов, использующих хэш-функцию: MD2, MD5, SHA, SHA-1, RIPEMD, MDC2, которые невозможно рассмотреть в рамках этой статьи из-за ограниченного объема. Все они могут быть выполнены как в программном, так и в аппаратном варианте.
Большинство современных блочных шифров используют сеть
Фейстеля в качестве основы. Альтернативой сети Фейстеля является подстановочно-перестановочная сеть.
Сеть Фе́йстеля (конструкция Фейстеля) — разновидность блочного шифра с определенной многократно повторяющейся (итерированной) структурой, называющейся ячейкой Фейстеля. При переходе от одной ячейки к другой меняется ключ, причём выбор ключа зависит от конкретного алгоритма. Операции шифрования и расшифрования на каждом этапе очень просты, и при определённой доработке совпадают, требуя только обратного порядка используемых ключей. Шифрование при помощи данной конструкции легко реализуются как на программном уровне, так и на аппаратном.
Рассмотрим случай, когда необходимо зашифровать некоторую информацию, представленную в двоичном виде в компьютерной памяти (например, файл) или электронике, как последовательность нулей и единиц. • Вся информация разбивается на блоки фиксированной длины. В случае если длина входного блока меньше, чем размер, который шифруется заданным алгоритмом, то блок удлиняется каким-либо способом. Как правило, длина блока является степенью двойки, например: 64 бита, 128 бит. Далее рассматрим операции происходящие только с одним блоком, так как с другими в процессе шифрования выполняются те же самые операции.
-
• Выбранный блок делится на два равных подблока — «левый» (L0) и «правый» (R0).
-
• «Левый подблок» L0 видоизменяется функцией f(L0,K0) в зависимости от раундового ключа K0, после чего он складывается по модулю 2 с «правым подблоком» R0.
-
• Результат сложения присваивается новому левому подблоку L1, который будет половиной входных данных для следующего раунда, а «левый подблок» L0 присваивается без изменений новому правому подблокуR1 (см. рис. 1), который будет другой половиной.
-
• После чего операция повторяется N-1 раз, при этом при переходе от одного этапа к другому меняются раундовые ключи (K0 на K1 и т. д.) по какому-либо математическому правилу, где N — количество раундов в заданном алгоритме.
Основным недостатком данной системы шифрования, как и многих других: здесь очень сильно значение при утечке информации играет человеческий фактор. Зная функцию F и ключи K можно дешифровать информацию. Так как эта функция и эти ключи разрабатывается людьми, следовательно, через них может произойти утечка конфиденциальной информации. Предлагаемый способ генерации ключей при реализации алгоритма шифрования позволяет свести к минимуму человеческий фактор.
В основе идеи создания данного алгоритма — шифровальная машина времен второй мировой “Enigma”103. Эни́гма (Enigma) — портативная шифровальная машина, использовавшаяся для шифрования секретных сообщений. Более точно, Энигма — целое семейство электромеханических роторных машин, применявшихся с 20-х годов XX века.

Шифрование

Расшифрование
Рис. 1.
Алгоритм работы при генерации ключа:
-
• Первоначально генерируем 1000 рандомных ключей от 0 до 999 в которых в рандомном порядке располагается символы ASCII-кода.
-
• После этого рандмно из 1000 выбирается 100 ключей, и расставляться в рандомном порядке. Данный порядок напрямую записывается в программный код запускного файла ключа.
-
• Происходит компиляция ключа (создание исполняемого файла). Создается 2 вида исполняемых файлов для ОС POSIX и Windows.
-
• После этого исходный файл ключа удаляется.
Алгоритм работы процесса шифрования:
-
• Операция шифрования начинается с первоначальных показателей: i=0, j=0, k=0 – что соответствует 1.
-
• Получаем ASCII код нового символа: (a[i]+s[j])/2 b – где, a[i] – это символ ключевой строки, s[j] – символ шифруемой строки.
-
• Далее ищется данный символ в k-том колесе.
-
• После того как символ найден (b[k][x]), происходит его кодирование и выбирается следующий после него x+1.
-
• Определяется адрес следующего колеса: k+ (int)(x-1).
-
• Дальше происходит переход на следующие символы строки i++ и j++.
-
• Операция повторяется для следующего символа.
Ниже приведена часть кода, реализующая предложенный алгоритм шифрования:
for (j = 0; j < s; j++ )
{ pch = ch2[0] = *pch;
ch2[1] = '\x00';
for (i = 0; i < 256; i++ )
{ if ( strcmp( ch2, str[roter][i]) == 0 )
{ ch3[j] = str[roter][i+1][0];
roter = ((int)(str[roter][i-1][0]))%99;
if ( roter < 0)
{ roter = roter * (-1);
}
}
}
}
Где roter - номер ключа от 0 до 99, ch2 - кодируемый символ, ch3 - это символ после кодировки, str[roter] [i] - позиция символа ch2 в ключе roter.
Основная проблема криптографии — трудность генерирования непредсказуемых двоичных последовательностей большой длины с применением короткого случайного ключа. Для ее решения используются генераторы двоичных псевдослучайных последовательностей.
В данной работе сделана попытка разработать алгоритм, в котором для генерации ключей человеческий фактор был минимальный. Во все времена главным источником утечки информации были люди. Люди всегда старались оберегать свою конфиденциальную информацию. То, что один человек смог защитить, другой всегда сможешь вскрыть.
Данный алгоритм не является идеальным алгоритмом шифрования и не претендует на звание алгоритма, который нельзя дешифровать. Основное преимущество данного алгоритма это отсутствие человеческого фактора при генерации ключей, а, следовательно, нет утечки информации. Даже если у человека будут нужные 1000 сгенерированных ключей, то нигде кроме внутренней структуры исполняемого файла нет данных, какие 100 из них используется и в каком порядке.
Список литературы Особенности генерации ключей при реализации алгоритма шифрования: программная реализации
- ГОСТ 28147-89. Система обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. - М.: Госстандарт СССР, 1989
- Петров А.А. Компьютерная безопасность. Криптографические методы защиты. - М.: ДМК, 2000. - 448 с.