Как реализовать алгоритм AES-512? - PullRequest
3 голосов
/ 26 августа 2009

Существует ли доступный javascript, который реализует алгоритм AES-512 (т.е. шифрование, дешифрование)? Я обнаружил, что большинство javascript-скриптов содержат AES-128, AES-192, AES-256.

Ответы [ 9 ]

21 голосов
/ 22 августа 2010

Шифр ​​Rijdael поставляется в 128, 160, 192, 224 и 256-битных вариантах. 128-битный, 192-х и 256-битный варианты были выбраны для Advanced Encryption Standard. 128-битные симметричные ключи считаются примерно такими же стойкими, как 1024-битные ключи RSA, а 256-битные симметричные ключи считаются примерно такими же стойкими, как 2048-битные ключи RSA. На практике никто не использует 192-битный AES, потому что он либо обеспокоен производительностью и / или контролем экспорта, и использует 128-битный, либо параноидальный, и использует 256-битный.

Не существует ни одного 512-битного шифра с симметричным ключом для общего пользования. Хэш-функция Whirlpool, основанная на AES, возвращает 512-битный дайджест, но это не то же самое, что 512-битный AES-шифр.

8 голосов
/ 26 августа 2009

Я понимаю, что 512-битного AES не существует.

Из Википедия :

В криптографии, Advanced Encryption Standard (AES) - это стандарт шифрования, принятый правительством США. Стандарт включает в себя три блочных шифра, AES-128, AES-192 и AES-256, взятые из большой коллекции, первоначально опубликованной как Rijndael.

3 голосов
/ 15 декабря 2014

Как уже упоминалось, двойной AES-256 не обеспечивает 512 бит безопасности (скорее, 256 + 1 бит сложности времени) из-за компромисса времени / пространства, который дает «атака в середине» .

Однако я не верю, что кто-то правильно ответил "что" AES-512 на самом деле, ЕСЛИ он существовал. Обратите внимание, что все текущие варианты AES имеют фиксированный размер блока 128 битов, поэтому AES-512, если он существует, также будет иметь размер блока только 128 битов (при условии, что шаблон удерживается), и, таким образом, потребует никаких изменений в MixColumns или ShiftRows подпрограммы.

Расширение системы AES для использования 512-битных размеров ключей технически поддерживается стандартом AES, ЕСЛИ вы разрешаете N_k>8. Обратите внимание, что стандарт AES FIPS-197 имеет конструкцию, которая в основном не зависит от размера ключа. Единственное, чего не хватает - это количество раундов для N_k=16 (512 bit keys=16*'32 bit words'). Текущий стандарт (на странице 14) определяет N_r={10,12,14} раундов для N_k={4,6,8} соответственно. Следуя шаблону показывает N_r=N_k+6. Следовательно, N_r=22, если N_k=16 ... после определения N_r=22 для N_k=16 ничего больше не нужно менять, просто предварительно заполните первые 512 бит расписания ключей (как указано в разделе 5.2) указанным ключом и продолжить с алгоритмом ...

единственным ограничивающим фактором может быть слово Rcon [i], которое умножается на x (mod x^8+x^4+x^3+x+1) для каждого N_k слова, так как оно имеет период 51, а затем начинает повторяться. x^51=(1 mod x^8+x^4+x^3+x+1) ... однако самое большое Rcon[i], которое используется, это

i=(N_r+1)*N_b/N_k  ; ((N_r+1)*N_b is the total size (in 4 octet words) of the key schedule)
i=(N_k+6+1)*N_b/N_k
i=(N_k+7)*4/N_k
i=4+28/N_k ; (correct... ignoring rounding issues (and probably an off by one error due to laziness))

так что это не проблема, так как меньше Rcon'ов используются при увеличении размера ключа ...

2 голосов
/ 05 ноября 2014

Обратите внимание, что запуск AES256 дважды не эквивалентен (будущему) шифрованию AES512.

Comsider: 2 ^ 256 + 2 ^ 256 <2 ^ 512 </p>

