Расписание ключей RC2
Может кто-нибудь объяснить, как работает расписание клавиш RC2 (особенно в самом начале)? я знаю, что используется little endian, но моя реализация не работает ни для одного ключа, кроме "0000 0000 0000 0000"
Test Vector
Key = 88bc a90e 9087 5a
Plaintext = 0000 0000 0000 0000
Ciphertext = 6ccf 4308 974c 267f
я предполагаю, что первое, что нужно сделать с ключом, это изменить его на
bc88 0ea9 8790 5a
и да, я знаю, что RC2 даже больше не используется, но я все еще хотел бы знать
2 ответа
RFC говорит:
Алгоритм расширения ключа начинается с помещения предоставленного Т-байтового ключа в байты L[0], ..., L[T-1] буфера ключа.
Так что, если ваш ключ 88bc a90e 9087 5a
ты получаешь L[0]=0x88, L[1]=0xbc, ... L[6]=0x5a
,
Нет необходимости учитывать любые порядки байтов здесь.
Если вы хотите обрабатывать буфер ключей как 16-битные слова, вы получите:
K [i] = L [2 * i] + 256 * L [2 * i + 1]
Т.е. K[0] = 0xbc88, K[1] = 0xa90e, K[2] = 0x8790
, L [7] назначается только позже на этапе раскрытия ключа, поэтому строго говоря, K [3] не определено в этой точке. Однако не стесняйтесь выбирать любое значение, так как оно не имеет значения для алгоритма. Если вы выберете 0, вы получите K[3] = 0x005a
,
Расписание ключей RC2 правильно определено в RFC 2268, который определяет RC2