Перейти к содержанию
HexaTransfer
Вернуться к блогу
Шифрование и безопасность

Руководство по AES-256: защита файлов военного уровня

Поймите шифрование AES-256 и почему оно золотой стандарт. Узнайте, как этот военный шифр защищает ваши передачи.

AES-256 — симметричный блочный шифр, одобренный АНБ США для данных категории TOP SECRET согласно CNSSP-15. Он шифрует 128-битные блоки 256-битным ключом в 14 раундов операций подстановки, перестановки и смешивания. Для взлома одного ключа AES-256 перебором потребуется в среднем около 2^255 операций — число настолько велико, что все компьютеры Земли не справились бы за время жизни Вселенной. Именно поэтому каждый серьёзный сервис передачи файлов, от SwissTransfer до Tresorit, использует AES-256 как основной шифр. Вот как он работает на самом деле.

Откуда берётся число «256»

AES выпускается в трёх размерах ключа: 128, 192 и 256 бит. Число относится только к длине ключа, а не к размеру блока (он всегда 128 бит). Длина ключа определяет количество раундов шифра: 10 для AES-128, 12 для AES-192, 14 для AES-256.

Больше раундов означает большее рассеивание — каждый выходной бит зависит от большего числа входных битов — и большую устойчивость к криптоаналитическим атакам, например к атаке двойной клики (biclique attack), опубликованной в 2011 году, которая теоретически снижает эффективную стойкость AES-256 с 256 до 254,4 бит. Это всё ещё далеко за пределами любой практической атаки.

Федеральный стандарт обработки информации FIPS 197 определяет AES, а NIST SP 800-38A — 800-38G задают режимы работы.

Режимы работы: GCM, CBC и ECB

AES — блочный шифр, то есть он умеет шифровать лишь один 128-битный блок. Чтобы зашифровать файл произвольного размера, нужен режим работы. Выбор имеет принципиальное значение:

  • ECB (Electronic Codebook): одинаковые блоки открытого текста дают одинаковый шифротекст. Никогда не используйте. Знаменитое «ECB-изображение пингвина» наглядно демонстрирует: контуры Tux просматриваются сквозь ECB-зашифрованные пиксели.
  • CBC (Cipher Block Chaining): применяет XOR к каждому блоку с предыдущим шифротекстом. Безопасен в паре с HMAC для аутентификации, но CBC без него уязвим к атакам padding oracle (POODLE поразил SSL в 2014 году).
  • GCM (Galois/Counter Mode): шифрует счётчиком и за один проход создаёт 128-битный тег аутентификации. Вмешательство в шифротекст громко ломает расшифровку. Это то, что используют современные сервисы.

AES-256-GCM — стандарт по умолчанию в TLS 1.3, Signal, WireGuard и каждом достоверном сервисе передачи файлов. Если сервис упоминает «AES-256» без указания режима — предполагайте GCM и проверьте.

IV (nonce), который нельзя использовать повторно

GCM требует уникального 96-битного вектора инициализации для каждого шифрования с данным ключом. Повторное использование IV с тем же ключом даже однажды позволяет злоумышленнику применить XOR к двум шифротекстам и восстановить открытый текст — катастрофический сбой, ставший основой известной атаки на WEP Wi-Fi.

Лучшая практика: генерировать IV с помощью криптографически стойкого генератора случайных чисел (crypto.getRandomValues() в браузерах, /dev/urandom в Linux) и добавлять его к шифротексту в начало. 96-битный случайный IV имеет вероятность коллизии около 2^-48 после шифрования 2^32 файлов — допустимо для сервиса передачи. При повторном использовании ключа для миллиардов файлов вместо него применяется детерминированный счётчик.

Получение ключа: от пароля к ключу шифрования

Пользователи хотят пароли вроде mydog2024. AES требует 256 бит равномерной случайности. Мостом между ними служит функция получения ключа (KDF). В широком использовании три варианта:

  • PBKDF2 с HMAC-SHA-256 и 600 000 итераций (рекомендация OWASP 2023). Широко поддерживается, доступна в Web Crypto API.
  • scrypt добавляет требования к памяти, увеличивая стоимость атак на GPU. Используется в Bitcoin и LastPass.
  • Argon2id — текущая лучшая практика, победитель Password Hashing Competition 2015. Параметры: memory=64 МБ, iterations=3, parallelism=4.