Другими словами, время, необходимое для перебора 2 256-битных ключей, значительно меньше, чем время перебора одного 512-битного ключа.

(В любом случае, любая атака возможна на текущем оборудовании)

1 голос
/ 14 сентября 2012

Я думаю, что было бы возможно расширить A.E.S, но, так сказать, ложка дегтя - это значения сдвига и обратного сдвига, иначе проблем быть не должно. Таким образом, для 512 вам понадобится четыре строки и 16 столбцов, но вам нужно будет определить коэффициенты сдвига, как я уже говорил ранее. для 1024 вы просто удваиваете количество столбцов, но опять-таки необходимо определить сдвиги и обратные сдвиги.

0 голосов
/ 14 мая 2014

Официального стандарта для AES-512 не существует, однако вы можете легко смоделировать его эффект, просто дважды запустив AES-256 с использованием двух разных 256-битных ключей.

Основная проблема при запуске его дважды - это оптимизация, хотя это может не особенно повлиять на Javascript, так как он все равно не будет использовать поддержку аппаратного шифрования. Имея это в виду, самый простой метод будет полностью зависеть от выбранной вами библиотеки, так как большинство из них не рассчитаны на какую-либо потоковую функциональность, поэтому вы, вероятно, будете делать два отдельных прохода данных для каждого 256-битного кусок вашего "512-битного" ключа.

Как и спрашивали другие, главный вопрос заключается в том, зачем вам нужна 512-битная защита. 256-разрядных пока еще достаточно, однако, если вас это беспокоит, то лучше всего настроить систему на прием ключей переменной длины и просто выполнить один проход для каждого 256-разрядного блока; таким образом, вы можете увеличить размер позже, выпуская / генерируя более крупные ключи всякий раз, когда чувствуете, что вам нужно обновление.

0 голосов
/ 10 ноября 2013

AES - это просто стандарт, и он имеет дело с различными вещами. Одним из них является шифр, который называется Rijndael.

Он просто недоступен и определен более чем с 256 битами.

Вы можете теоретически расширить этот шифр до более длинной длины ключа, однако длина ключа 256 битов уже невероятно сильна для шифра с симметричным ключом.

Не путайте ключи RSA и асимметричную криптографию. Они намного слабее, и эквивалентная сила симметричного шифра с той же длиной ключа намного, намного сильнее. Если вы измените Rijndael, вы можете сделать много ошибок, которые ставят под угрозу вашу безопасность. 256-битный ключ AES, вероятно, обладает сопоставимой силой, как 2048-битный ключ rsa

Но что вы можете сделать, если вы хотите вывести свою паранойю на совершенно новый уровень, просто зашифруйте что-то, а затем зашифруйте снова. Шифрование два раза эффективно удваивает размер ключа. И вы все еще в безопасности от ошибок.

0 голосов
/ 04 декабря 2012

Я думаю, что вы можете использовать 8 рядов 64-битных чисел, чтобы каждая строка содержала одно 64-битное число, и вы можете выполнить добавление ключа без особых проблем.

Сдвиг влево / вправо не вызывает проблем, так как вы можете написать 64-битную версию * int64_t __lrotl (int64_t, int) * и * int64_t __lrotr (int64_t, int) *. Единственная ложка дегтя - это void mixcolumns () и void invmixcolumns () , которые должны измениться с% 4 на% 8, но я не думаю, что это будет работать, но кажется, что это должно работать в теории.

0 голосов
/ 02 ноября 2010

Вы можете сделать это дважды, чтобы иметь дополнения шифрования.

Например, при двухкратном шифровании с помощью AES-256 вы получите 256 бит с питанием от 2, следовательно, получите 65536 бит шифрования. ;) Я сомневаюсь, что вы хотели бы получить результат от этого. 128-битное шифрование дважды будет 16,384-битным шифрованием. Вы должны использовать только один ключ для одного шифрования, и если вы хотите зашифровать два раза, у вас должно быть 2 ключа для двух разных шифрований, и я могу обещать вам, что для любого будет очень трудно взломать этот тип шифрования. ;)

...