Шифрування AES (Advanced Encryption Standard) — це світовий стандарт симетричного шифрування. AES захищає HTTPS-з’єднання, Wi-Fi WPA2 і WPA3, архіви ZIP та 7z, BitLocker, VeraCrypt і тисячі мікроконтролерів з апаратним прискорювачем. Алгоритм Rijndael переміг у конкурсі NIST 2001 року, і досі на нього немає практичної атаки.
Калькулятор нижче шифрує текст паролем за схемою AES-256-GCM з ключем через PBKDF2. Це та сама реалізація Web Crypto API, яку використовують сучасні вебзастосунки. Розшифрувати результат можна лише тим самим паролем.
Калькулятор AES-256 (шифрування і розшифрування паролем)
Як влаштований AES
AES — блоковий шифр. Він шифрує блоки по 16 байт (128 біт) ключем довжиною 128, 192 або 256 біт. Над блоком виконують 10, 12 або 14 раундів відповідно. Кожен раунд складається з чотирьох кроків:
- SubBytes — нелінійна заміна кожного байта через таблицю S-box.
- ShiftRows — циклічний зсув рядків матриці 4×4.
- MixColumns — перемішування кожного стовпця множенням у полі GF(2⁸).
- AddRoundKey — XOR з раундовим ключем, отриманим з основного ключа.
Перші три кроки дають «перемішування й розсіювання»: зміна одного біта входу змінює приблизно половину бітів виходу. Останній крок — звичайний XOR, але з ключем, який щораунду інший.
Режими роботи: чому не можна шифрувати «просто AES»
Сам AES шифрує лише один блок. Для довгих даних потрібен режим роботи:
| Режим | Особливість | Рекомендація |
|---|---|---|
| ECB | кожен блок окремо, однакові блоки дають однаковий шифр | не використовувати |
| CBC | блоки зчеплені через IV | застарілий, потрібен окремий MAC |
| CTR | AES генерує гаму, далі XOR з даними | швидкий, але без перевірки цілісності |
| GCM | CTR плюс тег автентичності 16 байт | рекомендований |
У режимі GCM підробка навіть одного біта шифротексту одразу виявляється при розшифруванні. Тому калькулятор при невірному паролі пише, що перевірка тегу не пройшла, а не видає сміття.
Пароль — це ще не ключ
AES-256 потребує рівно 32 байти випадкового ключа. Пароль людини таким не є. Тому ключ отримують функцією розтягування пароля: PBKDF2, scrypt або Argon2. Вони навмисно повільні. Калькулятор робить 200 000 ітерацій PBKDF2-SHA256, і кожна спроба вгадати пароль коштує зловмиснику стільки ж часу.
Крім того, додається випадкова сіль (16 байт), щоб однакові паролі давали різні ключі, і випадковий IV (12 байт), щоб однаковий текст давав різний шифр. Обидва значення не секретні і зберігаються разом із шифротекстом.
Код: AES-256-GCM у браузері
const te = new TextEncoder();
async function deriveKey(password, salt) {
const base = await crypto.subtle.importKey(
"raw", te.encode(password), "PBKDF2", false, ["deriveKey"]);
return crypto.subtle.deriveKey(
{ name: "PBKDF2", salt, iterations: 200000, hash: "SHA-256" },
base, { name: "AES-GCM", length: 256 }, false, ["encrypt", "decrypt"]);
}
async function encrypt(text, password) {
const salt = crypto.getRandomValues(new Uint8Array(16));
const iv = crypto.getRandomValues(new Uint8Array(12));
const key = await deriveKey(password, salt);
const ct = await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, te.encode(text));
return { salt, iv, ct: new Uint8Array(ct) }; // зберігаємо всі три частини
}
Формат калькулятора: сіль (16 Б) + IV (12 Б) + шифротекст із тегом, усе в Base64. Тому результат можна скопіювати, передати й розшифрувати пізніше.
Типові помилки з AES
- Режим ECB. На ньому видно контури зображення навіть після шифрування.
- Повторне використання IV з тим самим ключем у GCM чи CTR. Це руйнує захист так само, як повторний ключ у XOR.
- Ключ, «зашитий» у код прошивки чи застосунку. Його витягують з дампу за хвилини.
- Слабкий пароль. Жодна кількість раундів не врятує пароль «12345678».
AES на мікроконтролерах
ESP32, STM32 серій F4/L4/H7 та багато nRF мають апаратний блок AES. У ESP-IDF його використовує mbedTLS, а в STM32 — бібліотека HAL CRYP. На 8-бітних AVR є легкі реалізації (наприклад, tiny-AES-c), але режими GCM там повільні, тому часто беруть ChaCha20-Poly1305.
Підсумок
AES-256-GCM з ключем через PBKDF2 чи Argon2 — надійний вибір для шифрування файлів, повідомлень і конфігурацій. Він вирішує все, що ламало шифр Віженера та простий XOR. Лишається одна задача: як безпечно передати ключ співрозмовнику. Її вирішує шифрування RSA. Огляд усіх методів — у статті методи шифрування.
Детальніше про метод див. офіційний стандарт NIST FIPS 197.
