Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
namefix.doc
Скачиваний:
18
Добавлен:
07.12.2018
Размер:
280.06 Кб
Скачать

1.7.3 Сеть Файстеля (Feistel’s network)

1970-е годы особенно обострилась проблема защиты информации в связи с развитием электронных сетей. Особенно остро эту проблему ощущали компании, сфера деятельности которых так или иначе была связанна с финансами. На фоне всего этого на арену исследований в области защиты информации вышла всемирно известная компания International Business Machines (IBM). IBM привлекла к сотрудничеству университеты, тесно сотрудничавшие в то время с военными, которые являлись единственным наиболее полным и достоверным источником информации по данному вопросу. Возглавил эти исследования доктор Хорст Файстель, который до этого момента сотрудничал с Клодом Шенноном и успел вдохновиться его гениальными идеями.

Необходимость использования обратимых преобразований в качестве основы для построения композиционных шифров, как уже упоминалось, создает определенные трудности:

  • Построение обратимых, криптографически стойких преобразований является трудоемкой задачей.

  • На практике, свойство обратимости навязывает использование неэффективных алгоритмов преобразования (существенная потеря в скорости).

Разработки Хорста Файстеля, воплотили в жизнь новую оригинальную архитектуру построения симметричных шифров, основывающуюся на необратимых преобразованиях, что позволяло обойти вышеописанные трудности. Эта архитектура впоследствии была названа архитектурой Файстеля (сетью Файстеля). Позднее, на основе этой архитектуры, был создан первый открытый блочный шифр – Lucifer, на длительное время взбудораживший криптографическую общественность.

Изначально определен размер блока, шифруемый за один раунд, который делят на две части. Если размеры этих частей равны, то такая архитектура называется сбалансированной сетью Файстеля. В противном случае – разбалансированной сетью Файстеля.

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

На схемах буквами Li Ri обозначены левая и правая части входа i-ого раунда шифрования. Функция гаммирования Fi (может быть разной для каждого раунда) использует правую часть входа и последовательность подключей ki, полученную путем разворачивания секретного ключа, для выработки гамма-последовательности. После этого левая часть просто суммируется с полученной гаммой по модулю. Затем левая и правая части меняются местами, на чем и заканчивается один цикл шифрования. Так как за один раунд обрабатывается только одна часть входа, а другая лишь меняет свое местоположение, то необходимо, чтоб количество раундов шифрования было кратно двум. Использование операции xor преобразует алгоритм в технически простой метод гаммирования. Поэтому именно выработка гаммы является критической областью, которой необходимо уделить большое количество внимания.

Li+1 = Ri

Ri+1 = Li+1 F(Ri, ki)

Единственное отличие разбалансированной сети Файстеля от сбалансированной то, что функция гаммирования может зависеть не от всех битов правой части, либо по-разному зависеть от нее на каждом раунде, ввиду несимметричного деления входной последовательности. Можно сказать, что сбалансированная сеть является частным случаем разбалансированной.

Если функция F в течение каждого раунда зависит лишь от единственного подключа, полученного развертыванием секретного ключа, то сеть с такой функцией гаммирования называют гетерогенной. В противном случае, если параметры F не меняются от раунда к раунду, сеть называют гомогенной. Гетерогенные сети способны на порядок улучшить криптостойкость шифра, однако стоит помнить, что при создании шифра необходимо учитывать следующие критерии:

  • Стойкость.

  • Цена реализации.

  • Скорость.

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

#define ROUNDS 8

uint8 *F(uint32 k, uint32 part)

{

return((part * 0xABCDEF ) ^ (k * 0x12345));

}

uint8 *Feistel_network (uint32 k, uint32 *text)

{

uint32 L, R, Temp;

R = text[0];

L = text[1];

for ( int i = 0; i < ROUNDS; i++ )

{

Temp = R;

R = F(R, k) ^ L;

L = Temp;

}

text[0] = L;

text[1] = R;

}

uint8 *Feistel_network_fast(uint32 k, uint32 *text)

{

uint32 L, R;

R = text[0];

L = text[1];

L ^= (R * 0xABCDEF ) ^ (k * 0x12345);

R ^= (L * 0xABCDEF ) ^ (k * 0x12345);

L ^= (R * 0xABCDEF ) ^ (k * 0x12345);

R ^= (L * 0xABCDEF ) ^ (k * 0x12345);

L ^= (R * 0xABCDEF ) ^ (k * 0x12345);

R ^= (L * 0xABCDEF ) ^ (k * 0x12345);

L ^= (R * 0xABCDEF ) ^ (k * 0x12345);

R ^= (L * 0xABCDEF ) ^ (k * 0x12345);

text[0] = L;

text[1] = R;

}

Листинг 1.3 сбалансированная сеть Файстеля

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]