FEAL: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Ravmike (обсуждение | вклад) Добавленен пункт история развития технологии. Переработан раздел описания алгоритма шифрования |
|||
Строка 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) - операцию конкатенации двух последовательностей бит. |
|||
⚫ | |||
[[Файл: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> |
||
⚫ | |||
⚫ | |||
[[Файл: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] |
||
⚫ | |||
⚫ | |||
[[Категория:Сеть Фейстеля]] |
[[Категория:Сеть Фейстеля]] |
||
⚫ | |||
⚫ |
Версия от 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 стадии.
- Предобработка
- Итеративное вычисление
- Постобработка
Кроме того, описан процесс генерации раундовых ключей, с которого и начинается шифрование, а также функции , с помощью которых и производятся преобразования.
Определим (A,B) - операцию конкатенации двух последовательностей бит.
Определим — нулевой блок длины 32 бита.
Функция S
= циклический сдвиг влево на 2 бита
= циклический сдвиг влево на 2 бита
Функция F
Функция F берёт 32 бита данных и 16 битов ключа и смешивает их вместе.
Функция
Функция работает с двумя 32 битовыми словами.
Генерация раундовых ключей
В результате генерации раундовых ключей, из полученного на вход ключа длиной 128 бит получается набор из N+8 раундовых ключей , длиной 16 бит каждый. Данный результат получается в результате следующего алгоритма.
- Разделение входного ключа на левый и правый ключ: , они имеют длину 64 бита.
- Обработка ключа
- Введение временной переменной для :
- Обработка ключа
- Введение временной переменной
- Последовательное вычисление
Предобработка
На начальной стадии блок данных готовится к итеративной процедуре шифрования.
Итеративная обработка
На этой стадии с блоком данных производится 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
Ссылки
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
Для улучшения этой статьи желательно:
|