ПРАКТИЧЕСКАЯ КРИПТОГРАФИЯ АЛГОРИТМЫ И ИХ ПРОГРАММИРОВАНИЕ

       

Архитектура разбалансированной сети Файстеля


В большинстве шифров с архитектурой сети Файстеля используемая функция F в течение каждого раунда зависит только от одного из подключей, вырабатываемых из основного ключа шифра. Это свойство на самом деле не является основополагающим или положительно влияющим на стойкость шифра - в шифре Khufru, например, параметры функции F изменяются после зашифрования каждого следующего символа. Сеть с такого рода зависимостью функции гаммирования называют гетерогенной и гомогенной в противном случае. Применение гетерогенных сетей может значительно улучшить характеристики шифра, поскольку неравномерное изменение внутренних свойств сети в пределах допустимых границ делает изучение свойств шифра достаточно затруднительным занятием. Меняя размеры половинок и их влияние на выход шифра, можно добиться впечатляющих статистических результатов, поскольку существует очевидная зависимость не только между сложностью функции гаммирования, но и структурой используемой сети Файстеля.

Целью построения блочных шифров является не только создание стойкого алгоритма защиты информации, но и такого, чтобы его реализация была достаточно дешевой, а время работы как можно более меньшим. Именно поэтому, легко реализуемые шифры на базе гомогенных сбалансированных сетей Файстеля применяются гораздо чаще и считаются своего рода "панацеей". Однако это вовсе не означает, что они являются более криптостойкими и надежными.

Естественным путем увеличения сложности анализа сетей Файстеля является следующий метод (кстати, использованный и в алгоритме в соответствии с ГОСТ 28147-89 - отечественным стандартом криптографического преобразования данных). Для того чтобы распространить влияние функции F в одном раунде на выход и функцию следующего раунда, к выходному значению F прибавляют по некоторому модулю значение итерационного подключа для текущего раунда и затем полученное значение подают на вход функции F следующего раунда шифрования. Такой способ организации сети ставит выходы последующих раундов шифров в прямую зависимость от предыдущих, что способствует организации лавинного эффекта и полноты.

Примером практической реализации сбалансированной гомогенной сети Файстеля может служить следующий исходный текст (cм. листинг 4.3):

uint16_t F_Gamma(uint16_t data_half, uin8_t key) { // используем какие-либо сложные преобразования // но желательно такие, чтобы их выполнение было как можно более быстрым return (data_half ^ ((uint16_t) key * 0xABCD1234); } uint32_t Feistel_Network(uint32_t data, uint8_t key, int rounds) { uint16_t left, right, swap; left = data & 0xFFFF; // делим данные (размер 32 бита) right = (data >> 16) & 0xFFFF; // на половинки по 16 битов for (int i = 0; i < rounds; i++) { swap = left ^ F_Gamma(right, key); // готовим левую половинку left = right; // и меняем местами левую и правую right = swap; // половинки } return (left | ((uint32_t) right << 16)); }



Содержание раздела