Рейтинг:2

Как рассчитать инверсию случайного AES S-BOX (при условии, что мы не знаем, как построен S-BOX)?

флаг in

Я недавно изучаю криптографию, и у меня есть задача собрать s-блоки для AES, а затем реализовать эти s-блоки для шифрования и дешифрования, но большинство найденных мной S-блоков не включают обратное.

Я знаю, что большая часть из них дает расчет того, как построить s-блок и инверсию, но я не думаю, что успею сделать это вовремя, если сделаю это.

Итак, мне интересно, есть ли какой-нибудь метод вычисления обратного случайного AES S-BOX?

Daniel S avatar
флаг ru
В python: если `S` представляет собой упорядоченный список записей S-box, `SInverse=[S.index(i) for i in range(256)]`
Рейтинг:2
флаг in

SageMath имеет отличный S-бокс пакет, который активно используется разработчиками S-Box. Если вы собираетесь учиться/играть с S-Box, вы можете воспользоваться этим пакетом.

С пакетом Sbox (Попробуйте онлайн)

из sage.crypto.sbox импортировать SBox

# должно быть степенью двойки, иначе ошибка
p = Перестановки (диапазон (16)).random_element()

S = SBox(p);
print("Перестановка", S)
print("Обратная перестановка", S.inverse())

SageMath в настоящее время использует Python3, поэтому можно очень легко написать свою версию либо на Python, либо на SageMath (Попробуйте онлайн);

P = Перестановки (диапазон (16)).random_element()

print("Перестановка", P)

InverseP=[P.index(i) для i в диапазоне(16)]
print("Обратная перестановка", InverseP)

Как мы видим, пакет S-Box намного лучше, например, конструкция проверяет, равен ли размер степени двойки или нет.


Примечание: Я использовал случайные перестановки, чтобы гарантировать существование обратного.


Как мы видим из Источник пакета Sbox

м = self.input_size()
L = [self(i) для i в диапазоне (1<<m)]
return SBox([L.index(i) для i в диапазоне (1<<m)], big_endian=self._big_endian)

SageMath преобразует S-Box в список, берет обратное значение в списке, а затем создает S-Box в списке. Как мы видим, обратное, если оно существует, не является волшебством.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.