Шифрування AES-256: як працює, режим GCM і калькулятор

Шифрування AES-256: як працює, режим GCM і калькулятор

Шифрування 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 раундів відповідно. Кожен раунд складається з чотирьох кроків:

  1. SubBytes — нелінійна заміна кожного байта через таблицю S-box.
  2. ShiftRows — циклічний зсув рядків матриці 4×4.
  3. MixColumns — перемішування кожного стовпця множенням у полі GF(2⁸).
  4. AddRoundKey — XOR з раундовим ключем, отриманим з основного ключа.

Перші три кроки дають «перемішування й розсіювання»: зміна одного біта входу змінює приблизно половину бітів виходу. Останній крок — звичайний XOR, але з ключем, який щораунду інший.

Режими роботи: чому не можна шифрувати «просто AES»

Сам AES шифрує лише один блок. Для довгих даних потрібен режим роботи:

РежимОсобливістьРекомендація
ECBкожен блок окремо, однакові блоки дають однаковий шифрне використовувати
CBCблоки зчеплені через IVзастарілий, потрібен окремий MAC
CTRAES генерує гаму, далі XOR з данимишвидкий, але без перевірки цілісності
GCMCTR плюс тег автентичності 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.

Related Posts

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.