Пример работы AES
Рассмотрим шифрование одного блока данных (16 байт) с использованием 128-битного ключа.
Для шифрования одного блока данных (16 байт) с использованием 128-битного ключа в алгоритме AES (Advanced Encryption Standard) выполняется несколько этапов.
Исходные данные:
Ключ:
1. Key Expansion (Генерация раундовых ключей)
Key Expansion — это процесс генерации раундовых ключей из исходного ключа. Для AES-128 генерируется 11 раундовых ключей (один исходный ключ и 10 для каждого раунда).
2. AddRoundKey (XOR данных с ключом)
На этом этапе выполняется операция XOR между исходными данными и ключом.
Исходные данные:
Ключ:
Результат XOR:
3. SubBytes (Замена байтов через S-блок)
На этом этапе каждый байт данных заменяется на соответствующий байт из S-блока (таблицы замен). S-блок — это фиксированная таблица, которая используется для нелинейного преобразования байтов.
Результат после SubBytes:
4. ShiftRows (Перестановка строк)
На этом этапе строки состояния (матрицы 4x4) сдвигаются циклически. Первая строка остается без изменений, вторая строка сдвигается на один байт влево, третья строка — на два байта, четвертая — на три байта.
Результат после ShiftRows:
5. MixColumns (Линейное преобразование)
На этом этапе каждый столбец состояния умножается на фиксированную матрицу, что приводит к линейному преобразованию данных.
Результат после MixColumns:
6. AddRoundKey (XOR с раундовым ключом)
На этом этапе выполняется операция XOR между текущим состоянием данных и раундовым ключом для текущего раунда.
Предположим, что раундовый ключ для первого раунда:
Результат после AddRoundKey:
Повторение шагов 3-6 для каждого раунда
Эти шаги повторяются для каждого раунда (всего 10 раундов для AES-128). В каждом раунде используются разные раундовые ключи.
Финальный раунд (без MixColumns)
В финальном раунде шаг MixColumns пропускается. После выполнения SubBytes, ShiftRows и AddRoundKey получается окончательный зашифрованный блок данных.
Итоговый зашифрованный блок данных:
После выполнения всех раундов и финального раунда, зашифрованный блок данных будет выглядеть следующим образом (пример):
Это пример того, как данные могут быть преобразованы на каждом этапе. Фактические значения могут отличаться в зависимости от конкретных раундовых ключей и S-блока.
Уязвимости симметричной криптографии
Атака по времени (Timing Attack):
Если реализация AES не защищена, можно измерить время выполнения операций и восстановить ключ.
Решение: Использование алгоритмов с постоянным временем выполнения (constant-time algorithms).
Атака на слабые ключи:
Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Решение: Использование ключей достаточной длины (например, 256 бит для AES).
Проблема обмена ключами:
Симметричная криптография требует безопасного способа передачи ключа между сторонами.
Решение: Использование асимметричной криптографии (например, RSA) для обмена ключами.
Когда использовать симметричную криптографию?
Симметричная криптография идеально подходит для:
Шифрования больших объемов данных (например, файлов или потоков данных).
Приложений, где важна высокая скорость шифрования.
Ситуаций, где безопасный обмен ключами уже обеспечен (например, через TLS).
#Java #Training #Medium #Crypto #Symmetrical
Рассмотрим шифрование одного блока данных (16 байт) с использованием 128-битного ключа.
Для шифрования одного блока данных (16 байт) с использованием 128-битного ключа в алгоритме AES (Advanced Encryption Standard) выполняется несколько этапов.
Исходные данные:
00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
Ключ:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
1. Key Expansion (Генерация раундовых ключей)
Key Expansion — это процесс генерации раундовых ключей из исходного ключа. Для AES-128 генерируется 11 раундовых ключей (один исходный ключ и 10 для каждого раунда).
2. AddRoundKey (XOR данных с ключом)
На этом этапе выполняется операция XOR между исходными данными и ключом.
Исходные данные:
00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
Ключ:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Результат XOR:
00^00 11^01 22^02 33^03 44^04 55^05 66^06 77^07 88^08 99^09 AA^0A BB^0B CC^0C DD^0D EE^0E FF^0F
= 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
3. SubBytes (Замена байтов через S-блок)
На этом этапе каждый байт данных заменяется на соответствующий байт из S-блока (таблицы замен). S-блок — это фиксированная таблица, которая используется для нелинейного преобразования байтов.
Результат после SubBytes:
63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
4. ShiftRows (Перестановка строк)
На этом этапе строки состояния (матрицы 4x4) сдвигаются циклически. Первая строка остается без изменений, вторая строка сдвигается на один байт влево, третья строка — на два байта, четвертая — на три байта.
Результат после ShiftRows:
63 7C 77 7B
6F C5 6B F2
67 2B FE D7
AB 76 30 01
5. MixColumns (Линейное преобразование)
На этом этапе каждый столбец состояния умножается на фиксированную матрицу, что приводит к линейному преобразованию данных.
Результат после MixColumns:
BA 84 E8 1B
75 A4 8D 40
F4 8D 06 7D
7A 32 0E 5D
6. AddRoundKey (XOR с раундовым ключом)
На этом этапе выполняется операция XOR между текущим состоянием данных и раундовым ключом для текущего раунда.
Предположим, что раундовый ключ для первого раунда:
D6 AA 74 FD D2 AF 72 FA DA A6 78 F1 D6 AB 76 FE
Результат после AddRoundKey:
BA^D6 84^AA E8^74 1B^FD
75^D2 A4^AF 8D^72 40^FA
F4^DA 8D^A6 06^78 7D^F1
7A^D6 32^AB 0E^76 5D^FE
= 6C 2E 9C E6
A7 0B FF BA
2E 2B 7E 8C
AC 99 78 A3
Повторение шагов 3-6 для каждого раунда
Эти шаги повторяются для каждого раунда (всего 10 раундов для AES-128). В каждом раунде используются разные раундовые ключи.
Финальный раунд (без MixColumns)
В финальном раунде шаг MixColumns пропускается. После выполнения SubBytes, ShiftRows и AddRoundKey получается окончательный зашифрованный блок данных.
Итоговый зашифрованный блок данных:
После выполнения всех раундов и финального раунда, зашифрованный блок данных будет выглядеть следующим образом (пример):
3A D7 7B B4
0D 7A 36 60
A8 9E CA F3
F6 1F 6C 2B
Это пример того, как данные могут быть преобразованы на каждом этапе. Фактические значения могут отличаться в зависимости от конкретных раундовых ключей и S-блока.
Уязвимости симметричной криптографии
Атака по времени (Timing Attack):
Если реализация AES не защищена, можно измерить время выполнения операций и восстановить ключ.
Решение: Использование алгоритмов с постоянным временем выполнения (constant-time algorithms).
Атака на слабые ключи:
Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Решение: Использование ключей достаточной длины (например, 256 бит для AES).
Проблема обмена ключами:
Симметричная криптография требует безопасного способа передачи ключа между сторонами.
Решение: Использование асимметричной криптографии (например, RSA) для обмена ключами.
Когда использовать симметричную криптографию?
Симметричная криптография идеально подходит для:
Шифрования больших объемов данных (например, файлов или потоков данных).
Приложений, где важна высокая скорость шифрования.
Ситуаций, где безопасный обмен ключами уже обеспечен (например, через TLS).
#Java #Training #Medium #Crypto #Symmetrical
👍1