12-символьный случайный пароль через Argon2id займёт у современного GPU порядка миллиарда лет. Слабый пароль вроде password123 падёт за миллисекунды — независимо от KDF.

AES в браузере: Web Crypto API

Браузеры предоставляют AES-256-GCM нативно через window.crypto.subtle. Типичный поток:

const key = await crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 },
  true,
  ["encrypt", "decrypt"]
);
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
  { name: "AES-GCM", iv },
  key,
  fileBytes
);

Современные процессоры с инструкциями AES-NI ускоряют это до примерно 3–5 ГБ/с на ядро. Файл в 1 ГБ шифруется менее чем за секунду на среднем ноутбуке. На мобильных устройствах Apple A-series и Qualcomm Snapdragon включают ARMv8 Crypto Extensions с аналогичной производительностью.

От чего защищает AES-256 (и от чего нет)

AES-256 решает одну конкретную задачу: конфиденциальность данных в покое или при передаче при условии, что ключ секретен. Он не решает:

  • Управление ключами. Если вы отправляете пароль вместе с файлом по email, AES-256 не добавляет никакой защиты.
  • Компрометацию конечной точки. Вредоносная программа, читающая открытый текст до шифрования, полностью обходит шифр.
  • Ошибки реализации. Атаки BEAST, CRIME и Lucky13 2018 года были направлены против реализаций TLS, а не против самого AES.
  • Атаки по сторонним каналам. Анализ кеш-тайминга и потребления мощности позволял извлекать ключи AES с ограниченных устройств. AES-NI в значительной мере устраняет это на десктопах.

AES-256 также не доказывает, кто отправил файл. Для этого используйте цифровые подписи на основе Ed25519 или ECDSA.

Почему «военный уровень» — во многом маркетинг

Фраза получила распространение потому, что АНБ одобрило AES-256 для данных категории TOP SECRET в 2003 году согласно CNSSP-15. Это реальный факт, но ему уже более 20 лет — AES-128 одобрен для категории SECRET и для большинства гражданских задач ничем не хуже. Переход с 128 до 256 бит — это страховка от будущего развития квантовых вычислений: алгоритм Гровера теоретически вдвое снижает стойкость симметричного ключа, уменьшая эффективную стойкость AES-256 до 128 бит, — что по-прежнему безопасно.

На практике AES-256 потребляет примерно на 40% больше процессорного времени, чем AES-128 при наличии AES-NI, и поддерживается повсеместно, поэтому стал стандартом даже там, где 128 бит было бы достаточно.

Как проверить, что сервис действительно использует AES-256-GCM

Три способа проверить:

  1. Прочитайте техническую документацию по безопасности. Достоверные сервисы (Tresorit, Proton Drive, SwissTransfer, HexaTransfer) публикуют точный режим и обработку IV.
  2. Изучите исходный код клиента. Откройте DevTools, найдите в JavaScript-бандле AES-GCM или aes-256-gcm. Это должно быть явно указано.
  3. Проверьте независимые аудиты. Cure53, NCC Group и Trail of Bits публикуют аудиты с указанием проверенных алгоритмов.

Красные флаги: «банковское шифрование» без указания режима, «фирменный алгоритм» любого рода, упоминание AES-128-ECB.

Применяйте знания на практике

При отправке конфиденциального файла сегодня: выбирайте сервис, явно указывающий AES-256-GCM, использующий 96-битный случайный IV на файл и выполняющий шифрование в браузере, а не на сервере. Дополните это парольной фразой длиной от 16 символов, получаемой через Argon2id или PBKDF2 с не менее 600 000 итераций.

Попробуйте на hexatransfer.com — бесплатно, без регистрации, до 10 ГБ.

Безопасная отправка больших файлов со сквозным шифрованием

Передавайте файлы до 10 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.

Отправить файл