Здравствуйте, гуру криптографии! Хочу написать свою реализацию AES (на ассемблере). Видел много различных реализаций на разных языках и множество описаний, которые только запутывают еще больше. А посему, хочу задать несколько довольно простых вопросов относительно реализации. Вопрос 1 Имеется блок данный длиной 16 байт. Допустим, 123456789ABCDEF0. Этот блок для операции представлен в виде матрицы 4х4. Так вот, как будет выглядеть эта матрица: 1 2 3 4 5 6 7 8 9 A B C D E F 0 или 1 5 9 D 2 6 A E 3 7 B F 4 8 C 0 ? Я всегда думал, что первый вариант. Однако, в одном иходнике увидел код ShiftRow, сдвигающую строчку циклически влево, которая сдвигала СТОЛБЦЫ циклически влево (а точнее элементы столбцов, а не строк!) Вопрос 2 Аналогичный вопрос по созданию расширенного ключа: в каком виде он "разлогается" в матрицу? Ведь от этого ж зависит результат наложения ключа Вопрос 3 Немного запутанный вопрос... Вобщем, как представляются, к примеру, строки матрицы из блока данных - в виде двордов или в виде простой последовательности из 4-х байт? Поясняю: строчка 1234 в виде последовательности байт выглядит как 1 2 3 4, а в виде дворда - 4 3 2 1. Я конечно подозреваю, что надо в виде последовательности байт хранить, но все-таки хотелось бы уточнить, ведь от этого так же зависит результат сдвига. На этом пока все. Следующие вопросы будут по ходу ответов на эти вопросы. Заранее спасибо.
я ж говорю, у меня куча исходников, в т.ч. и на си. Проблема в том, что Си я ааще не знаю - только асм. Ладно, кидай, может хоть в нем разберусь (мой_ник_собака_list.ru)
RTFM FIPS-197 тут: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf Там есть ответы на все вопросы и даже примеры.
Несмотря даже на официальное описание возник вопрос. В официальном описании написано: Если я правильно понял, то раундовая константа определяется по формуле RC=02^(i-1). однако, в различных реализациях я вижу, что при i>8 раундовая константа ксорится на 1Bh. Но с другой стороны написано (в описании процедуры умножения): Т.е. получается, что, если число после умножения больше 255, то надо еще сделать XOR на 1Bh. Почему же в первой формуле об этом не написано? Из всего этого вопрос: при опеределении раундовой константы RC из массива Rcon надо делать XOR на 1Bh или нет?