Рейтинг:1

Планировщик ключей Rivest Cipher 6 (RC6)

флаг us

Я пытаюсь понять Key Scheduler, используемый в RC6, и у меня всего 3 вопроса. Страница RC6 в Википедии говорит, что единственная разница между RC5 и планировщик ключей RC6 заключается в том, что из ключа в RC6 создается больше слов. В моем приложении я использую w = 32 бита, r = 20 раундов и b = 16 байт.

Мой первый вопрос: это два отдельных цикла for или второй цикл for, который повторяется от s-1 до v внутри первого цикла for, который повторяется от 1 до 2r+3? Мой второй вопрос: почему мы устанавливаем A=B=i=j=0 и эта команда и v=3xmax{c,2r+4} находятся внутри первого цикла for?

Документ RC6 также содержит этот псевдокод:


Вход: предоставленный пользователем байтовый ключ b, предварительно загруженный в массив c-слов L[0... c - 1]

Количество r раундов

Выход: w-битные круглые ключи S[0... 2r + 3]

Процедура: S[0] = Pw

для i = 1 до 2r + 3 выполните:
S[i] = S[i - 1] + Qw
А = В = я = j = 0
v = 3 х макс{с, 2r+4}

для s = 1 до v выполните:
{
А = S[i] = (S[i] + A + B)<<<3
B = L[j] = (L[j] + A + B)<<<(A + B)
я = (я + 1) по модулю (2г + 4)
j = (j + 1)modc
}

Мой третий вопрос о том, как предварительно загрузить массив слов L с помощью моего 16-байтового ключа. В документе RC5 говорится:

Первым алгоритмическим шагом раскрытия ключа является копирование секретного ключа K[0...b-1] в массив L[0...c-1] слов c=b/u, где u=w/8 равно количество байт/слово. Эта операция выполняется естественным образом, используя u последовательных ключевых байтов K для заполнения каждого последующего слова в L, от младшего байта до старшего байта. Любые незаполненные байтовые позиции L обнуляются.

И псевдокод для этой операции:

для i=b-1 до 0 выполните:
    L[i/u] = (L[i/u]<<<8)+K[i];

Чтобы уточнить мой третий вопрос, если я иду от 15 до 0, а мое u = 32/8 = 4, как я могу использовать десятичную дробь для индекса L? Например, когда i равно 15, мы имеем L[15/4]=(L[15/4]<<<8 + K[i]);

Рейтинг:2
флаг ru
  1. Петли не пересекаются. Другими словами, первый цикл завершается, а затем начинается второй цикл.

  2. A=B=i=j=0 явно инициализируются нулем, поскольку во многих языках отсутствие указания начального значения может привести к неуказанному поведению (например, установка переменных в случайные значения, лежащие в старой памяти).Эта инициализация и инициализация v происходят вне циклов.

  3. Выражение i/u следует интерпретировать как C-подобную целочисленную арифметику, которая возвращает целочисленное значение (в данном случае путем взятия голоса). Таким образом, в вашем примере L[15/4]=L[3].

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

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