Я пытаюсь реализовать AES-256 в режиме CTR, используя nVidia CUDA. Я успешно закодировал код процессора для расширения ключа, и теперь мне нужно реализовать настоящий алгоритм AES-256. Согласно Википедии, некоторые коды, которые я видел, и особенно этот PDF (стр. 9), раунды AES могут быть реализованы в виде серии табличных поисков. У меня вопрос, как мне сгенерировать эти таблицы? Я знаю, что мне нужно 4 КБ для хранения этих таблиц, и это не проблема. Я провел целый день, пытаясь найти эти таблицы безуспешно. В PDF-файле я разместил ссылку на таблицы поиска T0, T1, T2 и T3, но я не знаю, что это такое. Здесь также упоминаются круглые клавиши 4, 5, 6 и 7, но я также не понимаю, к чему относятся эти индексы.
Самым близким к выяснению того, как генерировать эти таблицы поиска, является этот проект. Внутри кода есть комментарий, который говорит:
Te0[x] = S [x].[02, 01, 01, 03];
Te1[x] = S [x].[03, 02, 01, 01];
Te2[x] = S [x].[01, 03, 02, 01];
Te3[x] = S [x].[01, 01, 03, 02];
Однако я не совсем уверен, что знаю, что означает это обозначение (это умножение матриц или что-то еще?). Единственное, что я узнаю, это матрица констант части смешанного столбца, а также матрица S-box.
[Edit] Теперь, когда кто-то указал на это — как реализация поиска может быть на самом деле медленнее? Было бы разумно реализовать AES без таблиц поиска здесь?Таблицы T представляют собой простое описание круглого преобразования AES в матричной форме. Чтобы построить их, смотрите оригинал Rijndael NIST предложение, раздел 5.2.1.
Если кому-то все еще интересно, эти таблицы поиска можно найти в стандартной библиотеке языка программирования Go — http://golang.org/src/crypto/aes/const.go#L80
Есть также инструкции о том, как сгенерировать таблицы в тестовых файлах того же пакета.