FEAL: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Добавленен пункт история развития технологии. Переработан раздел описания алгоритма шифрования
Строка 10: Строка 10:
|тип = [[Сеть Фейстеля]]
|тип = [[Сеть Фейстеля]]
}}
}}
'''FEAL''' — [[блочный шифр]], предложенный Акихиро Симидзу и Сёдзи Миягути.
'''FEAL''' (англ. Fast data Encipherment ALgorithm) — [[блочный шифр]], разработанный Акихиро Симидзу и Сёдзи Миягути — сотрудниками компании NTT.


В нём используются 64-битовый блок и 64-битовый ключ. Его идея состоит и в том, чтобы создать [[алгоритм]], подобный [[DES]], но с более сильной функцией этапа. Используя меньше этапов, этот алгоритм мог бы работать быстрее. К несчастью, действительность оказалась далека от целей проекта.
В нём используются 64-битовый блок и 64-битовый ключ. Его идея состоит и в том, чтобы создать [[алгоритм]], подобный [[DES]], но с более сильной функцией этапа. Используя меньше этапов, этот алгоритм мог бы работать быстрее. К несчастью, действительность оказалась далека от целей проекта.

== История ==
Опубликованный в 1987 году Акихиро Симидзу и Сёдзи Миягути блочный шифр FEAL был разработан с целью повысить скорость шифрования без ухудшения надежности шифра, по сравнению с [[DES]]. Первоначально алгоритм использовал блоки размером 64 бита, ключ размером 64 бита и 4 раунда шифрования. Однако, уже в 1988 году была опубликована работа Берта ден Боера<ref>{{Статья|автор=Bert den Boer|заглавие=Cryptanalysis of F.E.A.L.|ссылка=http://link.springer.com/chapter/10.1007/3-540-45961-8_27|язык=en|издание=SpringerLink|издательство=Springer Berlin Heidelberg|год=1988-05-25|страницы=293–299|isbn=3540459618|doi=10.1007/3-540-45961-8_27}}</ref>, доказывающая достаточность владения 10000 шифротекстов для проведения успешной [[Атака на основе подобранного открытого текста|атаки на основе подобранного открытого текста]]. К шифру FEAL одному из первых был применен [[линейный криптоанализ]]. В том числе в 1992 году [[Митсуру Мацуи]] и [[Ацухиро Ямагиси]] доказали<ref>{{Статья|автор=Mitsuru Matsui, Atsuhiro Yamagishi|заглавие=A New Method for Known Plaintext Attack of FEAL Cipher|ссылка=http://link.springer.com/chapter/10.1007/3-540-47555-9_7|язык=en|издание=SpringerLink|издательство=Springer Berlin Heidelberg|год=1992-05-24|страницы=81–91|isbn=3540475559|doi=10.1007/3-540-47555-9_7}}</ref>, что достаточно узнать 5 шифротекстов для проведения успешной атаки.

Для борьбы с обнаруженными уязвимостями создатели удвоили число раундов шифрования, опубликовав стандарт FEAL-8. Однако, уже в 1990 году [[Генри Гилберт]] уязвимость и этого шифра перед [[Атака на основе подобранного открытого текста|атакой на основе подобранного открытого текста]]<ref>{{Статья|автор=Henri Gilbert, Guy Chassé|заглавие=A Statistical Attack of the FEAL-8 Cryptosystem|ссылка=http://link.springer.com/chapter/10.1007/3-540-38424-3_2|язык=en|издание=SpringerLink|издательство=Springer Berlin Heidelberg|год=1990-08-11|страницы=22–33|isbn=3540384243|doi=10.1007/3-540-38424-3_2&token2=exp=1479924911~acl=/static/pdf/350/chp%253a10.1007%252f3-540-38424-3_2.pdf?originurl=http%3a%2f%2flink.springer.com%2fchapter%2f10.1007%2f3-540-38424-3_2*~hmac=8f021e4e3f1ff54f8b0f4712718f35cb6a958b57e642315e37a66bfb9ac73861}}</ref>. Далее в 1992 году [[Митсуру Матсуи]] и [[Ацухиро Ямагиси]] (Mitsuru Matsui and Atsuhiro Yamagishi) описали<ref>{{Статья|автор=Mitsuru Matsui, Atsuhiro Yamagishi|заглавие=A New Method for Known Plaintext Attack of FEAL Cipher|ссылка=http://link.springer.com/chapter/10.1007/3-540-47555-9_7|язык=en|издание=SpringerLink|издательство=Springer Berlin Heidelberg|год=1992-05-24|страницы=81–91|isbn=3540475559|doi=10.1007/3-540-47555-9_7}}</ref> [[Атака на основе открытых текстов|атаку на основе открытых текстов,]] требующую <math>2^{15}</math> известных шифротекстов.

В связи с большим числом успешных атак, разработчиками было принято решение еще усложнить шифр. А именно, в 1990 году был представлен FEAL-N, где N - произвольное четное число раундов шифрования, и представлен FEAL-NX, где X (от англ. extended) обозначает использование расширенного до 128 бит ключа шифрования. Однако данное нововведение помогло лишь частично. В 1991 году [[Бихам, Эли|Эли Бихам]] и [[Шамир, Ади|Ади Шамир]] (Eli Biham and Adi Shamir), используя методы [[Дифференциальный криптоанализ|дифференциального криптоанализа]], показали<ref>{{Статья|автор=Eli Biham, Adi Shamir|заглавие=Differential Cryptanalysis of Feal and N-Hash|ссылка=http://link.springer.com/chapter/10.1007/3-540-46416-6_1|язык=en|издание=SpringerLink|издательство=Springer Berlin Heidelberg|год=1991-04-08|страницы=1–16|isbn=3540464166|doi=10.1007/3-540-46416-6_1}}</ref> возможность взлома шифра с числом раундов <math>N \leq 31</math> быстрее, чем полным перебором.

Тем не менее, благодаря интенсивности исследования алгоритма шифрования сообществом, были доказаны границы уязвимости шифра перед линейным и дифференциальным криптоанализом. Устойчивость алгоритма с числом раундов большим 26 к линейному криптоанализу показали в своей работе Шихо Мораи, Казумаро Аоки и Казуо Охта (Shiho Moriai, Kazumaro Aoki, and Kazuo Ohta)<ref>{{Статья|автор=Kazuo Ohta, Shiho Moriai, Kazumaro Aoki|заглавие=Improving the Search Algorithm for the Best Linear Expression|ссылка=http://dl.acm.org/citation.cfm?id=646760.705999|издание=Proceedings of the 15th Annual International Cryptology Conference on Advances in Cryptology|место=London, UK, UK|издательство=Springer-Verlag|год=1995-01-01|страницы=157–170|isbn=3540602216}}</ref>, а в работе Казумаро Аоки, Кунио Кобаяси и Шихо Мораи (Kazumaro Aoki, Kunio Kobayashi, and Shiho Moriai) была доказана невозможность применить дифференциальный криптоанализ к алгоритму, использующему больше 32 раундов шифрования.<ref>{{Статья|автор=Kazumaro Aoki, Kunio Kobayashi, Shiho Moriai|заглавие=Best Differential Characteristic Search of FEAL|ссылка=http://dl.acm.org/citation.cfm?id=647932.740744|издание=Proceedings of the 4th International Workshop on Fast Software Encryption|место=London, UK, UK|издательство=Springer-Verlag|год=1997-01-01|страницы=41–53|isbn=3540632476}}</ref>


== Описание ==
== Описание ==
В качестве входа процесса шифрования в алгоритме FEAL-NX используется 64-битовый блок открытого текста. Процесс шифрования разбит на 3 стадии.
В качестве входа процесса шифрования используется 64-битовый блок открытого текста. Сначала блок данных подвергается операции XOR с 64 битами ключа. Затем блок данных расщепляется на левую и правую половины. Объединение левой и правой половин с помощью XOR образует новую правую половину. Левая половина и новая правая половина проходят через N этапов (первоначально 4). На каждом этапе половина объединяется с помощью '''функции F''' с 16 битами ключа и с помощью XOR — с левой половиной, создавая новую правую половину. Исходная правая половина (на начало этапа) становится новой левой половиной. После N этапов (левая и правая половины не переставляются после N-го этапа) левая половина снова объединяется с помощью XOR с правой половиной, образуя новую правую половину, затем левая и правая объединяются вместе в 64-битовое целое. Блок данных объединяется с помощью XOR с другими 64 битами ключа и алгоритм завершается.
# Предобработка
# Итеративное вычисление
# Постобработка
Кроме того, описан процесс генерации раундовых ключей, с которого и начинается шифрование, а также функции <math>S_0, \; S_1,\; F, \; F_k</math>, с помощью которых и производятся преобразования.


Определим (A,B) - операцию конкатенации двух последовательностей бит.
=== Функция F ===
[[Файл:FEAL InfoBox Diagram.png|thumb]]
Функция F берёт 32 бита данных и 16 битов ключа и смешивает их вместе. Сначала блок данных разбивается на 8-битовые кусочки, которые затем объединяются с помощью XOR и заменяют друг друга.


Определим <math>\phi</math> — нулевой блок длины 32 бита.

=== Функция S ===
<math>S_0(a,b)</math> = циклический сдвиг влево на 2 бита <math>((a+b)\mod{256})</math>
<math>S_0(a,b)</math> = циклический сдвиг влево на 2 бита <math>((a+b)\mod{256})</math>


<math>S_1(a,b)</math> = циклический сдвиг влево на 2 бита <math>((a+b+1)\mod{256})</math>
<math>S_1(a,b)</math> = циклический сдвиг влево на 2 бита <math>((a+b+1)\mod{256})</math>


=== Функция F ===
Тот же алгоритм может быть использован для дешифрования. Единственным отличием является то, что при дешифровании порядок использования частей ключа меняется на обратный.
[[Файл:FEAL InfoBox Diagram.png|thumb|286x286пкс]]Функция F берёт 32 бита данных и 16 битов ключа и смешивает их вместе.
# <math>F=F(\alpha, \beta)=(F_0, F_1, F_2, F_3)</math>
# <math>\alpha=(\alpha_0, \alpha_1, \alpha_2, \alpha_3); \; \beta=(\beta_0,\beta_1)</math>
# <math>F_1=\alpha_1 \oplus \beta_0</math>
# <math>F_2=\alpha_2 \oplus \beta_1</math>
# <math>F_1=F_1 \oplus \alpha_0</math>
# <math>F_2=F_2 \oplus \alpha_3</math>
# <math>F_1=S_1(F_1, F_2)</math>
# <math>F_2=S_0(F_2, F_1)</math>
# <math>F_0=S_0(\alpha_0, F_1)</math>
# <math>F_3=S_1(\alpha_3, F_2)</math>


=== Генерация ключа ===
=== Функция <math>F_k</math> ===
Функция <math>F_k</math> работает с двумя 32 битовыми словами.
# <math>F_k=F_k(\alpha, \beta)=(F_{k_0}, F_{k_1}, F_{k_2}, F_{k_3})</math>
# <math>\alpha=(\alpha_0, \alpha_1, \alpha_2, \alpha_3); \; \beta=(\beta_0,\beta_1,\beta_2,\beta_3)</math>
# <math>F_{k_1}=\alpha_1 \oplus \alpha_0</math>
# <math>F_{k_2}=\alpha_2 \oplus \alpha_3</math>
# <math>F_{k_1}=S_1(F_{k_1}, (F_{k_2} \oplus \beta_0))</math>
# <math>F_{k_2}=S_0(F_{k_2}, (F_{k_1} \oplus \beta_1))</math>
# <math>F_{k_0}=S_0(\alpha_0, (F_{k_1} \oplus \beta_2))</math>
# <math>F_{k_3}=S_1(\alpha_3, (F_{k_2} \oplus \beta_3))</math>


=== Генерация раундовых ключей ===
Сначала 64-битовый ключ делится на две половины, к которым применяются операции XOR и функции <math>f_k</math>.
В результате генерации раундовых ключей, из полученного на вход ключа длиной 128 бит получается набор из N+8 раундовых ключей <math>K_i</math>, длиной 16 бит каждый. Данный результат получается в результате следующего алгоритма.
# Разделение входного ключа на левый и правый ключ: <math>K=(K_L,K_R)</math>, они имеют длину 64 бита.
# Обработка ключа <math>K_R=(K_{R1}, K_{R2})</math>
# Введение временной переменной <math>Q_r</math> для <math>1 \leq r \leq \frac{N}{2}+4</math>:
#* <math>Q_r = K_{R1} \oplus K_{R2},\;r=3i-2,\; i \in \mathbb{N}</math>
#* <math>Q_r = K_{R1},\;r=3i-1,\; i \in \mathbb{N}</math>
#* <math>Q_r = K_{R2},\;r=3i-1,\; i \in \mathbb{N}</math>
# Обработка ключа <math>K_L=(A_0,B_0)</math>
# Введение временной переменной <math>D_0 = \phi</math>
# Последовательное вычисление <math>K_i</math>
## <math>D_r = A_{r-1}</math>
## <math>A_r = B_{r-1}</math>
## <math>B_r = F_k(A_{r-1}, (B_{r-q} \oplus D_{r-1}) \oplus Q_{r}))=(B_{r_0},B_{r_1},B_{r_2},B_{r_3})</math>
## <math>K_{2(r-1)} = (B_{r_0}, B_{r_1})</math>
## <math>K_{2(r-1)+1} = (B_{r_2}, B_{r_3})</math>


=== Предобработка ===
Функция <math>f_k</math>: два 32-битовых входа разбиваются на 8-битовые блоки.
На начальной стадии блок данных <math>P</math> готовится к итеративной процедуре шифрования.
Затем в алгоритме шифрования-дешифрования используются 16-битовые блоки ключа.
# <math>P=(L_0, R_0)</math>
# <math>(L_0, R_0) = (L_{0},R_{0}) \oplus (K_N, K_{N+1}, K_{N+2},K_{N+3})</math>
# <math>(L_0, R_0) = (L_{0},R_{0}) \oplus (\phi, L_0)</math>

=== Итеративная обработка ===
На этой стадии с блоком данных производится N раундов перемешивания битов по следующему алгоритму.
# <math>R_r=L_{r-1} \oplus F(R_{r-1}, K_{r-1})</math>
# <math>L_r = R_{r-1}</math>

=== Постобработка ===
Задача этой стадии - подготовить почти готовый шифротекст к выдаче.
# <math>P=(R_N, L_N)</math>
# <math>P=P \oplus (\phi, R_N)</math>
# <math>P=P \oplus (K_{N+4}, K_{N+5}, K_{N+6}, K_{N+7})</math>
Тот же алгоритм может быть использован для дешифрования. Единственным отличием является то, что при дешифровании порядок использования частей ключа меняется на обратный.


== Источники ==
== Источники ==
Строка 49: Строка 113:


* [http://cartman-cipher.narod.ru/mirror/fealnx.c Пример реализации FEAL-NX на языке C]
* [http://cartman-cipher.narod.ru/mirror/fealnx.c Пример реализации FEAL-NX на языке C]

{{Симметричные криптоалгоритмы}}
{{rq|wikify}}


[[Категория:Сеть Фейстеля]]
[[Категория:Сеть Фейстеля]]

<references />{{rq|wikify}}

{{Симметричные криптоалгоритмы}}

Версия от 20:35, 24 ноября 2016

FEAL
Создатель Акихиро Симидзу и Сёдзи Миягути (NTT)
Опубликован FEAL-4 в 1987; FEAL-N/NX в 1990
Размер ключа 64 бит (FEAL), 128 бит (FEAL-NX)
Размер блока 64 бит
Число раундов изначально 4, потом 8 и потом переменное количество (рекомендуемое — 32)
Тип Сеть Фейстеля

FEAL (англ. Fast data Encipherment ALgorithm) — блочный шифр, разработанный Акихиро Симидзу и Сёдзи Миягути — сотрудниками компании NTT.

В нём используются 64-битовый блок и 64-битовый ключ. Его идея состоит и в том, чтобы создать алгоритм, подобный DES, но с более сильной функцией этапа. Используя меньше этапов, этот алгоритм мог бы работать быстрее. К несчастью, действительность оказалась далека от целей проекта.

История

Опубликованный в 1987 году Акихиро Симидзу и Сёдзи Миягути блочный шифр FEAL был разработан с целью повысить скорость шифрования без ухудшения надежности шифра, по сравнению с DES. Первоначально алгоритм использовал блоки размером 64 бита, ключ размером 64 бита и 4 раунда шифрования. Однако, уже в 1988 году была опубликована работа Берта ден Боера[1], доказывающая достаточность владения 10000 шифротекстов для проведения успешной атаки на основе подобранного открытого текста. К шифру FEAL одному из первых был применен линейный криптоанализ. В том числе в 1992 году Митсуру Мацуи и Ацухиро Ямагиси доказали[2], что достаточно узнать 5 шифротекстов для проведения успешной атаки.

Для борьбы с обнаруженными уязвимостями создатели удвоили число раундов шифрования, опубликовав стандарт FEAL-8. Однако, уже в 1990 году Генри Гилберт уязвимость и этого шифра перед атакой на основе подобранного открытого текста[3]. Далее в 1992 году Митсуру Матсуи и Ацухиро Ямагиси (Mitsuru Matsui and Atsuhiro Yamagishi) описали[4] атаку на основе открытых текстов, требующую известных шифротекстов.

В связи с большим числом успешных атак, разработчиками было принято решение еще усложнить шифр. А именно, в 1990 году был представлен FEAL-N, где N - произвольное четное число раундов шифрования, и представлен FEAL-NX, где X (от англ. extended) обозначает использование расширенного до 128 бит ключа шифрования. Однако данное нововведение помогло лишь частично. В 1991 году Эли Бихам и Ади Шамир (Eli Biham and Adi Shamir), используя методы дифференциального криптоанализа, показали[5] возможность взлома шифра с числом раундов быстрее, чем полным перебором.

Тем не менее, благодаря интенсивности исследования алгоритма шифрования сообществом, были доказаны границы уязвимости шифра перед линейным и дифференциальным криптоанализом. Устойчивость алгоритма с числом раундов большим 26 к линейному криптоанализу показали в своей работе Шихо Мораи, Казумаро Аоки и Казуо Охта (Shiho Moriai, Kazumaro Aoki, and Kazuo Ohta)[6], а в работе Казумаро Аоки, Кунио Кобаяси и Шихо Мораи (Kazumaro Aoki, Kunio Kobayashi, and Shiho Moriai) была доказана невозможность применить дифференциальный криптоанализ к алгоритму, использующему больше 32 раундов шифрования.[7]

Описание

В качестве входа процесса шифрования в алгоритме FEAL-NX используется 64-битовый блок открытого текста. Процесс шифрования разбит на 3 стадии.

  1. Предобработка
  2. Итеративное вычисление
  3. Постобработка

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

Определим (A,B) - операцию конкатенации двух последовательностей бит.

Определим — нулевой блок длины 32 бита.

Функция S

= циклический сдвиг влево на 2 бита

= циклический сдвиг влево на 2 бита

Функция F

Функция F берёт 32 бита данных и 16 битов ключа и смешивает их вместе.

Функция

Функция работает с двумя 32 битовыми словами.

Генерация раундовых ключей

В результате генерации раундовых ключей, из полученного на вход ключа длиной 128 бит получается набор из N+8 раундовых ключей , длиной 16 бит каждый. Данный результат получается в результате следующего алгоритма.

  1. Разделение входного ключа на левый и правый ключ: , они имеют длину 64 бита.
  2. Обработка ключа
  3. Введение временной переменной для :
  4. Обработка ключа
  5. Введение временной переменной
  6. Последовательное вычисление

Предобработка

На начальной стадии блок данных готовится к итеративной процедуре шифрования.

Итеративная обработка

На этой стадии с блоком данных производится N раундов перемешивания битов по следующему алгоритму.

Постобработка

Задача этой стадии - подготовить почти готовый шифротекст к выдаче.

Тот же алгоритм может быть использован для дешифрования. Единственным отличием является то, что при дешифровании порядок использования частей ключа меняется на обратный.

Источники

  • Eli Biham, Adi Shamir: Differential Cryptanalysis of Feal and N-Hash. EUROCRYPT 1991: 1—16
  • Bert den Boer, Cryptanalysis of F.E.A.L., EUROCRYPT 1988: 293—299
  • Henri Gilbert, Guy Chassé: A Statistical Attack of the FEAL-8 Cryptosystem. CRYPTO 1990: 22—33.
  • Shoji Miyaguchi: The FEAL Cipher Family. CRYPTO 1990: 627—638
  • Shoji Miyaguchi: The FEAL-8 Cryptosystem and a Call for Attack. CRYPTO 1989: 624—627
  • Mitsuru Matsui, Atsuhiro Yamagishi: A New Method for Known Plaintext Attack of FEAL Cipher. EUROCRYPT 1992: 81—91
  • Sean Murphy, The Cryptanalysis of FEAL-4 with 20 Chosen Plaintexts. J. Cryptology 2(3): 145—154 (1990)
  • A. Shimizu and S. Miyaguchi, Fast data encipherment algorithm FEAL, Advances in Cryptology — Eurocrypt '87, Springer-Verlag (1988), 267—280.
  • Anne Tardy-Corfdir, Henri Gilbert: A Known Plaintext Attack of FEAL-4 and FEAL-6. CRYPTO 1991: 172—181

Ссылки

  1. Bert den Boer. Cryptanalysis of F.E.A.L. (англ.) // SpringerLink. — Springer Berlin Heidelberg, 1988-05-25. — P. 293–299. — ISBN 3540459618. — doi:10.1007/3-540-45961-8_27.
  2. Mitsuru Matsui, Atsuhiro Yamagishi. A New Method for Known Plaintext Attack of FEAL Cipher (англ.) // SpringerLink. — Springer Berlin Heidelberg, 1992-05-24. — P. 81–91. — ISBN 3540475559. — doi:10.1007/3-540-47555-9_7.
  3. Henri Gilbert, Guy Chassé. A Statistical Attack of the FEAL-8 Cryptosystem (англ.) // SpringerLink. — Springer Berlin Heidelberg, 1990-08-11. — P. 22–33. — ISBN 3540384243. — doi:10.1007/3-540-38424-3_2&token2=exp=1479924911~acl=/static/pdf/350/chp%253a10.1007%252f3-540-38424-3_2.pdf?originurl=http%3a%2f%2flink.springer.com%2fchapter%2f10.1007%2f3-540-38424-3_2*~hmac=8f021e4e3f1ff54f8b0f4712718f35cb6a958b57e642315e37a66bfb9ac73861.
  4. Mitsuru Matsui, Atsuhiro Yamagishi. A New Method for Known Plaintext Attack of FEAL Cipher (англ.) // SpringerLink. — Springer Berlin Heidelberg, 1992-05-24. — P. 81–91. — ISBN 3540475559. — doi:10.1007/3-540-47555-9_7.
  5. Eli Biham, Adi Shamir. Differential Cryptanalysis of Feal and N-Hash (англ.) // SpringerLink. — Springer Berlin Heidelberg, 1991-04-08. — P. 1–16. — ISBN 3540464166. — doi:10.1007/3-540-46416-6_1.
  6. Kazuo Ohta, Shiho Moriai, Kazumaro Aoki. Improving the Search Algorithm for the Best Linear Expression // Proceedings of the 15th Annual International Cryptology Conference on Advances in Cryptology. — London, UK, UK: Springer-Verlag, 1995-01-01. — С. 157–170. — ISBN 3540602216.
  7. Kazumaro Aoki, Kunio Kobayashi, Shiho Moriai. Best Differential Characteristic Search of FEAL // Proceedings of the 4th International Workshop on Fast Software Encryption. — London, UK, UK: Springer-Verlag, 1997-01-01. — С. 41–53. — ISBN 3540632476.