В 1973 году в журнале ``Scientific American'' появилась статья сотрудника IBM (а ранее – ВМС США) Хорста Фейстеля (англ. Horst Feistel) «Cryptography and Computer Privacy» [37], описывающая проект функции шифрования «Люцифер», который можно считать прообразом современных блочных шифров. Развитием данной системы стал государственный стандарт США «Digital Encryption Standard» с 1979 по 2001 годы.
Фейстель высказал идею, что идеальный шифр для блока размером в 128 бит должен включать в себя блок замен (substitution box, s-box, далее s-блок), который мог бы обработать сразу 128 бит входного блока данных. S-блок принимает на вход блок битов и даёт на выходе другой блок бит (возможно, даже другого размера) согласно некоторому словарю или результату вычисления нелинейной функции
. К сожалению, физическая реализация (см. рис. 5.2a) действительно произвольного блока замен для входа в 128 бит потребовала бы $2^{128}$ внутренних соединений или словаря из $2^{128}$ 128-битовых значений, если реализовывать программным способом, что технологически невозможно
. Зато если такой блок можно было бы создать, то он был бы очень хорош с криптографической точки зрения. Даже если криптоаналитик знает произвольное число пар значений вход-выход, то это ничего не скажет ему об остальном множестве значений. То есть без полного перебора всех возможных $2^{128}$ вариантов входа криптоаналитик не сможет составить полное представление о внутренней структуре блока.
С другой стороны, блок перестановок (permutation box, p-box, далее p-блок), изображённый на рис. 5.2b, может обрабатывать блоки битов любого размера. Однако какая-либо криптографическая стойкость у него отсутствует: он представляет собой тривиальное линейное преобразование своего входа. Криптоаналитику достаточно иметь $N$ линейно независимых пар значений входа и выхода (где $N$ – размер блока), чтобы получить полное представление о структуре p-блока.
Идея Фейстеля состояла в том, чтобы комбинировать s- и p-блоки, позволяя на практике получить большой блок нелинейных преобразований (то есть один большой s-блок), как изображено на рис. 5.3. При достаточном числе «слоёв» SP-сеть начинает обладать свойствами хорошего s-блока (сложностью криптографического анализа и выявления структуры), при этом оставаясь технологически простой в реализации.
Следующей составляющей будущего шифра стала возможность менять используемые s-блоки в зависимости от ключа. Вместо каждого из s-блоков в SP-сети Фейстель поместил модуль с двумя разными s-блоками. В зависимости от одного из битов ключа (своего для каждой пары блоков) использовался первый или второй s-блок. Результатом данного подхода стал первый вариант шифра в проекте «Люцифер», который в упрощённом виде (с меньшим размером блока и меньшим числом слоёв) изображён на рис. 5.4.
Разделение функции шифрования на относительно простые раунды («слои»), комбинация больших p-блоков со множеством s-блоков малого размера – всё это до сих пор используется в современных блочных шифрах.