2011-02-11 2 views
0

Итак, мы все согласны, что ключи имеют фиксированную длину 128 бит или 192 бит или 256 бит. Если наш контекст составлял 50 символов (байты)% 16 = 2 байта. Таким образом, мы шифруем контекст в 3 раза, а оставшиеся два байта, как они будут храниться в государственном блоке. Должен ли я использовать их, в стандарте не указывается, как обрабатывать такие условия.Ограничения AES и MixColumns

Этап MixColumns является самым сложным аспектом в AES, однако я не смог понять математическое представление. У меня есть понимание матричного умножения, но я удивлен математическими результатами. Умножая значение на 2, сдвиг влево для маленькой конечной позиции 1 и сдвиг вправо для большого конца. Если бы у нас был самый старший бит, который был установлен как 1 (0x80), тогда мы должны XOR сдвинутый результат с 0x1B. Я думал, что умножив на 3, это означало бы сдвинуть значение 2 позиции.

Я проверил различные источники в Википедии, даже в учебнике, посвященном реализации C. Но меня больше интересует полная реализация! Благодарим вас за любой возможный вклад.

+0

Вам нужно умножить или разделить на 4, чтобы сдвинуть на два бита. –

+2

AES - это только блок-шифр. Если вы хотите зашифровать фактические данные, вам нужно выбрать подходящий _mode_, например CBC (цепочка блоков шифрования) или CTR (режим счетчика). CBC - это блочный режим, поэтому вам нужно придумать подходящий способ заполнения (это зависит от вас); CTR - это режим потока, поэтому вы можете шифровать любое количество байтов. –

ответ

1

В столбцах столбцов смешивания экспоненты умножаются.

take this example 
AA*3 
10101010*00000011 
is 
x^7+x^5+x^3+x^1*x^1+x^0 
x^1+x^0 is 3 represented in polynomial form 
x^7+x^5+x^3+x^1 is AA represented in polynomial form 
first take x^1 and dot multiply it by the polynomial for AA. 
that results in... 
x^8+x^6+x^4+x^2 ... adding one to each exponent 
then reduce this to 8 bits by XoRing by 11B 
11B is x^8+x^4+x^3+x^1+x^0 in polynomial form. 
so... 
x^8+x6+x^4+ x^2 
x^8+ x^4+x^3+ x^1+x^0 
leaves 
x^6+x^3+x^2+x^1+x^0 which is AA*2 
now take AA and dot multiply by x^0 (basically AA*1) 
that gives you 
x^7+x^5+x^3+x^1 ... a duplicate of the original value. 
then exclusive or AA*2 with AA*1 
x^7+ x^5+x^3+ x^1 
    x^6+ x^3+x^2+x^1+x^0 
which leaves 
x^7+x^6+x^5+x^2+x^0 or 11100101 or E5 
I hope that helps. 
here also is a document detailing the specifics of how mix columns works. 

mix_columns.pdf

EDIT: Нормальное умножение матриц не относится к этому ..so забыть о нормальных матрицах.

+0

спасибо мужчине, я решил проблему более 2 недель. создал мой собственный множитель (функция) многочлена – Nocturnal

1

В ответ на вопросы:

  1. Если вы хотите, чтобы шифровать поток байтов с использованием AES, сделать не просто разбить его на отдельные блоки и зашифровать их по отдельности. Это не криптографически безопасно, и умный злоумышленник может восстановить много информации из вашего исходного открытого текста. Это называется electronic code book, и если вы перейдете по ссылке и посмотрите, что произойдет, когда вы используете ее для шифрования Tux Linux Penguin, вы можете визуально увидеть ее неуверенность. Вместо этого рассмотрите использование известной защищенной техники, например cipher-block chaining (CBC) или counter mode (CTR). Они немного сложнее реализовать, но это стоит того, чтобы вы могли обеспечить, чтобы умный злоумышленник не мог нарушить ваше шифрование опосредованно.

  2. Что касается работы этапа MixColumns, я действительно не очень разбираюсь в самой операции. Он основан на конструкции, которая включает в себя поля многочленов. Если я смогу найти хорошее объяснение, как это работает, я дам вам знать.

  3. Если вы хотите реализовать AES для дальнейшего понимания, это прекрасно, и я рекомендую вам сделать это (хотя вам, вероятно, лучше читать математическую интуицию относительно того, откуда исходит алгоритм). Однако вы должны не использовать свою собственную реализацию для любых криптографических целей. Без особой осторожности вы сделаете свою реализацию уязвимой для side-channel attack, которая может поставить под угрозу ее безопасность. Самым известным примером этого является шифрование RSA, в котором без тщательного планирования злоумышленник может фактически наблюдать за потреблением мощности компьютера, так как он шифрует, чтобы восстановить бит ключа. Если вы хотите использовать AES для шифрования, рассмотрите возможность использования известной, проверенной реализации алгоритма с открытым исходным кодом.

Надеюсь, это поможет!

+0

Я очень оценил некоторые из ваших вкладов в вашу исследуемую информацию (спасибо за головы), но случай, который моя собственная реализация сосала бы из-за других уже зрелых библиотек. Мое внимание полностью зависит от степени реализации с другим существующим кодом и функциональностью (простота использования), я программирую библиотеку SSL, а часть SSL требует блокировки и потоковые шифры, которые потребовали от меня реализовать AES. Я выпускник CS, но так как английский не мой первый язык, иногда трудно понять математические обозначения, если тема едва покрыта. (не во всех случаях) – Nocturnal

+0

Кроме того, у меня есть знакомый эксперт по безопасности, который также поможет мне протестировать любые уязвимости, которые могут преследовать мою библиотеку. – Nocturnal

0

Если вы хотите проверить результат вашей собственной реализации (любое внутреннее состояние во время вычислений), вы можете проверить эту страницу:

http://www.keymolen.com/aes.jsp

Он отображает все внутренние состояния для любого заданного открытого текста, ключ и IV , также для стадии mixcolumns.

+0

Спасибо Бруно, но у меня уже есть AES. Я также реализовал свою собственную версию DES. Который я в настоящее время отлаживаю для аномалий. – Nocturnal

Смежные вопросы