Я понимаю, что s-боксы могут сделать преобразования, выполняемые в AES, нелинейными. Однако я не уверен, как это делает AES безопасным.
Например, если бы у нас не было блока s, то можно было бы вычислить ключ из набора линейных уравнений:
$C^1=Ах+к$
$С^2=АС^1+к$
...
$y=AC^n+k$
Где A — линейное преобразование, k — ключ, C — промежуточные зашифрованные тексты, n — количество раундов шифрования, x — вход и y — конечный результат.Однако, если мы добавим блок S, то нельзя будет представить замену, которую он выполняет, как функцию x, f(x), так что теперь мы имеем:
$C^1=Af(x)+k$
$C^2=Af(C^1)+k$
...
$y=Af(C^n)+k$
Что, как мне кажется, также становится жертвой исключения Гаусса (путем подстановки каждого уравнения в функцию следующего), хотя такую функцию для подстановки, которая происходит в s ячейках, может быть чрезвычайно сложно вывести. Если нам дано несколько значений x, которые подвергаются шифрованию с использованием одного и того же ключа, и что s блоков общеизвестны, мы должны быть в состоянии вычислить ключ. Я понимаю, что на самом деле этого не может произойти, иначе AES вообще не использовался бы, поэтому я был бы очень признателен за любую помощь в определении того, где я ошибся / как S-блоки будут мешать, чтобы предотвратить использование такого метода :)