
Введение в шифр AES-256
19 мая 2022 г.Введение в шифр AES-256
AES, или «Advanced Encryption Standard», представляет собой спецификацию шифрования, в которой в качестве алгоритма шифрования с симметричным ключом используется шифр Rijndael. AES шифрует сообщение с помощью закрытого ключа, и никто, кроме владельца ключа, не может расшифровать сообщение. Отличным примером хорошего варианта использования AES-256 является шифрование всех данных на жестком диске компьютера, когда он не используется.
Симметричное шифрование против асимметричного шифрования
Симметричное шифрование использует один и тот же ключ для шифрования и расшифровки, а асимметричное шифрование использует разные ключи.
Асимметричное шифрование предпочтительнее, когда вы хотите, чтобы кто-то мог отправлять вам зашифрованные данные, но вы не хотите делиться своим закрытым ключом.
Симметричное шифрование предпочтительнее, если вы шифруете только для себя.
Секретный ключ, используемый в AES-256, должен иметь длину 256 бит. Чтобы использовать пароль или кодовую фразу в качестве ключа, алгоритм хеширования необходимо использовать для увеличения длины.
Чем короче пароль или кодовая фраза, тем легче злоумышленнику расшифровать данные, угадывая пароли, хэшируя их и пытаясь расшифровать сообщение. Чтобы уменьшить эту угрозу, некоторые приложения применяют меры безопасности, такие как использование KDF.
Обзор процесса шифрования
Давайте рассмотрим этапы процесса шифрования AES, также известного как Rijndael. -исправленный.pdf) шифр.
- Выберите пароль, затем получите короткий ключ из этого пароля (используя такую функцию, как Scrypt или SHA-256). Затем этот короткий ключ будет расширен с помощью [расписания ключей] (https://en.wikipedia.org/wiki/Rijndael_key_schedule), чтобы получить отдельные «круглые ключи» для каждого раунда AES-256.
пароль: password12345678 → короткий ключ: aafeeba6959ebeeb96519d5dcf0bcc069f81e4bb56c246d04872db92666e6d4b → ключ первого раунда: a567fb105ffd90cb
Получение круглых ключей из короткого ключа выходит за рамки этой статьи. Нам важно понять, что пароль преобразуется в раундовые ключи, которые используются в процессе шифрования AES.
- Выберите секретное сообщение:
Вот секрет
- Закодируйте ключ и сообщение первого раунда в шестнадцатеричных байтах и отформатируйте их в виде таблиц 4x4 (сверху вниз, слева направо):
Ключ первого раунда:
61 66 35 39 35 62 66 30 36 31 66 63 37 30 64 62
Сообщение:
48 20 61 63 65 69 20 72 72 73 73 65 65 20 65 74
- Добавьте к сообщению круглый ключ (XOR). Соответствующие ячейки в таблицах сообщений и ключей складываются вместе. Выходная матрица будет использоваться на следующем шаге.
61 ⊕ 48 = 29
35 ⊕ 65 = 50
…и т.д.
29 46 54 5а 50 0б 46 42 44 42 15 06 52 10 01 16
- В полученной таблице используйте поле подстановки, чтобы заменить каждый двухсимвольный байт соответствующим ему байтом:
a5 5a 20 быть 53 2b 5a 2c 1b 2c 59 6f 00 7c 7c 47
- Сдвиг рядов. Первый ряд не сдвигается, второй ряд сдвигается влево один раз, третий ряд дважды, а последний ряд 3 раза.
a5 5a 20 be 53 2b 5a 2c → 2b 5a 2c 53 1b 2c 59 6f → 2c 59 6f 1b → 59 6f 1b 2c 00 7c 7c 47 → 7c 7c 47 00 → 7c 47 00 7c → 47 00 7c 7c
a5 5a 20 be 2b 5a 2c 53 59 6f 1b 2c 47 00 7c 7c
- Смешайте столбцы. Каждый столбец умножается по модулю на [Поле Галуа Райндаэля] (https://www.samiam.org/galois.html). Используемая математика выходит за рамки этой статьи, поэтому я не буду включать пример выходной матрицы.
- Результат умножения используется в качестве входного «сообщения» в следующем раунде AES. Каждый шаг повторяется в общей сложности 10 или более раз с одним дополнительным шагом «добавить ключ» в конце. В каждом раунде «добавить ключ» будет использоваться новый ключ раунда, но каждый новый ключ раунда по-прежнему получается из того же пароля и короткого ключа.
- Добавить ключ
- Заменить байты
- Сдвиг строк
- Умножение столбцов
Вот и все! /с
Очевидно, что шифр Rijndael, используемый в AES, довольно сложен, но я надеюсь, что смог пролить свет на общее представление о том, что происходит внутри! Спасибо за чтение.
- Лейн Вагнер
Также опубликовано [Здесь] (https://blog.boot.dev/cryptography/aes-256-cipher/)
Оригинал